Nu-Lint
Linter for the innovative Nu shell.
Learning to use a new shell is a radical change that can use some assistance. This project is aimed at helping new users of the Nu shell. Nu shell has a lot of interesting and useful features and this program will give you hints to use all the features of Nu.
For example, the rule prefer_pipeline_input in this program recommends to use pipelines instead of positional arguments:
def filter-positive [numbers] {
$numbers | where $it > 0
}
def filter-positive [] {
where $it > 0
}
All rules are optional and can be disabled with a configuration file. The rule definitions are designed to be compatible with:
- The standard Nu parser nu-check.
- The standard Nu formatter topiary-nushell.
Installation
Cross-platform
From crates.io:
Source
Build from source:
VS Code extension
Available at VS Code Marketplace.
Nix
To install in Nix or NixOS, add to configuration.nix:
let
nu-lint = pkgs.callPackage (pkgs.fetchFromGitHub {
owner = "wvhulle";
repo = "nu-lint";
rev = "COMMIT_HASH";
sha256 = ""; # nix will tell you the correct hash
}) {};
in
{
environment.systemPackages = [
nu-lint
];
}
Usage
Basic:
|
Apply fixes (also works with STDIN):
Output formats:
The lsp format outputs diagnostics compatible with the Language Server Protocol (LSP 3.17), which is supported by most modern editors including VS Code, Neovim, Helix, Emacs, and Sublime Text.
Configuration
Show all rules:
Show all rule sets:
Create .nu-lint.toml in your project root (or any parent directory):
# Simple format - just list rules and sets with their levels
= "warn"
= "deny"
= "deny" # Apply deny level to all rules in the "naming" set
# Or use the structured format for more complex configs
[]
= "warn"
= "deny"
[]
= "deny"
= "allow"
Available lint levels: allow, warn, deny.
The linter will automatically find and use this config file when you run it. Otherwise:
Rules
You can add, remove or change rules by forking this repo and opening a PR (see ./CONTRIBUTING.md).
License
MIT