eglot 支持同一个 buffer 同时 attach 多个 lsp 了。

千呼万唤始出来,eglot 的作者 joao 本人亲自实现的。不过没有改动 eglot 的核心代码,而是用 python 实现了一个外部的 lsp multiplexer 的方式实现的。感觉常规的补全诊断定义跳转啥的 multiplexer 似乎也 ok,但是 lsp server 和 client 之间的沟通有各种乱七八糟的方法,不知道如果社区的人大量使用不知道会不会遇到很多奇奇怪怪的中间商导致的 bug。

这个在windows上甚至没法启动,还是算了吧,要用也是lspx

这个如果考虑修改eglot 本身代码去实现的话,可能会遇到哪些问题呢?

那还不如不用 eglot …

我也写过一个自用的,只测试了tailwindcss,主要是我还在使用Emacs29,eglot对tailwindcss的支持有些问题,另外我不太喜欢在Emacs配置之外比如HOME目录还要添加一些额外的配置,毕竟是开发工具,配置最好能统一处理

用 lsp-bridge 就好了,天生支持一个buffer或者一个项目混合用不同 lsp server, 而且还可以非常细腻的控制融合不同 lsp server 的部分能力,让多个 lsp server 充分协作

最重要的是开箱即用,超级稳定,这部分代码是我2年前就实现的

3 个赞

eglot 这个必须要 workaround 也是不知道说什么好。这么多编辑器的 lsp client,它是唯一一个需要一个 multiplexer 才能多 lsp 配置的。

好奇一个buffer多个lsp Server有什么用

前端开发当中有多种语言,比如 tsx 比如Tailwind比如 html等等

1 个赞

哦确实,但是这种应该是一个统一lsp处理吧,多个lsp处理不同区域,不会误报么

不会呀,它不同的 SP Server 处理的是不同的协议呀。 有些处理补全,有些处理这个诊断,有些处理这个 跳转请求。 本来一个 SP Server 它也是异步的,多个它只是做消息汇聚而已。