Rollup merge of #118606 - long-long-float:x-do-not-quit-when-x-prints-settings-json, r=onur-ozkan

Fix `x` not to quit after `x` prints `settings.json`

I fixed the `x` not to quit after the `x` prints `.vscode/settings.json`.

The command `x setup` ask as following:

```
x.py can automatically install the recommended `.vscode/settings.json` file for rustc development
Would you like to create/update `settings.json`, or only print suggested settings?: [y/p/N]
```

When user types `p`, the `x` prints the contents and quit the program.
It is a hassle to start the command again, so I fixed the `x` to ask what to do again.
This commit is contained in:
Matthias Krüger 2023-12-05 16:08:36 +01:00 committed by GitHub
commit a260acc668
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -549,12 +549,13 @@ fn run(self, builder: &Builder<'_>) -> Self::Output {
if config.dry_run() { if config.dry_run() {
return; return;
} }
t!(create_vscode_settings_maybe(&config)); while !t!(create_vscode_settings_maybe(&config)) {}
} }
} }
/// Create a `.vscode/settings.json` file for rustc development, or just print it /// Create a `.vscode/settings.json` file for rustc development, or just print it
fn create_vscode_settings_maybe(config: &Config) -> io::Result<()> { /// If this method should be re-called, it returns `false`.
fn create_vscode_settings_maybe(config: &Config) -> io::Result<bool> {
let (current_hash, historical_hashes) = SETTINGS_HASHES.split_last().unwrap(); let (current_hash, historical_hashes) = SETTINGS_HASHES.split_last().unwrap();
let vscode_settings = config.src.join(".vscode").join("settings.json"); let vscode_settings = config.src.join(".vscode").join("settings.json");
// If None, no settings.json exists // If None, no settings.json exists
@ -567,7 +568,7 @@ fn create_vscode_settings_maybe(config: &Config) -> io::Result<()> {
hasher.update(&current); hasher.update(&current);
let hash = hex::encode(hasher.finalize().as_slice()); let hash = hex::encode(hasher.finalize().as_slice());
if hash == *current_hash { if hash == *current_hash {
return Ok(()); return Ok(true);
} else if historical_hashes.contains(&hash.as_str()) { } else if historical_hashes.contains(&hash.as_str()) {
mismatched_settings = Some(true); mismatched_settings = Some(true);
} else { } else {
@ -587,13 +588,13 @@ fn create_vscode_settings_maybe(config: &Config) -> io::Result<()> {
_ => (), _ => (),
} }
let should_create = match prompt_user( let should_create = match prompt_user(
"Would you like to create/update `settings.json`, or only print suggested settings?: [y/p/N]", "Would you like to create/update settings.json? (Press 'p' to preview values): [y/N]",
)? { )? {
Some(PromptResult::Yes) => true, Some(PromptResult::Yes) => true,
Some(PromptResult::Print) => false, Some(PromptResult::Print) => false,
_ => { _ => {
println!("Ok, skipping settings!"); println!("Ok, skipping settings!");
return Ok(()); return Ok(true);
} }
}; };
if should_create { if should_create {
@ -620,5 +621,5 @@ fn create_vscode_settings_maybe(config: &Config) -> io::Result<()> {
} else { } else {
println!("\n{RUST_ANALYZER_SETTINGS}"); println!("\n{RUST_ANALYZER_SETTINGS}");
} }
Ok(()) Ok(should_create)
} }