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

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

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

Postby 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 38 times

Shmuel
Posts: 4951
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 123 times

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

Postby Shmuel » Tue 16 Jun, 2015 15:12

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

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

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

Postby John Doe » Tue 16 Jun, 2015 15:13

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

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

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

Postby ladserg » Wed 17 Jun, 2015 16:07

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

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

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

Postby John Doe » Wed 17 Jun, 2015 19:52

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

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

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

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

Postby 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: 11040
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 62 times

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

Postby John Doe » Fri 19 Jun, 2015 16:08

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

Впрочем, я не заметил чтобы luacheck выявлял какие-то ошибки, кроме тех, что можно получить штатной функцией loadstring, и точно так же он проверяет только до первой ошибки.

HaRT wrote:Source of the post Представляется ли возможным выводить и синтаксические ошибки тоже?
Разумеется. Можно встроить и сюда, хотя для этого у меня отдельный инструмент: Проверка корректности скрипта в редакторе + выполнение

HaRT wrote:Source of the post желательно как-то различать ошибки/предупреждения в списке — например ‘E’/‘W’ слева.
В случае ошибки никаких предупреждений luacheck не выдаёт (что логично), поэтому какой-то общий список E/W невозможен.

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

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

Postby HaRT » Fri 19 Jun, 2015 16:20

John Doe wrote:Source of the post Происходит mf.beep()
Странно, у меня он ни через пищалку, ни через наушники не воспроизводится, хотя они исправные.
John Doe wrote:Source of the post "строки" из сообщений некорректные, как будто вырезаны по ошибочному смещению
Может всё же стоит их показывать, дописав сверху, что они приблизительные? Всё полезнее, чем ничего.
John Doe wrote:Source of the post Можно встроить и сюда
Это было бы очень желательно, т.к., например, когда где-то случайно стёр синтаксически важный символ, не сразу и сообразишь, почему ничего не происходит. А так бы сразу написалось, что там-то такая-то ошибка.
John Doe wrote:Source of the post В случае ошибки никаких предупреждений luacheck не выдаёт (что логично)
Для меня как для программиста в основном на Си++ совершенно не логично — всё зависит от того, насколько у используемого разборщика (parser) умное восстановление после ошибок (error recovery).
Фар есть инструмент, а не нянька. © 2009 DrKnS

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

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

Postby John Doe » Fri 19 Jun, 2015 16:27

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

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

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

Postby John Doe » Mon 22 Jun, 2015 14:58

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

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

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

Postby HaRT » Tue 23 Jun, 2015 17:47

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

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

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

Postby HaRT » Sun 05 Jul, 2015 12:30

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

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

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

Postby John Doe » Tue 07 Jul, 2015 17:44

HaRT wrote:Source of the post Уже не первый раз сталкиваюсь с необходимостью куда-то скопировать результат проверки
В общем виде тут: Копирование содержимого меню и списков

Но если вы намерены анализировать большое количество исходников, то рекомендую обратить внимание на пакетное использование 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: 7908
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 63 times
Been thanked: 94 times

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

Postby HaRT » Tue 07 Jul, 2015 18:12

John Doe wrote:Source of the post В общем виде тут
Спасибо!

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

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

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

Postby HaRT » Sun 12 Jul, 2015 16:21

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

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

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

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

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

Postby John Doe » Sun 12 Jul, 2015 20:05

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


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

Who is online

Users browsing this forum: No registered users and 1 guest