🤯
nvim-lspで勝手に立ち上がっているサーバーがあるときはroot_patternが暴発しているかもしれない
Neovim builtin lspを使っていて、nodeプロジェクトでないディレクトリ内で、なぜかtsserverが立ち上がってしまっているという問題が発生しました。
これがroot_pattern
の仕様によるものだったので、こちらに記録を残しておきます。
Neovim lspの設定には、nvim-lspconfigを使用します。
root_pattern
の実装はlua/lspconfig/util.luaにあります。
内部で実装されているsearch_ancestors
を使って親ディレクトリへ辿っていき、引数として渡されたファイル・ディレクトリが見つかれば、その階層をルートとして返します(実際はこの動作をする関数を返します)。
筆者はtsserverの設定でroot_pattern("package.json", "node_modules")
としていたのですが、いつの間にかホームディレクトリにnode_modules
が作られてしまっていました(過去にyarn
の設定をガチャガチャいじっていたためだと思われます)。
この結果、ホーム以下のディレクトリでNeovimを起動した場合、必ず先祖にnode_modules
が見つかることになり、tsserverが起動してしまっていました。
ということで、もし勝手に立ち上がっているサーバーがあるときは、自分のlspの設定および各サーバーのデフォルトの設定を確認し、root_pattern
が意図せず有効になっていないかチェックしてみてください。
同様の問題にぶつかる例はほぼないかもしれませんが、何かの参考になれば幸いです。
Discussion