Page 1 of 3

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

Posted: Fri 18 May, 2018 11:30
by buniak_a_h
Небольшой макрос, реализующий завершение слов, заточенный под LUA. В отличие от многочисленных скриптов и плагинов Word Cmplete, предлагаемый скрипт не анализирует уже имеющиеся в тексте слова, а ищет в списке ключевых слов языка LUA1 и элементов таблицы _G (со всеми вложенностями).

В настоящее время для получения списка ключевых слов используется скрипт LuaCheck, модуль luacheck.builtin_standards (подраздел возвращаемой таблицы max).

LuaComplete.v3.7z
Версия 3 от 24.05.18
(4.35 KiB) Downloaded 71 times

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

Posted: Fri 18 May, 2018 12:03
by HaRT
Скрипт пока не пробовал, но уже по описанию есть ряд соображений по клавиатурному управлению:
1. Вопрос: из каких соображений выбрано CtrlShiftSpace, а не, скажем, CtrlSpace? Ведь это на одно нажатие короче.
2. Предложение: предоставить возможность избежать нажатия Enter в списке вариантов. А именно, если выбран вариант дополнения и нажимается любой печатный символ (хоть буква, хоть точка, хоть пробел, и т.п.), вставлять этот вариант, а следом за ним этот символ.
3. Предложение (по мотивам использования ReSharper'а): при вызове дополнения в середине слова предоставить варианты вставить дополнение (Enter) или же заместить до конца слова (Tab). Пример: имеем APanel.Currpos, каретка на p, вызываем дополнение, получаем два варианта, стрелками выбираем CurrPos. Теперь если нажать Enter («вставить»), то получим APanel.CurrPospos (и каретка на p, т.е. после дополненного), а если нажать Tab («заменить»), получим APanel.CurrPos (и каретка в конце, т.е. тоже после дополненного). Практика показывает, что это удобно.

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

Posted: Fri 18 May, 2018 13:12
by buniak_a_h
HaRT wrote:
Fri 18 May, 2018 12:03
1. Вопрос: из каких соображений выбрано CtrlShiftSpace, а не, скажем, CtrlSpace? Ведь это на одно нажатие короче.
У меня CtrlSpace занят для вызова плагина WordComplete. Исторически сделан клавиатурный макрос; если повесить на одну клавишу и выбирать из меню, но так - будет ещё дольше. В принципе, исходник есть, там всё указано явно - без настроек и локализаций; легко назначить свой.
HaRT wrote:
Fri 18 May, 2018 12:03
2. Предложение: предоставить возможность избежать нажатия Enter в списке вариантов. А именно, если выбран вариант дополнения и нажимается любой печатный символ (хоть буква, хоть точка, хоть пробел, и т.п.), вставлять этот вариант, а следом за ним этот символ.
Если кто-нить скачает и будет пользоваться - буду развивать. Буква-цифра - нет, не так, как Вы указали. Это будет фильтр. А точка, пробел, ";" и знаки операций - да, можно будет выбранный элемент вставлять, и после него - нажатый символ.
HaRT wrote:
Fri 18 May, 2018 12:03
3. Предложение: при вызове дополнения в середине слова предоставить варианты вставить дополнение (Enter) или же заместить до конца слова (Tab). Пример: имеем APanel.Currpos, каретка на p, вызываем дополнение, получаем два варианта, стрелками выбираем CurrPos. Теперь если нажать Enter («вставить»), то получим APanel.CurrPospos (и каретка на p, т.е. после дополненного), а если нажать Tab («заменить»), получим APanel.CurrPos (и каретка в конце, т.е. тоже после дополненного). Практика показывает, что это удобно.
Это я уже так думал. Ещё к этому же: если курсор в середине слова, то для первого позиционирования использовать и остаток слова. В Вашем примере при открытии автоматически указатель меню будет позиционирован на CurrPos Просто пока я делал это для себя (для режима ввода уода; тогда курсор в середине слова бывает редко...). Если кто-нить скачает - буду добавлять...
В моих планах:
Следующая идея (если смогу договориться с John Doe о предоставлении интерфейса по проверке слова) - список переменных, доступных в контексте. Вот тогда - действительно будет Code completion. Ну, почти: не будет (естественно) автоматического доступа к полям локальных таблиц и проверки типа (тоже естественно).

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

Posted: Fri 18 May, 2018 13:28
by HaRT
buniak_a_h wrote:
Fri 18 May, 2018 13:12
точка, пробел, ";" и знаки операций
Тогда ещё и кавычки, скобки и т.п.
buniak_a_h wrote:
Fri 18 May, 2018 13:12
Если кто-нить скачает - буду добавлять...
Когда соберусь что-нибудь ещё скриптовать в Фаре, непременно скачаю.

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

Posted: Fri 18 May, 2018 18:04
by John Doe
buniak_a_h wrote:
Fri 18 May, 2018 11:16
В отличие от плагина WordComlete и указанного Вами макроса, мой не использует те слова, которые уже имеются в тексте
Возможно это функциональность в альтернативных скриптах отключаема.
buniak_a_h wrote:
Fri 18 May, 2018 11:16
Дело за определением доступности имён переменных в конкретном контексте. Ваша LuaCheck это умеет делать совершенно точно (диагностирует же обращение к неопределённой переменной!).
Luacheck не мой, но да, было бы неплохо, и в принципе возможно использовать его lexer + parser + linearize (как пример автор рекомендовал depgraph.scan).

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

Posted: Fri 18 May, 2018 22:05
by buniak_a_h
John Doe wrote:
Fri 18 May, 2018 18:04
Возможно это функциональность в альтернативных скриптах отключаема.
Дело не в том, отключаема это возможность в тех, что я знаю. Просто они больше НИОТКУДА не берут слова. Например, если Вы не использовали в тексте слово FIB_BUTTONS, то оно и не будет подставлено. Просто неоткуда . Пример, кстати, очень показательный: я, например, помню названия только тех флагов, которые часто использую. И то бывает путаю...

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

Posted: Fri 18 May, 2018 23:57
by buniak_a_h

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

Posted: Sat 19 May, 2018 00:08
by HaRT
buniak_a_h wrote:
Fri 18 May, 2018 11:30
Возможность вставки оставлена и "повешена" на сочетание CtrlEnter
Из каких соображений выбраны именно такие кнопкосочетания? Чем плохи Enter=вставить, Tab=заменить “а-ля-РеШарпер”?

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

Posted: Sat 19 May, 2018 00:21
by buniak_a_h
HaRT wrote:
Sat 19 May, 2018 00:08
Из каких соображений выбраны именно такие кнопкосочетания? Чем плохи Enter=вставить, Tab=заменить “а-ля-РеШарпер”?
Замена - более частое использование . Как показал мой двухдневный опыт использования, вставка мне не понадобилась ни разу. Поэтому замена повешена и на [Enter], и на выбор знаком пунктуации. Ctrl+Enter - аналог "сноски имени в командную строку" в панелях ФАРа.
С РеШарпер-ом незнаком, сделал наиболее близко к IDE Delphi. Tab - вообще стараюсь лишний раз не использовать - не люблю со времён программирования для ДОС.

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

Posted: Sat 19 May, 2018 01:16
by HaRT
buniak_a_h wrote:
Sat 19 May, 2018 00:21
вставка мне не понадобилась ни разу
А как часто вы вообще использовали дополнение из середины слова? Ведь разница-то только в этом случае.
buniak_a_h wrote:
Sat 19 May, 2018 00:21
Tab - вообще стараюсь лишний раз не использовать - не люблю со времён программирования для ДОС.
Ясно, давняя психотравма, жаль. Надеюсь, в коде скрипта легко подправить кнопки под себя.

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

Posted: Sat 19 May, 2018 01:37
by buniak_a_h
HaRT wrote:
Sat 19 May, 2018 01:16
А как часто вы вообще использовали дополнение из середины слова? Ведь разница-то только в этом случае.
Не часто. Если исправлял только. ДО второй версии я стирал слово и вызывал LuaComplete. Теперь это стало не нужно. Поэтому-то я и повесил замену на Enter.
HaRT wrote:
Sat 19 May, 2018 01:16
Ясно, давняя психотравма, жаль
Ну, вкусы, видимо, разные. Психологически Enter - команда "выполнить введённую команду". Бывает - "Завершить ввод".
Вы совсем не работаете из командной строки? ;-) Не табуляцией же посылаете команду на выполнение...

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

Posted: Sat 19 May, 2018 01:49
by HaRT
buniak_a_h wrote:
Sat 19 May, 2018 01:37
Вы совсем не работаете из командной строки? Не табуляцией же посылаете команду на выполнение...
Я много работаю из командной строки (bash). И именно табуляцией я вызываю дополнение. 8)
А при написании кода табуляция удобна тем, что даже если правая рука на мышке, левой всё равно можно нажать Tab.

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

Posted: Sat 19 May, 2018 08:01
by John Doe
buniak_a_h wrote:
Fri 18 May, 2018 22:05
Просто они больше НИОТКУДА не берут слова. Например, если Вы не использовали в тексте слово FIB_BUTTONS, то оно и не будет подставлено. Просто неоткуда . Пример, кстати, очень показательный: я, например, помню названия только тех флагов, которые часто использую. И то бывает путаю...
А насколько известно мне - всё же берут, из окружения, возможно не с любым уровнем вложенности (не интересовался).

Что до флагов, то я например тоже их не помню, для вставки использую Lua explorer.

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

Posted: Sat 19 May, 2018 10:54
by John Doe
John Doe wrote:
Sat 19 May, 2018 08:01
А насколько известно мне - всё же берут, из окружения
Посмотрел внимательнее, у SimSU за это отвечает Editor_MacroComplete.

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

Posted: Sat 19 May, 2018 11:00
by buniak_a_h
John Doe wrote:
Sat 19 May, 2018 10:54
John Doe wrote:
Sat 19 May, 2018 08:01
А насколько известно мне - всё же берут, из окружения
Посмотрел внимательнее, у SimSU за это отвечает Editor_MacroComplete.
Да, действительно, Word Complete у меня был, а Editor_MacroComplete не ставил...
Ну, значит я изобретал ещё один велосипед...
Спасибо.

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

Posted: Sat 19 May, 2018 15:00
by John Doe
buniak_a_h wrote:
Fri 18 May, 2018 11:30
Реализована фильтрация в меню выбора слова
А почему бы просто не включать штатный режим фильтрации?