@@ -28,18 +28,18 @@ use getopts::{Matches, Options};
28
28
29
29
use rustfmt:: {
30
30
emit_post_matter, emit_pre_matter, format_and_emit_report, load_config, CliOptions , Color ,
31
- Config , ErrorKind , FileLines , FileName , Input , Summary , Verbosity , WriteMode ,
31
+ Config , EmitMode , ErrorKind , FileLines , FileName , Input , Summary , Verbosity ,
32
32
} ;
33
33
34
34
fn main ( ) {
35
35
env_logger:: init ( ) ;
36
36
let opts = make_opts ( ) ;
37
37
38
38
let exit_code = match execute ( & opts) {
39
- Ok ( ( write_mode , summary) ) => {
39
+ Ok ( ( exit_mode , summary) ) => {
40
40
if summary. has_operational_errors ( ) || summary. has_parsing_errors ( )
41
41
|| ( ( summary. has_diff || summary. has_check_errors ( ) )
42
- && write_mode == WriteMode :: Check )
42
+ && exit_mode == ExitCodeMode :: Check )
43
43
{
44
44
1
45
45
} else {
@@ -172,26 +172,26 @@ fn is_nightly() -> bool {
172
172
. unwrap_or ( false )
173
173
}
174
174
175
- fn execute ( opts : & Options ) -> Result < ( WriteMode , Summary ) , failure:: Error > {
175
+ fn execute ( opts : & Options ) -> Result < ( ExitCodeMode , Summary ) , failure:: Error > {
176
176
let matches = opts. parse ( env:: args ( ) . skip ( 1 ) ) ?;
177
177
let options = GetOptsOptions :: from_matches ( & matches) ?;
178
178
179
179
match determine_operation ( & matches) ? {
180
180
Operation :: Help ( HelpOp :: None ) => {
181
181
print_usage_to_stdout ( opts, "" ) ;
182
- Ok ( ( WriteMode :: None , Summary :: default ( ) ) )
182
+ Ok ( ( ExitCodeMode :: Normal , Summary :: default ( ) ) )
183
183
}
184
184
Operation :: Help ( HelpOp :: Config ) => {
185
185
Config :: print_docs ( & mut stdout ( ) , options. unstable_features ) ;
186
- Ok ( ( WriteMode :: None , Summary :: default ( ) ) )
186
+ Ok ( ( ExitCodeMode :: Normal , Summary :: default ( ) ) )
187
187
}
188
188
Operation :: Help ( HelpOp :: FileLines ) => {
189
189
print_help_file_lines ( ) ;
190
- Ok ( ( WriteMode :: None , Summary :: default ( ) ) )
190
+ Ok ( ( ExitCodeMode :: Normal , Summary :: default ( ) ) )
191
191
}
192
192
Operation :: Version => {
193
193
print_version ( ) ;
194
- Ok ( ( WriteMode :: None , Summary :: default ( ) ) )
194
+ Ok ( ( ExitCodeMode :: Normal , Summary :: default ( ) ) )
195
195
}
196
196
Operation :: ConfigOutputDefault { path } => {
197
197
let toml = Config :: default ( ) . all_options ( ) . to_toml ( ) . map_err ( err_msg) ?;
@@ -201,14 +201,14 @@ fn execute(opts: &Options) -> Result<(WriteMode, Summary), failure::Error> {
201
201
} else {
202
202
io:: stdout ( ) . write_all ( toml. as_bytes ( ) ) ?;
203
203
}
204
- Ok ( ( WriteMode :: None , Summary :: default ( ) ) )
204
+ Ok ( ( ExitCodeMode :: Normal , Summary :: default ( ) ) )
205
205
}
206
206
Operation :: Stdin { input } => {
207
207
// try to read config from local directory
208
208
let ( mut config, _) = load_config ( Some ( Path :: new ( "." ) ) , Some ( options. clone ( ) ) ) ?;
209
209
210
- // write_mode is always Display for Stdin.
211
- config. set ( ) . write_mode ( WriteMode :: Display ) ;
210
+ // emit mode is always Stdout for Stdin.
211
+ config. set ( ) . emit_mode ( EmitMode :: Stdout ) ;
212
212
config. set ( ) . verbose ( Verbosity :: Quiet ) ;
213
213
214
214
// parse file_lines
@@ -228,7 +228,7 @@ fn execute(opts: &Options) -> Result<(WriteMode, Summary), failure::Error> {
228
228
}
229
229
emit_post_matter ( & config) ?;
230
230
231
- Ok ( ( WriteMode :: Display , error_summary) )
231
+ Ok ( ( ExitCodeMode :: Normal , error_summary) )
232
232
}
233
233
Operation :: Format {
234
234
files,
@@ -241,7 +241,7 @@ fn format(
241
241
files : Vec < PathBuf > ,
242
242
minimal_config_path : Option < String > ,
243
243
options : GetOptsOptions ,
244
- ) -> Result < ( WriteMode , Summary ) , failure:: Error > {
244
+ ) -> Result < ( ExitCodeMode , Summary ) , failure:: Error > {
245
245
options. verify_file_lines ( & files) ;
246
246
let ( config, config_path) = load_config ( None , Some ( options. clone ( ) ) ) ?;
247
247
@@ -299,7 +299,12 @@ fn format(
299
299
file. write_all ( toml. as_bytes ( ) ) ?;
300
300
}
301
301
302
- Ok ( ( config. write_mode ( ) , error_summary) )
302
+ let exit_mode = if options. check {
303
+ ExitCodeMode :: Check
304
+ } else {
305
+ ExitCodeMode :: Normal
306
+ } ;
307
+ Ok ( ( exit_mode, error_summary) )
303
308
}
304
309
305
310
fn print_usage_to_stdout ( opts : & Options , reason : & str ) {
@@ -406,12 +411,13 @@ fn determine_operation(matches: &Matches) -> Result<Operation, ErrorKind> {
406
411
} )
407
412
}
408
413
409
- const STABLE_WRITE_MODES : [ WriteMode ; 4 ] = [
410
- WriteMode :: Replace ,
411
- WriteMode :: Overwrite ,
412
- WriteMode :: Display ,
413
- WriteMode :: Check ,
414
- ] ;
414
+ #[ derive( Debug , Copy , Clone , Eq , PartialEq ) ]
415
+ enum ExitCodeMode {
416
+ Normal ,
417
+ Check ,
418
+ }
419
+
420
+ const STABLE_EMIT_MODES : [ EmitMode ; 3 ] = [ EmitMode :: Files , EmitMode :: Stdout , EmitMode :: Diff ] ;
415
421
416
422
/// Parsed command line options.
417
423
#[ derive( Clone , Debug , Default ) ]
@@ -420,7 +426,8 @@ struct GetOptsOptions {
420
426
quiet : bool ,
421
427
verbose : bool ,
422
428
config_path : Option < PathBuf > ,
423
- write_mode : WriteMode ,
429
+ emit_mode : EmitMode ,
430
+ backup : bool ,
424
431
check : bool ,
425
432
color : Option < Color > ,
426
433
file_lines : FileLines , // Default is all lines in all files.
@@ -463,19 +470,19 @@ impl GetOptsOptions {
463
470
if options. check {
464
471
return Err ( format_err ! ( "Invalid to use `--emit` and `--check`" ) ) ;
465
472
}
466
- if let Ok ( write_mode ) = write_mode_from_emit_str ( emit_str) {
467
- options. write_mode = write_mode ;
473
+ if let Ok ( emit_mode ) = emit_mode_from_emit_str ( emit_str) {
474
+ options. emit_mode = emit_mode ;
468
475
} else {
469
476
return Err ( format_err ! ( "Invalid value for `--emit`" ) ) ;
470
477
}
471
478
}
472
479
473
- if options . write_mode == WriteMode :: Overwrite && matches. opt_present ( "backup" ) {
474
- options. write_mode = WriteMode :: Replace ;
480
+ if matches. opt_present ( "backup" ) {
481
+ options. backup = true ;
475
482
}
476
483
477
484
if !rust_nightly {
478
- if !STABLE_WRITE_MODES . contains ( & options. write_mode ) {
485
+ if !STABLE_EMIT_MODES . contains ( & options. emit_mode ) {
479
486
return Err ( format_err ! (
480
487
"Invalid value for `--emit` - using an unstable \
481
488
value without `--unstable-features`",
@@ -524,9 +531,12 @@ impl CliOptions for GetOptsOptions {
524
531
config. set ( ) . error_on_unformatted ( error_on_unformatted) ;
525
532
}
526
533
if self . check {
527
- config. set ( ) . write_mode ( WriteMode :: Check ) ;
534
+ config. set ( ) . emit_mode ( EmitMode :: Diff ) ;
528
535
} else {
529
- config. set ( ) . write_mode ( self . write_mode ) ;
536
+ config. set ( ) . emit_mode ( self . emit_mode ) ;
537
+ }
538
+ if self . backup {
539
+ config. set ( ) . make_backup ( true ) ;
530
540
}
531
541
if let Some ( color) = self . color {
532
542
config. set ( ) . color ( color) ;
@@ -538,12 +548,12 @@ impl CliOptions for GetOptsOptions {
538
548
}
539
549
}
540
550
541
- fn write_mode_from_emit_str ( emit_str : & str ) -> Result < WriteMode , failure:: Error > {
551
+ fn emit_mode_from_emit_str ( emit_str : & str ) -> Result < EmitMode , failure:: Error > {
542
552
match emit_str {
543
- "files" => Ok ( WriteMode :: Overwrite ) ,
544
- "stdout" => Ok ( WriteMode :: Display ) ,
545
- "coverage" => Ok ( WriteMode :: Coverage ) ,
546
- "checkstyle" => Ok ( WriteMode :: Checkstyle ) ,
553
+ "files" => Ok ( EmitMode :: Files ) ,
554
+ "stdout" => Ok ( EmitMode :: Stdout ) ,
555
+ "coverage" => Ok ( EmitMode :: Coverage ) ,
556
+ "checkstyle" => Ok ( EmitMode :: Checkstyle ) ,
547
557
_ => Err ( format_err ! ( "Invalid value for `--emit`" ) ) ,
548
558
}
549
559
}
0 commit comments