1
1
mirror of https://github.com/oxalica/nil.git synced 2024-11-23 12:03:30 +03:00
Yet another language server for Nix
Go to file
2022-08-04 19:58:17 +08:00
lsp Impl textDocument/reference 2022-08-02 11:53:44 +08:00
src Impl references lookup of "with" and move tests 2022-08-03 15:57:50 +08:00
syntax Enforce merging of "use" stmts 2022-08-02 03:27:55 +08:00
.gitignore Package as flake 2022-08-04 16:09:20 +08:00
Cargo.lock Log properly 2022-08-01 05:08:23 +08:00
Cargo.toml Licenses 2022-08-01 09:12:08 +08:00
flake.lock Package as flake 2022-08-04 16:09:20 +08:00
flake.nix Fix flake and avoid name clash 2022-08-04 19:58:17 +08:00
LICENSE-APACHE Licenses 2022-08-01 09:12:08 +08:00
LICENSE-MIT Licenses 2022-08-01 09:12:08 +08:00
neovim-env.nix Fix flake and avoid name clash 2022-08-04 19:58:17 +08:00
README.md Fix flake and avoid name clash 2022-08-04 19:58:17 +08:00
rustfmt.toml Enforce merging of "use" stmts 2022-08-02 03:27:55 +08:00

nil: Language server for Nix Expression Language

🚧 This project is under development, but be happy to try it out!

Super fast incremental analysis! Scans all-packages.nix in less then 0.1s and completes with no delay!

Features

  • Goto definition. textDocument/definition
  • Find references. textDocument/reference
    • Local binding references.
    • With expression references.
  • Completion. textDocument/completion
    • Builtin names.
    • Local bindings.
    • Attrset fields.
  • Cross-file analysis.
  • Multi-threaded.

Installation

TODO: Beginner friendly instructions.

This repo is packaged via Nix flakes, the language server binary package is available through the default flake output github:oxalica/nil# with the path bin/nil.

Flake output structure:

├───devShells
│   └───(...)
└───packages
    ├───x86_64-linux
    │   ├───default: package 'nil-unstable-2022-08-04'
    │   └───nil: package 'nil-unstable-2022-08-04'
    └───(...)

For neovim nvim-lspconfig user

Add the following vimscript to your configuration.

lua <<EOF
  require('lspconfig').rnix.setup {
    autostart = true,
    -- Change it to the path to the `nil` binary you installed.
    cmd = { "/run/current-system/sw/bin/nil" },
  }
EOF

License

"nil" is primarily distributed under the terms of both the MIT license and the Apache License (Version 2.0).

See LICENSE-APACHE and LICENSE-MIT for details.