mirror of
https://github.com/rust-lang/rust.git
synced 2025-04-28 11:07:42 +00:00
Add --dump-default-config and --dump-minimal-config.
- `--dump-default-config` outputs the default configuration to the specified file as TOML and then exits. - `--dump-minimal-config` is checked after formatting files as normal. If present, any configuration options that were checked during formatting are written to the specified file as TOML. - These options were added only to `rustfmt`, not to `cargo fmt`. They can be specified when using `cargo fmt` by placing them after `--`. - It would have been nice if the filename was optional, so you could run just `rusfmt --dump-minimal-config build.rs` to have it output to `rustfmt.toml`. However, this doesn't do what you might expect: it outputs the config to `build.rs`!
This commit is contained in:
parent
3f34ff8229
commit
31c8fb4e76
@ -44,6 +44,7 @@ enum Operation {
|
|||||||
Format {
|
Format {
|
||||||
files: Vec<PathBuf>,
|
files: Vec<PathBuf>,
|
||||||
config_path: Option<PathBuf>,
|
config_path: Option<PathBuf>,
|
||||||
|
minimal_config_path: Option<String>,
|
||||||
},
|
},
|
||||||
/// Print the help message.
|
/// Print the help message.
|
||||||
Help,
|
Help,
|
||||||
@ -51,6 +52,8 @@ enum Operation {
|
|||||||
Version,
|
Version,
|
||||||
/// Print detailed configuration help.
|
/// Print detailed configuration help.
|
||||||
ConfigHelp,
|
ConfigHelp,
|
||||||
|
/// Output default config to a file
|
||||||
|
ConfigOutputDefault { path: String },
|
||||||
/// No file specified, read from stdin
|
/// No file specified, read from stdin
|
||||||
Stdin {
|
Stdin {
|
||||||
input: String,
|
input: String,
|
||||||
@ -186,6 +189,14 @@ fn make_opts() -> Options {
|
|||||||
opts.optflag("",
|
opts.optflag("",
|
||||||
"config-help",
|
"config-help",
|
||||||
"show details of rustfmt configuration options");
|
"show details of rustfmt configuration options");
|
||||||
|
opts.optopt("",
|
||||||
|
"dump-default-config",
|
||||||
|
"Dumps the default configuration to a file and exits.",
|
||||||
|
"PATH");
|
||||||
|
opts.optopt("",
|
||||||
|
"dump-minimal-config",
|
||||||
|
"Dumps configuration options that were checked during formatting to a file.",
|
||||||
|
"PATH");
|
||||||
opts.optopt("",
|
opts.optopt("",
|
||||||
"config-path",
|
"config-path",
|
||||||
"Recursively searches the given path for the rustfmt.toml config file. If not \
|
"Recursively searches the given path for the rustfmt.toml config file. If not \
|
||||||
@ -216,6 +227,12 @@ fn execute(opts: &Options) -> FmtResult<Summary> {
|
|||||||
Config::print_docs();
|
Config::print_docs();
|
||||||
Ok(Summary::new())
|
Ok(Summary::new())
|
||||||
}
|
}
|
||||||
|
Operation::ConfigOutputDefault { path } => {
|
||||||
|
let mut file = File::create(path)?;
|
||||||
|
let toml = Config::default().all_options().to_toml()?;
|
||||||
|
file.write_all(toml.as_bytes())?;
|
||||||
|
Ok(Summary::new())
|
||||||
|
}
|
||||||
Operation::Stdin { input, config_path } => {
|
Operation::Stdin { input, config_path } => {
|
||||||
// try to read config from local directory
|
// try to read config from local directory
|
||||||
let (mut config, _) = match_cli_path_or_file(config_path,
|
let (mut config, _) = match_cli_path_or_file(config_path,
|
||||||
@ -236,7 +253,11 @@ fn execute(opts: &Options) -> FmtResult<Summary> {
|
|||||||
|
|
||||||
Ok(run(Input::Text(input), &config))
|
Ok(run(Input::Text(input), &config))
|
||||||
}
|
}
|
||||||
Operation::Format { files, config_path } => {
|
Operation::Format {
|
||||||
|
files,
|
||||||
|
config_path,
|
||||||
|
minimal_config_path,
|
||||||
|
} => {
|
||||||
let options = CliOptions::from_matches(&matches)?;
|
let options = CliOptions::from_matches(&matches)?;
|
||||||
|
|
||||||
for f in options.file_lines.files() {
|
for f in options.file_lines.files() {
|
||||||
@ -286,6 +307,15 @@ fn execute(opts: &Options) -> FmtResult<Summary> {
|
|||||||
error_summary.add(run(Input::File(file), &config));
|
error_summary.add(run(Input::File(file), &config));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If we were given a path via dump-minimal-config, output any options
|
||||||
|
// that were used during formatting as TOML.
|
||||||
|
if let Some(path) = minimal_config_path {
|
||||||
|
let mut file = File::create(path)?;
|
||||||
|
let toml = config.used_options().to_toml()?;
|
||||||
|
file.write_all(toml.as_bytes())?;
|
||||||
|
}
|
||||||
|
|
||||||
Ok(error_summary)
|
Ok(error_summary)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -353,6 +383,10 @@ fn determine_operation(matches: &Matches) -> FmtResult<Operation> {
|
|||||||
return Ok(Operation::ConfigHelp);
|
return Ok(Operation::ConfigHelp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if let Some(path) = matches.opt_str("dump-default-config") {
|
||||||
|
return Ok(Operation::ConfigOutputDefault { path });
|
||||||
|
}
|
||||||
|
|
||||||
if matches.opt_present("version") {
|
if matches.opt_present("version") {
|
||||||
return Ok(Operation::Version);
|
return Ok(Operation::Version);
|
||||||
}
|
}
|
||||||
@ -383,6 +417,9 @@ fn determine_operation(matches: &Matches) -> FmtResult<Operation> {
|
|||||||
path @ _ => path,
|
path @ _ => path,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// If no path is given, we won't output a minimal config.
|
||||||
|
let minimal_config_path = matches.opt_str("dump-minimal-config");
|
||||||
|
|
||||||
// if no file argument is supplied, read from stdin
|
// if no file argument is supplied, read from stdin
|
||||||
if matches.free.is_empty() {
|
if matches.free.is_empty() {
|
||||||
let mut buffer = String::new();
|
let mut buffer = String::new();
|
||||||
@ -408,5 +445,6 @@ fn determine_operation(matches: &Matches) -> FmtResult<Operation> {
|
|||||||
Ok(Operation::Format {
|
Ok(Operation::Format {
|
||||||
files: files,
|
files: files,
|
||||||
config_path: config_path,
|
config_path: config_path,
|
||||||
|
minimal_config_path: minimal_config_path,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user