Проверка корректности скрипта в редакторе + выполнение

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

Проверка корректности скрипта в редакторе + выполнение

Post by John Doe »

Набор макросов, помогающих в отладке lua-скриптов, открытых в редакторе.
Активируются только при filemask="*.lua;*.moon"

* CtrlEnter
  • Предназначен для проверки корректности редактируемого макроса.
    При наличии выделения — работает с выделением.
    Если ошибок нет, то предлагаются действия на выбор:
    • Reload All выполняет перезагрузку макросов.
      Файл предварительно сохраняется, если в процессе сохранения возникли вопросы, то макросы не перезагружаются
    • Execute выполнить сам скрипт, или выделенную часть.
      Если скрипт возвращает значения, то они отображаются.
    • Variables после исполнения скрипта или выделенной части отображает результирующие значения переменных скрипта: локальных и окружения (если присутствуют). Если скрипт возвращает значения, то они тоже отображаются.
      Требуется модуль Lua Explorer.
    Если редактируемый файл расположен не в папке scripts, то курсор устанавливается на кнопку Execute.
* CtrlShiftEnter (только при наличии выделения)
  • После исполнения выделенной части скрипта отображает список возвращённых значений (если в тексте отсутствует ключевое слово return, то оно добавляется в начало).
    Перед запуском запрашиваются значения переменных (environment), можно перечислить через запятую
При отображении возвращаемых значений возможен их дальнейший просмотр в Lua Explorer.
Требования: FAR 3 build >=4261.


source | download
Last edited by John Doe on Wed 11 Dec, 2019 09:08, edited 1 time in total.
buniak_a_h
Posts: 2097
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 129 times
Been thanked: 207 times
Contact:

Проверка корректности скрипта в редакторе + выполнение

Post by buniak_a_h »

Latest post of the previous page:

citRiks wrote: Sat 11 Apr, 2020 14:03 Как вы думаете, может открыть еще одно неуспешное рац. предложение?
Ей бо, игра не стоит свеч. Ну, выиграете пару микросекунд … К тому же перезагрузка макросов переинициализирует локальные переменные.
Ну и:
citRiks wrote: Sat 11 Apr, 2020 14:03 мировая практика показывает, что все что можно добавляется то и удаляется.
Мировая практика как раз показывает, что это - не так. Всё, что добавляется, можно пометить на удаление (заблокированные файлы, например), или сделать невидимыми (в инете, как известно, ничего не пропадает, только прячется).
Как Вы могли заметить, макросы не удаляются, а только disable-ятся. В общем, понятно: не нужно париться с освобождением ресурсов, сборкой мусора, не надо бояться, что какой-нить хендл повторится (новому будет выделен тот, что был у старого). Многие так делают, в т.ч. и СУБД разные (запись не удаляется до регламентных работ). В нашем случае реальное удаление произойдёт после перезапуска ФАРа. Вряд ли это - то, что Вы бы хотели (перезагрузить один макрос и перезапустить ФАР) .)
citRiks
Posts: 895
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 269 times
Been thanked: 46 times

Проверка корректности скрипта в редакторе + выполнение

Post by citRiks »

buniak_a_h,
Ну нунизнаю.. хотелось бы от Шмуэля услышать почему он не реализовал одиночно-макросные обновления.

А во-вторых, я придумал как сделать light-weight одиночную перезагрузку:
* Макрос является сам для себя модулем, т.е. он берет имя своего файла, и делает себе "require(<свое-же-имя>)"
* функции макроса реализованы в нем же, но HE внутри action и condition, а в этом как-бы модуле.
* Чтобы "require(<свое-же-имя>)" не перезагружался каждый раз в condition, макрос детектит own change date,
это должна быть достаточно легкая операция,
или же возможно просто выставлять archive attribute,
или детектить что макрос открыт в редакторе, и только тогда перезaгружать require
Last edited by citRiks on Sun 12 Apr, 2020 21:45, edited 1 time in total.
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
citRiks
Posts: 895
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 269 times
Been thanked: 46 times

Проверка корректности скрипта в редакторе + выполнение

Post by citRiks »

Я все-таки решил что "модульный" подход слишком скучный,
не имеет прибавочной ценности, заставляет менять структуру макроса

И запилил действительно чистую перезагрузку одного одиночного макроса,
без каких-либо изменений в самом макросе.
Добавление макроса - нативное, без фокусов,
Для стирания прежнего макроса понадобилось немного залезть в:
%FARHOME%\Plugins\LuaMacro\utils.lua
но совсем немного, лишь несколько строчек

Прибавочная ценность, кроме быстроты разработки и отладки,
это то что разобран механизм вставки kind of system-wide hooks,
или иными словами "emulated events" again (да, в продолжение той же темы)
Ну и конечно я думаю что MacroCheck не может быть полноценным инструментом,
если нет способности вживую прогнать макрос который он типа проверил..

Представляет ли общественный интерес?
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
citRiks
Posts: 895
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 269 times
Been thanked: 46 times

Проверка корректности скрипта в редакторе + выполнение

Post by citRiks »

buniak_a_h wrote: Sat 11 Apr, 2020 15:25 Ей бо, игра не стоит свеч. Ну, выиграете пару микросекунд …
К тому же перезагрузка макросов переинициализирует локальные переменные.
ну пусть переинициализирует локальные переменные, это Ок во всех сценариях из моего опыта.
и у меня это не милисекунды, у меня это несколько секунд.
Мне на каждое небольшое изменение надо запустить по многу раз бывает,
ну что-то сломалось, непонятно, надо попробовать так и эдак.
И в итоге перезагружаешься дольше чем кодируешь, бесит однако.
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
citRiks
Posts: 895
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 269 times
Been thanked: 46 times

Проверка корректности скрипта в редакторе + выполнение

Post by citRiks »

Мировая практика как раз показывает, что это - не так. Всё, что добавляется, можно пометить на удаление (заблокированные файлы, например), или сделать невидимыми
совершенно верно, этот конкретный сценарий позволяет нам задисайблить прежний макрос,
чтобы не конфликтовал с новым.
Да, там внутри действительно есть поле disable, я им и воспользовался для начала.
Но далее я хочу совсем его удалить, не думаю что будет проблема с этим,
массив макросов надо просто сдвинуть на единицу назад да и все.
Last edited by citRiks on Mon 13 Apr, 2020 06:35, edited 1 time in total.
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
citRiks
Posts: 895
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 269 times
Been thanked: 46 times

Проверка корректности скрипта в редакторе + выполнение

Post by citRiks »

buniak_a_h wrote: Sat 11 Apr, 2020 15:25 В общем, понятно: не нужно париться с освобождением ресурсов, сборкой мусора, не надо бояться, что какой-нить хендл повторится (новому будет выделен тот, что был у старого)
Ну чтобы не боятся надо просто протестрировать,
есть много вариантов разрешения конфликтов, а вариантов самих конфликтов мало.
механика в целом там не особо хитрая, что называется гениальная простота.
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
citRiks
Posts: 895
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 269 times
Been thanked: 46 times

Проверка корректности скрипта в редакторе + выполнение

Post by citRiks »

buniak_a_h wrote: Sat 11 Apr, 2020 15:25 В нашем случае реальное удаление произойдёт после перезапуска ФАРа.
Вряд ли это - то, что Вы бы хотели (перезагрузить один макрос и перезапустить ФАР) .)
Ну да, есть вероятность что после 100500 перезагрузок образуются лишние 5 мегабайтов, да :)
Но это я уже как нибудь перенесу, или да придется перезапускать ФАР раз в день наверное :)
Зато глюкавый скрипт можно гонять мгновенно и беспрестанно, пока он не сдастся
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
citRiks
Posts: 895
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 269 times
Been thanked: 46 times

Проверка корректности скрипта в редакторе + выполнение

Post by citRiks »

Измения в utils.lua+внешний модуль с вспомогательными функциями,
позволяют дисайблить любой макрос по его ID, или по всему его файлу.
сделано на скорую руку, если будет интерес, то можно дооформить

PS
Поставленная задача "перезагрузить один отдельный макрос",
полностью удовлетворяется решением по этой ссылке:

viewtopic.php?p=161531#p161531
и без вторжения в %FARHOME%\Plugins\LuaMacro\utils.lua
Attachments
utlis.lua.diff.7z
Тупиковый путь, сохранен лишь как пример того как не надо делать
(1.37 KiB) Downloaded 14 times
Last edited by citRiks on Sat 01 Aug, 2020 09:28, edited 3 times in total.
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
Post Reply

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