qlty_coverage/transform/
planner.rs1use crate::transform::{Plan, Settings};
2use crate::transformer::AddPrefix;
3use crate::transformer::StripDotSlashPrefix;
4use crate::transformer::StripPrefix;
5use crate::utils::extract_path_and_format;
6use crate::Transformer;
7use anyhow::Result;
8use qlty_analysis::utils::fs::path_to_string;
9use qlty_types::tests::v1::ReportFile;
10
11#[derive(Debug, Clone)]
12pub struct Planner {
13 settings: Settings,
14}
15
16impl Planner {
17 pub fn new(settings: &Settings) -> Self {
18 Self {
19 settings: settings.clone(),
20 }
21 }
22
23 pub fn compute(&self) -> Result<Plan> {
24 Ok(Plan {
25 report_file: self.compute_report_file()?,
26 transformers: self.compute_transformers()?,
27 })
28 }
29
30 fn compute_report_file(&self) -> Result<ReportFile> {
31 let (path, format) =
32 extract_path_and_format(&self.settings.path, self.settings.report_format.clone())?;
33
34 Ok(ReportFile {
35 path: path_to_string(path),
36 format: format.to_string(),
37 ..Default::default()
38 })
39 }
40
41 fn compute_transformers(&self) -> Result<Vec<Box<dyn Transformer>>> {
42 let mut transformers: Vec<Box<dyn Transformer>> = vec![];
43
44 if let Some(prefix) = self.settings.strip_prefix.clone() {
45 transformers.push(Box::new(StripPrefix::new(prefix)));
46 } else {
47 transformers.push(Box::new(StripPrefix::default()));
48 }
49
50 transformers.push(Box::new(StripDotSlashPrefix));
51
52 if let Some(prefix) = self.settings.add_prefix.clone() {
53 transformers.push(Box::new(AddPrefix::new(&prefix)));
54 }
55
56 Ok(transformers)
57 }
58}