Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/oppiliappan/statix
lints and suggestions for the nix programming language
https://github.com/oppiliappan/statix
linter nix
Last synced: 7 days ago
JSON representation
lints and suggestions for the nix programming language
- Host: GitHub
- URL: https://github.com/oppiliappan/statix
- Owner: oppiliappan
- License: mit
- Created: 2021-10-24T12:42:29.000Z (about 3 years ago)
- Default Branch: master
- Last Pushed: 2024-11-29T11:43:13.000Z (about 1 month ago)
- Last Synced: 2024-12-20T11:05:46.918Z (14 days ago)
- Topics: linter, nix
- Language: Rust
- Homepage: https://git.peppe.rs/languages/statix/about
- Size: 212 KB
- Stars: 582
- Watchers: 8
- Forks: 21
- Open Issues: 28
-
Metadata Files:
- Readme: readme.md
- License: LICENSE
Awesome Lists containing this project
- awesome-starred - oppiliappan/statix - lints and suggestions for the nix programming language (Rust)
- awesome-starred - oppiliappan/statix - lints and suggestions for the nix programming language (Rust)
README
# statix
> Lints and suggestions for the Nix programming language.
`statix check` highlights antipatterns in Nix code. `statix
fix` can fix several such occurrences.For the time-being, `statix` works only with ASTs
produced by the `rnix-parser` crate and does not evaluate
any nix code (imports, attr sets etc.).## Examples
```shell
$ statix check tests/c.nix
[W04] Warning: Assignment instead of inherit from
╭─[tests/c.nix:2:3]
│
2 │ mtl = pkgs.haskellPackages.mtl;
· ───────────────┬───────────────
· ╰───────────────── This assignment is better written with inherit
───╯$ statix fix --dry-run tests/c.nix
--- tests/c.nix
+++ tests/c.nix [fixed]
@@ -1,6 +1,6 @@
let
- mtl = pkgs.haskellPackages.mtl;
+ inherit (pkgs.haskellPackages) mtl;
in
null
```## Installation
`statix` is available via a nix flake:
```shell
# build from source
nix build git+https://git.peppe.rs/languages/statix
./result/bin/statix --help# statix also provides a flake app
nix run git+https://git.peppe.rs/languages/statix -- --help# save time on builds using cachix
cachix use statix
```Install from nixpkgs:
```shell
nix run nixpkgs#statix -- help
```Install with [brew/linuxbrew](https://brew.sh)
```bash
brew install statix
```## Usage
Basic usage is as simple as:
```shell
# recursively finds nix files and raises lints
statix check /path/to/dir# ignore generated files, such as Cargo.nix
statix check /path/to/dir -i Cargo.nix# ignore more than one file
statix check /path/to/dir -i a.nix b.nix c.nix# ignore an entire directory
statix check /path/to/dir -i .direnv# statix respects your .gitignore if it exists
# run statix in "unrestricted" mode, to disable that
statix check /path/to/dir -u# see `statix -h` for a full list of options
```Certain lints have suggestions. Apply suggestions back to
the source with:```shell
statix fix /path/to/file# show diff, do not write to file
statix fix --dry-run /path/to/file
````statix` supports a variety of output formats; standard,
json and errfmt:```shell
statix check /path/to/dir -o json # only when compiled with --all-features
statix check /path/to/dir -o errfmt # singleline, easy to integrate with vim
```### Configuration
Ignore lints and fixes by creating a `statix.toml` file at
your project root:```
# within statix.toml
disabled = [
"empty_pattern"
]
````statix` automatically discovers the configuration file by
traversing parents of the current directory and looking for
a `statix.toml` file. Alternatively, you can pass the path
to the `statix.toml` file on the command line with the
`--config` flag (available on `statix check` and `statix
fix`).The available lints are (see `statix list` for an updated
list):```
bool_comparison
empty_let_in
manual_inherit
manual_inherit_from
legacy_let_syntax
collapsible_let_in
eta_reduction
useless_parens
empty_pattern
redundant_pattern_bind
unquoted_uri
empty_inherit
faster_groupby
faster_zipattrswith
deprecated_to_path
bool_simplification
useless_has_attr
```All lints are enabled by default. Generate a minimal config
with `statix dump > statix.toml`.## TODO
- Resolve imports and scopes for better lints
- Add silent flag that exits with status