]> git.proxmox.com Git - rustc.git/blame - src/tools/rustfmt/src/emitter/files_with_backup.rs
Update upstream source from tag 'upstream/1.52.1+dfsg1'
[rustc.git] / src / tools / rustfmt / src / emitter / files_with_backup.rs
CommitLineData
f20569fa
XL
1use super::*;
2use std::fs;
3
4#[derive(Debug, Default)]
5pub(crate) struct FilesWithBackupEmitter;
6
7impl 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}