[О блоге] [наверх] [пред] [2023-01-31 17:35:26+03:00] [e1edf490d610d29c0574443d63abd42dd67aad7c]
Темы: [vim]

Смена LSP плагина для Vim

https://github.com/yegappan/lsp
http://www.git.stargrave.org/?p=vim-lsp.git;a=commitdiff;h=a682ee9b6215c9155f170f6b35a972aa14a2999f
Больше года использую vim-lsc плагин (c89a9164128730eb856b89e4f99970a6bfb7b7f4).
И полностью им доволен. Пока не увидел что в обновлённом Vim появилась
встроенная поддержка LSP протокола. По сути то это просто помощник
отправляющий самостоятельно HTTP заголовки и парсящий/создающий JSON-RPC
ответы с идентификаторами.

Посмотрел можно ли с нуля мне самостоятельно написать LSP плагин
используя всё это. Первые шаги взаимодействия получились. Спецификация
LSP от Microsoft прекрасно читается и под Lynx-ом. Но вообще протокол
умеет довольно много всего, как и серверы типа clangd и gopls. Писать
всё с нуля я бы смог, но это не мало.

И внезапно нашёл что уже написали не то что LSP плагин с использованием
поддержки самого Vim-а, а вообще всецело на vim9script. Попробовал и
пока замечаний нет. Более того, он ощутимо более фичастый чем vim-lsc,
хотя я и не уверен зачем мне всё это надо. Использует исключительно
родные возможности Vim-а.

Впервые увидел "virtual text" в действии: LSP/плагин дописывают названия
аргументов из сигнатуры функции, хотя на этот текст нельзя встать или
отредактировать. Не понял ещё мешает ли это или нет, но пока пусть будет.

Работает это всё ощутимо быстрее. Хотя я думал что всё упираться уже
должно в сам LSP-сервер. Но нет -- тут и подсветка и goto definition и
вывод ошибок работают почти стремглав.

Но... конечно же нашлась неприятность. А точнее отсутствующая фича. Для
Python у меня в vim-lsc конфиге явно передавалась такая штука как
workspace_config, в котором указывались настройки для LSP сервера
(отключить mccabe и смотреть только на flake8 конфиг). Пошёл смотреть
vim-lsc код, чтобы понять что же такое (с точки зрения LSP протокола)
workspace_config и как он передаётся. Оказалось что это прям отдельное
событие отправляемое на сервер. Чего yegappan/lsp плагин не делает.
Благо код на vim9script, понятный, компактный и топорный. Добавил
возможность указания этого конфига и его отправку на сервер.

    [оставить комментарий]