Skip to content

Commit 624092a

Browse files
committed
refactor: merge duplicate fix arms, extract helpers, single-pass counting
1 parent 049f773 commit 624092a

3 files changed

Lines changed: 38 additions & 51 deletions

File tree

src/diagnostic.rs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -95,14 +95,13 @@ pub struct Summary {
9595

9696
impl DiagnosticReport {
9797
pub fn new(diagnostics: Vec<Diagnostic>) -> Self {
98-
let errors = diagnostics
99-
.iter()
100-
.filter(|d| d.severity == Severity::Error)
101-
.count();
102-
let warnings = diagnostics
103-
.iter()
104-
.filter(|d| d.severity == Severity::Warning)
105-
.count();
98+
let (mut errors, mut warnings) = (0, 0);
99+
for d in &diagnostics {
100+
match d.severity {
101+
Severity::Error => errors += 1,
102+
Severity::Warning => warnings += 1,
103+
}
104+
}
106105
Self {
107106
diagnostics,
108107
summary: Summary { errors, warnings },

src/fix.rs

Lines changed: 17 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -22,30 +22,27 @@ pub fn apply_fixes(
2222

2323
for diag in diagnostics {
2424
match &diag.check {
25-
CheckKind::NotInherited => {
25+
CheckKind::NotInherited | CheckKind::VersionMismatch => {
2626
let member = diag.member.as_deref().unwrap_or("?");
2727
let full_path = workspace_root.join(member);
2828
if fix_member_dep(&full_path, &diag.dependency)? {
2929
modified_files.insert(full_path);
3030
fixes_applied += 1;
31-
actions.push(format!(
32-
"fixed: `{}` in {} now uses workspace inheritance",
33-
diag.dependency, member,
34-
));
35-
}
36-
}
37-
CheckKind::VersionMismatch => {
38-
let member = diag.member.as_deref().unwrap_or("?");
39-
let dep_ver = diag.version.as_deref().unwrap_or("?");
40-
let ws_ver = diag.workspace_version.as_deref().unwrap_or("?");
41-
let full_path = workspace_root.join(member);
42-
if fix_member_dep(&full_path, &diag.dependency)? {
43-
modified_files.insert(full_path);
44-
fixes_applied += 1;
45-
actions.push(format!(
46-
"fixed: `{}` in {} changed from {} to {} (workspace version)",
47-
diag.dependency, member, dep_ver, ws_ver,
48-
));
31+
let msg = match &diag.check {
32+
CheckKind::NotInherited => format!(
33+
"fixed: `{}` in {} now uses workspace inheritance",
34+
diag.dependency, member,
35+
),
36+
CheckKind::VersionMismatch => format!(
37+
"fixed: `{}` in {} changed from {} to {} (workspace version)",
38+
diag.dependency,
39+
member,
40+
diag.version.as_deref().unwrap_or("?"),
41+
diag.workspace_version.as_deref().unwrap_or("?"),
42+
),
43+
_ => unreachable!(),
44+
};
45+
actions.push(msg);
4946
}
5047
}
5148
CheckKind::PromotionCandidate => {
@@ -283,14 +280,10 @@ mod tests {
283280
use super::*;
284281
use crate::check;
285282
use crate::workspace::parse_workspace;
286-
use std::path::PathBuf;
287283

288284
fn copy_fixture(name: &str) -> tempfile::TempDir {
289-
let fixture_dir = PathBuf::from(env!("CARGO_MANIFEST_DIR"))
290-
.join("tests/fixtures")
291-
.join(name);
292285
let tmp = tempfile::tempdir().unwrap();
293-
copy_dir_recursive(&fixture_dir, tmp.path());
286+
copy_dir_recursive(&crate::fixture(name), tmp.path());
294287
tmp
295288
}
296289

src/workspace.rs

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -76,25 +76,8 @@ pub fn parse_workspace(path: &Path) -> Result<WorkspaceInfo, String> {
7676

7777
let workspace_deps = parse_workspace_deps(workspace_table);
7878

79-
let member_patterns: Vec<String> = workspace_table
80-
.get("members")
81-
.and_then(|v| v.as_array())
82-
.map(|arr| {
83-
arr.iter()
84-
.filter_map(|v| v.as_str().map(String::from))
85-
.collect()
86-
})
87-
.unwrap_or_default();
88-
89-
let exclude_patterns: Vec<String> = workspace_table
90-
.get("exclude")
91-
.and_then(|v| v.as_array())
92-
.map(|arr| {
93-
arr.iter()
94-
.filter_map(|v| v.as_str().map(String::from))
95-
.collect()
96-
})
97-
.unwrap_or_default();
79+
let member_patterns = get_string_array(workspace_table, "members");
80+
let exclude_patterns = get_string_array(workspace_table, "exclude");
9881

9982
let member_paths = expand_members(path, &member_patterns, &exclude_patterns)?;
10083

@@ -114,6 +97,18 @@ pub fn parse_workspace(path: &Path) -> Result<WorkspaceInfo, String> {
11497
})
11598
}
11699

100+
fn get_string_array(table: &toml_edit::Table, key: &str) -> Vec<String> {
101+
table
102+
.get(key)
103+
.and_then(|v| v.as_array())
104+
.map(|arr| {
105+
arr.iter()
106+
.filter_map(|v| v.as_str().map(String::from))
107+
.collect()
108+
})
109+
.unwrap_or_default()
110+
}
111+
117112
fn parse_workspace_deps(workspace_table: &toml_edit::Table) -> BTreeMap<String, WorkspaceDep> {
118113
let mut deps = BTreeMap::new();
119114
let Some(dep_table) = workspace_table

0 commit comments

Comments
 (0)