lsp 能不能对不同的项目启用不同的 language server

问这个问题主要是发现 lsp-mspyls 对一个项目总是出现 stack overflow,但其它项目运行起来都没问题。所以有没有办法对这个出现问题的项目指定用lsp-pyright,但是对其它项目仍然使用lsp-mspyls?

@seagle0128

发现 pyright 在 posframe 中显示的内容会丢掉部分函数文档:

如果需要,我会在github上lsp-pyright中提出这个issue

试试 .dir-locals.el

2 个赞
  1. 使用 .dir-locals.el
  2. 由于 mspyls 即将废弃,lsp-mspyls 不再维护。
2 个赞

这个理解,但是目前使用体验上来看,大多数时候 mspyls > pyright 。所以想混用两种,当不能使用 mspyls 的时候再使用 pyright。

使用 dir-locals 的话能提示一下应该设置哪个变量吗?@enchanter, @seagle0128

https://github.com/jiacai2050/dotfiles/blob/c1d066ad4a9626808af3a69aa11c0b811192bf48/.config/emacs/deps.el#L143

1 个赞
(setf (lsp--client-priority (gethash 'mspyls lsp-clients)) 100)
1 个赞

好像不太对,基于你的代码,这是我的 dir-locals:

;;; Directory Local Variables
;;; For more information see (info "(emacs) Directory Variables")

((python-mode . ((eval . (progn
                           (require 'lsp-mode)
                           (setf
                            (lsp--client-priority
                             (gethash 'pyright lsp-clients))
                            100))))))

但是会报错:

File local-variables error: (wrong-type-argument lsp--client nil)

可以的。

除了设置优先级让 lsp 自主决定,还可以在检查可用的 client 的时候强行指派。

没有 require pyright?

何以见得?是pyright对conda的支持不好吗?

各种小细节吧,比如文档格式显示有问题,函数文档显示不全等等。之前用过一段时间后来又退回到mspyls了。