Skip to content

Commit d8ac403

Browse files
authored
Rollup merge of #75320 - estebank:js-for-i-of-x, r=davidtwco
Detect likely `for foo of bar` JS syntax Fix #75311.
2 parents 968740a + 4dbe0ac commit d8ac403

File tree

5 files changed

+25
-7
lines changed

5 files changed

+25
-7
lines changed

src/librustc_parse/parser/expr.rs

+13-6
Original file line numberDiff line numberDiff line change
@@ -1733,13 +1733,20 @@ impl<'a> Parser<'a> {
17331733
Ok(self.mk_expr(lo.to(self.prev_token.span), kind, attrs))
17341734
}
17351735

1736-
fn error_missing_in_for_loop(&self) {
1737-
let in_span = self.prev_token.span.between(self.token.span);
1738-
self.struct_span_err(in_span, "missing `in` in `for` loop")
1736+
fn error_missing_in_for_loop(&mut self) {
1737+
let (span, msg, sugg) = if self.token.is_ident_named(sym::of) {
1738+
// Possibly using JS syntax (#75311).
1739+
let span = self.token.span;
1740+
self.bump();
1741+
(span, "try using `in` here instead", "in")
1742+
} else {
1743+
(self.prev_token.span.between(self.token.span), "try adding `in` here", " in ")
1744+
};
1745+
self.struct_span_err(span, "missing `in` in `for` loop")
17391746
.span_suggestion_short(
1740-
in_span,
1741-
"try adding `in` here",
1742-
" in ".into(),
1747+
span,
1748+
msg,
1749+
sugg.into(),
17431750
// Has been misleading, at least in the past (closed Issue #48492).
17441751
Applicability::MaybeIncorrect,
17451752
)

src/librustc_span/symbol.rs

+1
Original file line numberDiff line numberDiff line change
@@ -737,6 +737,7 @@ symbols! {
737737
not,
738738
note,
739739
object_safe_for_dispatch,
740+
of,
740741
offset,
741742
omit_gdb_pretty_printer_section,
742743
on,

src/test/ui/issues/issue-40782.fixed

+2
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,6 @@
33
fn main() {
44
for _i in 0..2 { //~ ERROR missing `in`
55
}
6+
for _i in 0..2 { //~ ERROR missing `in`
7+
}
68
}

src/test/ui/issues/issue-40782.rs

+2
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,6 @@
33
fn main() {
44
for _i 0..2 { //~ ERROR missing `in`
55
}
6+
for _i of 0..2 { //~ ERROR missing `in`
7+
}
68
}

src/test/ui/issues/issue-40782.stderr

+7-1
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,11 @@ error: missing `in` in `for` loop
44
LL | for _i 0..2 {
55
| ^ help: try adding `in` here
66

7-
error: aborting due to previous error
7+
error: missing `in` in `for` loop
8+
--> $DIR/issue-40782.rs:6:12
9+
|
10+
LL | for _i of 0..2 {
11+
| ^^ help: try using `in` here instead
12+
13+
error: aborting due to 2 previous errors
814

0 commit comments

Comments
 (0)