From 84fb2f402e92976c34c4a60cab5b918d377388fb Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sat, 2 Apr 2016 21:56:37 +0300 Subject: [PATCH] refactor: unify run and run_from_stdin --- src/bin/rustfmt.rs | 6 +++--- src/filemap.rs | 10 +++++----- src/lib.rs | 42 +++++++++++++++++++++++++----------------- 3 files changed, 33 insertions(+), 25 deletions(-) diff --git a/src/bin/rustfmt.rs b/src/bin/rustfmt.rs index 062c60e1065..e3ead2a28a1 100644 --- a/src/bin/rustfmt.rs +++ b/src/bin/rustfmt.rs @@ -17,7 +17,7 @@ extern crate toml; extern crate env_logger; extern crate getopts; -use rustfmt::{run, run_from_stdin}; +use rustfmt::{run, Input}; use rustfmt::config::{Config, WriteMode}; use std::env; @@ -197,7 +197,7 @@ fn execute() -> i32 { // write_mode is always Plain for Stdin. config.write_mode = WriteMode::Plain; - run_from_stdin(input, &config); + run(Input::Text(input), &config); 0 } Operation::Format { files, config_path } => { @@ -233,7 +233,7 @@ fn execute() -> i32 { print_usage(&opts, &e); return 1; } - run(&file, &config); + run(Input::File(file), &config); } 0 } diff --git a/src/filemap.rs b/src/filemap.rs index 64c892a0929..c6af9a70184 100644 --- a/src/filemap.rs +++ b/src/filemap.rs @@ -80,11 +80,11 @@ pub fn write_system_newlines(writer: T, } } -pub fn write_file(text: &StringBuffer, - filename: &str, - out: &mut T, - config: &Config) - -> Result, io::Error> +fn write_file(text: &StringBuffer, + filename: &str, + out: &mut T, + config: &Config) + -> Result, io::Error> where T: Write { diff --git a/src/lib.rs b/src/lib.rs index a559c23006b..42c5c7a5895 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -33,7 +33,7 @@ use syntax::parse::{self, ParseSess}; use std::io::stdout; use std::ops::{Add, Sub}; -use std::path::Path; +use std::path::{Path, PathBuf}; use std::rc::Rc; use std::collections::HashMap; use std::fmt; @@ -41,7 +41,7 @@ use std::fmt; use issues::{BadIssueSeeker, Issue}; use filemap::FileMap; use visitor::FmtVisitor; -use config::Config; +use config::{Config, WriteMode}; #[macro_use] mod utils; @@ -428,27 +428,35 @@ pub fn format(file: &Path, config: &Config) -> FileMap { file_map } -pub fn run(file: &Path, config: &Config) { - let mut result = format(file, config); +fn format_input(input: Input, config: &Config) -> (FileMap, FormatReport) { + let mut file_map = match input { + Input::File(ref file) => format(file, config), + Input::Text(text) => format_string(text, config), + }; - print!("{}", fmt_lines(&mut result, config)); - let mut out = stdout(); - let write_result = filemap::write_all_files(&result, &mut out, config); - - if let Err(msg) = write_result { - println!("Error writing files: {}", msg); - } + let report = fmt_lines(&mut file_map, config); + (file_map, report) } -// Similar to run, but takes an input String instead of a file to format -pub fn run_from_stdin(input: String, config: &Config) { - let mut result = format_string(input, config); - fmt_lines(&mut result, config); +pub enum Input { + File(PathBuf), + Text(String), +} + +pub fn run(input: Input, config: &Config) { + let (file_map, report) = format_input(input, config); + + let ignore_errors = config.write_mode == WriteMode::Plain; + if !ignore_errors { + print!("{}", report); + } let mut out = stdout(); - let write_result = filemap::write_file(&result["stdin"], "stdin", &mut out, config); + let write_result = filemap::write_all_files(&file_map, &mut out, config); if let Err(msg) = write_result { - panic!("Error writing to stdout: {}", msg); + if !ignore_errors { + println!("Error writing files: {}", msg); + } } }