@@ -15,7 +15,7 @@ impl DiffEmitter {
15
15
impl Emitter for DiffEmitter {
16
16
fn emit_formatted_file (
17
17
& mut self ,
18
- _output : & mut dyn Write ,
18
+ output : & mut dyn Write ,
19
19
FormattedFile {
20
20
filename,
21
21
original_text,
@@ -25,11 +25,86 @@ impl Emitter for DiffEmitter {
25
25
const CONTEXT_SIZE : usize = 3 ;
26
26
let mismatch = make_diff ( & original_text, formatted_text, CONTEXT_SIZE ) ;
27
27
let has_diff = !mismatch. is_empty ( ) ;
28
- print_diff (
29
- mismatch,
30
- |line_num| format ! ( "Diff in {} at line {}:" , filename, line_num) ,
31
- & self . config ,
32
- ) ;
28
+
29
+ if has_diff {
30
+ if self . config . print_misformatted_file_names ( ) {
31
+ writeln ! ( output, "{}" , ensure_real_path( filename) . display( ) ) ?;
32
+ } else {
33
+ print_diff (
34
+ mismatch,
35
+ |line_num| format ! ( "Diff in {} at line {}:" , filename, line_num) ,
36
+ & self . config ,
37
+ ) ;
38
+ }
39
+ }
40
+
33
41
return Ok ( EmitterResult { has_diff } ) ;
34
42
}
35
43
}
44
+
45
+ #[ cfg( test) ]
46
+ mod tests {
47
+ use super :: * ;
48
+ use crate :: config:: Config ;
49
+ use crate :: FileName ;
50
+ use std:: path:: PathBuf ;
51
+
52
+ #[ test]
53
+ fn does_not_print_when_no_files_reformatted ( ) {
54
+ let mut writer = Vec :: new ( ) ;
55
+ let config = Config :: default ( ) ;
56
+ let mut emitter = DiffEmitter :: new ( config) ;
57
+ let result = emitter
58
+ . emit_formatted_file (
59
+ & mut writer,
60
+ FormattedFile {
61
+ filename : & FileName :: Real ( PathBuf :: from ( "src/lib.rs" ) ) ,
62
+ original_text : "fn empty() {}\n " ,
63
+ formatted_text : "fn empty() {}\n " ,
64
+ } ,
65
+ )
66
+ . unwrap ( ) ;
67
+ assert_eq ! ( result. has_diff, false ) ;
68
+ assert_eq ! ( writer. len( ) , 0 ) ;
69
+ }
70
+
71
+ #[ test]
72
+ fn prints_file_names_when_config_is_enabled ( ) {
73
+ let bin_file = "src/bin.rs" ;
74
+ let bin_original = "fn main() {\n println!(\" Hello, world!\" );\n }" ;
75
+ let bin_formatted = "fn main() {\n println!(\" Hello, world!\" );\n }" ;
76
+ let lib_file = "src/lib.rs" ;
77
+ let lib_original = "fn greet() {\n println!(\" Greetings!\" );\n }" ;
78
+ let lib_formatted = "fn greet() {\n println!(\" Greetings!\" );\n }" ;
79
+
80
+ let mut writer = Vec :: new ( ) ;
81
+ let mut config = Config :: default ( ) ;
82
+ config. set ( ) . print_misformatted_file_names ( true ) ;
83
+ let mut emitter = DiffEmitter :: new ( config) ;
84
+ let _ = emitter
85
+ . emit_formatted_file (
86
+ & mut writer,
87
+ FormattedFile {
88
+ filename : & FileName :: Real ( PathBuf :: from ( bin_file) ) ,
89
+ original_text : bin_original,
90
+ formatted_text : bin_formatted,
91
+ } ,
92
+ )
93
+ . unwrap ( ) ;
94
+ let _ = emitter
95
+ . emit_formatted_file (
96
+ & mut writer,
97
+ FormattedFile {
98
+ filename : & FileName :: Real ( PathBuf :: from ( lib_file) ) ,
99
+ original_text : lib_original,
100
+ formatted_text : lib_formatted,
101
+ } ,
102
+ )
103
+ . unwrap ( ) ;
104
+
105
+ assert_eq ! (
106
+ String :: from_utf8( writer) . unwrap( ) ,
107
+ format!( "{}\n {}\n " , bin_file, lib_file) ,
108
+ )
109
+ }
110
+ }
0 commit comments