1mod evidence;
4mod pairs;
5mod similarity;
6mod suppression;
7mod usage;
8
9use crate::config::Config;
10use crate::model::{AnalysisResult, FeatureStep, StepDefinition};
11use anyhow::Result;
12
13pub(crate) fn unmatched_suppressions(
14 config: &Config,
15 definitions: &[StepDefinition],
16) -> Vec<usize> {
17 suppression::unmatched_suppressions(config, definitions)
18}
19
20pub fn analyze(
22 definitions: Vec<StepDefinition>,
23 feature_steps: Vec<FeatureStep>,
24 config: &Config,
25) -> Result<AnalysisResult> {
26 let mut findings = Vec::new();
27 pairs::analyze_definition_pairs(&definitions, config, &mut findings)?;
28 let used = usage::analyze_feature_usage(&definitions, &feature_steps, config, &mut findings);
29 usage::analyze_unused(&definitions, &used, config, &mut findings);
30 findings.sort_by(|left, right| {
31 left.primary
32 .path
33 .cmp(&right.primary.path)
34 .then(left.primary.line.cmp(&right.primary.line))
35 .then(left.primary.column.cmp(&right.primary.column))
36 .then(left.rule.cmp(&right.rule))
37 });
38 Ok(AnalysisResult {
39 definitions,
40 feature_steps,
41 findings,
42 })
43}
44
45#[cfg(test)]
46mod tests;