怎麼看待lsp-mode實行monorepo,集成所有lsp-*

以前foobar語言的支援放在單獨的 lsp-foobar 倉庫裏,現在都放到 lsp-mode/lsp-foobar.el 了。另外有個lsp-clients.el,require所有client。

https://github.com/emacs-lsp/lsp-mode/blob/master/lsp-clients.el

你們喜歡這個變更嗎?

我…我…我又要改配置文件了

即便是不喜欢也没办法吧,反正作为Spacemacs普通用户,就直接跟着Spacemacs官方走。

同一放到 lsp-mode/lsp-foobar.el 里,方便用户开箱即用还挺好的,有些偶尔用的语言都不需要特意去配置它。

而放到独立的 lsp-foobar 仓库对于使用者有个好处,仓库首页基本会把 lsp-foobar-command/setting 命令/配置在首页展示出来,如果放到 lsp-mode 下,可能需要二级目录之类的,readme 长得可能都找不到。

对于 lsp-java 之类的庞然大物来说,我还是希望它在独立 repo 下,或者 common client definition 在 lsp-mode 下,client extra package/ command / setting 独立出来也行

影响不大吧,clients应该是跟着二进制有关,只要支持我用的二进制,随便它怎么搞

lsp-foobar → lsp-mode/foobar.el我是不太喜歡的,暫時先這樣回答: Provide option to configure which clients to be required by yyoncho · Pull Request #1163 · emacs-lsp/lsp-mode · GitHub

不了解 lsp-mode,最近在 eglot + gopls 写 go 程序(这是我唯一用到 Eglot/LSP 的地方),eglot 除了 (go-mode . ("gopls"))没别的设置了,也能照常使用。而 lsp-go.el 提供了一些额外设置,比如针对 gopls 的设置(比如开启参数补全,在 eglot 中我需要自己手动设置,不过不麻烦)。

或许有些语言的 LSP 后端太多设置了?不好设置?才需要专门的代码,免得用户自己折腾。

至于 @MaskRay 提到的

(use-package foobar :hook (foobar-mode) . (lambda () (require 'foobar) (lsp))))

没看明白什么意思,用户加个 Hook 不就完了?

(add-hook 'go-mode-hook #'lsp)

至于 lsp 加载所有的 lsp-*.el,估计这么做实现比较简单吧,虽然不太理想。应该也可以把注册的代码拎出来,等到用户真正需要用的时候,在 require 相应 lsp-*