use super::analyzerlib::{filter_by_annotation, make_parameters};
use super::ast::{Id, IntMap, Token, do_analysis};
use super::interface::{Position, Shell, TokenComment};
pub struct AnalysisSpec<'a> {
pub script: &'a Token,
pub shell_type: Option<Shell>,
pub fallback_shell: Option<Shell>,
pub check_sourced: bool,
pub optional_checks: Vec<String>,
pub extended_analysis: Option<bool>,
pub token_positions: &'a IntMap<Id, (Position, Position)>,
}
pub fn analyze_script(spec: &AnalysisSpec<'_>) -> Vec<TokenComment> {
let params = make_parameters(spec);
let root = params.root_node;
let mut comments = super::analytics3::run(¶ms, root, &spec.optional_checks);
let commands = super::commands::Commands::new(&spec.optional_checks);
do_analysis(root, &mut |t| {
commands.check(¶ms, t, &mut comments);
super::shellsupport::check(¶ms, t, &mut comments);
});
let mut unique: Vec<TokenComment> = Vec::new();
for c in comments {
if !unique.contains(&c) {
unique.push(c);
}
}
filter_by_annotation(spec, ¶ms, unique)
}