Add check for extra path segments after an angled one

This commit is contained in:
shilangyu 2023-02-25 16:16:49 +01:00
parent 9a4efb4cc3
commit 44e47fe408
4 changed files with 58 additions and 0 deletions

View file

@ -827,6 +827,7 @@ macro_rules! rgb_color {
/* parse error: expected type */ /* parse error: expected type */
/* parse error: expected R_PAREN */ /* parse error: expected R_PAREN */
/* parse error: expected R_ANGLE */ /* parse error: expected R_ANGLE */
/* parse error: expected `::` */
/* parse error: expected COMMA */ /* parse error: expected COMMA */
/* parse error: expected R_ANGLE */ /* parse error: expected R_ANGLE */
/* parse error: expected SEMICOLON */ /* parse error: expected SEMICOLON */

View file

@ -77,6 +77,9 @@ fn path_segment(p: &mut Parser<'_>, mode: Mode, first: bool) {
// type X = <A as B>::Output; // type X = <A as B>::Output;
// fn foo() { <usize as Default>::default(); } // fn foo() { <usize as Default>::default(); }
if first && p.eat(T![<]) { if first && p.eat(T![<]) {
// test_err angled_path_without_qual
// type X = <()>;
// type Y = <A as B>;
types::type_(p); types::type_(p);
if p.eat(T![as]) { if p.eat(T![as]) {
if is_use_path_start(p) { if is_use_path_start(p) {
@ -86,6 +89,9 @@ fn path_segment(p: &mut Parser<'_>, mode: Mode, first: bool) {
} }
} }
p.expect(T![>]); p.expect(T![>]);
if !p.at(T![::]) {
p.error("expected `::`");
}
} else { } else {
let empty = if first { let empty = if first {
p.eat(T![::]); p.eat(T![::]);

View file

@ -0,0 +1,49 @@
SOURCE_FILE
TYPE_ALIAS
TYPE_KW "type"
WHITESPACE " "
NAME
IDENT "X"
WHITESPACE " "
EQ "="
WHITESPACE " "
PATH_TYPE
PATH
PATH_SEGMENT
L_ANGLE "<"
TUPLE_TYPE
L_PAREN "("
R_PAREN ")"
R_ANGLE ">"
SEMICOLON ";"
WHITESPACE "\n"
TYPE_ALIAS
TYPE_KW "type"
WHITESPACE " "
NAME
IDENT "Y"
WHITESPACE " "
EQ "="
WHITESPACE " "
PATH_TYPE
PATH
PATH_SEGMENT
L_ANGLE "<"
PATH_TYPE
PATH
PATH_SEGMENT
NAME_REF
IDENT "A"
WHITESPACE " "
AS_KW "as"
WHITESPACE " "
PATH_TYPE
PATH
PATH_SEGMENT
NAME_REF
IDENT "B"
R_ANGLE ">"
SEMICOLON ";"
WHITESPACE "\n"
error 13: expected `::`
error 32: expected `::`

View file

@ -0,0 +1,2 @@
type X = <()>;
type Y = <A as B>;