前回「LunarVim使ってみた」の続き
null-lsのroot_dirを変えるのに苦労した話
TL; DR
lvim.lsp.null_ls.setup.root_dir = function(fname)
local util = require "lspconfig.util"
local root_files = {
"pyproject.toml",
"setup.py",
"setup.cfg",
"requirements.txt",
"Pipfile",
"manage.py",
"pyrightconfig.json",
}
return util.root_pattern(unpack(root_files))(fname) or util.root_pattern ".git" (fname) or util.path.dirname(fname)
end
設定書くとこれだけなんだけど、設定の仕方が見つけられず、
timeoutを変更する方法が
lvim.lsp.null_ls.setup.timeout= 5000
だよ
というタイムアウトに関するissueのコメントを見つけて予想して書いたらうまくいった
結論: LunarVimのドキュメントにない設定変更は、プラグインのドキュメント見てもわからんのでとても苦労する。
経緯
自分用競プロ用のリポジトリがこんな構成
competitive
├── README.md
├── .git
├── go
│ └── 省略
└── python
├── pyproject.toml
├── src
│ ├── BIT.py
│ ├── __init__.py
│ ├── bsearch.py
│ ├── combination.py
│ ├── factorial.py
│ ├── primes.py
│ ├── tree.py
│ └── unionfind.py
├── tests
│ ├── BIT_test.py
│ ├── __init__.py
│ ├── bsearch_test.py
│ ├── combination_test.py
│ ├── factorial_test.py
│ ├── primes_test.py
│ ├── tree_test.py
│ └── unionfind_test.py
└── typings
null-lsでpflake8を設定しても、pyproject.tomlの設定値を読んでくれない。
原因調査
- コマンドラインで
pflake8
実行すると期待通りなのでpyproject.toml
は悪くない -
pyproject.toml
を1個上の階層、つまり、competitive
直下に置くとうまくいく - つまり、
.git
がある場所がrootとして認識されているっぽい - よっしゃ
null-ls
の root_dir判定の設定を変えればいけるはず
で、どう書いたらいいん?
もちろん、LunarVimのnull-lsのセットアップしてる処理にnull-lsのLSPの設定方法通り直接かけばうまくいった。
でも、そこはLunarVimのアップデートで書き換わる部分なわけで。
config.lua
にどうかけばいいのかというのがどこにも書いてない。
printfデバッグして、setup処理より前にconfig.luaが実行されているのは確認したけど、
LunarVimがデフォルトで設定するnull-lsの設定値を変えたりしてもうまく行かない。
(luaをpandoc filter書く時とvimの設定するときしか使わないので知識も足りてない)
ググってもroot_dirの件はpyrightのしかひっかからない。
他のLSP設定の仕方をまねてやってみたけど、setupに渡したオプションは反映されない。
最終的にtimeoutの変え方を見て、rood_dirに変えてみたらうまく行った。
結論
Pluginに詳しくなかった自分としては、LunarVim美味しいとこどりしてあって気に入ってたんだけど、
細かい設定を変えようとすると使ってる人少ないし、けっこう苦労する。
Vimの入口としてはけっこういいから、LunarVimの使ってるpluginでいい感じのをneovimのinit.luaに輸入していく感じがいいかもしれない。