LuaComplete Tabbed — завершение слов в скриптах на Lua и MoonScript

Здесь обсуждается всё, что касается макросов.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

LuaComplete Tabbed — завершение слов в скриптах на Lua и MoonScript

Post by buniak_a_h »

Данный скрипт сделан в помощь разработчикам скриптов со слабой памятью (ну или слишком ленивых, чтоб запоминать). Тема отделена от другой аналогичной в связи с коренной переработкой интерфейса.

Скрипт ищет слева от курсора имена полей таблицы, все флаги far.Flags, ключевые слова языка и доступные переменные. Всё найденное выводится в виде списков на 4 вкладках.

Например:
В тексте набрано APanel.C↑urPos (стрелкой указано место курсора). При вызове скрипта выведется список полей таблицы APanel, начинающихся с "C":

Code: Select all

┌──────────── Поля таблицы APanel ─────────────┐
│n ColumnCount                                 │
│n CurPos                                      │
│s Current                                     │
│                                              │
Остальные поля таблицы скрыты, но их можно "проявить" (Ctrl+H).
На первой вкладке выводится список полей таблицы (если удалось её распознать).
На второй — список флагов (содержимое таблиц far.Flags, far.Colors и far.Guids).
На третьей — список ключевых слов языка (Lua или Moon).
На четвёртой — имена доступных локальных переменных.

Изначально скрипт пытается определить слово и позиционироваться на нём (в примере выше будет открыта первая вкладка, и указатель установится на второй строке — CurPos).
Имена локальных переменных изначально отсортированы в алфавитном порядке; в дальнейшем их можно пересортировать в порядке появления объявления. На вкладке с переменными под списком указан номер строки, в которой найдено объявление этой переменной, и выводится строка (см. скриншот ниже).



Скачать:
pc_LuaCmpl.1_1_11.7z
Версия 1.1.11
(14.33 KiB) Downloaded 103 times
Last edited by buniak_a_h on Fri 01 Jul, 2022 08:27, edited 13 times in total.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

LuaComplete Tabbed — завершение слов в макроса на Lua и MoonScript

Post by buniak_a_h »

Я немножко переделал скрипт lc.lua. Теперь если курсор не удаётся «привязать» к определённой таблице, то выводится список видимых локальных переменных (В список не включаются имена функций и параметры, а также переменные цикла). Определение видимости делается по некому "эвристическому" алгоритму; может быт некорректным.

У меня просьба: если кто-то будет юзать этот скрипт, мне хотелось бы иметь обратную связь (замечания, пожелания, отзывы). Если за пару недель грубых ошибок не будет выявлено, я заменю скрипт из первого сообщения на этот.
lc.lua.7z
(3.74 KiB) Downloaded 112 times
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

LuaComplete — завершение слов макроса на LUA

Post by John Doe »

buniak_a_h wrote: Tue 11 Aug, 2020 06:40 Определение видимости делается по некому "эвристическому" алгоритму;
Хорошо бы тут использовать luacheck, lua-inspect, ...
https://t.me/FarManager — Telegram чат
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

LuaComplete — завершение слов макроса на LUA

Post by buniak_a_h »

John Doe, да, хорошо бы…
(1) не нашёл никаких инструкций к ним
(2) а будут ли они работать при некорректном тексте? Ведь этот скрипт предназначен для использования при разработке, а значит, текст (а) ещё не дописан и (б) может содержать ошибки.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

LuaComplete — завершение слов макроса на LUA

Post by John Doe »

1. Да, там с наскоку не получится, надо вникать. Я например так и не собрался (были мысли применить это в раскраске, и прочем, например реализовать поиск/переименование переменных).

2. Не помню уже (первый скорее нет, второй скорее да, плюс попадались и другие библиотеки).
Но в любом случае было бы полезно.
https://t.me/FarManager — Telegram чат
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

LuaComplete — завершение слов макроса на LUA

Post by buniak_a_h »

На самом деле при соблюдении некоторых правил стиля алгоритм отрабатывает неплохо. Не пишите несколько операторов if, for, while в одной строке - и, вроде, на моих тестах неплохо работает. Также скрипт не будет работать, если список переменных в операторе local разбит на несколько строк. Впрочем, строгая проверка очень трудоёмка, не вижу смысла…
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

LuaComplete — завершение слов макроса на LUA

Post by citRiks »

buniak_a_h,
buniak_a_h wrote: Tue 11 Aug, 2020 06:40 У меня просьба: если кто-то будет юзать этот скрипт, мне хотелось бы иметь обратную связь (замечания, пожелания, отзывы). Если за пару недель грубых ошибок не будет выявлено, я заменю скрипт из первого сообщения на этот.
Взял эту распоследнюю версию, буду с ней пока, хотя интенсивных тестов проводить пока не получается

Теперь насчет моих ранних сообщений о диких тормозах, - то целиком и полностью моя вина ))
Дело в том что у меня стоял криво настроенный модуль ZBS (ZeroBrainStudio)
И он замедял именно ваш LuaComplete до каких-то минут вообще, другие ощутимо не страдали.
Я его убрал из автозагрузки, и все стало летать еще на прошлой оригинальной версии, на которую я и жаловался.

Что еще интересно, что если например сделать так:
1.) включили ZBS, при-аттачились, ничего не делали, отключились, все, - нет никаких хуков и ни дебаггинга.
По крайней мере не должно быть, моему глазу их не видно.
2.) .. и тогда LuaComplete начинает СЛЕГКА тормозить.
Что такое "слегка" - до/без ЗБС, LuaComplete открывался за полсекунды скажем, а после ЗБС - за секунду.
Ну или какие-то милисекунды, но ощутимые.

Тут у меня уже никаких претензий-пожеланий нет, просто сообщаю
Last edited by citRiks on Wed 12 Aug, 2020 23:55, edited 1 time in total.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

LuaComplete — завершение слов макроса на LUA

Post by buniak_a_h »

citRiks, спасибо.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

LuaComplete — завершение слов макроса на LUA

Post by buniak_a_h »

Наваял макрос. Делает то же самое, но результаты представляет в виде 4-страничного PageControl-а (модуль также представляю, он сам по себе имеет ценность).
Как это выглядит:
image.png
Собственно скрипт (включая модули). Как положено не оформлял - сделаю, если будут положительные отзывы.
pc_LuaCmpl.7z
Назначена клавиша CtrlShift/
(8.43 KiB) Downloaded 102 times
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

LuaComplete — завершение слов макроса на LUA

Post by HaRT »

buniak_a_h wrote: Wed 19 Aug, 2020 17:39 если будут положительные отзывы
А можно немного подробнее про предполагаемые сценарии использования и про клавиатурную навигацию в этом диалоге?
Ну и по внешнему виду:
1. Мне кажется, что будет гармоничнее, если внутренняя рамка будет одинарная.
2. Хорошо бы значками показывать тип полей — например, так же, как в Lua Explorer Advanced.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

LuaComplete — завершение слов макроса на LUA

Post by buniak_a_h »

HaRT wrote: Wed 19 Aug, 2020 19:15 А можно немного подробнее про предполагаемые сценарии использования?
Скрипт написан в помощь маразматикам типа меня.
Ситуации, когда меня спасает этот (или предыдущий аналогичный) скрипт:
Пишете скрипт на LUA.
1. Набрали table., нажали CtrlShift/ - появился диалог, отражённый на скриншоте. Выбрали, нажали Enter - в строку вставился выбранный элемент таблицы
2. Набрали Menu.Value - ругается, нет такого. Встали после буквы V, вызвали - пустая табличка (отображаются только поля, начинающиеся с V. Нажали CtrlH (показать все) и увидели, что есть GetValue. Заработало.
3. В любом месте доступен список видимых переменных (для маразматиков, которые не могут запомнить имена переменных) и ключевых слов языка. Не сообразил: надо бы список переменных аналогично списку полей фильтровать при первичном вызове.
HaRT wrote: Wed 19 Aug, 2020 19:15 про клавиатурную навигацию в этом диалоге?
Стрелки вверх/вниз - перемещение по списку.
CtrlTab / CtrlShiftTab - следующая / предыдущая вкладки
Enter - вставить выбранное слово с заменой того, что идёт после курсора в редакторе
CtrlEnter - то же без замены (вставка)
Esc - выход из диалога без результатов.
HaRT wrote: Wed 19 Aug, 2020 19:15 будет гармоничнее, если внутренняя рамка будет одинарная.
Пожалуй. Не смотрел, есть ли такя фишка у DI_LISTBOX-а… Если нет - придётся рамку самому рисовать.
HaRT wrote: Wed 19 Aug, 2020 19:15 Хорошо бы значками показывать тип полей
Не вопрос - сделаю (кроме пропертей: для них type выдаёт всегда function).
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

LuaComplete — завершение слов макроса на LUA

Post by HaRT »

buniak_a_h wrote: Wed 19 Aug, 2020 19:46 Скрипт написан в помощь маразматикам типа меня.
Если/когда соберусь кодить что-то серьёзное в Фаре и для Фара, и мне может пригодиться. Спасибо.
buniak_a_h wrote: Wed 19 Aug, 2020 19:46 CtrlTab / CtrlShiftTab - следующая / предыдущая вкладки
Желательно также CtrlPgDn/CtrlPgUp — как при редактировании свойств соединения у плагина NetBox.
buniak_a_h wrote: Wed 19 Aug, 2020 19:46(кроме пропертей: для них type выдаёт всегда function).
Однако Lua Explorer Advanced как-то определяет function, string, number, … Или я неправильно понял, что вы называете пропертями?

И ещё вопрос: будет ли скрипт работать в .moon-файлах? Если пока нет, то примите пожелание, чтобы научился.
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

LuaComplete — завершение слов макроса на LUA

Post by buniak_a_h »

HaRT wrote: Wed 19 Aug, 2020 20:06 CtrlPgDn/CtrlPgUp — как при редактировании свойств соединения у плагина NetBox.
Я так и не понял, что делает CtrlPgDn/CtrlPgUp в том диалоге (на самом деле я про них и не знал). Возможно, Вы имеете в виду при позиционировании на элементе-таблице открывать такой же диалог уже для вложенной таблицы?
HaRT wrote: Wed 19 Aug, 2020 20:06 Однако Lua Explorer Advanced как-то определяет function, string, number, … Или я неправильно понял, что вы называете пропертями?
Видимо, правильно поняли. Я нашёл способ определять тип, так что замечание снимается.
HaRT wrote: Wed 19 Aug, 2020 20:06 будет ли скрипт работать в .moon-файлах? Если пока нет, то примите пожелание, чтобы научился.
Я с moonscript так и не разобрался.
1. Таблицы, наверное, у них одни и те же. Отсюда единственное, что потребуется - синтаксический разборщик . Я пока не смотрел, как это на moon пишется… Там ещё, кажется, есть конструкция "with", которая может сильно усложнить разбор
2. Ключевые слова - я беру из какой-то таблицы, в имени которой присутствует слово moon. Если у moonscript-а другие слова - напишите, откуда брать.
3. С переменными - алгоритм совсем надо будет переделать, т.е. области видимости, насколько я понял этот странный moonscript, ограничиваются не блоками типа if, do, function и т.п., а отступом слева. С одной стороны это даже проще. С другой - я не понял, есть ли там оператор объявления переменной (аналог local).
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

LuaComplete — завершение слов макроса на LUA

Post by HaRT »

buniak_a_h wrote: Wed 19 Aug, 2020 23:47 что делает CtrlPgDn/CtrlPgUp в том диалоге (на самом деле я про них и не знал)
Тоже переключение между страницами-вкладками диалога. Только там их больше, и визуализация не такая очевидная.
buniak_a_h wrote: Wed 19 Aug, 2020 23:47 Вы имеете в виду при позиционировании на элементе-таблице открывать такой же диалог уже для вложенной таблицы?
Нет, я имею в виду, что для единообразия хочется, чтобы CtrlPgDn/CtrlPgUp тоже переходили соответственно к следующей/предыдущей вкладке диалога.
buniak_a_h wrote: Wed 19 Aug, 2020 23:47Я с moonscript так и не разобрался.
Главное: он транслируется в Луа и выполняется тем же движком. Вроде есть стандартные средства пересчёта строки-столбца в обе стороны (Lua-Moon, Moon-Lua). Пример использования должен быть в luacheck, т.к. moon-файлы он тоже проверяет. Т.ч. чем меньше своего наколеночного тут придётся ваять, тем надёжнее. Если/когда дойдёт до дела, помогу найти, откуда проще взять ключевые слова (у меня есть кое-какие намётки).
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

LuaComplete — завершение слов макроса на LUA

Post by buniak_a_h »

HaRT wrote: Thu 20 Aug, 2020 00:45 для единообразия хочется, чтобы CtrlPgDn/CtrlPgUp тоже переходили…
"Единообразие" - понятие, как оказалось, очень относительное… :ha: Я ж не сам придумал - во многих софтах такое переключение вкладок. Например, в IDE от Borland-а, в Яндекс-браузере. Видимо, надо делать настройку. Или заложить несколько хоткеев; есть ещё софт, в котором переход сделан по Ctrl+стрелки (сразу не припомню, но удобно было).
HaRT wrote: Thu 20 Aug, 2020 00:45 он транслируется в Луа
Да я прочитал, что это, фактически, препроцессор.
----
Вроде, как обрабатывать with - я придумал. А вот как найти имя переменной … Искать оператор присваивания? Там допустимо присваивание нескольких в одном? А если присваиване не требуется - как объявить переменную? Присвоить nil?
Если сможете, дайте какое-нить руководство по языку в формате chm (по LUA я нашёл, а по moon не искал и пока не хотелось - не мой язык!)
HaRT wrote: Thu 20 Aug, 2020 00:45 откуда проще взять ключевые слова (у меня есть кое-какие намётки)
Я, вроде, тоже нашёл: package.loaded.moonscript.compile.Block.__base, package.loaded.moonscript.compile.statement, package.loaded.moonscript.parse.literals. Впрочем, это - мои домыслы.
На самом деле полезность (ля меня) этого скрипта давно доказана и без списка переменных и ключевых слов языка. Поля таблицы и флаги far.Flags - вполне полезно!…
Post Reply

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