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

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

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

Post by John Doe »

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

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

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

Требования:
  • FAR 3 не старше b5106
  • luacheck не ниже v0.19
Attachments
far_standards.lua.cfg_v1.5.7z
Обновлённые определения (far 6114 / lm 772)
(8.5 KiB) Downloaded 87 times
luaсheck_far_v1.4.3.7z
far5505.lm712
(23.38 KiB) Downloaded 335 times
Last edited by John Doe on Sat 09 Nov, 2019 16:08, edited 3 times in total.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

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

Post by Shmuel »

А теперь прогоните этот макрос на нём самом.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

Shmuel wrote: А теперь прогоните этот макрос на нём самом.
Так и задумано, надо же на чём-то тестировать ;-)
ladserg
Posts: 234
Joined: Thu 19 Feb, 2009 14:51
Has thanked: 5 times
Been thanked: 6 times

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

Post by ladserg »

а модуль не самостоятелен? А то он у меня гневно машет кулаками и требует DLL'ки.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

Во вложении только макрос, а модуль надо скачать отдельно (ссылка в тексте).

P.S.
И да, модулем является вся папка, а не один файл.
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

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

Post 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’ слева.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post 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 невозможен.
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

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

Post by HaRT »

John Doe wrote: Происходит mf.beep()
Странно, у меня он ни через пищалку, ни через наушники не воспроизводится, хотя они исправные.
John Doe wrote: "строки" из сообщений некорректные, как будто вырезаны по ошибочному смещению
Может всё же стоит их показывать, дописав сверху, что они приблизительные? Всё полезнее, чем ничего.
John Doe wrote: Можно встроить и сюда
Это было бы очень желательно, т.к., например, когда где-то случайно стёр синтаксически важный символ, не сразу и сообразишь, почему ничего не происходит. А так бы сразу написалось, что там-то такая-то ошибка.
John Doe wrote: В случае ошибки никаких предупреждений luacheck не выдаёт (что логично)
Для меня как для программиста в основном на Си++ совершенно не логично — всё зависит от того, насколько у используемого разборщика (parser) умное восстановление после ошибок (error recovery).
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

HaRT wrote: Может всё же стоит их показывать, дописав сверху, что они приблизительные?
Зачем приблизительные, когда можно получить точные (хоть и другим способом). Добавлю.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

Макрос в шапке усовершенствован.
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

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

Post by HaRT »

John Doe wrote: Макрос в шапке усовершенствован.
Спасибо!
В т.ч. за автоматическое пропадание через непродолжительное время сообщения об отсутствии предупреждений.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

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

Post by HaRT »

Уже не первый раз сталкиваюсь с необходимостью куда-то скопировать результат проверки, и приходится копировать с экрана, притом в несколько заходов, поскольку список длинный. В связи с эти пара предложений:
* добавить в макрос возможность копирования всего лога по [b]CtrlC[/b] (подобно тому, как в MsgBox), а текущего сообщения — по [b]CtrlIns[/b] (подобно тому, как на файловой панели) — кстати, пожалуй, такая функциональность не помешала бы в любом меню, т.ч. если/когда будете делать, то лучше сразу общий случай;
* добавить возможность максимизации меню по [b]F5[/b] (подобно тому, как в Справке) — чтобы вместить по высоте как можно бОльшую часть списка предупреждений (вплоть до полной высоты окна) и как можно бОльшую часть длинных текстов предупреждений (вплоть до полной ширины окна).
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post 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
В шапке усовершенствованная версия, с запуском по префиксу.
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

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

Post by HaRT »

John Doe wrote: В общем виде тут
Спасибо!
John Doe wrote: пакетное использование
Не добавить ли ссылку на эту инструкцию в шапку?
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

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

Post by HaRT »

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

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

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

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