diff --git a/cpp-linter/src/clang_tools/clang_tidy.rs b/cpp-linter/src/clang_tools/clang_tidy.rs index 6b3fe76..d8610ae 100644 --- a/cpp-linter/src/clang_tools/clang_tidy.rs +++ b/cpp-linter/src/clang_tools/clang_tidy.rs @@ -17,7 +17,7 @@ use serde::Deserialize; // project-specific modules/crates use super::MakeSuggestions; use crate::{ - cli::{ClangParams, LinesChangedOnly}, + cli::ClangParams, common_fs::{FileObj, normalize_path}, }; @@ -263,19 +263,17 @@ pub fn run_clang_tidy( cmd.args(["--extra-arg", format!("\"{}\"", arg).as_str()]); } let file_name = file.name.to_string_lossy().to_string(); - if clang_params.lines_changed_only != LinesChangedOnly::Off { - let ranges = file.get_ranges(&clang_params.lines_changed_only); - if !ranges.is_empty() { - let filter = format!( - "[{{\"name\":{:?},\"lines\":{:?}}}]", - &file_name.replace('/', if OS == "windows" { "\\" } else { "/" }), - ranges - .iter() - .map(|r| [r.start(), r.end()]) - .collect::>() - ); - cmd.args(["--line-filter", filter.as_str()]); - } + let ranges = file.get_ranges(&clang_params.lines_changed_only); + if !ranges.is_empty() { + let filter = format!( + "[{{\"name\":{:?},\"lines\":{:?}}}]", + &file_name.replace('/', if OS == "windows" { "\\" } else { "/" }), + ranges + .iter() + .map(|r| [r.start(), r.end()]) + .collect::>() + ); + cmd.args(["--line-filter", filter.as_str()]); } let original_content = if !clang_params.tidy_review { None @@ -429,7 +427,7 @@ mod test { ) .unwrap(); let file = FileObj::new(PathBuf::from("tests/demo/demo.cpp")); - let arc_ref = Arc::new(Mutex::new(file)); + let arc_file = Arc::new(Mutex::new(file)); let extra_args = vec!["-std=c++17".to_string(), "-Wall".to_string()]; let clang_params = ClangParams { style: "".to_string(), @@ -445,7 +443,7 @@ mod test { clang_tidy_command: Some(exe_path), clang_format_command: None, }; - let mut file_lock = arc_ref.lock().unwrap(); + let mut file_lock = arc_file.lock().unwrap(); let logs = run_clang_tidy(&mut file_lock, &clang_params) .unwrap() .into_iter() diff --git a/cpp-linter/src/clang_tools/mod.rs b/cpp-linter/src/clang_tools/mod.rs index 096e8ad..5ade992 100644 --- a/cpp-linter/src/clang_tools/mod.rs +++ b/cpp-linter/src/clang_tools/mod.rs @@ -185,7 +185,7 @@ fn analyze_single_file( } /// A struct to contain the version numbers of the clang-tools used -#[derive(Default)] +#[derive(Debug, Default)] pub struct ClangVersions { /// The clang-format version used. pub format_version: Option, @@ -199,9 +199,9 @@ pub struct ClangVersions { /// If `tidy_checks` is `"-*"` then clang-tidy is not executed. /// If `style` is a blank string (`""`), then clang-format is not executed. pub async fn capture_clang_tools_output( - files: &mut Vec>>, + files: &[Arc>], version: &RequestedVersion, - clang_params: &mut ClangParams, + mut clang_params: ClangParams, rest_api_client: &impl RestApiClient, ) -> Result { let mut clang_versions = ClangVersions::default(); @@ -240,10 +240,11 @@ pub async fn capture_clang_tools_output( }; let mut executors = JoinSet::new(); + let arc_params = Arc::new(clang_params); // iterate over the discovered files and run the clang tools for file in files { - let arc_params = Arc::new(clang_params.clone()); - let arc_file = Arc::clone(file); + let arc_file = file.clone(); + let arc_params = arc_params.clone(); executors.spawn(async move { analyze_single_file(arc_file, arc_params) }); } diff --git a/cpp-linter/src/run.rs b/cpp-linter/src/run.rs index 8db906e..39c0b47 100644 --- a/cpp-linter/src/run.rs +++ b/cpp-linter/src/run.rs @@ -138,9 +138,9 @@ pub async fn run_main(args: Vec) -> Result<()> { clang_params.tidy_review &= is_pr; let user_inputs = FeedbackInput::from(&cli); let clang_versions = capture_clang_tools_output( - &mut arc_files, + &arc_files, &cli.general_options.version, - &mut clang_params, + clang_params, &rest_api_client, ) .await?;