]> git.lizzy.rs Git - rust.git/blob - src/tools/rustfmt/src/emitter/files_with_backup.rs
Auto merge of #82624 - ojeda:rwlock-example-deadlock, r=JohnTitor
[rust.git] / src / tools / rustfmt / src / emitter / files_with_backup.rs
1 use super::*;
2 use std::fs;
3
4 #[derive(Debug, Default)]
5 pub(crate) struct FilesWithBackupEmitter;
6
7 impl Emitter for FilesWithBackupEmitter {
8     fn emit_formatted_file(
9         &mut self,
10         _output: &mut dyn Write,
11         FormattedFile {
12             filename,
13             original_text,
14             formatted_text,
15         }: FormattedFile<'_>,
16     ) -> Result<EmitterResult, io::Error> {
17         let filename = ensure_real_path(filename);
18         if original_text != formatted_text {
19             // Do a little dance to make writing safer - write to a temp file
20             // rename the original to a .bk, then rename the temp file to the
21             // original.
22             let tmp_name = filename.with_extension("tmp");
23             let bk_name = filename.with_extension("bk");
24
25             fs::write(&tmp_name, formatted_text)?;
26             fs::rename(filename, bk_name)?;
27             fs::rename(tmp_name, filename)?;
28         }
29         Ok(EmitterResult::default())
30     }
31 }