Skip to content

Commit 7a886e8

Browse files
committed
Refactoring around write mode in main
1 parent a73f14a commit 7a886e8

File tree

3 files changed

+15
-22
lines changed

3 files changed

+15
-22
lines changed

src/bin/main.rs

+12-22
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,9 @@ const WRITE_MODE_LIST: &str = "[replace|overwrite|display|plain|diff|coverage|ch
3535
fn main() {
3636
env_logger::init();
3737
let opts = make_opts();
38-
// Only handles arguments passed in through the CLI.
39-
let write_mode = determine_write_mode(&opts);
4038

4139
let exit_code = match execute(&opts) {
42-
Ok(summary) => {
40+
Ok((write_mode, summary)) => {
4341
if summary.has_operational_errors()
4442
|| summary.has_diff && write_mode == WriteMode::Check
4543
|| summary.has_parsing_errors() || summary.has_formatting_errors()
@@ -248,22 +246,22 @@ fn make_opts() -> Options {
248246
opts
249247
}
250248

251-
fn execute(opts: &Options) -> FmtResult<Summary> {
249+
fn execute(opts: &Options) -> FmtResult<(WriteMode, Summary)> {
252250
let matches = opts.parse(env::args().skip(1))?;
253251

254252
match determine_operation(&matches)? {
255253
Operation::Help => {
256254
print_usage_to_stdout(opts, "");
257255
Summary::print_exit_codes();
258-
Ok(Summary::default())
256+
Ok((WriteMode::None, Summary::default()))
259257
}
260258
Operation::Version => {
261259
print_version();
262-
Ok(Summary::default())
260+
Ok((WriteMode::None, Summary::default()))
263261
}
264262
Operation::ConfigHelp => {
265263
Config::print_docs(&mut stdout(), matches.opt_present("unstable-features"));
266-
Ok(Summary::default())
264+
Ok((WriteMode::None, Summary::default()))
267265
}
268266
Operation::ConfigOutputDefault { path } => {
269267
let toml = Config::default().all_options().to_toml()?;
@@ -273,7 +271,7 @@ fn execute(opts: &Options) -> FmtResult<Summary> {
273271
} else {
274272
io::stdout().write_all(toml.as_bytes())?;
275273
}
276-
Ok(Summary::default())
274+
Ok((WriteMode::None, Summary::default()))
277275
}
278276
Operation::Stdin { input, config_path } => {
279277
// try to read config from local directory
@@ -302,7 +300,7 @@ fn execute(opts: &Options) -> FmtResult<Summary> {
302300
checkstyle::output_footer(&mut out, config.write_mode())?;
303301
}
304302

305-
Ok(error_summary)
303+
Ok((WriteMode::Plain, error_summary))
306304
}
307305
Operation::Format {
308306
files,
@@ -320,7 +318,7 @@ fn format(
320318
config_path: Option<PathBuf>,
321319
minimal_config_path: Option<String>,
322320
options: CliOptions,
323-
) -> FmtResult<Summary> {
321+
) -> FmtResult<(WriteMode, Summary)> {
324322
for f in options.file_lines.files() {
325323
match *f {
326324
FileName::Real(ref f) if files.contains(f) => {}
@@ -343,8 +341,9 @@ fn format(
343341
}
344342
}
345343

344+
let write_mode = config.write_mode();
346345
let mut out = &mut stdout();
347-
checkstyle::output_header(&mut out, config.write_mode())?;
346+
checkstyle::output_header(&mut out, write_mode)?;
348347
let mut error_summary = Summary::default();
349348

350349
for file in files {
@@ -379,7 +378,7 @@ fn format(
379378
error_summary.add(run(Input::File(file), &config));
380379
}
381380
}
382-
checkstyle::output_footer(&mut out, config.write_mode())?;
381+
checkstyle::output_footer(&mut out, write_mode)?;
383382

384383
// If we were given a path via dump-minimal-config, output any options
385384
// that were used during formatting as TOML.
@@ -389,16 +388,7 @@ fn format(
389388
file.write_all(toml.as_bytes())?;
390389
}
391390

392-
Ok(error_summary)
393-
}
394-
395-
fn determine_write_mode(opts: &Options) -> WriteMode {
396-
let matches = opts.parse(env::args().skip(1)).unwrap();
397-
let options = CliOptions::from_matches(&matches).unwrap();
398-
match options.write_mode {
399-
Some(m) => m,
400-
None => WriteMode::default(),
401-
}
391+
Ok((write_mode, error_summary))
402392
}
403393

404394
fn print_usage_to_stdout(opts: &Options, reason: &str) {

src/config/options.rs

+2
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,8 @@ configuration_option_enum! { WriteMode:
186186
// Checks if a diff can be generated. If so, rustfmt outputs a diff and quits with exit code 1.
187187
// This option is designed to be run in CI where a non-zero exit signifies non-standard code formatting.
188188
Check,
189+
// Rustfmt shouldn't output anything formatting-like (e.g., emit a help message).
190+
None,
189191
}
190192

191193
configuration_option_enum! { Color:

src/filemap.rs

+1
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,7 @@ where
191191
return Ok(has_diff);
192192
}
193193
}
194+
WriteMode::None => {}
194195
}
195196

196197
// when we are not in diff mode, don't indicate differing files

0 commit comments

Comments
 (0)