use super::*;
pub(crate) fn cases() -> Vec<CalibrationCase> {
vec![
case(
"docs.missing-public-doc",
Box::new(|root| baseline_with_lib(root, "pub fn undocumented_entry() {}\n")),
Box::new(|root| baseline_with_lib(root, "/// Documented entry.\npub fn entry() {}\n")),
),
case(
"docs.missing-readme",
Box::new(|root| {
fs::create_dir_all(root.join("src")).expect("src dir");
fs::write(root.join("Cargo.toml"), CALIBRATION_BASELINE_MANIFEST)
.expect("manifest");
fs::write(root.join("Cargo.lock"), CALIBRATION_BASELINE_LOCKFILE)
.expect("lockfile");
write_lib(root, "/// Probe.\npub fn entry() {}\n");
}),
Box::new(|root| baseline_with_lib(root, "/// Probe.\npub fn entry() {}\n")),
),
case(
"docs.stale-todo",
Box::new(|root| {
baseline_with_lib(
root,
"/// Probe.\n// TODO fix this later\npub fn entry() {}\n",
)
}),
Box::new(|root| {
baseline_with_lib(
root,
"/// Probe.\n// TODO(#123): remove after parser migration\npub fn entry() {}\n",
)
}),
),
case(
"docs.commented-out-code",
Box::new(|root| {
baseline_with_lib(
root,
"/// Probe.\n// let value = compute();\npub fn entry() {}\n",
)
}),
Box::new(|root| {
baseline_with_lib(
root,
"/// Probe.\n// reminder: the next refactor should remove the cache\npub fn entry() {}\n",
)
}),
),
case(
"docs.weak-safety-rationale",
Box::new(|root| {
baseline_with_lib(
root,
"/// Probe.\npub fn entry() {\n // SAFETY: safe\n unsafe { std::ptr::null::<i32>(); }\n}\n",
)
}),
Box::new(|root| {
baseline_with_lib(
root,
"/// Probe.\npub fn entry() {\n // SAFETY: caller guarantees pointer is non-null and aligned for u8.\n unsafe { std::ptr::null::<i32>(); }\n}\n",
)
}),
),
case(
"docs.missing-errors-section",
Box::new(|root| {
baseline_with_lib(
root,
"/// Loads the value.\npub fn load() -> Result<i32, String> { Ok(0) }\n",
)
}),
Box::new(|root| {
baseline_with_lib(
root,
"/// Loads the value.\n///\n/// Returns Err when input is missing.\npub fn load() -> Result<i32, String> { Ok(0) }\n",
)
}),
),
case(
"error-handling.production-panic",
Box::new(|root| {
baseline_with_lib(
root,
"/// Probe.\npub fn always_panics() { panic!(\"boom\"); }\n",
)
}),
Box::new(|root| {
baseline_with_lib(root, "/// Probe.\npub fn returns_value() -> i32 { 1 }\n")
}),
),
case(
"error-handling.public-unwrap",
Box::new(|root| {
baseline_with_lib(
root,
"/// Probe.\npub fn entry() { let value: Option<i32> = Some(1); value.unwrap(); }\n",
)
}),
Box::new(|root| {
baseline_with_lib(
root,
"/// Probe.\npub fn entry() -> Option<i32> { Some(1) }\n",
)
}),
),
case(
"error-handling.unimplemented-placeholder",
Box::new(|root| {
baseline_with_lib(
root,
"/// Probe.\npub fn entry() -> i32 { todo!(\"unfinished\") }\n",
)
}),
Box::new(|root| baseline_with_lib(root, "/// Probe.\npub fn entry() -> i32 { 0 }\n")),
),
case(
"naming.boolean-prefix",
Box::new(|root| {
baseline_with_lib(root, "/// Probe.\npub fn ready() -> bool { true }\n")
}),
Box::new(|root| {
baseline_with_lib(root, "/// Probe.\npub fn is_ready() -> bool { true }\n")
}),
),
case(
"naming.generic-function",
Box::new(|root| baseline_with_lib(root, "/// Probe.\npub fn process() {}\n")),
Box::new(|root| baseline_with_lib(root, "/// Probe.\npub fn ingest_payload() {}\n")),
),
case(
"naming.placeholder-identifier",
Box::new(|root| {
baseline_with_lib(
root,
"/// Probe.\npub fn entry() { let foo = 1; let _ = foo; }\n",
)
}),
Box::new(|root| {
baseline_with_lib(
root,
"/// Probe.\npub fn entry() { let count = 1; let _ = count; }\n",
)
}),
),
case(
"naming.short-variable",
Box::new(|root| {
baseline_with_lib(
root,
"/// Probe.\npub fn entry() -> i32 { let xy = 1; xy + 1 }\n",
)
}),
Box::new(|root| {
baseline_with_lib(
root,
"/// Probe.\npub fn entry() -> i32 { let count = 1; count + 1 }\n",
)
}),
),
case(
"naming.identifier-shadow",
Box::new(|root| {
baseline_with_lib(
root,
"/// Probe.\nfn payload(input: &str) -> String { input.to_string() }\n/// Probe.\npub fn entry(input: &str) -> String { let payload = payload(input); payload }\n",
)
}),
Box::new(|root| {
baseline_with_lib(
root,
"/// Probe.\nfn payload(input: &str) -> String { input.to_string() }\n/// Probe.\npub fn entry(input: &str) -> String { let body = payload(input); body }\n",
)
}),
),
case(
"performance.clone-in-loop",
Box::new(|root| {
baseline_with_lib(
root,
r#"/// Probe.
pub fn entry(values: Vec<String>) {
for value in values {
let _owned = value.clone();
}
}
"#,
)
}),
Box::new(|root| {
baseline_with_lib(
root,
"/// Probe.\npub fn entry(value: &String) { let _owned = value.clone(); }\n",
)
}),
),
case(
"performance.format-in-loop",
Box::new(|root| {
baseline_with_lib(
root,
r#"/// Probe.
pub fn entry(values: Vec<i32>) {
for value in values {
let _formatted = format!("{value}");
}
}
"#,
)
}),
Box::new(|root| {
baseline_with_lib(
root,
"/// Probe.\npub fn entry(value: i32) { let _formatted = format!(\"{value}\"); }\n",
)
}),
),
case(
"performance.regex-in-loop",
Box::new(|root| {
baseline_with_lib(
root,
r#"/// Probe.
pub fn entry(values: Vec<i32>) {
for value in values {
let _compiled = regex::Regex::new("^a$");
let _consume = value;
}
}
"#,
)
}),
Box::new(|root| {
baseline_with_lib(
root,
"/// Probe.\npub fn entry() { let _compiled = regex::Regex::new(\"^a$\"); }\n",
)
}),
),
]
}