Skip to main content

RuleLinter

Trait RuleLinter 

Source
pub trait RuleLinter {
    // Required methods
    fn feed(&mut self, node: &Node<'_>);
    fn finalize(&mut self) -> Vec<RuleViolation>;
}
Expand description

SINGLE-USE CONTRACT: RuleLinter instances are designed for one-time use only.

Each RuleLinter instance should be used to analyze exactly one source document and then discarded. This eliminates the complexity of state management and cleanup:

  • No reset/cleanup methods needed
  • No state contamination between different documents
  • Simpler, more predictable behavior

After calling analyze() on a MultiRuleLinter, the entire linter and all its rule instances become invalid and should not be reused.

§Usage Pattern


// Correct: Create fresh linter for each document
let mut linter1 = MultiRuleLinter::new_for_document(path.clone(), config.clone(), source1);
let violations1 = linter1.analyze(); // Use once, then discard

// Create new linter for next document
let mut linter2 = MultiRuleLinter::new_for_document(path, config, source2);
let violations2 = linter2.analyze(); // Fresh linter, no contamination

Required Methods§

Source

fn feed(&mut self, node: &Node<'_>)

Process a single AST node and accumulate state for violation detection.

CONTRACT: This method will be called exactly once per AST node for a single document analysis session. Rule linters have access to the document content and parsed data through their initialized Context.

Source

fn finalize(&mut self) -> Vec<RuleViolation>

Called after all nodes have been processed to return all violations found.

CONTRACT: This method will be called exactly once at the end of document analysis.

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§