Проверка корректности скрипта в редакторе + выполнение
Posted: Fri 24 May, 2013 14:09
by John Doe
Набор макросов, помогающих в отладке lua-скриптов, открытых в редакторе.
Активируются только при filemask="*.lua;*.moon"
* CtrlEnter
Предназначен для проверки корректности редактируемого макроса.
При наличии выделения — работает с выделением.
Если ошибок нет, то предлагаются действия на выбор:
Reload All выполняет перезагрузку макросов.
Файл предварительно сохраняется, если в процессе сохранения возникли вопросы, то макросы не перезагружаются
Execute выполнить сам скрипт, или выделенную часть.
Если скрипт возвращает значения, то они отображаются.
Variables после исполнения скрипта или выделенной части отображает результирующие значения переменных скрипта: локальных и окружения (если присутствуют). Если скрипт возвращает значения, то они тоже отображаются.
Требуется модуль Lua Explorer.
Если редактируемый файл расположен не в папке scripts, то курсор устанавливается на кнопку Execute.
* CtrlShiftEnter (только при наличии выделения)
После исполнения выделенной части скрипта отображает список возвращённых значений (если в тексте отсутствует ключевое слово return, то оно добавляется в начало).
Перед запуском запрашиваются значения переменных (environment), можно перечислить через запятую
Re: Проверка корректности скрипта в редакторе + выполнение
Posted: Fri 24 May, 2013 14:18
by Shmuel
Вместо ECSTATE_MODIFIED советую пользовать ECSTATE_SAVED.
Re: Проверка корректности скрипта в редакторе + выполнение
Posted: Fri 24 May, 2013 14:28
by John Doe
В каких случаях это имеет значение?
А, вроде понял.
Состояние Modified остаётся даже после сохранения.
Интересно для чего это, и как можно использовать...
Re: Проверка корректности скрипта в редакторе + выполнение
Posted: Fri 24 May, 2013 14:41
by Shmuel
Ещё одна ошибка: при выводе диалога, если пользователь нажимает Esc, производится сохранение файла и перезагрузка макросов.
Re: Проверка корректности скрипта в редакторе + выполнение
Posted: Fri 24 May, 2013 14:45
by John Doe
Исправил, спасибо
Re: Проверка корректности скрипта в редакторе + выполнение
Posted: Sat 25 May, 2013 08:24
by Shmuel
В нынешнем виде, если в тексте встречается foo=45, то при исполнении будет установлена глобальная переменная _G.foo, что, наверное, нежелательно. Предотвратить это можно либо устанавливая окружение для функции f, либо используя far.MacroPost.
Re: Проверка корректности скрипта в редакторе + выполнение
Posted: Sat 25 May, 2013 18:52
by John Doe
Изменил на setfenv(f,setmetatable({},{__index=_G}))()
Re: Проверка корректности скрипта в редакторе + выполнение
Posted: Sun 26 May, 2013 20:39
by John Doe
Если в тексте (или выделении) отсутствуют определения макросов (Macro {...}) и обработчиков событий (Event {...}), то курсор устанавливается на кнопку Execute.
local ans = far.Message("Syntax is Ok","Macro","Reload &All;&Execute;")
if ans==2then
setfenv(f,setmetatable({},{__index=_G}))()
elseif ans==1then
if band(EditorInfo.CurState,far.Flags.ECSTATE_SAVED)==0then editor.SaveFile();end
if Area.Editor then far.MacroLoadAll()end--если при сохранении не возникло вопросов
end
end
end;
}
Re: Проверка корректности скрипта в редакторе + выполнение
Posted: Mon 13 Jan, 2014 14:41
by John Doe
Новые возможности макроса на CtrlEnter
Reload All без изменений
Дополнение для действияExecute: если скрипт возвращает значения, то они отображаются
Новое действие Locals: после выполнения отображает результирующие значения локальных переменных скрипта .
Отдельный макрос на CtrlShiftEnter (только при наличии выделения)
Выполнить выделенную часть скрипта и показать возвращённые значения.
Перед запуском запрашиваются значения переменных (environment), их можно перечислить через запятую
Для новых функций требуется модуль Lua Explorer.
Остальное будет работать и без модуля.
Re: Проверка корректности скрипта в редакторе + выполнение
Posted: Tue 14 Jan, 2014 08:35
by John Doe
Исправлены ошибки.
Вместо Locals теперь действие Variables: локальные переменные и окружение.
Отдельно обрабатываются случаи когда не удаётся получить переменные по причине преждевременного возврата из функции (в этом случае отображаются возвращённые значения)
Re: Проверка корректности скрипта в редакторе + выполнение
Posted: Mon 27 Jan, 2014 15:54
by John Doe
Обновление.
Отображение возвращаемых значений теперь осуществляется стандартной функцией far.Show.
При этом возможен дальнейший просмотр таблиц в Lua Explorer, для этого помимо самого модуля Lua Explorer также потребуется FAR 3 build >3784.
Re: Проверка корректности скрипта в редакторе + выполнение
Posted: Mon 27 Jan, 2014 20:45
by John Doe
Исправлена загрузка модуля Lua Explorer
Re: Проверка корректности скрипта в редакторе + выполнение
Posted: Tue 28 Jan, 2014 20:39
by AleXH
FAR3.0.3787. После обновления сабжа и запуска фар выводится сообщение:
╔════════════════════════════════════════════════════════╗
║ Lua Explorer „Advanced“ is required for this function. ║
║ http://forum.farmanager.com/viewtopic.php?f=60&t=7988 ║
╟────────────────────────────────────────────────────────╢
║ { OK } ║
╚════════════════════════════════════════════════════════╝
, скрипт le.lua лежит в Profile\Macros\scripts рядом со скриптом сабжа.
Re: Проверка корректности скрипта в редакторе + выполнение
Posted: Tue 28 Jan, 2014 21:11
by John Doe
le.lua надо скопировать в Macros\modules
Но да, ошибка таки присутствует, в строке 7 надо le_error() изменить на le_error
Исправил, спасибо.
Re: Проверка корректности скрипта в редакторе + выполнение
Posted: Wed 29 Jan, 2014 13:29
by John Doe
Variables: функция стала проще и надёжнее (используется debug.hook). Теперь также отображаются возвращаемые значения (если есть)