David Tolnay | b2188a6 | 2019-05-09 11:42:44 -0700 | [diff] [blame] | 1 | use crate::error::Result; |
David Tolnay | cec98a7 | 2019-05-08 15:23:19 -0700 | [diff] [blame] | 2 | use proc_macro2::TokenStream; |
David Tolnay | cec98a7 | 2019-05-08 15:23:19 -0700 | [diff] [blame] | 3 | use std::fs::File; |
David Tolnay | de114eb | 2019-05-09 11:48:11 -0700 | [diff] [blame^] | 4 | use std::io::{BufWriter, Write}; |
David Tolnay | d0b37d2 | 2019-05-08 15:26:03 -0700 | [diff] [blame] | 5 | use std::path::Path; |
David Tolnay | cec98a7 | 2019-05-08 15:23:19 -0700 | [diff] [blame] | 6 | |
David Tolnay | b2188a6 | 2019-05-09 11:42:44 -0700 | [diff] [blame] | 7 | pub fn write<P: AsRef<Path>>(path: P, content: TokenStream) -> Result<()> { |
David Tolnay | de114eb | 2019-05-09 11:48:11 -0700 | [diff] [blame^] | 8 | let mut file = File::create(path).map(BufWriter::new)?; |
David Tolnay | cec98a7 | 2019-05-08 15:23:19 -0700 | [diff] [blame] | 9 | write!( |
| 10 | file, |
| 11 | "// THIS FILE IS AUTOMATICALLY GENERATED; DO NOT EDIT\n\n" |
David Tolnay | b2188a6 | 2019-05-09 11:42:44 -0700 | [diff] [blame] | 12 | )?; |
David Tolnay | cec98a7 | 2019-05-08 15:23:19 -0700 | [diff] [blame] | 13 | let mut config = rustfmt::Config::default(); |
| 14 | config.set().emit_mode(rustfmt::EmitMode::Stdout); |
| 15 | config.set().verbose(rustfmt::Verbosity::Quiet); |
| 16 | config.set().format_macro_matchers(true); |
| 17 | config.set().normalize_doc_attributes(true); |
| 18 | let mut session = rustfmt::Session::new(config, Some(&mut file)); |
David Tolnay | b2188a6 | 2019-05-09 11:42:44 -0700 | [diff] [blame] | 19 | session.format(rustfmt::Input::Text(content.to_string()))?; |
| 20 | Ok(()) |
David Tolnay | cec98a7 | 2019-05-08 15:23:19 -0700 | [diff] [blame] | 21 | } |