rustfmt_nightly/
emitter.rs
1pub(crate) use self::checkstyle::*;
2pub(crate) use self::diff::*;
3pub(crate) use self::files::*;
4pub(crate) use self::files_with_backup::*;
5pub(crate) use self::json::*;
6pub(crate) use self::modified_lines::*;
7pub(crate) use self::stdout::*;
8use crate::FileName;
9use std::io::{self, Write};
10use std::path::Path;
11
12mod checkstyle;
13mod diff;
14mod files;
15mod files_with_backup;
16mod json;
17mod modified_lines;
18mod stdout;
19
20pub(crate) struct FormattedFile<'a> {
21 pub(crate) filename: &'a FileName,
22 pub(crate) original_text: &'a str,
23 pub(crate) formatted_text: &'a str,
24}
25
26#[derive(Debug, Default, Clone)]
27pub(crate) struct EmitterResult {
28 pub(crate) has_diff: bool,
29}
30
31pub(crate) trait Emitter {
32 fn emit_formatted_file(
33 &mut self,
34 output: &mut dyn Write,
35 formatted_file: FormattedFile<'_>,
36 ) -> Result<EmitterResult, io::Error>;
37
38 fn emit_header(&self, _output: &mut dyn Write) -> Result<(), io::Error> {
39 Ok(())
40 }
41
42 fn emit_footer(&self, _output: &mut dyn Write) -> Result<(), io::Error> {
43 Ok(())
44 }
45}
46
47fn ensure_real_path(filename: &FileName) -> &Path {
48 match *filename {
49 FileName::Real(ref path) => path,
50 _ => panic!("cannot format `{filename}` and emit to files"),
51 }
52}