怎样设置 eglot 的 add-on-mode 呢?

我现在一直在使用 lsp-mode,但最近发现 lsp-mode 存在内存泄漏问题,所以想使用更加好用的 eglot,但是不知道 eglotadd-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-tailwindvls 这两个 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?)))))