我现在一直在使用 lsp-mode
,但最近发现 lsp-mode
存在内存泄漏问题,所以想使用更加好用的 eglot
,但是不知道 eglot
的 add-on-mode
怎么配置,导致 lsp-tailwind
这个前端的 Server 没办法启动,有大神知道怎么配置吗?
你说的是这个吗
(add-to-list 'eglot-server-programs
'(python-mode . ("pyright-langserver" "--stdio")))
1 个赞
不是的。
add-on-mode
需要同时启动两个 Server 时才会用到,比如我使用 TailwindCSS 这个辅助 CSS 库编辑 *.vue
文件的时候,需要同时启动 lsp-tailwind
和 vls
这两个 Server。由于 lsp-mode
限制只能启动一个 Server,所以 lsp-tailwind
只能以附加模式启动,这就是 add-on-mode
。
个人水平有限,只能向 lsp-tailwind 的作者提个 Issue 了……
代码量不大,就锁定在这段代码了
(lsp-register-client
(make-lsp-client
:new-connection (lsp-stdio-connection
(list "node" lsp-tailwindcss-server-file "--stdio")
(lambda () (f-exists? lsp-tailwindcss-server-file)))
:activation-fn #'lsp-tailwindcss--should-start
:server-id 'tailwindcss
:priority -1
:add-on? lsp-tailwindcss-add-on-mode
:initialization-options #'lsp-tailwindcss--initialization-options
:initialized-fn (lambda (w)
(with-lsp-workspace w
(let* ((caps (lsp--workspace-server-capabilities w))
(comp (lsp:server-capabilities-completion-provider? caps))
(trigger-chars (append (lsp:completion-options-trigger-characters? comp) nil)))
(lsp:set-completion-options-trigger-characters?
comp
(vconcat
(cl-pushnew "-" trigger-chars :test #'string=))))))
:notification-handlers (ht ("tailwindcss/configUpdated" #'lsp-tailwindcss--callback)
("tailwindcss/getConfiguration" #'lsp-tailwindcss--configuration))
:download-server-fn (lambda (client callback error-callback update?)
(when lsp-tailwindcss-auto-install-server
(lsp-tailwindcss--install-server client callback error-callback update?)))))
我尝试通过advice-add
hack默认的eglot,想要增加类似的add-on模式,因为eglot是通过major-mode管理的lsp服务,理论上可以使用
(let ((major-mode xxx-mode))
xxx)
修改一些函数的调用,但理论很理想,现实很骨感,不知道是哪里出了问题。。。
因为eglot不支持多服务,现在已转到lsp-bridge,或许可以等待lsp-booster项目通过外部程序实现类似的功能 Idea: wrap multiple servers · Issue #38 · blahgeek/emacs-lsp-booster · GitHub