]> git.lizzy.rs Git - rust.git/blob - src/emitter/files.rs
Fix line numbers in checkstyle output (#3694)
[rust.git] / src / emitter / files.rs
1 use super::*;
2 use std::fs;
3
4 #[derive(Debug, Default)]
5 pub(crate) struct FilesEmitter {
6     print_misformatted_file_names: bool,
7 }
8
9 impl FilesEmitter {
10     pub(crate) fn new(print_misformatted_file_names: bool) -> Self {
11         Self {
12             print_misformatted_file_names,
13         }
14     }
15 }
16
17 impl Emitter for FilesEmitter {
18     fn emit_formatted_file(
19         &mut self,
20         output: &mut dyn Write,
21         FormattedFile {
22             filename,
23             original_text,
24             formatted_text,
25         }: FormattedFile<'_>,
26     ) -> Result<EmitterResult, io::Error> {
27         // Write text directly over original file if there is a diff.
28         let filename = ensure_real_path(filename);
29         if original_text != formatted_text {
30             fs::write(filename, formatted_text)?;
31             if self.print_misformatted_file_names {
32                 writeln!(output, "{}", filename.display())?;
33             }
34         }
35         Ok(EmitterResult::default())
36     }
37 }