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

奇怪了,我这边 mspyls 一直不响应 textDocument/completion 请求。

就是这个commit以前的版本在centos上很快,cpu也低,但是这个commit编译的一启动mspyls就非常吃cpu,分析完代码后,就正常了。

lsp-mode是自动显示函数帮助和变量类型。速度很快,不卡顿。

偶尔在windows上通过x server用一下linux的emacs和lsp-mode。

死磕了一下午,我终于明白了。

pyls不需要索引,支持单文件,比如我在 HOME 目录下创建 test.py 可以直接补全工作 mspyls需要建索引,当我在 HOME 目录下创建 test.py 文件时,mspyls 会分析我整个HOME目录,我的HOME目录超多源代码,这也是为啥我一直没法得到 mspyls 对 textDocument/completion 请求的回应,因为他没有索引完。

创建一个 ~/test/test.py 的目录包裹一下 test.py , mspyls 马上就好了。

天啊,折磨死我了,知道原因就好让Nox默认支持 mspyls 了。

王哥,nox 的 mspyls 跑起来了。我找了 eglot 的 issue,然后调整了下,也不知道哪个参数的鬼。

(defvar lsp-python "/usr/local/bin/python")
(defvar lsp-search-paths [])

(defclass nox-mspyls (nox-lsp-server) ()
  :documentation "MS Python Language Server.")

(setq-default nox-workspace-configuration
              '((:python :autoComplete (:extraPaths nil)
                         :analysis (:autoSearchPaths :json-false :usePYTHONPATH :json-false))))

(cl-defmethod nox-initialization-options ((_server nox-mspyls))
  `(:interpreter
    (:properties
     (:InterpreterPath ,lsp-python))
     :searchPaths ,lsp-search-paths))

(add-to-list 'nox-server-programs
             `(python-mode nox-mspyls 
                           "Microsoft.Python.LanguageServer"))

我把 “Microsoft.Python.LanguageServer” 放 PATH 了。

可以看看 Microsoft's python language server sending non-standard keys · Issue #144 · joaotavora/eglot · GitHub

看我上面的帖子,因为mspyls要建立索引,等我半个小时,我把 mspyls 的支持内置了。

又一个被 mspyls 扫描 HOME 目录坑到的例子。

哈哈哈,mspyls索引一开始没懂确实很头痛

可以设置cache吗?

我记得 lsp-python-ms 配合 doom-modeline ,在索引会有提示,在 doom-modeline 还有个进度条。

目前忙测的结果是,目录大了 mspyls 就不工作了,还没有研究是目录大了没索引完还是直接不索引了?

研究了下 lsp-python-ms, 发现 initializationOptions 里面加上 :analysisUpdates t, 会返回索引的进度。

回复类似

(:jsonrpc "2.0" :method "python/reportProgress" :params
          ["Analyzing in background, 86 items left..."])

server-notification Mon Mar 30 23:11:24 2020:
(:jsonrpc "2.0" :method "python/reportProgress" :params
          ["Analyzing in background, 72 items left..."])

server-notification Mon Mar 30 23:11:24 2020:
(:jsonrpc "2.0" :method "python/reportProgress" :params
          ["Analyzing in background, 58 items left..."])

server-notification Mon Mar 30 23:11:25 2020:
(:jsonrpc "2.0" :method "python/reportProgress" :params
          ["Analyzing in background, 39 items left..."])

server-notification Mon Mar 30 23:11:25 2020:
(:jsonrpc "2.0" :method "python/reportProgress" :params
          ["Analyzing in background, 37 items left..."])

欢迎使用 Nox -- 轻量级 LSP 客户端 - #69,来自 manateelazycat 搞定

1 个赞

已经添加到Nox对mspyls的支持,方便大文件的时候看一下进度,要不还以为mspyls挂了。

1 个赞

测试结果是目录和文件太多,索引很慢很慢………

是这个 spinner 进度条吗?好像不是太明确,只能大概表示还在活动。

是 spinner,在索引时会显示。*lsp-log* 里会打印详细信息。

你是mac吗?

mscOS Catalina

感觉好看,能介绍一下用了什么ui方面的包么?