mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-11-01 12:24:29 +00:00
Give path segment type anchors their own grammar rule
This commit is contained in:
parent
d2164fe08b
commit
7c3de05e3a
14 changed files with 223 additions and 158 deletions
|
|
@ -89,7 +89,9 @@ fn path_segment(p: &mut Parser<'_>, mode: Mode, first: bool) -> Option<Completed
|
|||
// test qual_paths
|
||||
// type X = <A as B>::Output;
|
||||
// fn foo() { <usize as Default>::default(); }
|
||||
if first && p.eat(T![<]) {
|
||||
if first && p.at(T![<]) {
|
||||
let m = p.start();
|
||||
p.bump(T![<]);
|
||||
// test_err angled_path_without_qual
|
||||
// type X = <()>;
|
||||
// type Y = <A as B>;
|
||||
|
|
@ -102,6 +104,7 @@ fn path_segment(p: &mut Parser<'_>, mode: Mode, first: bool) -> Option<Completed
|
|||
}
|
||||
}
|
||||
p.expect(T![>]);
|
||||
m.complete(p, TYPE_ANCHOR);
|
||||
if !p.at(T![::]) {
|
||||
p.error("expected `::`");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -291,6 +291,7 @@ pub enum SyntaxKind {
|
|||
TUPLE_STRUCT_PAT,
|
||||
TUPLE_TYPE,
|
||||
TYPE_ALIAS,
|
||||
TYPE_ANCHOR,
|
||||
TYPE_ARG,
|
||||
TYPE_BOUND,
|
||||
TYPE_BOUND_LIST,
|
||||
|
|
@ -463,6 +464,7 @@ impl SyntaxKind {
|
|||
| TUPLE_STRUCT_PAT
|
||||
| TUPLE_TYPE
|
||||
| TYPE_ALIAS
|
||||
| TYPE_ANCHOR
|
||||
| TYPE_ARG
|
||||
| TYPE_BOUND
|
||||
| TYPE_BOUND_LIST
|
||||
|
|
|
|||
|
|
@ -10,11 +10,12 @@ SOURCE_FILE
|
|||
PATH_TYPE
|
||||
PATH
|
||||
PATH_SEGMENT
|
||||
L_ANGLE "<"
|
||||
TUPLE_TYPE
|
||||
L_PAREN "("
|
||||
R_PAREN ")"
|
||||
R_ANGLE ">"
|
||||
TYPE_ANCHOR
|
||||
L_ANGLE "<"
|
||||
TUPLE_TYPE
|
||||
L_PAREN "("
|
||||
R_PAREN ")"
|
||||
R_ANGLE ">"
|
||||
SEMICOLON ";"
|
||||
WHITESPACE "\n"
|
||||
TYPE_ALIAS
|
||||
|
|
@ -28,21 +29,22 @@ SOURCE_FILE
|
|||
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 ">"
|
||||
TYPE_ANCHOR
|
||||
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 `::`
|
||||
|
|
|
|||
|
|
@ -88,13 +88,14 @@ SOURCE_FILE
|
|||
PATH
|
||||
PATH
|
||||
PATH_SEGMENT
|
||||
L_ANGLE "<"
|
||||
PATH_TYPE
|
||||
PATH
|
||||
PATH_SEGMENT
|
||||
NAME_REF
|
||||
IDENT "Foo"
|
||||
R_ANGLE ">"
|
||||
TYPE_ANCHOR
|
||||
L_ANGLE "<"
|
||||
PATH_TYPE
|
||||
PATH
|
||||
PATH_SEGMENT
|
||||
NAME_REF
|
||||
IDENT "Foo"
|
||||
R_ANGLE ">"
|
||||
COLON2 "::"
|
||||
PATH_SEGMENT
|
||||
NAME_REF
|
||||
|
|
@ -119,21 +120,22 @@ SOURCE_FILE
|
|||
PATH
|
||||
PATH
|
||||
PATH_SEGMENT
|
||||
L_ANGLE "<"
|
||||
PATH_TYPE
|
||||
PATH
|
||||
PATH_SEGMENT
|
||||
NAME_REF
|
||||
IDENT "Foo"
|
||||
WHITESPACE " "
|
||||
AS_KW "as"
|
||||
WHITESPACE " "
|
||||
PATH_TYPE
|
||||
PATH
|
||||
PATH_SEGMENT
|
||||
NAME_REF
|
||||
IDENT "Trait"
|
||||
R_ANGLE ">"
|
||||
TYPE_ANCHOR
|
||||
L_ANGLE "<"
|
||||
PATH_TYPE
|
||||
PATH
|
||||
PATH_SEGMENT
|
||||
NAME_REF
|
||||
IDENT "Foo"
|
||||
WHITESPACE " "
|
||||
AS_KW "as"
|
||||
WHITESPACE " "
|
||||
PATH_TYPE
|
||||
PATH
|
||||
PATH_SEGMENT
|
||||
NAME_REF
|
||||
IDENT "Trait"
|
||||
R_ANGLE ">"
|
||||
COLON2 "::"
|
||||
PATH_SEGMENT
|
||||
NAME_REF
|
||||
|
|
|
|||
|
|
@ -11,21 +11,22 @@ SOURCE_FILE
|
|||
PATH
|
||||
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 ">"
|
||||
TYPE_ANCHOR
|
||||
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 ">"
|
||||
COLON2 "::"
|
||||
PATH_SEGMENT
|
||||
NAME_REF
|
||||
|
|
@ -51,21 +52,22 @@ SOURCE_FILE
|
|||
PATH
|
||||
PATH
|
||||
PATH_SEGMENT
|
||||
L_ANGLE "<"
|
||||
PATH_TYPE
|
||||
PATH
|
||||
PATH_SEGMENT
|
||||
NAME_REF
|
||||
IDENT "usize"
|
||||
WHITESPACE " "
|
||||
AS_KW "as"
|
||||
WHITESPACE " "
|
||||
PATH_TYPE
|
||||
PATH
|
||||
PATH_SEGMENT
|
||||
NAME_REF
|
||||
IDENT "Default"
|
||||
R_ANGLE ">"
|
||||
TYPE_ANCHOR
|
||||
L_ANGLE "<"
|
||||
PATH_TYPE
|
||||
PATH
|
||||
PATH_SEGMENT
|
||||
NAME_REF
|
||||
IDENT "usize"
|
||||
WHITESPACE " "
|
||||
AS_KW "as"
|
||||
WHITESPACE " "
|
||||
PATH_TYPE
|
||||
PATH
|
||||
PATH_SEGMENT
|
||||
NAME_REF
|
||||
IDENT "Default"
|
||||
R_ANGLE ">"
|
||||
COLON2 "::"
|
||||
PATH_SEGMENT
|
||||
NAME_REF
|
||||
|
|
|
|||
|
|
@ -19,10 +19,11 @@ SOURCE_FILE
|
|||
PATH
|
||||
PATH
|
||||
PATH_SEGMENT
|
||||
L_ANGLE "<"
|
||||
INFER_TYPE
|
||||
UNDERSCORE "_"
|
||||
R_ANGLE ">"
|
||||
TYPE_ANCHOR
|
||||
L_ANGLE "<"
|
||||
INFER_TYPE
|
||||
UNDERSCORE "_"
|
||||
R_ANGLE ">"
|
||||
COLON2 "::"
|
||||
PATH_SEGMENT
|
||||
NAME_REF
|
||||
|
|
|
|||
|
|
@ -84,21 +84,22 @@ SOURCE_FILE
|
|||
PATH
|
||||
PATH
|
||||
PATH_SEGMENT
|
||||
L_ANGLE "<"
|
||||
PATH_TYPE
|
||||
PATH
|
||||
PATH_SEGMENT
|
||||
NAME_REF
|
||||
IDENT "T"
|
||||
WHITESPACE " "
|
||||
AS_KW "as"
|
||||
WHITESPACE " "
|
||||
PATH_TYPE
|
||||
PATH
|
||||
PATH_SEGMENT
|
||||
NAME_REF
|
||||
IDENT "Iterator"
|
||||
R_ANGLE ">"
|
||||
TYPE_ANCHOR
|
||||
L_ANGLE "<"
|
||||
PATH_TYPE
|
||||
PATH
|
||||
PATH_SEGMENT
|
||||
NAME_REF
|
||||
IDENT "T"
|
||||
WHITESPACE " "
|
||||
AS_KW "as"
|
||||
WHITESPACE " "
|
||||
PATH_TYPE
|
||||
PATH
|
||||
PATH_SEGMENT
|
||||
NAME_REF
|
||||
IDENT "Iterator"
|
||||
R_ANGLE ">"
|
||||
COLON2 "::"
|
||||
PATH_SEGMENT
|
||||
NAME_REF
|
||||
|
|
|
|||
|
|
@ -45,21 +45,22 @@ SOURCE_FILE
|
|||
PATH
|
||||
PATH
|
||||
PATH_SEGMENT
|
||||
L_ANGLE "<"
|
||||
PATH_TYPE
|
||||
PATH
|
||||
PATH_SEGMENT
|
||||
NAME_REF
|
||||
IDENT "S"
|
||||
WHITESPACE " "
|
||||
AS_KW "as"
|
||||
WHITESPACE " "
|
||||
PATH_TYPE
|
||||
PATH
|
||||
PATH_SEGMENT
|
||||
NAME_REF
|
||||
IDENT "Iterator"
|
||||
R_ANGLE ">"
|
||||
TYPE_ANCHOR
|
||||
L_ANGLE "<"
|
||||
PATH_TYPE
|
||||
PATH
|
||||
PATH_SEGMENT
|
||||
NAME_REF
|
||||
IDENT "S"
|
||||
WHITESPACE " "
|
||||
AS_KW "as"
|
||||
WHITESPACE " "
|
||||
PATH_TYPE
|
||||
PATH
|
||||
PATH_SEGMENT
|
||||
NAME_REF
|
||||
IDENT "Iterator"
|
||||
R_ANGLE ">"
|
||||
COLON2 "::"
|
||||
PATH_SEGMENT
|
||||
NAME_REF
|
||||
|
|
|
|||
|
|
@ -107,13 +107,14 @@ SOURCE_FILE
|
|||
PATH
|
||||
PATH
|
||||
PATH_SEGMENT
|
||||
L_ANGLE "<"
|
||||
PATH_TYPE
|
||||
PATH
|
||||
PATH_SEGMENT
|
||||
NAME_REF
|
||||
IDENT "Foo"
|
||||
R_ANGLE ">"
|
||||
TYPE_ANCHOR
|
||||
L_ANGLE "<"
|
||||
PATH_TYPE
|
||||
PATH
|
||||
PATH_SEGMENT
|
||||
NAME_REF
|
||||
IDENT "Foo"
|
||||
R_ANGLE ">"
|
||||
COLON2 "::"
|
||||
PATH_SEGMENT
|
||||
NAME_REF
|
||||
|
|
|
|||
|
|
@ -288,26 +288,27 @@ SOURCE_FILE
|
|||
PATH
|
||||
PATH
|
||||
PATH_SEGMENT
|
||||
L_ANGLE "<"
|
||||
REF_TYPE
|
||||
AMP "&"
|
||||
LIFETIME
|
||||
LIFETIME_IDENT "'a"
|
||||
TYPE_ANCHOR
|
||||
L_ANGLE "<"
|
||||
REF_TYPE
|
||||
AMP "&"
|
||||
LIFETIME
|
||||
LIFETIME_IDENT "'a"
|
||||
WHITESPACE " "
|
||||
PATH_TYPE
|
||||
PATH
|
||||
PATH_SEGMENT
|
||||
NAME_REF
|
||||
IDENT "T"
|
||||
WHITESPACE " "
|
||||
AS_KW "as"
|
||||
WHITESPACE " "
|
||||
PATH_TYPE
|
||||
PATH
|
||||
PATH_SEGMENT
|
||||
NAME_REF
|
||||
IDENT "T"
|
||||
WHITESPACE " "
|
||||
AS_KW "as"
|
||||
WHITESPACE " "
|
||||
PATH_TYPE
|
||||
PATH
|
||||
PATH_SEGMENT
|
||||
NAME_REF
|
||||
IDENT "Baz"
|
||||
R_ANGLE ">"
|
||||
IDENT "Baz"
|
||||
R_ANGLE ">"
|
||||
COLON2 "::"
|
||||
PATH_SEGMENT
|
||||
NAME_REF
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue