pyls_msがなくなった。

deopleteのソースをJediからLSPに変更する。で、Microsoft Python Language ServerをNeovimから使えるようにしてみたんだけれど、:call dein#update()してみたら、エラーが出てしまいました。:messageしてみると以下のような出力が。

[dein] Error occurred while executing hook: nvim-lspconfig
[dein] Vim(lua):E5108: Error executing lua [string ":lua"]:3: attempt to index field 'pyls_ms' (a nil value)
Lua が pyls_ms を読み込もうとしたんだけれど値が nil でした、ってことです。

え、もしや、と思って検索すると、https://github.com/neovim/nvim-lspconfig/issues/1073で、Python3で使っていると Error 134を出してクラッシュする、というようなことが書いてあります。

それに対して、pyls_msはpylance/pyrightに引き継がれていてMicrosoftはメンテナンスを放棄しているので、pyrightかpylspに切り替えることを推奨します、とのこと。
pyls_ms is borderline abandoned by microsoft (in favor of pylance/pyright), I would recommend switching to pyright or pylsp (`pyls is also abandoned) I'll probably remove pyls_ms shortly. It's not a bug in the built-in client (which this repo is not, this repo is just the basic settings we send to the language servers), it's likely a bug in pyls_ms that will never be fixed
ということで、pyls_ms.luaはすでに削除されてしまっていたのでした。実際、たしかに時々LSPによる補完が効かないことがあって、なんでかなぁと思ったり、NeovimはおろかChromeとか起動しているすべてのアプリを巻き込んでクラッシュしたりということもあったので、潮時なのかもしれません。ということで候補なのですが…。

pylspことPython LSP ServerはJediをエンジンとして利用しているので、せっかくJediを離れてpyls_msにしたのにまた戻ることになります。補完速度的にも若干遅い気がしますし。

pyrightはpyls_msと同じMicrosoftから提供されていますが、使用するためにはNode.jsを別途インストールする必要があるようです。

仕方ないので、Node.jsの現行推奨版である14.17.3-x64 LTSをインストールします。ただ、Chocolateyを含むビルドツールも必要に応じてインストールする、というオプションはチェックをしないでおきます。PythonもVisual Studio 2019もインストールしてあるし。

インストールが終了したら、新規にコマンドプロンプトを開いて動作を確認します。
C:\Users\kats$ node --version
v14.17.3

C:\Users\kats$ npm --version
6.14.13
動くようなのでpyrightをインストールします。
C:\Users\kats$ npm install -g pyright
C:\Users\kats\AppData\Roaming\npm\pyright -> C:\Users\kats\AppData\Roaming\npm\node_modules\pyright\index.js
C:\Users\kats\AppData\Roaming\npm\pyright-langserver -> C:\Users\kats\AppData\Roaming\npm\node_modules\pyright\langserver.index.js
+ pyright@1.1.158
added 1 package from 1 contributor in 1.015s
pyrightを起動してみると、
C:\Users\kats$ pyright
No configuration file found.
No pyproject.toml file found.
stubPath C:\Users\kats\typings is not a valid directory.
Assuming Python platform Windows
Searching for source files
Auto-excluding C:\Users\kats\.cache\dein\.cache\init.vim\.dein\test\test-files\python\with_virtualenv\env
Auto-excluding C:\Users\kats\.cache\dein\repos\github.com\dense-analysis\ale\test\test-files\python\with_virtualenv\env
Skipping recursive symlink "C:\Users\kats\AppData\Local\Application Data" -> "C:\Users\kats\AppData\Local"
Skipping broken link "C:\Users\kats\AppData\Local\ElevatedDiagnostics"
Auto-excluding C:\Users\kats\Projects\JupyterLab
Auto-excluding C:\Users\kats\work
Found 11346 source files
Emptying type cache to avoid heap overflow. Heap size used: 1537MB
Emptying type cache to avoid heap overflow. Heap size used: 1823MB
Emptying type cache to avoid heap overflow. Heap size used: 2108MB
Emptying type cache to avoid heap overflow. Heap size used: 2381MB
Emptying type cache to avoid heap overflow. Heap size used: 1538MB
Emptying type cache to avoid heap overflow. Heap size used: 1734MB
なにやらカレントディレクトリ以下のすべての*.pyファイルを検索してキャッシュしているようです。

それはさておき。

Neovim側では、これまで使用していたpyls_msの設定を削除して、pyrightの設定をdein.tomlに追加します。
nvim_lsp.pyright.setup{
}
ここに記入する設定は、CONFIG.md#pyrightに説明されています。が、基本的にはパスさえ通っていれば特に設定の必要はなさそうです。

dein.tomlを保存してからNeovimを起動し直すと、こころなしかpyls_msのときよりも起動が早いようです。遅延発火(lazy)はしていないので、これはNode.jsをインストールしてまで導入したかいがあったかもしれません。

0 件のコメント:

コメントを投稿

Vimの補完プラグインをインストール。その4

Vimの補完プラグインをインストール。その3 で、 ddc-tabnine が使えそうです、などと書いたのですが、早速やってみました。 まず、tabnineのバイナリを用意しないといけません。がどうにもTabNineのサイトがわかりにくいので、 tabnine-nvim にあるダ...