diff --git a/Cargo.lock b/Cargo.lock index 9998c0a..449f13b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -23,7 +23,7 @@ dependencies = [ [[package]] name = "codem8" -version = "0.2.0" +version = "0.3.0" dependencies = [ "ignore", "rayon", diff --git a/Cargo.toml b/Cargo.toml index e1567f5..f356e2f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "codem8" -version = "0.2.0" +version = "0.3.0" edition = "2021" license = "MIT" description = "A deterministic source code analysis CLI for duplicate code reports." diff --git a/README.md b/README.md index 2312f11..2c28c53 100644 --- a/README.md +++ b/README.md @@ -99,10 +99,11 @@ Duplicate block weight is calculated as: Reports are sorted deterministically by descending weight, then by line count, character count, first location, and normalized block text. -By default, each duplicate block prints the duplicated code before its -locations. Use `-verbose` to also show weight, line count, occurrence count, and -timings for discovery, file processing, and duplicate detection. Character -counts are used internally for scoring and sorting, but are not printed. +By default, each duplicate block prints only the duplicate locations. Use +`-verbose` to also show the duplicated code, weight, line count, occurrence +count, and timings for discovery, file processing, and duplicate detection. +Character counts are used internally for scoring and sorting, but are not +printed. ## Development diff --git a/src/lib.rs b/src/lib.rs index d7454b2..0e8bb62 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -180,13 +180,6 @@ mod tests { "Duplicate blocks found: 1\n", "\n", "#1\n", - "Code:\n", - " const value = computeValue(input);\n", - " if (value === undefined) {\n", - " return defaultValue;\n", - " }\n", - "\n", - "Locations:\n", "- src/a.ts:1-4\n", "- src/b.ts:1-4\n", ] diff --git a/src/report.rs b/src/report.rs index 9667ef3..06d8901 100644 --- a/src/report.rs +++ b/src/report.rs @@ -76,14 +76,14 @@ pub fn render_duplicate_report(report: &DuplicateReport, verbose: bool) -> Strin let _ = writeln!(output, "Lines: {}", block.line_count()); let _ = writeln!(output, "Occurrences: {}", block.occurrences.len()); output.push('\n'); + output.push_str("Code:\n"); + for line in &block.normalized_lines { + output.push_str(" "); + output.push_str(line); + output.push('\n'); + } + output.push_str("\nLocations:\n"); } - output.push_str("Code:\n"); - for line in &block.normalized_lines { - output.push_str(" "); - output.push_str(line); - output.push('\n'); - } - output.push_str("\nLocations:\n"); for occurrence in &block.occurrences { let _ = writeln!( output, @@ -169,12 +169,11 @@ mod tests { assert!(!output.contains("Lines: 1")); assert!(!output.contains("Occurrences: 2")); assert!(!output.contains("Characters:")); + assert!(!output.contains("Code:")); + assert!(!output.contains("Locations:")); assert!(output.contains("- src/a.ts:1-1")); - assert!(output.contains(" return value;")); - assert!( - output.find("Code:").expect("code section exists") - < output.find("Locations:").expect("locations section exists") - ); + assert!(!output.contains(" return value;")); + assert!(output.contains("#1\n- src/a.ts:1-1\n- src/b.js:5-5\n")); } #[test] @@ -219,6 +218,9 @@ mod tests { assert!(output.contains("Lines: 1")); assert!(output.contains("Occurrences: 2")); assert!(!output.contains("Characters:")); + assert!(output.contains("Code:")); + assert!(output.contains("Locations:")); + assert!(output.contains(" return value;")); } #[test]