4.4 KiB
LSP Features
When nil is invoked without arguments, it runs in the LSP mode.
Stdin and stdout are used for jsonrpc.
This incomplete list tracks noteble features currently implemented or planned.
-
Goto definition.
textDocument/definition- References to parameters,
letandrec {}bindings. - Relative paths.
- Source of flake inputs, when cursor is on keys of
inputsor parameters ofoutputslambda.
- References to parameters,
-
Find references.
textDocument/reference- Parameters,
letandrec {}bindings. - With expression.
- Parameters,
-
Highlight related.
textDocument/documentHighlight.- Highlight definitions and references when cursor's on identifiers.
- Highlight all (attribute) references when cursor's on
with. - Highlight all effective
withs when cursor's on attributes fromwith.
-
Links.
textDocument/documentLink- Links for relative and absolute paths.
- Links for search paths like
<nixpkgs>. - Links for URLs like
"https://...","http://..."and etc. - Links for flake references like
"github:NixOS/nixpkgs".
-
Code actions.
textDocument/codeActionSeedocs/code_actions.mdfor the list of supported code actions. -
Completion.
textDocument/completion- Builtin names.
- With documentations.
- Local bindings and rec-attrset fields.
- Keywords.
- Attrset fields.
- If it can be inferenced in the local file.
- Flake schema, including common inputs fields like
urland output fields likeoutPath. - Real flake outputs from evaluation.
- Pat-parameter definition.
- Flake inputs in the parameter of
outputs.
- Flake inputs in the parameter of
- Builtin names.
-
Diagnostics.
textDocument/publishDiagnostics- Syntax errors.
- Hard semantic errors reported as parse errors by Nix, like duplicated keys in attrsets.
- Undefiend names.
- Warnings of legacy syntax.
- Warnings of unnecessary syntax.
- Warnings of unused bindings,
withandrec. - Client pulled diagnostics.
- Custom filter on kinds.
- Exclude files.
You can disable some diagnostic kinds or for some (generated) files via LSP configuration. See docs/configuration.md for more information.
-
Expand selection.
textDocument/selectionRange -
Renaming.
textDocument/renamme,textDocument/prepareRename- Identifiers in parameters and bindings, from
let, rec and non-rec attrsets. - Static string literal bindings.
- Merged path-value binding names.
- Names introduced by
inherit. - Names used by
inherit. - Conflict detection.
- Rename to string literals.
- Identifiers in parameters and bindings, from
-
Semantic highlighting.
textDocument/semanticTokens/{range,full}- Delta response.
textDocument/semanticTokens/full/delta
Note:
coc.nvimdoesn't enable semantic highlighting by default. You need to manually enable it in settings.// coc-settings.json { "semanticTokens": { "filetypes": ["nix"] } } - Delta response.
-
Hover text.
textDocument/hover.- Show kind of names.
- Documentation for builtin names.
-
File symbols with hierarchy (aka. outline).
textDocument/documentSymbol -
File formatting.
- Whole file formatting.
- Range formatting.
- On-type formatting.
- External formatter.
External formatter must be manually configured to work. See docs/configuration.md for more information.
When formatter is configured, you can also enable format-on-save in your editor. Like, for
coc.nvim,// coc-settings.json { "coc.preferences.formatOnSaveFiletypes": ["nix"] } -
Cross-file analysis.
-
Multi-threaded.
- Request cancellation.
$/cancelRequest
- Request cancellation.
CLI Features
nil could also be invoked in command line.
You can run nil --help for usages of all available commands.
nil diagnostics <PATH>Check and print diagnostics for a file. Exit with non-zero code if there are any diagnostics. ⚠️ WARNING: The output format is for human and should not be relied on.