Skip to main content

normalize_rules/
cmd_rules.rs

1//! Syntax rule execution helpers.
2//!
3//! Contains `run_syntax_rules`, which loads and runs tree-sitter-based syntax rules
4//! and returns raw `Finding` values for further processing by callers.
5
6use normalize_languages::parsers::grammar_loader;
7use normalize_syntax_rules::{DebugFlags, Finding, RulesConfig, load_all_rules, run_rules};
8use std::collections::HashSet;
9use std::path::Path;
10
11/// Run syntax rules and return raw findings (no printing).
12#[allow(clippy::too_many_arguments)]
13pub fn run_syntax_rules(
14    root: &Path,
15    project_root: &Path,
16    filter_rule: Option<&str>,
17    filter_tag: Option<&str>,
18    filter_ids: Option<&HashSet<String>>,
19    config: &RulesConfig,
20    debug: &DebugFlags,
21    files: Option<&[std::path::PathBuf]>,
22    path_filter: &normalize_rules_config::PathFilter,
23    walk_config: &normalize_rules_config::WalkConfig,
24) -> Vec<Finding> {
25    let rules = load_all_rules(project_root, config);
26    if rules.is_empty() {
27        return Vec::new();
28    }
29    let loader = grammar_loader();
30    run_rules(
31        &rules,
32        root,
33        project_root,
34        &loader,
35        filter_rule,
36        filter_tag,
37        filter_ids,
38        debug,
39        files,
40        path_filter,
41        walk_config,
42    )
43}