]>
Commit | Line | Data |
---|---|---|
f20569fa XL |
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 | } |