use super::{rules::BuiltinRules, LintConfig, LintIssue};
use crate::{
analysis::{AnalysisConfig, ScriptAnalysis},
parser::Script,
Result,
};
use alloc::vec::Vec;
pub fn lint_script_with_analysis(
analysis: &ScriptAnalysis,
config: &LintConfig,
) -> Result<Vec<LintIssue>> {
let mut issues = Vec::new();
let rules = BuiltinRules::all_rules();
for rule in rules {
if !config.is_rule_enabled(rule.id()) {
continue;
}
let mut rule_issues = rule.check_script(analysis);
rule_issues.retain(|issue| config.should_report_severity(issue.severity()));
issues.extend(rule_issues);
if config.max_issues > 0 && issues.len() >= config.max_issues {
issues.truncate(config.max_issues);
break;
}
}
Ok(issues)
}
pub fn lint_script(script: &Script, config: &LintConfig) -> Result<Vec<LintIssue>> {
let mut analysis = ScriptAnalysis {
script,
lint_issues: Vec::new(),
resolved_styles: Vec::new(),
dialogue_info: Vec::new(),
config: AnalysisConfig::default(),
#[cfg(feature = "plugins")]
registry: None,
};
analysis.resolve_all_styles();
analysis.analyze_events();
lint_script_with_analysis(&analysis, config)
}