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
parallelfeature) - 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
- Lint
Config - Configuration for the lint runner
- Lint
Context - Context passed to lint rules for better error reporting
- Lint
Runner - Lint runner
- Rule
Config - Configuration for a single rule
Enums§
- Diagnostic
Kind - Kind of diagnostic
- Severity
- Severity level for diagnostics
Traits§
- Lint
Rule - Trait for lint rules
Functions§
- lint
- Run all default lint rules on a document
- lint_
with_ config - Run lint with custom configuration