Skip to content

Commit a809f01

Browse files
refactor: track configs set from cli flags
1 parent e21c1e2 commit a809f01

File tree

3 files changed

+54
-21
lines changed

3 files changed

+54
-21
lines changed

src/bin/main.rs

Lines changed: 39 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -263,24 +263,35 @@ fn format_string(input: String, options: GetOptsOptions) -> Result<i32> {
263263
let (mut config, _) = load_config(Some(Path::new(".")), Some(options.clone()))?;
264264

265265
if options.check {
266-
config.set().emit_mode(EmitMode::Diff);
266+
config.set_cli().emit_mode(EmitMode::Diff);
267267
} else {
268268
match options.emit_mode {
269269
// Emit modes which work with standard input
270270
// None means default, which is Stdout.
271-
None | Some(EmitMode::Stdout) | Some(EmitMode::Checkstyle) | Some(EmitMode::Json) => {}
271+
None => {
272+
config
273+
.set()
274+
.emit_mode(options.emit_mode.unwrap_or(EmitMode::Stdout));
275+
}
276+
Some(EmitMode::Stdout) | Some(EmitMode::Checkstyle) | Some(EmitMode::Json) => {
277+
config
278+
.set_cli()
279+
.emit_mode(options.emit_mode.unwrap_or(EmitMode::Stdout));
280+
}
272281
Some(emit_mode) => {
273282
return Err(OperationError::StdinBadEmit(emit_mode).into());
274283
}
275284
}
276-
config
277-
.set()
278-
.emit_mode(options.emit_mode.unwrap_or(EmitMode::Stdout));
279285
}
280286
config.set().verbose(Verbosity::Quiet);
281287

282288
// parse file_lines
283-
config.set().file_lines(options.file_lines);
289+
if options.file_lines.is_all() {
290+
config.set().file_lines(options.file_lines);
291+
} else {
292+
config.set_cli().file_lines(options.file_lines);
293+
}
294+
284295
for f in config.file_lines().files() {
285296
match *f {
286297
FileName::Stdin => {}
@@ -650,36 +661,46 @@ impl GetOptsOptions {
650661
impl CliOptions for GetOptsOptions {
651662
fn apply_to(self, config: &mut Config) {
652663
if self.verbose {
653-
config.set().verbose(Verbosity::Verbose);
664+
config.set_cli().verbose(Verbosity::Verbose);
654665
} else if self.quiet {
655-
config.set().verbose(Verbosity::Quiet);
666+
config.set_cli().verbose(Verbosity::Quiet);
656667
} else {
657668
config.set().verbose(Verbosity::Normal);
658669
}
659-
config.set().file_lines(self.file_lines);
660-
config.set().unstable_features(self.unstable_features);
670+
671+
if self.file_lines.is_all() {
672+
config.set().file_lines(self.file_lines);
673+
} else {
674+
config.set_cli().file_lines(self.file_lines);
675+
}
676+
677+
if self.unstable_features {
678+
config.set_cli().unstable_features(self.unstable_features);
679+
} else {
680+
config.set().unstable_features(self.unstable_features);
681+
}
661682
if let Some(skip_children) = self.skip_children {
662-
config.set().skip_children(skip_children);
683+
config.set_cli().skip_children(skip_children);
663684
}
664685
if let Some(error_on_unformatted) = self.error_on_unformatted {
665-
config.set().error_on_unformatted(error_on_unformatted);
686+
config.set_cli().error_on_unformatted(error_on_unformatted);
666687
}
667688
if let Some(edition) = self.edition {
668-
config.set().edition(edition);
689+
config.set_cli().edition(edition);
669690
}
670691
if self.check {
671-
config.set().emit_mode(EmitMode::Diff);
692+
config.set_cli().emit_mode(EmitMode::Diff);
672693
} else if let Some(emit_mode) = self.emit_mode {
673-
config.set().emit_mode(emit_mode);
694+
config.set_cli().emit_mode(emit_mode);
674695
}
675696
if self.backup {
676-
config.set().make_backup(true);
697+
config.set_cli().make_backup(true);
677698
}
678699
if let Some(color) = self.color {
679-
config.set().color(color);
700+
config.set_cli().color(color);
680701
}
681702
if self.print_misformatted_file_names {
682-
config.set().print_misformatted_file_names(true);
703+
config.set_cli().print_misformatted_file_names(true);
683704
}
684705

685706
for (key, val) in self.inline_config {

src/config/config_type.rs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,10 @@ macro_rules! create_config {
8989
// - 1: true if the option was manually initialized
9090
// - 2: the option value
9191
// - 3: true if the option is unstable
92-
$($i: (Cell<bool>, bool, <$ty as StyleEditionDefault>::ConfigType, bool)),+
92+
// - 4: true if the option was set manually from a CLI flag
93+
// FIXME: 4 is probably unnecessary and duplicative
94+
// https://github.com/rust-lang/rustfmt/issues/6252
95+
$($i: (Cell<bool>, bool, <$ty as StyleEditionDefault>::ConfigType, bool, bool)),+
9396
}
9497

9598
// Just like the Config struct but with each property wrapped
@@ -169,7 +172,8 @@ macro_rules! create_config {
169172
<$ty as StyleEditionDefault>::style_edition_default(
170173
style_edition
171174
),
172-
$stb
175+
$stb,
176+
false,
173177
),
174178
)+
175179
}
@@ -180,6 +184,14 @@ macro_rules! create_config {
180184
ConfigSetter(self)
181185
}
182186

187+
#[allow(unreachable_pub)]
188+
pub fn set_cli(&mut self) -> ConfigSetter<'_> {
189+
$(
190+
self.$i.4 = true;
191+
)+
192+
ConfigSetter(self)
193+
}
194+
183195
#[allow(unreachable_pub)]
184196
pub fn was_set(&self) -> ConfigWasSet<'_> {
185197
ConfigWasSet(self)

src/config/file_lines.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ impl FileLines {
201201
}
202202

203203
/// Returns `true` if this `FileLines` contains all lines in all files.
204-
pub(crate) fn is_all(&self) -> bool {
204+
pub fn is_all(&self) -> bool {
205205
self.0.is_none()
206206
}
207207

0 commit comments

Comments
 (0)