let has_trailing_expression =
p.at_ts(EXPR_FIRST) && !(r.forbid_structs && p.at(T!['{']));
if !has_trailing_expression {
- if op == T![..=] {
- p.error("expected expression to end inclusive range");
- }
// no RHS
lhs = m.complete(p, RANGE_EXPR);
break;
InvalidMatchInnerAttr,
InvalidTupleIndexFormat,
VisibilityNotAllowed,
+ InclusiveRangeMissingEnd,
}
impl fmt::Display for SyntaxErrorKind {
VisibilityNotAllowed => {
write!(f, "unnecessary visibility qualifier")
}
+ InclusiveRangeMissingEnd => {
+ write!(f, "An inclusive range must have an end expression")
+ }
}
}
}
ast::FieldExpr(it) => { validate_numeric_name(it.name_ref(), &mut errors) },
ast::RecordField(it) => { validate_numeric_name(it.name_ref(), &mut errors) },
ast::Visibility(it) => { validate_visibility(it, &mut errors) },
+ ast::RangeExpr(it) => { validate_range_expr(it, &mut errors) },
_ => (),
}
}
.push(SyntaxError::new(SyntaxErrorKind::VisibilityNotAllowed, vis.syntax.text_range()))
}
}
+
+fn validate_range_expr(expr: ast::RangeExpr, errors: &mut Vec<SyntaxError>) {
+ let last_child = match expr.syntax().last_child_or_token() {
+ Some(it) => it,
+ None => return,
+ };
+ if last_child.kind() == T![..=] {
+ errors.push(SyntaxError::new(
+ SyntaxErrorKind::InclusiveRangeMissingEnd,
+ last_child.text_range(),
+ ));
+ }
+}
fn main() {
0..=;
+ ..=;
}
-SOURCE_FILE@[0; 24)
- FN_DEF@[0; 23)
+SOURCE_FILE@[0; 33)
+ FN_DEF@[0; 32)
FN_KW@[0; 2) "fn"
WHITESPACE@[2; 3) " "
NAME@[3; 7)
L_PAREN@[7; 8) "("
R_PAREN@[8; 9) ")"
WHITESPACE@[9; 10) " "
- BLOCK_EXPR@[10; 23)
- BLOCK@[10; 23)
+ BLOCK_EXPR@[10; 32)
+ BLOCK@[10; 32)
L_CURLY@[10; 11) "{"
WHITESPACE@[11; 16) "\n "
EXPR_STMT@[16; 21)
INT_NUMBER@[16; 17) "0"
DOTDOTEQ@[17; 20) "..="
SEMI@[20; 21) ";"
- WHITESPACE@[21; 22) "\n"
- R_CURLY@[22; 23) "}"
- WHITESPACE@[23; 24) "\n"
-error 20: expected expression to end inclusive range
+ WHITESPACE@[21; 26) "\n "
+ EXPR_STMT@[26; 30)
+ RANGE_EXPR@[26; 29)
+ DOTDOTEQ@[26; 29) "..="
+ SEMI@[29; 30) ";"
+ WHITESPACE@[30; 31) "\n"
+ R_CURLY@[31; 32) "}"
+ WHITESPACE@[32; 33) "\n"
+error [17; 20): An inclusive range must have an end expression
+error [26; 29): An inclusive range must have an end expression