will not suggest for postfix operator when can not handle precedences well

This commit is contained in:
yukang 2022-11-26 07:10:04 +08:00
parent dee85a391f
commit ded10a13d2
3 changed files with 43 additions and 11 deletions

View File

@ -1316,7 +1316,11 @@ impl<'a> Parser<'a> {
self.prefix_inc_dec_suggest(base_src, kind, spans).emit(&mut err)
}
UnaryFixity::Post => {
self.postfix_inc_dec_suggest(base_src, kind, spans).emit(&mut err)
// won't suggest since we can not handle the precedences
// for example: `a + b++` has been parsed (a + b)++ and we can not suggest here
if !matches!(base.kind, ExprKind::Binary(_, _, _)) {
self.postfix_inc_dec_suggest(base_src, kind, spans).emit(&mut err)
}
}
}
}

View File

@ -16,6 +16,7 @@ fn test3() {
fn test4() {
let mut i = 0;
let _ = i + i++; //~ ERROR Rust has no postfix increment operator
// won't suggest since we can not handle the precedences
}
fn test5() {
@ -38,4 +39,14 @@ fn test8() {
let _ = i++ + ++i; //~ ERROR Rust has no postfix increment operator
}
fn test9() {
let mut i = 0;
let _ = (1 + 2 + i)++; //~ ERROR Rust has no postfix increment operator
}
fn test10() {
let mut i = 0;
let _ = (i++ + 1) + 2; //~ ERROR Rust has no postfix increment operator
}
fn main() { }

View File

@ -36,14 +36,9 @@ error: Rust has no postfix increment operator
|
LL | let _ = i + i++;
| ^^ not a valid postfix operator
|
help: use `+= 1` instead
|
LL | let _ = { let tmp = i + i; i + i += 1; tmp };
| +++++++++++ ~~~~~~~~~~~~~~~~~~~
error: Rust has no postfix increment operator
--> $DIR/issue-104867-inc-dec-2.rs:23:14
--> $DIR/issue-104867-inc-dec-2.rs:24:14
|
LL | let _ = i++ + i;
| ^^ not a valid postfix operator
@ -54,7 +49,7 @@ LL | let _ = { let tmp = i; i += 1; tmp } + i;
| +++++++++++ ~~~~~~~~~~~~~~~
error: Rust has no postfix increment operator
--> $DIR/issue-104867-inc-dec-2.rs:28:14
--> $DIR/issue-104867-inc-dec-2.rs:29:14
|
LL | let _ = i++ + i++;
| ^^ not a valid postfix operator
@ -65,7 +60,7 @@ LL | let _ = { let tmp = i; i += 1; tmp } + i++;
| +++++++++++ ~~~~~~~~~~~~~~~
error: Rust has no prefix increment operator
--> $DIR/issue-104867-inc-dec-2.rs:33:13
--> $DIR/issue-104867-inc-dec-2.rs:34:13
|
LL | let _ = ++i + i++;
| ^^ not a valid prefix operator
@ -76,7 +71,7 @@ LL | let _ = { i += 1; i } + i++;
| ~ +++++++++
error: Rust has no postfix increment operator
--> $DIR/issue-104867-inc-dec-2.rs:38:14
--> $DIR/issue-104867-inc-dec-2.rs:39:14
|
LL | let _ = i++ + ++i;
| ^^ not a valid postfix operator
@ -86,5 +81,27 @@ help: use `+= 1` instead
LL | let _ = { let tmp = i; i += 1; tmp } + ++i;
| +++++++++++ ~~~~~~~~~~~~~~~
error: aborting due to 8 previous errors
error: Rust has no postfix increment operator
--> $DIR/issue-104867-inc-dec-2.rs:44:24
|
LL | let _ = (1 + 2 + i)++;
| ^^ not a valid postfix operator
|
help: use `+= 1` instead
|
LL | let _ = { let tmp = (1 + 2 + i); (1 + 2 + i) += 1; tmp };
| +++++++++++ ~~~~~~~~~~~~~~~~~~~~~~~~~
error: Rust has no postfix increment operator
--> $DIR/issue-104867-inc-dec-2.rs:49:15
|
LL | let _ = (i++ + 1) + 2;
| ^^ not a valid postfix operator
|
help: use `+= 1` instead
|
LL | let _ = ({ let tmp = i; i += 1; tmp } + 1) + 2;
| +++++++++++ ~~~~~~~~~~~~~~~
error: aborting due to 10 previous errors