亲测:lsp-python-ms vs pyls 性能

坐等anacoda和jedi, 加一个lsp的option.

pyls包含jedi,什么叫jedi加个lsp的选项 :thinking:

jedi用服务器实现completion就不是jedi了吗?

难道我上面遇到的问题你们都没碰到过吗?我给github提了issue,暂时还没得到回复,写起代码来这个问题真的烦人啊

大佬,麻烦你一下,在使用mspyls时,我发现import 一个同级文件总是出现unresolved import,比如在同一个文件夹里面有a.py和b.py,如果在b文件里面import a他就会出现上面的警告,导致跟他相关的类或者函数,都不能补全.但是实际的程序调用还是正常进行了,结果也正常能够输出.

2019-07-18%2011-37-35%20%E7%9A%84%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE

尝试设置一下 lsp-python-ms-extra-paths,这个貌似是 python-language-server 的 bug,可以参考:https://github.com/Microsoft/python-language-server/issues/918

我一般都把 flycheck 关掉,用自己写的脚本来做 lint(基本上就是针对改动的文件 pylint → mypy → pytest 一波流)。

可以参考一下我的配置:https://github.com/forrestchang/.doom.d/blob/master/modules/private/my-python/config.el

1 个赞

之前它github上修复了一些bug,我昨天也给他们踢了issue,没人鸟我,他这个flycheck不是lsp时,不会出现这个问题,现在我都是关了,不管他,只用它补全了,但是强迫症的我,这段时间,又没太多时间花在emacs上,真的是揪心啊

我的理解是你并没有把目录或者文件放到一个project里。我本地测试没有问题。你可以在train 目录下touch .projectile 试试 (前提是加载projectile)。

已经安装了vscode,能直接使用那里面的mspyls吗?有成功的案例吗?

可以,只要把exe设置好…大约每次mspls升级都要改

可以写个脚本。大概下面这样就行。这个自己用的,没做一些容错上的兼容。

 (defun find-vscode-mspyls-executable ()
    (let* ((wildcards ".vscode/extensions/ms-python.python-*/languageServer*/Microsoft.Python.LanguageServer")
           (dir-and-ext (if IS-WINDOWS
                            (cons (getenv "USERPROFILE") ".exe")
                          (cons (getenv "HOME") nil)))
           (cmd (concat (file-name-as-directory (car dir-and-ext))
                        wildcards (cdr dir-and-ext))))
      (file-expand-wildcards cmd t)))

  (setq lsp-python-ms-executable
        (car (find-vscode-mspyls-executable)))
  (setq lsp-python-ms-dir
        (file-name-directory lsp-python-ms-executable))
1 个赞

用上mspyls了,确实快多了,而且好些之前不显示的也提示了(比如tkinter下的)
但还有几个问题
1,mspyls的debug还是用的ptvsd吗?
2,mspyls的缓存数据,和vscode是可以公用吗?

大神,lsp-python-ms 是不是需要额外配置?

我们配合适配一下 nox 吧。:wink:

可以移植过去,适配下 eglot。如果不用自动下载功能,只需要注册 mspyls 的客户端就好了。

直接填dotnet和mspyls的dll路径不行

一直用python-ms,感觉比pyls速度快。加油。

感觉是不是 initializationOptions 的问题,我看了下 nox 用 mspyls 时候好像是 nil, 我记得 lsp-python-ms 要去解析 python 的位置,版本等等的。

ms-python-language-server 并不是标准的协议实现,需要调整一些参数才能工作。

谁在Linux下成功起来 mspyls ?

我感觉Linux版本有bug,服务器一直报错误:

server-reply (id:10) ERROR Mon Mar 30 18:44:46 2020: (:jsonrpc “2.0” :id 10 :error (:code -32000 :message “Object reference not set to an instance of an object.” :data " at Microsoft.Python.LanguageServer.Documents.Document.GetAnalysisAsync(Uri uri, IServiceContainer services, Int32 msTimeout, CancellationToken cancellationToken) in /home/andy/python-language-server/src/LanguageServer/Impl/Documents/Document.cs:line 28\n at Microsoft.Python.LanguageServer.Implementation.Server.Completion(CompletionParams params, CancellationToken cancellationToken) in /home/andy/python-language-server/src/LanguageServer/Impl/Implementation/Server.Editor.cs:line 41\n at Microsoft.Python.LanguageServer.Implementation.LanguageServer.Completion(JToken token, CancellationToken cancellationToken) in /home/andy/python-language-server/src/LanguageServer/Impl/LanguageServer.cs:line 163"))

你是Linux版本?