[[none-ls.nvim]]の挙動を制御するため、重要と思われる設定内容を理解・整理する。 <div class="link-card"> <div class="link-card-header"> <img src="https://github.githubassets.com/favicons/favicon.svg" class="link-card-site-icon"/> <span class="link-card-site-name">GitHub</span> </div> <div class="link-card-body"> <div class="link-card-content"> <p class="link-card-title">none-ls.nvim/doc/HELPERS.md at main · nvimtools/none-ls.nvim</p> <p class="link-card-description">null-ls.nvim reloaded / Use Neovim as a language server to inject LSP diagnostics, code actions, and more via Lua. - nvimtools/n ... </p> </div> <img src="https://opengraph.githubassets.com/c265d3f9bf3049014befae900dc5adbcf04012d177882899faf06bbc6b2e6380/nvimtools/none-ls.nvim" class="link-card-image" /> </div> <a href="https://github.com/nvimtools/none-ls.nvim/blob/main/doc/HELPERS.md"></a> </div> ## args コマンドに引き渡すテーブル。以下の変数を利用できる。 | 変数 | 意味 | | ----------- | -------------------------------------- | | `$FILENAME` | 現在バッファのフルパス | | `$DIRNAME` | 現在バッファの親ディレクトリのフルパス | | `$FILEEXT` | 現在バッファのファイル拡張子 | | `$ROOT` | LSPワークスペースのルートパス | ## cwd コマンドを実行する作業ディレクトリ。`nil`を返すとプロジェクトルートになる。 特定ファイルが存在するかどうかをもって判断することが多い。 ```lua -- Biomeの例 cwd = h.cache.by_bufnr(function(params) return u.root_pattern("rome.json", "biome.json")(params.bufname) end), ``` ## dynamic_command コマンドを動的に決定するコールバック関数を設定する。**`nil`を返すと実行しないことを意味する。** 多くのbuiltin設定で使われている。 ```lua local cmd_resolver = require("null-ls.helpers.command_resolver") return h.make_builtin({ generator_opts = { dynamic_command = cmd_resolver.from_node_modules(), } ``` `cmd_resolver.from_node_modules()`は **以下の順にコマンドを解決する関数** を返却する。 1. `node_modules/.bin`配下の実行ファイル 2. `command`で指定した実行ファイル `dynamic_command`が引数`params`をとる関数を指定するため、`cmd_resolver.from_node_modules()`は関数となることに注意。 ```lua --- creates a resolver that searches for a local node_modules executable and falls back to a global executable M.from_node_modules = function() local node_modules_resolver = M.generic(u.path.join("node_modules", ".bin")) return function(params) return node_modules_resolver(params) or params.command end end ``` > [!caution] > `cmd_resolver.from_node_modules()` が生成する関数は決して`nil`を返さないことに注意。つまり、globalにインストールされているか否かに関わらず、必ず`command`で指定したコマンドが実行されてしまう。 ## to_temp_file 現在バッファのコンテンツを一時ファイルに保存するフラグ。標準入力を利用できないツールを使うときに便利。