summaryrefslogtreecommitdiffstats
path: root/src/tools/rustfmt/src/emitter.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/rustfmt/src/emitter.rs')
-rw-r--r--src/tools/rustfmt/src/emitter.rs52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/tools/rustfmt/src/emitter.rs b/src/tools/rustfmt/src/emitter.rs
new file mode 100644
index 000000000..dc2c99a30
--- /dev/null
+++ b/src/tools/rustfmt/src/emitter.rs
@@ -0,0 +1,52 @@
+pub(crate) use self::checkstyle::*;
+pub(crate) use self::diff::*;
+pub(crate) use self::files::*;
+pub(crate) use self::files_with_backup::*;
+pub(crate) use self::json::*;
+pub(crate) use self::modified_lines::*;
+pub(crate) use self::stdout::*;
+use crate::FileName;
+use std::io::{self, Write};
+use std::path::Path;
+
+mod checkstyle;
+mod diff;
+mod files;
+mod files_with_backup;
+mod json;
+mod modified_lines;
+mod stdout;
+
+pub(crate) struct FormattedFile<'a> {
+ pub(crate) filename: &'a FileName,
+ pub(crate) original_text: &'a str,
+ pub(crate) formatted_text: &'a str,
+}
+
+#[derive(Debug, Default, Clone)]
+pub(crate) struct EmitterResult {
+ pub(crate) has_diff: bool,
+}
+
+pub(crate) trait Emitter {
+ fn emit_formatted_file(
+ &mut self,
+ output: &mut dyn Write,
+ formatted_file: FormattedFile<'_>,
+ ) -> Result<EmitterResult, io::Error>;
+
+ fn emit_header(&self, _output: &mut dyn Write) -> Result<(), io::Error> {
+ Ok(())
+ }
+
+ fn emit_footer(&self, _output: &mut dyn Write) -> Result<(), io::Error> {
+ Ok(())
+ }
+}
+
+fn ensure_real_path(filename: &FileName) -> &Path {
+ match *filename {
+ FileName::Real(ref path) => path,
+ _ => panic!("cannot format `{}` and emit to files", filename),
+ }
+}