LINUX.ORG.RU

Использование LSP в Emacs'е

 ,


3

5

Правильно я понимаю, что идея language server'а в том, чтобы не писать поддержку каждого нового языка для всех редакторов и сред разработки?

Вот вроде бы в Emacs'е есть lsp-mode. Правильно я понимаю, что с этим плагином Emacs выступает клиентом lsp-сервера, информация о подсветке, автодополнении и прочих штуках должна поступать от lsp-сервера, её не должно уже реализовывать в Emacs'е. Так?

Но почему тогда на страние lsp-mode'а написано, что поддерживаются только некоторые языки, а не все поддерживаемые LSP?

Support for programming languages is provided by the following packages:

lsp-rust
lsp-go
lsp-python
lsp-haskell
lsp-java

Как мне через LSP получить CSS, JavaScript, C#?

★★★★★

Для вышеперечисленных языков есть готовые объявления клиентов. Для других их просто нет. Делаются они элементарно - это вызов одной функции с нужными параметрами, например:

(lsp-define-stdio-client 'go-mode "go" 'stdio #'(lambda () default-directory) "Go Language Server"
                           '("go-langserver" "-mode=stdio")
                           :ignore-regexps '("^langserver-go: reading on stdin, writing on stdout$"))
feofan ★★★★★
()
Ответ на: комментарий от DR_SL

А где и как сервер запускается?

В фоне запускается процесс из emacs. Как - это надо прописывать в команду запуска (для тех, что в списке поддерживаемых, уже прописано), каждый language server по-своему. Ну т.е. я себе сделал чтобы при открытии файла на go включался lsp-mode, который при включении и стартует сервер той командой, которую я задал.

feofan ★★★★★
()
Ответ на: комментарий от feofan

Оно что-то сырое какое-то, я поставил sudo pip install python-language-server В emacs lsp-mode python-lsp прописал все что они там пакетах хотели

  (with-eval-after-load 'lsp-mode
    (require 'lsp-flycheck))
  (require 'lsp-mode)
  (add-hook 'prog-major-mode #'lsp-mode)

  (require 'lsp-python)

Включаю простой пример (который все равно пришлось включать через M-x lsp-mode)

import os
import sys
os.get

print "Hello World!"
for i in xrange(5):
    print i

os.get

Первое os.get он предложил дополнить, второе нет. Причем если снова запустить emacs заново все открыть то автодополнение будет. Но сервер все равно слетает, особенно когда в другой буфер перейдешь и вернешься.

В общем пока это я так понимаю глубокий бэтатест?

DR_SL ★★★★★
()
Ответ на: комментарий от DR_SL

Ну про питоновский сервер я не в курсе, но например растовский воообще альфа. Сервер для go стабилен, но он предоставляет только goto definition/references. Клиент в emacs вроде стабилен, но не запилены такие вещи, как, например, асинхронность. Автор lsp-mode сейчас занимается GSOC, поэтому предупредил, что продолжит пилить не раньше осени.

feofan ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.