fix parentheses surrounding spacing issue in parser
This commit is contained in:
parent
c0447b489b
commit
a46af18cb1
6 changed files with 52 additions and 16 deletions
|
@ -568,8 +568,7 @@ trait UnusedDelimLint {
|
|||
let sm = cx.sess().source_map();
|
||||
let lo_replace =
|
||||
if keep_space.0 &&
|
||||
let Ok(snip) = sm.span_to_snippet(lo.with_lo(lo.lo() - BytePos(1))) &&
|
||||
!snip.starts_with(" ") {
|
||||
let Ok(snip) = sm.span_to_prev_source(lo) && !snip.ends_with(" ") {
|
||||
" ".to_string()
|
||||
} else {
|
||||
"".to_string()
|
||||
|
@ -577,8 +576,7 @@ trait UnusedDelimLint {
|
|||
|
||||
let hi_replace =
|
||||
if keep_space.1 &&
|
||||
let Ok(snip) = sm.span_to_snippet(sm.next_point(hi)) &&
|
||||
!snip.starts_with(" ") {
|
||||
let Ok(snip) = sm.span_to_next_source(hi) && !snip.starts_with(" ") {
|
||||
" ".to_string()
|
||||
} else {
|
||||
"".to_string()
|
||||
|
|
|
@ -1122,10 +1122,12 @@ pub(crate) struct ParenthesesInForHead {
|
|||
#[derive(Subdiagnostic)]
|
||||
#[multipart_suggestion(suggestion, applicability = "machine-applicable")]
|
||||
pub(crate) struct ParenthesesInForHeadSugg {
|
||||
#[suggestion_part(code = "")]
|
||||
#[suggestion_part(code = "{left_snippet}")]
|
||||
pub left: Span,
|
||||
#[suggestion_part(code = "")]
|
||||
pub left_snippet: String,
|
||||
#[suggestion_part(code = "{right_snippet}")]
|
||||
pub right: Span,
|
||||
pub right_snippet: String,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
|
|
|
@ -1641,15 +1641,29 @@ impl<'a> Parser<'a> {
|
|||
(token::CloseDelim(Delimiter::Parenthesis), Some(begin_par_sp)) => {
|
||||
self.bump();
|
||||
|
||||
let sm = self.sess.source_map();
|
||||
let left = begin_par_sp;
|
||||
let right = self.prev_token.span;
|
||||
let left_snippet = if let Ok(snip) = sm.span_to_prev_source(left) &&
|
||||
!snip.ends_with(" ") {
|
||||
" ".to_string()
|
||||
} else {
|
||||
"".to_string()
|
||||
};
|
||||
|
||||
let right_snippet = if let Ok(snip) = sm.span_to_next_source(right) &&
|
||||
!snip.starts_with(" ") {
|
||||
" ".to_string()
|
||||
} else {
|
||||
"".to_string()
|
||||
};
|
||||
|
||||
self.sess.emit_err(ParenthesesInForHead {
|
||||
span: vec![begin_par_sp, self.prev_token.span],
|
||||
span: vec![left, right],
|
||||
// With e.g. `for (x) in y)` this would replace `(x) in y)`
|
||||
// with `x) in y)` which is syntactically invalid.
|
||||
// However, this is prevented before we get here.
|
||||
sugg: ParenthesesInForHeadSugg {
|
||||
left: begin_par_sp,
|
||||
right: self.prev_token.span,
|
||||
},
|
||||
sugg: ParenthesesInForHeadSugg { left, right, left_snippet, right_snippet },
|
||||
});
|
||||
|
||||
// Unwrap `(pat)` into `pat` to avoid the `unused_parens` lint.
|
||||
|
|
|
@ -11,6 +11,8 @@ fn main() {
|
|||
if 2 == 1 {}
|
||||
//~^ ERROR unnecessary parentheses around `if` condition
|
||||
|
||||
// FIXME, auto recover from this one?
|
||||
// for(_x in 1..10) {}
|
||||
// reported by parser
|
||||
for _x in 1..10 {}
|
||||
//~^ ERROR expected one of
|
||||
//~| ERROR unexpected parentheses surrounding
|
||||
}
|
||||
|
|
|
@ -11,6 +11,8 @@ fn main() {
|
|||
if(2 == 1){}
|
||||
//~^ ERROR unnecessary parentheses around `if` condition
|
||||
|
||||
// FIXME, auto recover from this one?
|
||||
// for(_x in 1..10) {}
|
||||
// reported by parser
|
||||
for(_x in 1..10){}
|
||||
//~^ ERROR expected one of
|
||||
//~| ERROR unexpected parentheses surrounding
|
||||
}
|
||||
|
|
|
@ -1,3 +1,21 @@
|
|||
error: expected one of `)`, `,`, `@`, or `|`, found keyword `in`
|
||||
--> $DIR/issue-103435-extra-parentheses.rs:15:12
|
||||
|
|
||||
LL | for(_x in 1..10){}
|
||||
| ^^ expected one of `)`, `,`, `@`, or `|`
|
||||
|
||||
error: unexpected parentheses surrounding `for` loop head
|
||||
--> $DIR/issue-103435-extra-parentheses.rs:15:8
|
||||
|
|
||||
LL | for(_x in 1..10){}
|
||||
| ^ ^
|
||||
|
|
||||
help: remove parentheses in `for` loop
|
||||
|
|
||||
LL - for(_x in 1..10){}
|
||||
LL + for _x in 1..10 {}
|
||||
|
|
||||
|
||||
error: unnecessary parentheses around pattern
|
||||
--> $DIR/issue-103435-extra-parentheses.rs:5:11
|
||||
|
|
||||
|
@ -39,5 +57,5 @@ LL - if(2 == 1){}
|
|||
LL + if 2 == 1 {}
|
||||
|
|
||||
|
||||
error: aborting due to 3 previous errors
|
||||
error: aborting due to 5 previous errors
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue