@@ -15,7 +15,7 @@ impl DiffEmitter {
1515impl Emitter for DiffEmitter {
1616 fn emit_formatted_file (
1717 & mut self ,
18- _output : & mut dyn Write ,
18+ output : & mut dyn Write ,
1919 FormattedFile {
2020 filename,
2121 original_text,
@@ -25,11 +25,86 @@ impl Emitter for DiffEmitter {
2525 const CONTEXT_SIZE : usize = 3 ;
2626 let mismatch = make_diff ( & original_text, formatted_text, CONTEXT_SIZE ) ;
2727 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+
3341 return Ok ( EmitterResult { has_diff } ) ;
3442 }
3543}
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