// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
-use rustfmt_diff::{Mismatch, DiffLine};
-use std::io::{self, Write, Read, stdout};
-use config::WriteMode;
+use std::io::{self, Write};
+use std::path::Path;
-pub fn output_header(mode: WriteMode) -> Result<(), io::Error> {
- let stdout = stdout();
- let mut stdout = stdout.lock();
- if mode == WriteMode::Checkstyle {
- let mut xml_heading = String::new();
- xml_heading.push_str("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
- xml_heading.push_str("\n");
- xml_heading.push_str("<checkstyle version=\"4.3\">");
- try!(write!(stdout, "{}", xml_heading));
- }
- Ok(())
+use rustfmt_diff::{DiffLine, Mismatch};
+
+/// The checkstyle header - should be emitted before the output of Rustfmt.
+///
+/// Note that emitting checkstyle output is not stable and may removed in a
+/// future version of Rustfmt.
+pub fn header() -> String {
+ let mut xml_heading = String::new();
+ xml_heading.push_str("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
+ xml_heading.push_str("\n");
+ xml_heading.push_str("<checkstyle version=\"4.3\">");
+ xml_heading
}
-pub fn output_footer(mode: WriteMode) -> Result<(), io::Error> {
- let stdout = stdout();
- let mut stdout = stdout.lock();
- if mode == WriteMode::Checkstyle {
- let mut xml_tail = String::new();
- xml_tail.push_str("</checkstyle>");
- try!(write!(stdout, "{}", xml_tail));
- }
- Ok(())
+/// The checkstyle footer - should be emitted after the output of Rustfmt.
+///
+/// Note that emitting checkstyle output is not stable and may removed in a
+/// future version of Rustfmt.
+pub fn footer() -> String {
+ "</checkstyle>\n".to_owned()
}
-pub fn output_checkstyle_file<T>(mut writer: T,
- filename: &str,
- diff: Vec<Mismatch>)
- -> Result<(), io::Error>
- where T: Write
+pub fn output_checkstyle_file<T>(
+ mut writer: T,
+ filename: &Path,
+ diff: Vec<Mismatch>,
+) -> Result<(), io::Error>
+where
+ T: Write,
{
- try!(write!(writer, "<file name=\"{}\">", filename));
+ write!(writer, "<file name=\"{}\">", filename.display())?;
for mismatch in diff {
for line in mismatch.lines {
- match line {
- DiffLine::Expected(ref str) => {
- let message = xml_escape_str(&str);
- try!(write!(writer,
- "<error line=\"{}\" severity=\"warning\" message=\"Should be \
- `{}`\" />",
- mismatch.line_number,
- message));
- }
- _ => {
- // Do nothing with context and expected.
- }
+ // Do nothing with `DiffLine::Context` and `DiffLine::Resulting`.
+ if let DiffLine::Expected(ref str) = line {
+ let message = xml_escape_str(str);
+ write!(
+ writer,
+ "<error line=\"{}\" severity=\"warning\" message=\"Should be `{}`\" \
+ />",
+ mismatch.line_number, message
+ )?;
}
}
}
- try!(write!(writer, "</file>"));
+ write!(writer, "</file>")?;
Ok(())
}