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

Здесь выкладываются готовые к использованию макросы и скрипты.
User avatar
John Doe
Бюрократ
Posts: 13387
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 54 times
Been thanked: 350 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: 3205
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 169 times
Been thanked: 468 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-ятся. В общем, понятно: не нужно париться с освобождением ресурсов, сборкой мусора, не надо бояться, что какой-нить хендл повторится (новому будет выделен тот, что был у старого). Многие так делают, в т.ч. и СУБД разные (запись не удаляется до регламентных работ). В нашем случае реальное удаление произойдёт после перезапуска ФАРа. Вряд ли это - то, что Вы бы хотели (перезагрузить один макрос и перезапустить ФАР) .)
User avatar
citRiks
Posts: 1612
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 502 times
Been thanked: 95 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.
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
User avatar
citRiks
Posts: 1612
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 502 times
Been thanked: 95 times

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

Post by citRiks »

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

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

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

Представляет ли общественный интерес?
 ! Message from: John Doe
Тема отделена
Last edited by John Doe on Sat 24 Apr, 2021 10:18, edited 1 time in total.
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
User avatar
citRiks
Posts: 1612
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 502 times
Been thanked: 95 times

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

Post by citRiks »

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

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

Post by citRiks »

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

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

Post by citRiks »

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

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

Post by citRiks »

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

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

Post by citRiks »

Добавлю сюда ссылку свой чуть дополненный вариант:
viewtopic.php?f=15&t=12432
Если что не так в смысле багов или нелогичного поведения,
- велкам сообщать в соответствуюшую тему
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
Post Reply

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