Tags: cab404/nil
Tags
Snapshot release 2023-08-09 Features: - Load LSP configuration from `initializationOptions` (oxalica#84), for clients without `workspace/configuration` support. - Use semantic token type `boolean` for `true` and `false`. (oxalica#52) This makes it possible to distinguish them from `null` which has the token type `constant`. - `nil diagnostics` exists with code 1 only if there is any error. (oxalica#90) Warnings are not counted for exit code now. - Impl memory limit configuration for flake evaluation, with config key `nil.nix.maxMemoryMB`. Only Linux platforms are supported yet. - Highly experimental SSR (Structural Search & Replace) impl as CLI `nil ssr`. Fixes: - Send `workspace/configuration` only if the client supports it (oxalica#85) - Only show references of `with` when the cursor is exactly on `with`. - Also show references of a variable when cursor's on one of them (oxalica#86). - Fix flake reloading condition on file changes (oxalica#92). - Fix popup message to mention `autoArchive` config (oxalica#96). - Fix build with nix 2.17 (oxalica#94). - Fix missed diagnostic update on the first open (oxalica#89). - Fix nondeterminism of diagnostics ordering. - Fix parsing of block comments. - Fix offset conversion for end of file (oxalica#100). - Fix many more typos. Internal: - Response time and size logging via `NIL_LOG=nil=debug`. Useful for debugging. Log messages >=DEBUG are now included in the release build, though disabled unless having filter envvar `NIL_LOG` set. - Delay link resolution in `textDocument/documentLink`. This reduces the time of `textDocument/documentLink` from ~100ms down to ~20ms for MB-sized files. Editors doing frequent query of links like coc.nvim can benefit a lot from it. - Filter out far away spans in `textDocument/documentHighlight` as optimization. They are not displayed anyway. - Enable LTO for release builds. - Bump MSRV to 1.70 - Drop support for file-backed stdin/stdout in language server mode. It makes no sense.
Snapshot release 2023-05-09 This is a patch release for previously missing configurables of the new auto-evaluation features. Fixes: - Add configurations to enable/disable and customize auto-evaluations. `nil.nix.flake.{autoArchive,autoEvalInputs,nixpkgsInputName}` See `./docs/configuration.md` for more details. - `autoEvalInputs` is disabled by default due to issues (oxalica#79) about flake locks. - Nixpkgs detection for NixOS options now checks existences of `lib` and `module-list.nix` to reduce mis-detections. (oxalica#80)
Snapshot release 2023-05-02 Happy International Workers' Day! Fight for workers' rights against overwork "culture" in China! Features: - Automatic flake archiving. - Flake inputs evaluation and type inference. (oxalica#76) Due to limitations of `nix flake show` backend, only known output fields are completed, including `packages` or `devShells`, but not custom `lib`. `legacyPackages` is only traversed since Nix 2.14, the first version to support filtering packages for only the current system. ```nix # flake.nix { inputs.rust-overlay.url = "github:oxalica/rust-overlay"; outputs = { rust-overlay, ... }: let rustPkg = rust-overlay.packages.x86_64-linux.|; # default, rust, rust_nightly, ... in ...; } ``` - Dynamic fields are now inferred to the rest type. This helps the common flake output usage: `rust-overlay.packages.${system}.| # default, rust, ...` - Auto-reloading flake when `flake.{nix,lock}` is changed on disk. This requires the LSP client to support `didChangeWatchedFiles` capability. VSCode and coc.nvim support it out-of-box, while Neovim's builtin LSP requires manual configurations (neovim/neovim#22405 (comment)). - Progress bars for various costly loading operations. Fixes: - Suppress unused warnings for flake auto-inputs. (oxalica#73) - Parsing errors for string escapes. (oxalica#75) - Completion for fresh-created unsaved `flake.nix`. Internal: - The LSP frontend is heavily refactored into async-style. The framework library is also switched from lsp-server to async-lsp. (oxalica#74) - MSRV is bumped to 1.68
Snapshot release 2023-04-03 Features: - Code actions about string rewriting. (oxalica#69) - `quote_attr` and `unquote_attr` to quote/unquote attributes in attrset or let-in. - `rewrite_string_to_indented` and `rewrite_indented_to_string` to rewrite between two string styles. - `rewrite_uri_to_string` to rewrite deprecated URI literals into strings. - Completion for NixOS options. This requires a working Flake setup, which has an input named `nixpkgs` for the source of NixOS options. It must be a relatively recent version of `github:NixOS/nixpkgs`. If you have multiple nixpkgs in your inputs, you can create an alias `inputs.nixpkgs.follows = "the-input-to-use"` to select one. If it's correctly recognized and evaluated, any NixOS-module-like Nix files will get completions and type information for NixOS options. For example: ```nix { ... }: { nix.settings.| # -> allowed-users, auto-optimise-store, ... } ``` - The LSP server now reports server name `nil` and its version (if any) to the client through `serverInfo` during initialization. Fixes: - Parsing errors when `'` appears in indented strings. - Panics when a flake input is named `self`. - Unescaped identifiers and/or attributes in completions. - Recognition of `flake.nix` when `rec { ... }` is used in top-level.
Snapshot release 2023-03-11 Features: - Warnings for unused parameters in limited known cases, including NixOS modules, packages, and flake inputs. - Code action `remove_empty_let_in`. (oxalica#63) `let in foo` => `foo` - Type inferences for attrset with unknown keys but known value types. (oxalica#68) Fixes: - Documentations. (oxalica#65) - Types of some flake outputs. (oxalica#66) - Crash when saving files. (oxalica#67) - Errors when handling flakes with cyclic inputs. (oxalica#71)
Snapshot release 2023-03-01 Features: - Better completions, documentations and types for `builtins`. Now `builtins.|` completes correctly with signatures and documentations. - Virtual path support. This is used by VSCode or coc.nvim when editing a new untitled file with filetype set to nix. - A coc.nvim extension `coc-nil` under `editors/coc-nil` for simpler startup. Currently it is still working in progress and does nothing more than passing coc.nvim configurations to the LSP. The extension is exported as flake output package `coc-nil`, or `vimPlugins.coc-nil` when using overlays. Fixes: - `follows` resolution of flake locks. - Panics when `flake_graph` is accessed but not set. - Documentation typos.
Snapshot release 2023-02-03 Happy `EastAsianLunisolarCalendar` new year! Breaking: - Bump minimal supported rust version to 1.66 Features: - Type schema for flake.nix. Common fields of flake definitions as well as defined inputs are subjects to completion now. - Goto-definition for flake inputs. The `name` in `inputs.name = ...` and `outputs = { name, ... }: ...` will take you to the `flake.nix` of the input inside Nix store. This requires an working `nix` binary and a valid `flake.lock`. - Completion for pat-parameters definitions. This also works in parameters of flake outputs. `{ inputs.nixpkgs.url = "..."; outputs = { n| }: { }; }` - Add CLI for diagnostics. Now you can also run `nil` as a linter. - Support `convert_to_inherit` for `let in` and `rec { }`. - Documentation of all code actions now lives in `docs/code_actions.md`. Fixes: - LSP mishandling in DidChangeTextDocument, which caused issues on kakoune. - Missed error and panic information in log. Now a backtrace is captured if possible when the worker panicked.
Snapshot release 2023-01-01 Happy GregorianCalendar new year! Features: - Add many code actions for refactoring or fix. Thanks to figsoda@github for implementations. - "Convert to `inherit`" now supports multiple LHS or RHS. `{ a.b = b; }` => `{ a = { inherit b; }; }` `{ a = b.a; }` => `{ inherit (b) a; }` - Add unresolved names to top-level lambda parameters. `{ foo }: foo + bar` => `{ foo, bar }: foo + bar` - Remove empty `inherit`s. `{ inherit; }` => `{ }` - Names from `with` now have a special semantic token modifier `withAttribute`. One can add styles like underlines to them to distinguish them from other static bindings. There are examples `dev/nix-ide-semantic-highlighting.patch` for VSCode and `dev/vim-coc.nix` for (Neo)Vim/`coc.nvim`. Fixes: - Names of semantic highlighting are tweaked. Now we use `constant` and `builtin` for builtin constants (`true`) and functions (`map`). The standard `defaultLibrary` group in themes usually represent names from the "standard library", like rust-analyzer did, which is not the same as "builtin" constants.
Snapshot release 2022-12-01 Features: - Code actions. - `foo = foo;` => `inherit foo;` - `foo.bar = 1; foo.bux = 2;` => `foo = { bar = 1; bux = 2; };` - `foo = { bar = 1; bux = 2; };` => `foo.bar = 1; foo.bux = 2;` Currently comments and whitespaces (including indentations) are preserved. - Highlight related texts. Highlight texts related to the one under the cursor. Don't be confused with semantic highlighting. - Highlight definitions and references when cursor's on identifiers. - Highlight all (attribute) references when cursor's on `with`. - Highlight all effective `with`s when cursor's on attributes from `with`. - Add configuration `nil.diagnostics.excludedFiles` to disable diagnostics for some file paths, like generated ones. - Configurations are now fully documented in `docs/configuration.md`. Fixes: - Don't emit debuginfo for the default release profile. This is somehow introduced accidentally. Nix builds are not affected due to `strip`. - Semantic highlighting is optimized and should work fluently with big files. - Semantic highlighting now ignores string literal inners, to integrate better with language injections (eg. `nvim-treesitter`). They would still be rendered as default string color if there is no injection. Internal changes: - More syntax desugaring code are moved into `syntax` crate and are made more portable. - More tests and optimizations for `syntax`.
Snapshot release 2022-11-15 Mostly for bug fixes, some of which are annoying. New features: - Document links. `textDocument/documentLink` Valid relative paths, URLs and flake references now report as links. For VSCode, it's shown as underlined text, and a hand-shaped cursor is shown when moving over them. Ctrl-Click would open the target file or URL. - Store Attr source information in types. It is not quite useful for now, and is only be used by the "completion kind" during completion. We'll find a way to support goto-definition for it in the future. Fixes: - Fixed type inference for `if` conditions. - Fixed errors from client exit monitor. - Fixed a deadlock that occurs when changing text rapidly.
PreviousNext