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 (to use lazy instead of eager list processing):
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:
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
];
}
Editor extension
VS Code extension
Available at VS Code Marketplace.
Helix
Add to your ~/.config/helix/languages.toml:
[]
= "nu-lint"
= ["lsp"]
[[]]
= "nu"
= ["nu-lint"]
CLI usage
Basic:
|
Apply fixes (also works with STDIN):
Output formats:
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