Luacheck FAR scripts — статический анализатор для Lua/MoonScript

Здесь выкладываются готовые к использованию макросы и скрипты.
User avatar
John Doe
Бюрократ
Posts: 12601
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 35 times
Been thanked: 260 times

Luacheck FAR scripts — статический анализатор для Lua/MoonScript

Post by John Doe »

Luacheck это статический анализатор для Lua.
Luacheck может обнаруживать разнообразные проблемы, такие как использование неопределённых глобальных переменных, неиспользованные переменные и значения, доступ к неинициализированным переменным, недостижимый код и многое другое.

А для удобной работы с luacheck в фаре предлагаю данный пакет скриптов, обеспечивающий работу Luacheck в редакторе и в командной строке.
Кроме того, в редакторе для Luacheck обеспечивается прозрачная "трансляция" MoonScript, что позволяет анализировать и *.moon-файлы.

Инструкции по установке, настройке, и работе — во встроенной справке.

Требования:
  • FAR 3 не старше b5106
  • luacheck не ниже v0.19
Attachments
luaсheck_far_v1.4.3.7z
far5505.lm712
(23.38 KiB) Downloaded 44 times
Last edited by John Doe on Sat 09 Nov, 2019 16:08, edited 3 times in total.

User avatar
HaRT
Moderator
Posts: 9238
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 93 times
Been thanked: 197 times

luacheck — статический анализатор для Lua

Post by HaRT »

Latest post of the previous page:

Обнаружилась ошибка: из списка предупреждений по [b]Enter[/b] не происходит ни позиционирование в правильный столбец, ни выделение фрагмента кода, если каретка (текстовый курсор) уже находится в той строке (но, скажем, в другой позиции — например, в начале).

И пожелание: иногда после перехода по [b]CtrlPgUp[/b] — например, с “(W431) shadowing upvalue …” — хочется прямо там что-то поправить (скажем, переименовать), но нет способа выйти из списка так, чтобы каретка осталась на том месте. Прошу добавить такое действие на [b]ShiftEnter[/b] или [b]ShiftEsc[/b].

PS
HaRT wrote: добавить возможность максимизации меню по [b]F5[/b] (подобно тому, как в Справке)
Интересно, можно ли и это сделать в общем виде… Или же непременно требуется изменение того кода, который создаёт меню?
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
John Doe
Бюрократ
Posts: 12601
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 35 times
Been thanked: 260 times

luacheck — статический анализатор для Lua

Post by John Doe »

HaRT wrote: Обнаружилась ошибка
Давно исправил, рассчитываю скоро выложить.
HaRT wrote: нет способа выйти из списка так, чтобы каретка осталась на том месте.
Подумаю как лучше.
HaRT wrote: Интересно, можно ли и это сделать в общем виде…
Подозреваю что можно и в общем, но не уверен что нужно.
В моей рабочей версии luacheck есть максимизация.
В версии из шапки для этого можно закомментировать строку local MaxHeight = 10

User avatar
HaRT
Moderator
Posts: 9238
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 93 times
Been thanked: 197 times

luacheck — статический анализатор для Lua

Post by HaRT »

John Doe wrote: рассчитываю скоро выложить
[…]
Подумаю как лучше
Спасибо! Ждём-с…
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
HaRT
Moderator
Posts: 9238
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 93 times
Been thanked: 197 times

luacheck — статический анализатор для Lua

Post by HaRT »

John Doe wrote: Подозреваю что можно и в общем, но не уверен что нужно.
Было бы удобно, чтобы не завязываться на предусмотрительность остальных авторов полезных плюшек.
John Doe wrote: В моей рабочей версии luacheck есть максимизация.
Я себе сделал пока так:
  1. --- luacheck.lua    Sun Jun 21 10:00:37 2015
  2. +++ luacheck.lua    Mon Jul 13 14:59:19 2015
  3. @@ -1,6 +1,6 @@
  4. ---http://forum.farmanager.com/viewtopic.php?f=15&t=9650
  5. +--http://forum.farmanager.com/viewtopic.php?p=130641#p130641
  6.  local luacheck = require "luacheck"
  7. -local MaxHeight = 10 --todo maximize, top, bottom
  8. +local MaxHeight = 10  -- will maximize/restore by F5, see below
  9.  local options = { --http://luacheck.readthedocs.org/config.html
  10.    new_read_globals={
  11.      "Macro","NoMacro","Event","NoEvent","MenuItem","NoMenuItem","CommandLine","NoCommandLine",
  12. @@ -92,7 +92,7 @@
  13.  local Title = "luacheck"
  14.  local Props = {
  15.    Title=Title;
  16. -  Bottom="Ctrl-Enter, Ctrl-Up/Down";
  17. +  Bottom="Ctrl-Enter, Ctrl-Up/Down, F5";
  18.    Id=win.Uuid(Id);
  19.    MaxHeight=MaxHeight;
  20.  }
  21. @@ -160,6 +160,9 @@
  22.     end},
  23.    {BreakKey="C+1 C+2 C+3 C+4 C+5 C+6 C+7 C+8 C+9 C+0",action=function(_,_,bk)
  24.       Keys(bk.BreakKey:gsub("C%+","Ctrl"))
  25. +   end},
  26. +  {BreakKey="F5", action=function()
  27. +     Props.MaxHeight = not Props.MaxHeight and MaxHeight or nil  -- toggle Maximized
  28.     end},
  29.  }
  30.  
  31. #EOF
Немного огорчают только пустые 2-3 строки над/под меню.
Last edited by HaRT on Thu 01 Jan, 1970 01:00, edited 0 times in total.
Reason: Вычеркнуто неактуальное; улучшен код.
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
John Doe
Бюрократ
Posts: 12601
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 35 times
Been thanked: 260 times

luacheck — статический анализатор для Lua

Post by John Doe »

HaRT wrote: Было бы удобно, чтобы не завязываться на предусмотрительность остальных авторов полезных плюшек.
Речь о потенциальных плюшках? Или есть реальные примеры?
HaRT wrote: Я себе сделал пока так:
Верной дорогой идёте.
HaRT wrote: Немного огорчают только пустые 2-3 строки над/под меню.
А как иначе?
Значит все элементы и так поместились.

User avatar
HaRT
Moderator
Posts: 9238
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 93 times
Been thanked: 197 times

luacheck — статический анализатор для Lua

Post by HaRT »

John Doe wrote: есть реальные примеры?
Пока больше нет. Как встречу — напишу.
John Doe wrote: Верной дорогой идёте
Я там код улучшил чуток — заменил if-then-else-end на (not-)and-or.
John Doe wrote: все элементы и так поместились
:facepalm:
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
HaRT
Moderator
Posts: 9238
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 93 times
Been thanked: 197 times

luacheck — статический анализатор для Lua

Post by HaRT »

HaRT wrote: выйти из списка так, чтобы каретка осталась на том месте
Раз пошла такая пьянка, сделал себе и это, притом в лоб:

Code: Select all

  Bottom="Ctrl-/Shift-/Enter, Ctrl-Up/Down, F5";
…
  {BreakKey="S+RETURN", action=function()
     return "break"  -- do not change selection or position
   end},
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
John Doe
Бюрократ
Posts: 12601
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 35 times
Been thanked: 260 times

luacheck — статический анализатор для Lua

Post by John Doe »

HaRT wrote: Я там код улучшил чуток
Если что, то помимо максимизации будут также режимы вверху/внизу.
HaRT wrote: Раз пошла такая пьянка, сделал себе и это, притом в лоб:
А F10 делает не то, что вам надо?
В идеале требуемое поведение должно быть без всяких дополнительных шорткатов (в рабочей версии попытался сделать именно так).

User avatar
HaRT
Moderator
Posts: 9238
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 93 times
Been thanked: 197 times

luacheck — статический анализатор для Lua

Post by HaRT »

John Doe wrote: F10 делает не то, что вам надо?
Хм, про [b]F10[/b]-то я и забыл… То.
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
John Doe
Бюрократ
Posts: 12601
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 35 times
Been thanked: 260 times

luacheck — статический анализатор для Lua

Post by John Doe »

Обновление.
  • Скрипт адаптирован к последним изменениям в модуле (его тоже надо перекачать).
  • Список по умолчанию прижимается к нижней части окна фара.
    Расположение можно менять, см. справку по F1.
  • Новые шорткаты для перехода к следующему/предыдущему предупреждению.
  • Имя файла скрипта изменилось, и добавилась утилита luacheck_cmdline.lua
Детали в шапке.

User avatar
HaRT
Moderator
Posts: 9238
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 93 times
Been thanked: 197 times

luacheck — статический анализатор для Lua

Post by HaRT »

John Doe wrote: Обновление
Спасибо.
Мелкая некрасивость: при верхнем положении списка его верхняя рамка оказывается за пределами окна.
Пожелание: хотелось бы разделить положение (верх/центр/низ) и размер (стандартный/развёрнутый). Т.е. чтобы N1, N4, N7 и N5 управляли положением (так же, как сейчас, но без изменения размера), а F5 — разворачивал/восстанавливал (без изменения точки привязки списка). Кстати, при переключении по N5, мне кажется, было бы интуитивнее, если бы положение изменялось по схеме „пинг-понг“ (низ—центр—верх—центр—низ—…), а не по схеме „кольцо“ (низ—центр—верх—низ—…).
Last edited by HaRT on Thu 01 Jan, 1970 01:00, edited 0 times in total.
Reason: Добавлено пожелание про «пинг-понг»
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
John Doe
Бюрократ
Posts: 12601
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 35 times
Been thanked: 260 times

luacheck — статический анализатор для Lua

Post by John Doe »

HaRT wrote: Мелкая некрасивость:
Так и задумано, чтобы список занимал меньше места.
Лучше было бы убрать внешние поля, но вначале надо переделать меню на диалог, до чего руки пока не дошли.
HaRT wrote: Пожелание
Обоснуйте, исходя из практики использования.

User avatar
HaRT
Moderator
Posts: 9238
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 93 times
Been thanked: 197 times

luacheck — статический анализатор для Lua

Post by HaRT »

John Doe wrote: учше было бы убрать внешние поля
Так я не про поля, а про саму рамку. В результате, если нет полосы прокрутки, визуально складывается впечатление, будто часть списка не видна, — очень сбивает с толку.
John Doe wrote: Обоснуйте
Просто привычки работы с оконными интерфейсами таковы, что окно либо перемещается без изменения размера, либо изменяется в размере без изменения точки привязки (в случае операций Развернуть/Восстановить она несколько условна). В данной реализации этот инвариант не соблюдается, в результате чего нарушается принцип Наименьшего удивления.
HaRT wrote: Кстати, при переключении по N5, мне кажется, было бы интуитивнее, если бы положение изменялось по схеме „пинг-понг“ (низ—центр—верх—центр—низ—…), а не по схеме „кольцо“ (низ—центр—верх—низ—…).
А об этом что скажете?
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
John Doe
Бюрократ
Posts: 12601
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 35 times
Been thanked: 260 times

luacheck — статический анализатор для Lua

Post by John Doe »

HaRT wrote: очень сбивает с толку.
За положение меню отвечает строка Props.Y = -2, за коррекцию TopScreenLine a = a+nLines+1.
(Я трогать это пока не планирую)

По максимизации: действительно ли вам нужны верх/низ максимизированными?

User avatar
HaRT
Moderator
Posts: 9238
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 93 times
Been thanked: 197 times

luacheck — статический анализатор для Lua

Post by HaRT »

John Doe wrote: Я трогать это пока не планирую
Спасибо, поправлю для себя локально.
John Doe wrote: действительно ли вам нужны верх/низ максимизированными?
Пока не уверен.
Просто меня дико сбивает то, что происходит при переключении.

А как Вам идея про «пинг-понг»?
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
HaRT
Moderator
Posts: 9238
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 93 times
Been thanked: 197 times

luacheck — статический анализатор для Lua

Post by HaRT »

John Doe wrote:За положение меню отвечает строка Props.Y = -2
Хотел было использовать -1, но тут небольшой облом:
Far.Menu wrote:X,Y
Координаты верхнего левого угла меню.
Чтобы назначить их автоматически, приравняйте их -1.
В результате меню оказывается снова в центре. Пришлось пожертвовать кусочком ещё одной строки и остановиться на значении 0.
Фар есть инструмент, а не нянька. © 2009 DrKnS

Post Reply

Return to “Полезные макросы и скрипты”