qlty_coverage/transform/
planner.rs

1use 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}