rustfmt_nightly/emitter/
files.rs

1use super::*;
2use std::fs;
3
4#[derive(Debug, Default)]
5pub(crate) struct FilesEmitter {
6    print_misformatted_file_names: bool,
7}
8
9impl FilesEmitter {
10    pub(crate) fn new(print_misformatted_file_names: bool) -> Self {
11        Self {
12            print_misformatted_file_names,
13        }
14    }
15}
16
17impl 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}