Что: e1edf490d610d29c0574443d63abd42dd67aad7c Когда: 2023-01-31 17:35:26+03:00 ------------------------------------------------------------------------ Темы: 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, понятный, компактный и топорный. Добавил возможность указания этого конфига и его отправку на сервер. ------------------------------------------------------------------------ оставить комментарий: mailto:comment@blog.stargrave.org?subject=Re:%20%D0%A1%D0%BC%D0%B5%D0%BD%D0%B0%20LSP%20%D0%BF%D0%BB%D0%B0%D0%B3%D0%B8%D0%BD%D0%B0%20%D0%B4%D0%BB%D1%8F%20Vim%20%28e1edf490d610d29c0574443d63abd42dd67aad7c%29 ------------------------------------------------------------------------ Сгенерирован: SGBlog 0.34.0