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.
- NixOS options.
Evaluated from the flake input named
nixpkgs.
- 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.
- Undefined names.
- Warnings of legacy syntax.
- Warnings of unnecessary syntax.
- Warnings of unused bindings,
withandrec. - Warnings of unused parameters for packages, modules and flake output parameters.
- 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
⚠️ There is a known performance issue for semantic highlighting with neovim native LSP. See more details in #83Note:
coc.nvimdoesn't enable semantic highlighting by default. You need to manually enable it in settings. - 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.
-
Inlay Hints
textDocument/inlayHint- Display attribute name when the definition is long
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 code1if there are any errors. :warning: WARNING: The output format is for human and should not be relied on.