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

vscode python 的扩展有一个 jedi 什么的配置,设置成 false,再打开python文件,就会自动下来那个language server 了,可以想办法找找对应的url,提出来,直接下载,这样就不用自己编译了。

嗯,下午发现了。vscode装完下面写着要分析10000多项,十多秒就完成了。然而把这个可执行文件给emacs用,还是分析了2多个钟还没完成。初步感觉和虚拟环境有关。不过pyls是正常使用的。

好像是 nupkg 打包的, 我看了下 mac 下面下载的链接 https://pvsc.azureedge.net/python-language-server-stable/Python-Language-Server-osx-x64.0.2.96.nupkg

emacs 27用native json serializer的时候好像有点问题

Debugger entered--Lisp error: (wrong-type-argument symbolp "unknown-parameter-name")
  json-serialize((:jsonrpc "2.0" :method "workspace/didChangeConfiguration" :params (:settings #<hash-table equal 1/65 0x1576b2a85d61>)) :null-object nil :false-object :json-false)
  (with-no-warnings (json-serialize params :null-object nil :false-object :json-false))
  (if (and lsp-use-native-json (fboundp 'json-serialize)) (with-no-warnings (json-serialize params :null-object nil :false-object :json-false)) (json-encode params))
  (let* ((json-false :json-false) (body (if (and lsp-use-native-json (fboundp 'json-serialize)) (with-no-warnings (json-serialize params :null-object nil :false-object :json-false)) (json-encode params)))) (concat "Content-Length: " (number-to-string (1+ (string-bytes body))) "\15\n\15\n" body "\n"))
  lsp--make-message((:jsonrpc "2.0" :method "workspace/didChangeConfiguration" :params (:settings #<hash-table equal 1/65 0x1576b2a85d61>)))

导致错误的参数是这个样子的

(:jsonrpc 2.0 :method workspace/didChangeConfiguration :params (:settings #s(hash-table size 65 test equal rehash-size 1.5 rehash-threshold 0.8125 data (python #s(hash-table size 65 test equal rehash-size 1.5 rehash-threshold 0.8125 data (analysis #s(hash-table size 65 test equal rehash-size 1.5 rehash-threshold 0.8125 data (errors (unknown-parameter-name undefined-variable parameter-missing positional-argument-after-keyword too-many-function-arguments) warnings (unresolved-import parameter-already-specified too-many-positional-arguments-before-star)))))))))

不知道是不是mspyls返回的结果格式有问题

这是flycheck报的warning,你可能需要设置python的lib path,比如:lsp-python-ms-extra-paths

所以如果编译有困难可以直接下载解压使用。你是从哪里搞到的URL呢?如果能自动找出最新版本的地址,我们就有办法自动下载启用mspyls了。

参照lsp-java的思路,写了个简单的函数直接下载mspyls并解压到指定地方。这样就不用下载donet-sdk 自己编译源代码了。但是还不够完美,版本是写死的最新稳定版本,Windows平台也没有测试过。先凑合用着。

2 个赞

可以的github找到最新release的版本号替代进去,vc应该跟进很快的吧

这个flycheck报的错我修改了.pylintrc文件,不应该也是一样的吗?因为我工作中要构建很多虚拟环境,那这个lsp-python-ms-extra-paths 要添加好多路径啊

vscode 下载的时候,我打开那个信息窗口看的。。。

在启动lsp之前激活虚拟环境,就能找到对应虚拟环境里的包。

vscode 的 python 插件源码翻了一下,相关部分应该在下面这里, 有个 getVersions 什么的,不过我照着去构造 uri 访问没有成功。。。

https://github.com/microsoft/vscode-python/blob/master/src/client/common/nuget/nugetRepository.ts

楼主 现在我发现一个问题啊,就是运行完python程序光标会由当前位置 跳动到 line 10 左右的位置,不知道你碰到了这个问题没有

好像是在配置里写死的版本号

没有遇到这种情况

那估计是我的电脑问题 这个lsp-python-ms还可以 要是在优化一下 更smooth一下就完美了

我还以为你是字节跳动的呢,哈哈

你装完插件,得用vscode打开一个python文件。。。然后它才会编译executable,才能找到,很神奇。也有可能是得更新下插件

fd可以用find替代。感觉是可以参考vscode安装python plugin的script写一个after install post script的,应该是个个平台都有的

嗯,这个已经解决了。可惜mspyls在Emacs下的表现还是不怎么样。。