[[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
現在バッファのコンテンツを一時ファイルに保存するフラグ。標準入力を利用できないツールを使うときに便利。