mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-27 05:23:24 +00:00
internal: explain "extract if condition" refactoring
This commit is contained in:
parent
58924cfae1
commit
a01fd1af19
2 changed files with 29 additions and 10 deletions
|
@ -927,22 +927,22 @@ pub(crate) fn handle_formatting(
|
||||||
let captured_stderr = String::from_utf8(output.stderr).unwrap_or_default();
|
let captured_stderr = String::from_utf8(output.stderr).unwrap_or_default();
|
||||||
|
|
||||||
if !output.status.success() {
|
if !output.status.success() {
|
||||||
match output.status.code() {
|
let rustfmt_not_installed =
|
||||||
Some(1)
|
captured_stderr.contains("not installed") || captured_stderr.contains("not available");
|
||||||
if !captured_stderr.contains("not installed")
|
|
||||||
&& !captured_stderr.contains("not available") =>
|
return match output.status.code() {
|
||||||
{
|
Some(1) if !rustfmt_not_installed => {
|
||||||
// While `rustfmt` doesn't have a specific exit code for parse errors this is the
|
// While `rustfmt` doesn't have a specific exit code for parse errors this is the
|
||||||
// likely cause exiting with 1. Most Language Servers swallow parse errors on
|
// likely cause exiting with 1. Most Language Servers swallow parse errors on
|
||||||
// formatting because otherwise an error is surfaced to the user on top of the
|
// formatting because otherwise an error is surfaced to the user on top of the
|
||||||
// syntax error diagnostics they're already receiving. This is especially jarring
|
// syntax error diagnostics they're already receiving. This is especially jarring
|
||||||
// if they have format on save enabled.
|
// if they have format on save enabled.
|
||||||
log::info!("rustfmt exited with status 1, assuming parse error and ignoring");
|
log::info!("rustfmt exited with status 1, assuming parse error and ignoring");
|
||||||
return Ok(None);
|
Ok(None)
|
||||||
}
|
}
|
||||||
_ => {
|
_ => {
|
||||||
// Something else happened - e.g. `rustfmt` is missing or caught a signal
|
// Something else happened - e.g. `rustfmt` is missing or caught a signal
|
||||||
return Err(LspError::new(
|
Err(LspError::new(
|
||||||
-32900,
|
-32900,
|
||||||
format!(
|
format!(
|
||||||
r#"rustfmt exited with:
|
r#"rustfmt exited with:
|
||||||
|
@ -952,9 +952,9 @@ pub(crate) fn handle_formatting(
|
||||||
output.status, captured_stdout, captured_stderr,
|
output.status, captured_stdout, captured_stderr,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
.into());
|
.into())
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
let (new_text, new_line_endings) = LineEndings::normalize(captured_stdout);
|
let (new_text, new_line_endings) = LineEndings::normalize(captured_stdout);
|
||||||
|
|
|
@ -842,7 +842,26 @@ Re-using originally single-purpose function often leads to bad coupling.
|
||||||
|
|
||||||
## Helper Variables
|
## Helper Variables
|
||||||
|
|
||||||
Introduce helper variables freely, especially for multiline conditions.
|
Introduce helper variables freely, especially for multiline conditions:
|
||||||
|
|
||||||
|
```rust
|
||||||
|
// GOOD
|
||||||
|
let rustfmt_not_installed =
|
||||||
|
captured_stderr.contains("not installed") || captured_stderr.contains("not available");
|
||||||
|
|
||||||
|
match output.status.code() {
|
||||||
|
Some(1) if !rustfmt_not_installed => Ok(None),
|
||||||
|
_ => Err(format_err!("rustfmt failed:\n{}", captured_stderr)),
|
||||||
|
};
|
||||||
|
|
||||||
|
// BAD
|
||||||
|
match output.status.code() {
|
||||||
|
Some(1)
|
||||||
|
if !captured_stderr.contains("not installed")
|
||||||
|
&& !captured_stderr.contains("not available") => Ok(None),
|
||||||
|
_ => Err(format_err!("rustfmt failed:\n{}", captured_stderr)),
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
**Rationale:** like blocks, single-use variables are a cognitively cheap abstraction, as they have access to all the context.
|
**Rationale:** like blocks, single-use variables are a cognitively cheap abstraction, as they have access to all the context.
|
||||||
Extra variables help during debugging, they make it easy to print/view important intermediate results.
|
Extra variables help during debugging, they make it easy to print/view important intermediate results.
|
||||||
|
|
Loading…
Reference in a new issue