Skip to main content

Crate hedl_lint

Crate hedl_lint 

Source
Expand description

HEDL Linting

Provides extensible linting and best practices validation for HEDL documents.

§Quick Start

use hedl_core::Document;
use hedl_lint::{lint, Severity};

let doc = Document::new((2, 0));
let diagnostics = lint(&doc);

for diag in &diagnostics {
    if diag.severity() == Severity::Error {
        eprintln!("{}", diag);
    }
}

§Custom Configuration

use hedl_lint::{lint_with_config, LintConfig, Severity};
use hedl_core::Document;

let doc = Document::new((2, 0));

let mut config = LintConfig::default();
config.disable_rule("id-naming");
config.set_rule_error("unused-schema");
config.min_severity = Severity::Warning;

let diagnostics = lint_with_config(&doc, config);

§Custom Rules

use hedl_lint::{LintRule, Diagnostic, DiagnosticKind, LintRunner, LintConfig};
use hedl_core::Document;

struct MyCustomRule;

impl LintRule for MyCustomRule {
    fn id(&self) -> &str { "my-custom-rule" }
    fn description(&self) -> &str { "Custom validation logic" }
    fn check(&self, doc: &Document) -> Vec<Diagnostic> {
        vec![]
    }
}

let mut runner = LintRunner::new(LintConfig::default());
runner.add_rule(Box::new(MyCustomRule));

let doc = Document::new((2, 0));
let diagnostics = runner.run(&doc);

§Using LintContext

use hedl_lint::{LintContext, LintRunner, LintConfig};
use hedl_core::Document;
use std::path::PathBuf;

let doc = Document::new((2, 0));
let runner = LintRunner::new(LintConfig::default());

// Create context with file path and source text
let context = LintContext::with_file(
    PathBuf::from("data.hedl"),
    "source content here"
).with_line(42);

let diagnostics = runner.run_with_context(&doc, context);

§Performance

The linter is optimized for large documents through:

  • Parallel rule execution (enabled by default with parallel feature)
  • Early termination when diagnostic limits are reached
  • Memory pre-allocation to reduce allocations
  • Single-pass traversal option for specific use cases

For large documents (> 10K nodes), parallel execution provides 3-4x speedup on multi-core systems.

Re-exports§

pub use fix::Fix;
pub use fix::FixApplicator;
pub use fix::FixConfig;
pub use fix::FixContext;
pub use fix::FixError;
pub use fix::FixId;
pub use fix::FixProvider;
pub use fix::FixResult;
pub use fix::FixStatistics;
pub use fix::SourcePosition;
pub use fix::SourceRange;

Modules§

fix
Auto-fix functionality. Auto-fix functionality for lint violations

Structs§

Diagnostic
A lint diagnostic
LintConfig
Configuration for the lint runner
LintContext
Context passed to lint rules for better error reporting
LintRunner
Lint runner
RuleConfig
Configuration for a single rule

Enums§

DiagnosticKind
Kind of diagnostic
Severity
Severity level for diagnostics

Traits§

LintRule
Trait for lint rules

Functions§

lint
Run all default lint rules on a document
lint_with_config
Run lint with custom configuration