nu-lint 0.0.4

A linter for Nushell scripts
Documentation
nu-lint-0.0.4 has been yanked.

nu-lint

A static analysis tool for Nushell scripts.

Can detect stylistic issues in Nushell code and suggest improvements. Complementary to the basic checks by nu-check.

Installation

From crates.io:

cargo install nu-lint

Or build from source:

cargo install --path .

Usage

nu-lint script.nu                          # Lint a file
nu-lint directory/                         # Lint all .nu files in a directory
nu-lint --config custom.toml script.nu     # Use custom config
nu-lint list-rules                         # Show all rules
nu-lint explain snake_case_variables       # Explain a rule

Configuration

Create .nu-lint.toml in your project root (or any parent directory):

[general]
max_severity = "warning"

[rules]
snake_case_variables = "warning"
prefer_error_make = "info"
kebab_case_commands = "warning"

[style]
line_length = 100
indent_spaces = 4

[exclude]
patterns = ["*.test.nu", "vendor/**"]

The linter will automatically find and use this config file when you run it.

Rules

30+ rules covering style, best practices, performance, documentation, and type safety. All rules use either Nushell's AST parser or regex patterns for analysis.

View all rules: nu-lint list-rules

Get details about a rule: nu-lint explain <RULE_ID>

Example Output

info[prefer_parse_over_each_split]

  ℹ Manual splitting with 'each' and 'split row' - consider using 'parse'
   ╭─[example.nu:5:1]
 5 │ $data | each { |line| $line | split row " " | get 0 }
   ·         ───────────────────┬──────────────────────────
   ·                            ╰── AST-based detection of structured text processing pattern
   ╰────
  help: Use 'parse "{field1} {field2}"' for structured text extraction instead of 'each' with 'split row'

This example demonstrates AST traversal detecting command patterns that the regex-based rules cannot catch.

Contributing

Contributions are welcome. Please run tests and formatting before submitting:

cargo test
cargo +nightly fmt
cargo clippy

License

MIT