Skip to content

Commit 4e95757

Browse files
committed
fix: clippy
1 parent daeb0a7 commit 4e95757

8 files changed

Lines changed: 201 additions & 121 deletions

File tree

crates/cargo-capsec/src/cross_crate.rs

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,12 @@ mod tests {
7575
fn single_export_map() {
7676
let map = make_export_map(
7777
"reqwest",
78-
vec![("reqwest::get", Category::Net, Risk::High, "TcpStream::connect")],
78+
vec![(
79+
"reqwest::get",
80+
Category::Net,
81+
Risk::High,
82+
"TcpStream::connect",
83+
)],
7984
);
8085
let customs = export_map_to_custom_authorities(&[map]);
8186
assert_eq!(customs.len(), 1);
@@ -90,8 +95,18 @@ mod tests {
9095
let map = make_export_map(
9196
"tokio",
9297
vec![
93-
("tokio::fs::read", Category::Fs, Risk::Medium, "std::fs::read"),
94-
("tokio::net::connect", Category::Net, Risk::High, "TcpStream::connect"),
98+
(
99+
"tokio::fs::read",
100+
Category::Fs,
101+
Risk::Medium,
102+
"std::fs::read",
103+
),
104+
(
105+
"tokio::net::connect",
106+
Category::Net,
107+
Risk::High,
108+
"TcpStream::connect",
109+
),
95110
],
96111
);
97112
let customs = export_map_to_custom_authorities(&[map]);
@@ -102,11 +117,21 @@ mod tests {
102117
fn multiple_crates() {
103118
let map1 = make_export_map(
104119
"reqwest",
105-
vec![("reqwest::get", Category::Net, Risk::High, "TcpStream::connect")],
120+
vec![(
121+
"reqwest::get",
122+
Category::Net,
123+
Risk::High,
124+
"TcpStream::connect",
125+
)],
106126
);
107127
let map2 = make_export_map(
108128
"rusqlite",
109-
vec![("rusqlite::execute", Category::Ffi, Risk::High, "extern sqlite3_exec")],
129+
vec![(
130+
"rusqlite::execute",
131+
Category::Ffi,
132+
Risk::High,
133+
"extern sqlite3_exec",
134+
)],
110135
);
111136
let customs = export_map_to_custom_authorities(&[map1, map2]);
112137
assert_eq!(customs.len(), 2);
@@ -133,7 +158,12 @@ mod tests {
133158
fn path_segments_split_correctly() {
134159
let map = make_export_map(
135160
"reqwest",
136-
vec![("reqwest::blocking::client::get", Category::Net, Risk::High, "connect")],
161+
vec![(
162+
"reqwest::blocking::client::get",
163+
Category::Net,
164+
Risk::High,
165+
"connect",
166+
)],
137167
);
138168
let customs = export_map_to_custom_authorities(&[map]);
139169
assert_eq!(

crates/cargo-capsec/src/detector.rs

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -266,8 +266,9 @@ impl Detector {
266266
// (sqlite3_exec()) and qualified calls (raw::git_repository_open()).
267267
if !extern_fn_names.is_empty() {
268268
for (call, expanded) in func.calls.iter().zip(expanded_calls.iter()) {
269-
if let Some(last_seg) = expanded.last() {
270-
if extern_fn_names.contains(last_seg.as_str()) {
269+
if let Some(last_seg) = expanded.last()
270+
&& extern_fn_names.contains(last_seg.as_str())
271+
{
271272
let deny_violation =
272273
is_category_denied(&effective_deny, &Category::Ffi);
273274
findings.push(Finding {
@@ -285,10 +286,7 @@ impl Detector {
285286
Risk::High
286287
},
287288
description: if deny_violation {
288-
format!(
289-
"DENY VIOLATION: Calls FFI function {}()",
290-
last_seg
291-
)
289+
format!("DENY VIOLATION: Calls FFI function {}()", last_seg)
292290
} else {
293291
format!("Calls FFI function {}()", last_seg)
294292
},
@@ -298,7 +296,6 @@ impl Detector {
298296
is_deny_violation: deny_violation,
299297
is_transitive: false,
300298
});
301-
}
302299
}
303300
}
304301
}
@@ -1299,8 +1296,14 @@ mod tests {
12991296
let findings = detector.analyse(&parsed, "test-crate", "0.1.0", &[]);
13001297
let extern_finding = findings.iter().find(|f| f.subcategory == "extern");
13011298
let call_finding = findings.iter().find(|f| f.subcategory == "ffi_call");
1302-
assert!(extern_finding.is_some(), "Extern block finding should exist");
1303-
assert!(call_finding.is_some(), "Call-site FFI finding should also exist");
1299+
assert!(
1300+
extern_finding.is_some(),
1301+
"Extern block finding should exist"
1302+
);
1303+
assert!(
1304+
call_finding.is_some(),
1305+
"Call-site FFI finding should also exist"
1306+
);
13041307
}
13051308

13061309
#[test]

crates/cargo-capsec/src/discovery.rs

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ struct Package {
5858
#[derive(Deserialize)]
5959
struct Target {
6060
kind: Vec<String>,
61+
#[allow(dead_code)]
6162
name: String,
6263
#[allow(dead_code)]
6364
src_path: String,
@@ -124,13 +125,16 @@ pub fn normalize_crate_name(name: &str) -> String {
124125

125126
/// Returns true if a package is a proc-macro crate (compile-time code, not runtime).
126127
fn is_proc_macro(pkg: &Package) -> bool {
127-
pkg.targets.iter().any(|t| t.kind.contains(&"proc-macro".to_string()))
128+
pkg.targets
129+
.iter()
130+
.any(|t| t.kind.contains(&"proc-macro".to_string()))
128131
}
129132

130133
/// Information about a dependency edge in the resolved graph.
131134
#[derive(Debug, Clone)]
132135
pub struct DepEdge {
133136
/// Normalized extern crate name (underscored, handles renames).
137+
#[allow(dead_code)]
134138
pub extern_name: String,
135139
/// Package ID of the dependency.
136140
pub pkg_id: String,
@@ -141,9 +145,7 @@ pub struct DepEdge {
141145
///
142146
/// Returns `Err` if a cycle is detected (should not happen in a valid Cargo graph
143147
/// with dev-deps removed, but handled gracefully).
144-
pub fn topological_order(
145-
resolve: &[(String, Vec<DepEdge>)],
146-
) -> Result<Vec<String>, String> {
148+
pub fn topological_order(resolve: &[(String, Vec<DepEdge>)]) -> Result<Vec<String>, String> {
147149
let num_nodes = resolve.len();
148150

149151
// Build index: pkg_id -> index
@@ -252,7 +254,9 @@ pub fn extract_dep_graph(
252254
.iter()
253255
.filter(|d| {
254256
// Exclude dev-dependencies (can create cycles).
255-
!d.dep_kinds.iter().all(|dk| dk.kind.as_deref() == Some("dev"))
257+
!d.dep_kinds
258+
.iter()
259+
.all(|dk| dk.kind.as_deref() == Some("dev"))
256260
})
257261
.filter(|d| !proc_macro_ids.contains(d.pkg.as_str()))
258262
.map(|d| DepEdge {
@@ -503,12 +507,7 @@ mod tests {
503507
// b c
504508
// \ /
505509
// d
506-
let graph = make_graph(&[
507-
("a", &["b", "c"]),
508-
("b", &["d"]),
509-
("c", &["d"]),
510-
("d", &[]),
511-
]);
510+
let graph = make_graph(&[("a", &["b", "c"]), ("b", &["d"]), ("c", &["d"]), ("d", &[])]);
512511
let order = topological_order(&graph).unwrap();
513512
let pos = |id: &str| order.iter().position(|x| x == id).unwrap();
514513
assert!(pos("d") < pos("b"));

crates/cargo-capsec/src/export_map.rs

Lines changed: 52 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,7 @@ pub fn file_to_module_path(file_path: &str, src_dir: &Path) -> Vec<String> {
5151
.strip_prefix(src_dir)
5252
.unwrap_or(Path::new(file_path));
5353

54-
let stem = relative
55-
.file_stem()
56-
.unwrap_or_default()
57-
.to_string_lossy();
54+
let stem = relative.file_stem().unwrap_or_default().to_string_lossy();
5855

5956
let mut parts: Vec<String> = relative
6057
.parent()
@@ -176,11 +173,7 @@ pub fn add_extern_exports(
176173
// Short form: crate::fn_name (for crate-scoped matching)
177174
let short_key = format!("{crate_name}::{fn_name}");
178175
if short_key != key {
179-
export_map
180-
.exports
181-
.entry(short_key)
182-
.or_default()
183-
.push(auth);
176+
export_map.exports.entry(short_key).or_default().push(auth);
184177
}
185178
}
186179
}
@@ -282,17 +275,26 @@ mod tests {
282275

283276
#[test]
284277
fn file_to_module_path_lib() {
285-
assert_eq!(file_to_module_path("src/lib.rs", Path::new("src")), Vec::<String>::new());
278+
assert_eq!(
279+
file_to_module_path("src/lib.rs", Path::new("src")),
280+
Vec::<String>::new()
281+
);
286282
}
287283

288284
#[test]
289285
fn file_to_module_path_main() {
290-
assert_eq!(file_to_module_path("src/main.rs", Path::new("src")), Vec::<String>::new());
286+
assert_eq!(
287+
file_to_module_path("src/main.rs", Path::new("src")),
288+
Vec::<String>::new()
289+
);
291290
}
292291

293292
#[test]
294293
fn file_to_module_path_simple_module() {
295-
assert_eq!(file_to_module_path("src/fs.rs", Path::new("src")), vec!["fs"]);
294+
assert_eq!(
295+
file_to_module_path("src/fs.rs", Path::new("src")),
296+
vec!["fs"]
297+
);
296298
}
297299

298300
#[test]
@@ -305,12 +307,21 @@ mod tests {
305307

306308
#[test]
307309
fn file_to_module_path_mod_rs() {
308-
assert_eq!(file_to_module_path("src/fs/mod.rs", Path::new("src")), vec!["fs"]);
310+
assert_eq!(
311+
file_to_module_path("src/fs/mod.rs", Path::new("src")),
312+
vec!["fs"]
313+
);
309314
}
310315

311316
#[test]
312317
fn build_export_map_basic() {
313-
let findings = vec![make_finding("src/lib.rs", "read_file", "std::fs::read", Category::Fs, false)];
318+
let findings = vec![make_finding(
319+
"src/lib.rs",
320+
"read_file",
321+
"std::fs::read",
322+
Category::Fs,
323+
false,
324+
)];
314325
let map = build_export_map("my_crate", "1.0.0", &findings, Path::new("src"));
315326
assert!(map.exports.contains_key("my_crate::read_file"));
316327
let auths = &map.exports["my_crate::read_file"];
@@ -321,7 +332,13 @@ mod tests {
321332
#[test]
322333
fn build_export_map_excludes_build_script() {
323334
let findings = vec![
324-
make_finding("src/lib.rs", "read_file", "std::fs::read", Category::Fs, false),
335+
make_finding(
336+
"src/lib.rs",
337+
"read_file",
338+
"std::fs::read",
339+
Category::Fs,
340+
false,
341+
),
325342
make_finding("build.rs", "main", "std::env::var", Category::Env, true),
326343
];
327344
let map = build_export_map("my_crate", "1.0.0", &findings, Path::new("src"));
@@ -346,7 +363,13 @@ mod tests {
346363
fn build_export_map_multiple_findings_same_function() {
347364
let findings = vec![
348365
make_finding("src/lib.rs", "mixed", "std::fs::read", Category::Fs, false),
349-
make_finding("src/lib.rs", "mixed", "TcpStream::connect", Category::Net, false),
366+
make_finding(
367+
"src/lib.rs",
368+
"mixed",
369+
"TcpStream::connect",
370+
Category::Net,
371+
false,
372+
),
350373
];
351374
let map = build_export_map("my_crate", "1.0.0", &findings, Path::new("src"));
352375
let auths = &map.exports["my_crate::mixed"];
@@ -361,7 +384,13 @@ mod tests {
361384

362385
#[test]
363386
fn cached_export_map_round_trip() {
364-
let findings = vec![make_finding("src/lib.rs", "read_file", "std::fs::read", Category::Fs, false)];
387+
let findings = vec![make_finding(
388+
"src/lib.rs",
389+
"read_file",
390+
"std::fs::read",
391+
Category::Fs,
392+
false,
393+
)];
365394
let export_map = build_export_map("my_crate", "1.0.0", &findings, Path::new("src"));
366395
let cached = CachedExportMap {
367396
schema_version: EXPORT_MAP_SCHEMA_VERSION,
@@ -371,6 +400,11 @@ mod tests {
371400
let loaded: CachedExportMap = serde_json::from_str(&json).unwrap();
372401
assert_eq!(loaded.schema_version, EXPORT_MAP_SCHEMA_VERSION);
373402
assert_eq!(loaded.export_map.crate_name, "my_crate");
374-
assert!(loaded.export_map.exports.contains_key("my_crate::read_file"));
403+
assert!(
404+
loaded
405+
.export_map
406+
.exports
407+
.contains_key("my_crate::read_file")
408+
);
375409
}
376410
}

0 commit comments

Comments
 (0)