diff options
| author | Yuki Okushi <huyuumi.dev@gmail.com> | 2020-08-10 09:07:56 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-08-10 09:07:56 +0900 |
| commit | d8ac403fd1c68660b6898777546cc191616cd48d (patch) | |
| tree | 042ea91c842c587d810e93fc70db2f8d5bb4ac9b | |
| parent | 968740a3a34f245ca95eeb61f089fa2d09b1b0cc (diff) | |
| parent | 4dbe0ac9287d723ae9d39e3c2b90930813eed4a3 (diff) | |
| download | rust-d8ac403fd1c68660b6898777546cc191616cd48d.tar.gz rust-d8ac403fd1c68660b6898777546cc191616cd48d.zip | |
Rollup merge of #75320 - estebank:js-for-i-of-x, r=davidtwco
Detect likely `for foo of bar` JS syntax Fix #75311.
| -rw-r--r-- | src/librustc_parse/parser/expr.rs | 19 | ||||
| -rw-r--r-- | src/librustc_span/symbol.rs | 1 | ||||
| -rw-r--r-- | src/test/ui/issues/issue-40782.fixed | 2 | ||||
| -rw-r--r-- | src/test/ui/issues/issue-40782.rs | 2 | ||||
| -rw-r--r-- | src/test/ui/issues/issue-40782.stderr | 8 |
5 files changed, 25 insertions, 7 deletions
diff --git a/src/librustc_parse/parser/expr.rs b/src/librustc_parse/parser/expr.rs index 3aec300d86d..55a134ae091 100644 --- a/src/librustc_parse/parser/expr.rs +++ b/src/librustc_parse/parser/expr.rs @@ -1733,13 +1733,20 @@ impl<'a> Parser<'a> { Ok(self.mk_expr(lo.to(self.prev_token.span), kind, attrs)) } - fn error_missing_in_for_loop(&self) { - let in_span = self.prev_token.span.between(self.token.span); - self.struct_span_err(in_span, "missing `in` in `for` loop") + fn error_missing_in_for_loop(&mut self) { + let (span, msg, sugg) = if self.token.is_ident_named(sym::of) { + // Possibly using JS syntax (#75311). + let span = self.token.span; + self.bump(); + (span, "try using `in` here instead", "in") + } else { + (self.prev_token.span.between(self.token.span), "try adding `in` here", " in ") + }; + self.struct_span_err(span, "missing `in` in `for` loop") .span_suggestion_short( - in_span, - "try adding `in` here", - " in ".into(), + span, + msg, + sugg.into(), // Has been misleading, at least in the past (closed Issue #48492). Applicability::MaybeIncorrect, ) diff --git a/src/librustc_span/symbol.rs b/src/librustc_span/symbol.rs index ca9702784a2..caa6de09664 100644 --- a/src/librustc_span/symbol.rs +++ b/src/librustc_span/symbol.rs @@ -737,6 +737,7 @@ symbols! { not, note, object_safe_for_dispatch, + of, offset, omit_gdb_pretty_printer_section, on, diff --git a/src/test/ui/issues/issue-40782.fixed b/src/test/ui/issues/issue-40782.fixed index d61c248c6ec..305a9c3292a 100644 --- a/src/test/ui/issues/issue-40782.fixed +++ b/src/test/ui/issues/issue-40782.fixed @@ -3,4 +3,6 @@ fn main() { for _i in 0..2 { //~ ERROR missing `in` } + for _i in 0..2 { //~ ERROR missing `in` + } } diff --git a/src/test/ui/issues/issue-40782.rs b/src/test/ui/issues/issue-40782.rs index 3688c69fbc6..43460ec1535 100644 --- a/src/test/ui/issues/issue-40782.rs +++ b/src/test/ui/issues/issue-40782.rs @@ -3,4 +3,6 @@ fn main() { for _i 0..2 { //~ ERROR missing `in` } + for _i of 0..2 { //~ ERROR missing `in` + } } diff --git a/src/test/ui/issues/issue-40782.stderr b/src/test/ui/issues/issue-40782.stderr index 9d7776f32b3..81f419bf687 100644 --- a/src/test/ui/issues/issue-40782.stderr +++ b/src/test/ui/issues/issue-40782.stderr @@ -4,5 +4,11 @@ error: missing `in` in `for` loop LL | for _i 0..2 { | ^ help: try adding `in` here -error: aborting due to previous error +error: missing `in` in `for` loop + --> $DIR/issue-40782.rs:6:12 + | +LL | for _i of 0..2 { + | ^^ help: try using `in` here instead + +error: aborting due to 2 previous errors |
