Page 1 of 7

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

Posted: Tue 16 Jun, 2015 12:36
by John Doe
Luacheck это статический анализатор для Lua.
Luacheck может обнаруживать разнообразные проблемы, такие как использование неопределённых глобальных переменных, неиспользованные переменные и значения, доступ к неинициализированным переменным, недостижимый код и многое другое.

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

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

Требования:
  • FAR 3 не старше b4831
  • luacheck не ниже v0.19

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

Posted: Tue 16 Jun, 2015 15:12
by Shmuel
А теперь прогоните этот макрос на нём самом.

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

Posted: Tue 16 Jun, 2015 15:13
by John Doe
Shmuel wrote: А теперь прогоните этот макрос на нём самом.
Так и задумано, надо же на чём-то тестировать ;-)

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

Posted: Wed 17 Jun, 2015 16:07
by ladserg
а модуль не самостоятелен? А то он у меня гневно машет кулаками и требует DLL'ки.

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

Posted: Wed 17 Jun, 2015 19:52
by John Doe
Во вложении только макрос, а модуль надо скачать отдельно (ссылка в тексте).

P.S.
И да, модулем является вся папка, а не один файл.

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

Posted: Fri 19 Jun, 2015 15:57
by HaRT
Я заметил, что если попытать применить проверку к синтаксически некорректному коду на Луа, то ничего видимого не происходит.
В то же время вроде бы самим модулем этот случай предусмотрен:
Report format wrote:If an error occured while checking a file, its report will have error field containing "I/O" or "syntax". In case of syntax error, line (number), column (number), offset (number) and msg (string) fields may be present.
Представляется ли возможным выводить и синтаксические ошибки тоже? Кстати, желательно как-то различать ошибки/предупреждения в списке — например ‘E’/‘W’ слева.

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

Posted: Fri 19 Jun, 2015 16:08
by John Doe
HaRT wrote: то ничего видимого не происходит.
Происходит mf.beep()
Я пробовал использовать предоставляемые модулем ошибки, но столкнулся с тем, что "строки" из сообщений некорректные, как будто вырезаны по ошибочному смещению (возможно дело в том, что методы string в фаре перегружены для поддержки юникода).

Впрочем, я не заметил чтобы luacheck выявлял какие-то ошибки, кроме тех, что можно получить штатной функцией loadstring, и точно так же он проверяет только до первой ошибки.
HaRT wrote: Представляется ли возможным выводить и синтаксические ошибки тоже?
Разумеется. Можно встроить и сюда, хотя для этого у меня отдельный инструмент: http://forum.farmanager.com/viewtopic.php?f=60&t=8008
HaRT wrote: желательно как-то различать ошибки/предупреждения в списке — например ‘E’/‘W’ слева.
В случае ошибки никаких предупреждений luacheck не выдаёт (что логично), поэтому какой-то общий список E/W невозможен.

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

Posted: Fri 19 Jun, 2015 16:20
by HaRT
John Doe wrote: Происходит mf.beep()
Странно, у меня он ни через пищалку, ни через наушники не воспроизводится, хотя они исправные.
John Doe wrote: "строки" из сообщений некорректные, как будто вырезаны по ошибочному смещению
Может всё же стоит их показывать, дописав сверху, что они приблизительные? Всё полезнее, чем ничего.
John Doe wrote: Можно встроить и сюда
Это было бы очень желательно, т.к., например, когда где-то случайно стёр синтаксически важный символ, не сразу и сообразишь, почему ничего не происходит. А так бы сразу написалось, что там-то такая-то ошибка.
John Doe wrote: В случае ошибки никаких предупреждений luacheck не выдаёт (что логично)
Для меня как для программиста в основном на Си++ совершенно не логично — всё зависит от того, насколько у используемого разборщика (parser) умное восстановление после ошибок (error recovery).

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

Posted: Fri 19 Jun, 2015 16:27
by John Doe
HaRT wrote: Может всё же стоит их показывать, дописав сверху, что они приблизительные?
Зачем приблизительные, когда можно получить точные (хоть и другим способом). Добавлю.

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

Posted: Mon 22 Jun, 2015 14:58
by John Doe
Макрос в шапке усовершенствован.

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

Posted: Tue 23 Jun, 2015 17:47
by HaRT
John Doe wrote: Макрос в шапке усовершенствован.
Спасибо!
В т.ч. за автоматическое пропадание через непродолжительное время сообщения об отсутствии предупреждений.

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

Posted: Sun 05 Jul, 2015 12:30
by HaRT
Уже не первый раз сталкиваюсь с необходимостью куда-то скопировать результат проверки, и приходится копировать с экрана, притом в несколько заходов, поскольку список длинный. В связи с эти пара предложений:
* добавить в макрос возможность копирования всего лога по [b]CtrlC[/b] (подобно тому, как в MsgBox), а текущего сообщения — по [b]CtrlIns[/b] (подобно тому, как на файловой панели) — кстати, пожалуй, такая функциональность не помешала бы в любом меню, т.ч. если/когда будете делать, то лучше сразу общий случай;
* добавить возможность максимизации меню по [b]F5[/b] (подобно тому, как в Справке) — чтобы вместить по высоте как можно бОльшую часть списка предупреждений (вплоть до полной высоты окна) и как можно бОльшую часть длинных текстов предупреждений (вплоть до полной ширины окна).

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

Posted: Tue 07 Jul, 2015 17:44
by John Doe
HaRT wrote: Уже не первый раз сталкиваюсь с необходимостью куда-то скопировать результат проверки
В общем виде тут: http://forum.farmanager.com/viewtopic.php?f=15&t=9686

Но если вы намерены анализировать большое количество исходников, то рекомендую обратить внимание на пакетное использование luacheck.
Примерная инструкция.
  1. Создаём %FARPROFILE%\Macros\luacheck, и размещаем там следующие файлы:
  2. В %FARHOME% кладём lflua.exe
  3. Опционально, где-либо в %PATH% можно разместить ansicon
  4. Запускать как-то так: ansicon %FARPROFILE%\Macros\luacheck\luacheck.cmd *.lua
    Синтаксис можно посмотреть запустив без параметров, а более подробно — в документации.
P.S.
Файлы с bom похоже представляют проблему...

Update
В шапке усовершенствованная версия, с запуском по префиксу.

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

Posted: Tue 07 Jul, 2015 18:12
by HaRT
John Doe wrote: В общем виде тут
Спасибо!
John Doe wrote: пакетное использование
Не добавить ли ссылку на эту инструкцию в шапку?

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

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

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

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

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

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