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

Здесь выкладываются готовые к использованию макросы и скрипты.
User avatar
John Doe
Бюрократ
Posts: 14582
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

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

Post by John Doe »

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

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

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

Требования: Скачать полностью: LuaCheck.zip
Только far_standards.lua.cfg
Last edited by John Doe on Sat 09 Nov, 2019 16:08, edited 3 times in total.
User avatar
John Doe
Бюрократ
Posts: 14582
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

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

Post by John Doe »

Latest post of the previous page:

@shmuel
Встретил странность, похоже на баг в luacheck.

Code: Select all

local F = far.Flags
return F + F.abracadabra
Ожидаемо выдаёт ошибку indirectly accessing undefined field 'Flags.abracadabra' of global 'far'

А вот так уже нет:

Code: Select all

local F = far.Flags
local function _()
  return F + F.abracadabra
end
А так снова выдаёт:

Code: Select all

local F = far.Flags
local function _()
  return F.abracadabra
end
https://t.me/FarManager — Telegram чат
Shmuel
Posts: 7244
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 48 times
Been thanked: 636 times

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

Post by Shmuel »

John Doe, да, выглядит как баг.
Сейчас есть кто-то, развивающий LuaCheck (например у меня на линуксе версия 1.1.0). Может имеет смысл зарепортить.
User avatar
buniak_a_h
Posts: 4564
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 242 times
Been thanked: 674 times
Contact:

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

Post by buniak_a_h »

Есть предложение.
На днях добавили GUID диалога подтверждения замены EditorConfirmReplaceId в far.Guids - и тут же это стало вылезать в предупреждения. Может быть имеет смысл при загрузке (именно для far.Guids) тупо составить список ГУИДов и забыть? Ну, или при каждом таком пополнении придётся корректировать far_standards.lua.cfg (то, что после include "Guids").
User avatar
John Doe
Бюрократ
Posts: 14582
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

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

Post by John Doe »

buniak_a_h wrote: Sun 07 Jan, 2024 00:51 Ну, или при каждом таком пополнении придётся корректировать far_standards.lua.cfg
Корректировать конфигурацию периодически необходимо, в последнее время например ведь не только гуиды добавлялись.
Но файл far_standards.lua.cfg не очень приспособлен для самостоятельной правки, проще дополнить пользовательский конфиг.
(чтобы его открыть - прямо в списке предупреждений luacheck нажимаете F9)
Там уже присутствуют разнообразные опции, в закомментированном виде.
В данном случае нужно так:

Code: Select all

  read_globals={
    "far.Guids.EditorConfirmReplaceId"
  };
buniak_a_h wrote: Sun 07 Jan, 2024 00:51 Может быть имеет смысл при загрузке (именно для far.Guids) тупо составить список ГУИДов и забыть?
Это не вполне корректно, т.к. luacheck может запускаться не только в среде luamacro (а например в командном режиме).

P.S.
В настоящий момент в far_standards.lua.cfg присутствует неточность: таблица far.Guids не должна быть доступна в режиме luafar.
User avatar
buniak_a_h
Posts: 4564
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 242 times
Been thanked: 674 times
Contact:

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

Post by buniak_a_h »

John Doe!
Уже довольно давно в таблице mf появилась функция mf.mainmenu. Если не влом, подправьте вложение в головной пост. У себя-то я исправил, но не хочется, чтоб моя версия файла far_standards.lua.cfg стала расходиться с Вашей…
User avatar
John Doe
Бюрократ
Posts: 14582
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

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

Post by John Doe »

На самом деле там уже много изменений накопилось, но руки не доходят.
Хочу также обратить ваше внимание на то, что изменения удобнее вносить в пользовательский конфиг, а не в основной файл.
https://t.me/FarManager — Telegram чат
User avatar
buniak_a_h
Posts: 4564
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 242 times
Been thanked: 674 times
Contact:

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

Post by buniak_a_h »

John Doe wrote: Fri 02 Aug, 2024 07:46 удобнее вносить в пользовательский конфиг, а не в основной файл.
Если Вы имеете в виду файл .luacheckrc, то я так и не понял, как добавлять в нем поля стандартных таблиц. Некоторые параметры проверки я изменил, но добавить имя к списку исключения я не смог. И в .luacheckrc.sample нет такого примера…
User avatar
John Doe
Бюрократ
Posts: 14582
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

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

Post by John Doe »

Code: Select all

local options = {
  --...
  read_globals={
    "mf.mainmenu",
  };
  --...
}
https://t.me/FarManager — Telegram чат
Ultrabyte
Posts: 213
Joined: Sun 26 Mar, 2023 17:59
Has thanked: 19 times
Been thanked: 20 times

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

Post by Ultrabyte »

Возможно кому-то будет полезно.
На днях изучал проблему LuaCheck 0.21 (нажатием Ctrl-Shift-F7) из-за возможного недопустимого string, если исследуемый LUA-файл записан в кодировке OEM или Ansi (использую его для уменьшения размера) вместо типичного UTF8.

Однако, если вернуть старый luafar3.dll (из Far3.5454.x86) размером 373760, то не падает. Хорошо "жуёт" все кодировки: OEM,Ansi,UTF8
Если "новейшие", например, luafar3.dll (из Far3.5787.x86, размером 423936 или Far3.5913.x86, размером 473600) - стабильно "падают".

Проверял также на новом Far 6300x86 - аналогично "падает", если поменять в редакторе кодировку UTF8->Ansi (предположу, что из-за кириллицы?)

Если использовать команду "luacheck:xxxx.lua", то работает исправно.
Shmuel
Posts: 7244
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 48 times
Been thanked: 636 times

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

Post by Shmuel »

Ultrabyte wrote: Sun 18 Aug, 2024 21:39 если вернуть старый luafar3.dll (из Far3.5454.x86) размером 373760, то не падает. Хорошо "жуёт" все кодировки: OEM,Ansi,UTF8
2019-08-30 - была заменена библиотека для работы с UTF-8, которая после очередного апгрейда стала выдавать ошибку на невалидный UTF8. В большинстве случаев это хорошо, но для LuaCheck видимо плохо.
User avatar
John Doe
Бюрократ
Posts: 14582
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

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

Post by John Doe »

Shmuel wrote: Sun 18 Aug, 2024 21:52 В большинстве случаев это хорошо, но для LuaCheck видимо плохо.
Всё нормально для LuaCheck, учитывая что актуальная версия 0.23 а не 0.21.

И странно что оно вообще от кодировки файла зависит. Если научите как воспроизвести на 0.23, то буду смотреть.
https://t.me/FarManager — Telegram чат
Shmuel
Posts: 7244
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 48 times
Been thanked: 636 times

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

Post by Shmuel »

John Doe wrote: Sun 18 Aug, 2024 22:02 учитывая что актуальная версия 0.23 а не 0.21.
Не знаю, не экспериментировал. А актуальная версия 1.2.
User avatar
John Doe
Бюрократ
Posts: 14582
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

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

Post by John Doe »

Shmuel wrote: Sun 18 Aug, 2024 22:06 Не знаю, не экспериментировал. А актуальная версия 1.2.
Действительно (хоть от 0.23 она отличается мало).

И надо уточнить ещё версию скрипта, актуальная 1.5
https://t.me/FarManager — Telegram чат
User avatar
SUSim
Posts: 1735
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 15 times
Been thanked: 45 times

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

Post by SUSim »

Ultrabyte wrote: Sun 18 Aug, 2024 21:39
Весной прошлого года заменил в "modules\luacheck\utils.lua"
в строках 250, 258, 259 конструкцию 'str:find(...' на 'string.find(str...'
Версия у меня 0.23
SimSU ··· ·· -- ··· ··-
User avatar
John Doe
Бюрократ
Posts: 14582
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

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

Post by John Doe »

SUSim wrote: Mon 19 Aug, 2024 09:01 в строках 250, 258, 259 конструкцию 'str:find(...' на 'string.find(str...'
У меня во всех этих строках str:find(..., и никаких проблем.
Поэтому для начала научите воспроизводить.
ViewColor.lua например в кодировке 1251 и в нём полно русскоязычных комментариев.

Тем не менее LuaCheck у меня прекрасно с ним справляется.
https://t.me/FarManager — Telegram чат
Ultrabyte
Posts: 213
Joined: Sun 26 Mar, 2023 17:59
Has thanked: 19 times
Been thanked: 20 times

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

Post by Ultrabyte »

John Doe wrote: Mon 19 Aug, 2024 17:10 Поэтому для начала научите воспроизводить.
Если это актуально, то приложил в закрепе минимальный набор Far 3.6300.x32 (без плагинов и хистори и конфига) + luacheck 1.4.3 (чуть поправил код для правильного отображения) + luacheck21.2 + luajit.exe

Как произвести:
1) открыть любой xxxx.lua, где есть кириллица - нажать Ctrl+Shift+F7 -> красное окно
2) переключить нативную кодировку в ненормативную кодировку (Win или Oem), где превращается кириллица в тарабарщину -> всё OK

К сожалению, я не разобрался как посадить версию 23 из гитхаба -> полностью крашится с требованием неизвестного lfn.lua или loadall.dll
Возможно, тут подскажут, как правильно "посадить" 23 версию из гитхаба с полным комплектом недостающих файлов.

(прикрепленный файл УДАЛЕН)
Last edited by Ultrabyte on Mon 11 May, 2026 22:06, edited 2 times in total.
Post Reply

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