in rust-code-analysis-cli/src/main.rs [70:156]
fn act_on_file(path: PathBuf, cfg: &Config) -> std::io::Result<()> {
let source = if let Some(source) = read_file_with_eol(&path)? {
source
} else {
return Ok(());
};
let language = if let Some(language) = cfg.language {
language
} else if let Some(language) = guess_language(&source, &path).0 {
language
} else {
return Ok(());
};
let pr = cfg.preproc.clone();
if cfg.dump {
let cfg = DumpCfg {
line_start: cfg.line_start,
line_end: cfg.line_end,
};
action::<Dump>(&language, source, &path, pr, cfg)
} else if cfg.metrics {
if let Some(output_format) = &cfg.output_format {
if let Some(space) = get_function_spaces(&language, source, &path, pr) {
output_format.dump_formats(space, path, cfg.output.as_ref(), cfg.pretty);
}
Ok(())
} else {
let cfg = MetricsCfg { path };
let path = cfg.path.clone();
action::<Metrics>(&language, source, &path, pr, cfg)
}
} else if cfg.ops {
if let Some(output_format) = &cfg.output_format {
let ops = get_ops(&language, source, &path, pr).unwrap();
output_format.dump_formats(ops, path, cfg.output.as_ref(), cfg.pretty);
Ok(())
} else {
let cfg = OpsCfg { path };
let path = cfg.path.clone();
action::<OpsCode>(&language, source, &path, pr, cfg)
}
} else if cfg.comments {
let cfg = CommentRmCfg {
in_place: cfg.in_place,
path,
};
let path = cfg.path.clone();
if language == LANG::Cpp {
action::<CommentRm>(&LANG::Ccomment, source, &path, pr, cfg)
} else {
action::<CommentRm>(&language, source, &path, pr, cfg)
}
} else if cfg.function {
let cfg = FunctionCfg { path: path.clone() };
action::<Function>(&language, source, &path, pr, cfg)
} else if !cfg.find_filter.is_empty() {
let cfg = FindCfg {
path: path.clone(),
filters: cfg.find_filter.clone(),
line_start: cfg.line_start,
line_end: cfg.line_end,
};
action::<Find>(&language, source, &path, pr, cfg)
} else if cfg.count_lock.is_some() {
let cfg = CountCfg {
filters: cfg.count_filter.clone(),
stats: cfg.count_lock.as_ref().unwrap().clone(),
};
action::<Count>(&language, source, &path, pr, cfg)
} else if cfg.preproc_lock.is_some() {
if let Some(language) = guess_language(&source, &path).0 {
if language == LANG::Cpp {
let mut results = cfg.preproc_lock.as_ref().unwrap().lock().unwrap();
preprocess(
&PreprocParser::new(source, &path, None),
&path,
&mut results,
);
}
}
Ok(())
} else {
Ok(())
}
}