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

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 11126
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 12 times
Been thanked: 72 times

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

Post by John Doe » Tue 16 Jun, 2015 12:36

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

Для установки модуля необходимо скачать архив luacheck-master.zip, взять оттуда папку luacheck (из luacheck-master\src\ ), и поместить в %FARPROFILE%\Macros\modules.

А ниже предлагаются утилиты для удобной работы с luacheck в фаре (содержимое вложения распаковать куда-нибудь в %FARPROFILE%\Macros\scripts).
  1. luacheck_editor.lua позволяет проверять lua-код в активном редакторе фара.
    Запуск назначен на комбинацию Ctrl-Shift-F7 (только для *.lua;*.moon).
    Найденные ошибки и предупреждения отображаются в виде списка.
    Управление:
  2. luacheck_cmdline.lua запускает luacheck из командной строки, c выводом отчётов в консоль.
    • Установка:
    • Запускать с помощью префикса luacheck, например: luacheck: *.lua
      Синтаксис можно посмотреть запустив без параметров, а более подробно — в документации.
Update:
С версии 1.3 поддерживается также работа с Moonscript (в редакторе)
Attachments
luacheck_scripts-1.3.3.7z
(6.87 KiB) Downloaded 59 times

Shmuel
Posts: 5159
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 15 times
Been thanked: 144 times

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

Post by Shmuel » Tue 16 Jun, 2015 15:12

А теперь прогоните этот макрос на нём самом.

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

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

Post by John Doe » Tue 16 Jun, 2015 15:13

Shmuel wrote: А теперь прогоните этот макрос на нём самом.
Так и задумано, надо же на чём-то тестировать ;-)

ladserg
Posts: 214
Joined: Thu 19 Feb, 2009 14:51
Has thanked: 1 time
Been thanked: 1 time

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

Post by ladserg » Wed 17 Jun, 2015 16:07

а модуль не самостоятелен? А то он у меня гневно машет кулаками и требует DLL'ки.

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

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

Post by John Doe » Wed 17 Jun, 2015 19:52

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

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

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

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

Post by HaRT » Fri 19 Jun, 2015 15:57

Я заметил, что если попытать применить проверку к синтаксически некорректному коду на Луа, то ничего видимого не происходит.
В то же время вроде бы самим модулем этот случай предусмотрен:
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: 11126
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 12 times
Been thanked: 72 times

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

Post by John Doe » Fri 19 Jun, 2015 16:08

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

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

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

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

Post by HaRT » Fri 19 Jun, 2015 16:20

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: 11126
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 12 times
Been thanked: 72 times

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

Post by John Doe » Fri 19 Jun, 2015 16:27

HaRT wrote: Может всё же стоит их показывать, дописав сверху, что они приблизительные?
Зачем приблизительные, когда можно получить точные (хоть и другим способом). Добавлю.

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

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

Post by John Doe » Mon 22 Jun, 2015 14:58

Макрос в шапке усовершенствован.

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

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

Post by HaRT » Tue 23 Jun, 2015 17:47

John Doe wrote: Макрос в шапке усовершенствован.
Спасибо!
В т.ч. за автоматическое пропадание через непродолжительное время сообщения об отсутствии предупреждений.
Фар есть инструмент, а не нянька. © 2009 DrKnS

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

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

Post by HaRT » Sun 05 Jul, 2015 12:30

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

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

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

Post by John Doe » Tue 07 Jul, 2015 17:44

HaRT wrote: Уже не первый раз сталкиваюсь с необходимостью куда-то скопировать результат проверки
В общем виде тут: 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: 8048
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 67 times
Been thanked: 100 times

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

Post by HaRT » Tue 07 Jul, 2015 18:12

John Doe wrote: В общем виде тут
Спасибо!
John Doe wrote: пакетное использование
Не добавить ли ссылку на эту инструкцию в шапку?
Фар есть инструмент, а не нянька. © 2009 DrKnS

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

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

Post by HaRT » Sun 12 Jul, 2015 16:21

Обнаружилась ошибка: из списка предупреждений по [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: 11126
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 12 times
Been thanked: 72 times

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

Post by John Doe » Sun 12 Jul, 2015 20:05

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

Post Reply

Return to “Обсуждение макросов”