Merge #10287
10287: internal: more focused tests for const arguments r=matklad a=matklad
bors r+
🤖
Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
This commit is contained in:
commit
b02027d4fe
@ -23,11 +23,13 @@ pub(super) fn opt_generic_arg_list(p: &mut Parser, colon_colon_required: bool) {
|
|||||||
m.complete(p, GENERIC_ARG_LIST);
|
m.complete(p, GENERIC_ARG_LIST);
|
||||||
}
|
}
|
||||||
|
|
||||||
// test type_arg
|
// test generic_arg
|
||||||
// type A = B<'static, i32, 1, { 2 }, Item=u64, true, false>;
|
// type T = S<i32>;
|
||||||
fn generic_arg(p: &mut Parser) {
|
fn generic_arg(p: &mut Parser) {
|
||||||
match p.current() {
|
match p.current() {
|
||||||
LIFETIME_IDENT => lifetime_arg(p),
|
LIFETIME_IDENT => lifetime_arg(p),
|
||||||
|
T!['{'] | T![true] | T![false] | T![-] => const_arg(p),
|
||||||
|
k if k.is_literal() => const_arg(p),
|
||||||
// test associated_type_bounds
|
// test associated_type_bounds
|
||||||
// fn print_all<T: Iterator<Item, Item::Item, Item::<true>, Item: Display, Item<'a> = Item>>(printables: T) {}
|
// fn print_all<T: Iterator<Item, Item::Item, Item::<true>, Item: Display, Item<'a> = Item>>(printables: T) {}
|
||||||
IDENT if [T![<], T![=], T![:]].contains(&p.nth(1)) => {
|
IDENT if [T![<], T![=], T![:]].contains(&p.nth(1)) => {
|
||||||
@ -35,13 +37,15 @@ fn generic_arg(p: &mut Parser) {
|
|||||||
name_ref(p);
|
name_ref(p);
|
||||||
opt_generic_arg_list(p, false);
|
opt_generic_arg_list(p, false);
|
||||||
match p.current() {
|
match p.current() {
|
||||||
// NameRef<...> =
|
// test assoc_type_eq
|
||||||
|
// type T = StreamingIterator<Item<'a> = &'a T>;
|
||||||
T![=] => {
|
T![=] => {
|
||||||
p.bump_any();
|
p.bump_any();
|
||||||
types::type_(p);
|
types::type_(p);
|
||||||
m.complete(p, ASSOC_TYPE_ARG);
|
m.complete(p, ASSOC_TYPE_ARG);
|
||||||
}
|
}
|
||||||
// NameRef<...>:
|
// test assoc_type_bound
|
||||||
|
// type T = StreamingIterator<Item<'a>: Clone>;
|
||||||
T![:] if !p.at(T![::]) => {
|
T![:] if !p.at(T![::]) => {
|
||||||
generic_params::bounds(p);
|
generic_params::bounds(p);
|
||||||
m.complete(p, ASSOC_TYPE_ARG);
|
m.complete(p, ASSOC_TYPE_ARG);
|
||||||
@ -53,35 +57,43 @@ fn generic_arg(p: &mut Parser) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// test const_generic_negated_literal
|
|
||||||
// fn f() { S::<-1> }
|
|
||||||
T!['{'] | T![true] | T![false] | T![-] => const_arg(p),
|
|
||||||
k if k.is_literal() => const_arg(p),
|
|
||||||
_ => type_arg(p),
|
_ => type_arg(p),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// test lifetime_arg
|
||||||
|
// type T = S<'static>;
|
||||||
fn lifetime_arg(p: &mut Parser) {
|
fn lifetime_arg(p: &mut Parser) {
|
||||||
let m = p.start();
|
let m = p.start();
|
||||||
lifetime(p);
|
lifetime(p);
|
||||||
m.complete(p, LIFETIME_ARG);
|
m.complete(p, LIFETIME_ARG);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// test const_arg
|
||||||
|
// type T = S<92>;
|
||||||
pub(super) fn const_arg(p: &mut Parser) {
|
pub(super) fn const_arg(p: &mut Parser) {
|
||||||
let m = p.start();
|
let m = p.start();
|
||||||
match p.current() {
|
match p.current() {
|
||||||
|
// test const_arg_block
|
||||||
|
// type T = S<{90 + 2}>;
|
||||||
T!['{'] => {
|
T!['{'] => {
|
||||||
expressions::block_expr(p);
|
expressions::block_expr(p);
|
||||||
m.complete(p, CONST_ARG);
|
m.complete(p, CONST_ARG);
|
||||||
}
|
}
|
||||||
|
// test const_arg_literal
|
||||||
|
// type T = S<"hello", 0xdeadbeef>;
|
||||||
k if k.is_literal() => {
|
k if k.is_literal() => {
|
||||||
expressions::literal(p);
|
expressions::literal(p);
|
||||||
m.complete(p, CONST_ARG);
|
m.complete(p, CONST_ARG);
|
||||||
}
|
}
|
||||||
|
// test const_arg_bool_literal
|
||||||
|
// type T = S<true>;
|
||||||
T![true] | T![false] => {
|
T![true] | T![false] => {
|
||||||
expressions::literal(p);
|
expressions::literal(p);
|
||||||
m.complete(p, CONST_ARG);
|
m.complete(p, CONST_ARG);
|
||||||
}
|
}
|
||||||
|
// test const_arg_negative_number
|
||||||
|
// type T = S<-92>;
|
||||||
T![-] => {
|
T![-] => {
|
||||||
let lm = p.start();
|
let lm = p.start();
|
||||||
p.bump(T![-]);
|
p.bump(T![-]);
|
||||||
@ -89,6 +101,8 @@ pub(super) fn const_arg(p: &mut Parser) {
|
|||||||
lm.complete(p, PREFIX_EXPR);
|
lm.complete(p, PREFIX_EXPR);
|
||||||
m.complete(p, CONST_ARG);
|
m.complete(p, CONST_ARG);
|
||||||
}
|
}
|
||||||
|
// test const_arg_path
|
||||||
|
// struct S<const N: u32 = u32::MAX>;
|
||||||
_ => {
|
_ => {
|
||||||
let lm = p.start();
|
let lm = p.start();
|
||||||
paths::use_path(p);
|
paths::use_path(p);
|
||||||
|
@ -81,8 +81,6 @@ fn const_param(p: &mut Parser, m: Marker) {
|
|||||||
if p.at(T![=]) {
|
if p.at(T![=]) {
|
||||||
// test const_param_defaults
|
// test const_param_defaults
|
||||||
// struct A<const N: i32 = -1>;
|
// struct A<const N: i32 = -1>;
|
||||||
// struct B<const N: i32 = {}>;
|
|
||||||
// struct C<const N: i32 = some::CONST>;
|
|
||||||
p.bump(T![=]);
|
p.bump(T![=]);
|
||||||
generic_args::const_arg(p);
|
generic_args::const_arg(p);
|
||||||
}
|
}
|
||||||
|
@ -1,66 +0,0 @@
|
|||||||
SOURCE_FILE@0..59
|
|
||||||
TYPE_ALIAS@0..58
|
|
||||||
TYPE_KW@0..4 "type"
|
|
||||||
WHITESPACE@4..5 " "
|
|
||||||
NAME@5..6
|
|
||||||
IDENT@5..6 "A"
|
|
||||||
WHITESPACE@6..7 " "
|
|
||||||
EQ@7..8 "="
|
|
||||||
WHITESPACE@8..9 " "
|
|
||||||
PATH_TYPE@9..57
|
|
||||||
PATH@9..57
|
|
||||||
PATH_SEGMENT@9..57
|
|
||||||
NAME_REF@9..10
|
|
||||||
IDENT@9..10 "B"
|
|
||||||
GENERIC_ARG_LIST@10..57
|
|
||||||
L_ANGLE@10..11 "<"
|
|
||||||
LIFETIME_ARG@11..18
|
|
||||||
LIFETIME@11..18
|
|
||||||
LIFETIME_IDENT@11..18 "'static"
|
|
||||||
COMMA@18..19 ","
|
|
||||||
WHITESPACE@19..20 " "
|
|
||||||
TYPE_ARG@20..23
|
|
||||||
PATH_TYPE@20..23
|
|
||||||
PATH@20..23
|
|
||||||
PATH_SEGMENT@20..23
|
|
||||||
NAME_REF@20..23
|
|
||||||
IDENT@20..23 "i32"
|
|
||||||
COMMA@23..24 ","
|
|
||||||
WHITESPACE@24..25 " "
|
|
||||||
CONST_ARG@25..26
|
|
||||||
LITERAL@25..26
|
|
||||||
INT_NUMBER@25..26 "1"
|
|
||||||
COMMA@26..27 ","
|
|
||||||
WHITESPACE@27..28 " "
|
|
||||||
CONST_ARG@28..33
|
|
||||||
BLOCK_EXPR@28..33
|
|
||||||
L_CURLY@28..29 "{"
|
|
||||||
WHITESPACE@29..30 " "
|
|
||||||
LITERAL@30..31
|
|
||||||
INT_NUMBER@30..31 "2"
|
|
||||||
WHITESPACE@31..32 " "
|
|
||||||
R_CURLY@32..33 "}"
|
|
||||||
COMMA@33..34 ","
|
|
||||||
WHITESPACE@34..35 " "
|
|
||||||
ASSOC_TYPE_ARG@35..43
|
|
||||||
NAME_REF@35..39
|
|
||||||
IDENT@35..39 "Item"
|
|
||||||
EQ@39..40 "="
|
|
||||||
PATH_TYPE@40..43
|
|
||||||
PATH@40..43
|
|
||||||
PATH_SEGMENT@40..43
|
|
||||||
NAME_REF@40..43
|
|
||||||
IDENT@40..43 "u64"
|
|
||||||
COMMA@43..44 ","
|
|
||||||
WHITESPACE@44..45 " "
|
|
||||||
CONST_ARG@45..49
|
|
||||||
LITERAL@45..49
|
|
||||||
TRUE_KW@45..49 "true"
|
|
||||||
COMMA@49..50 ","
|
|
||||||
WHITESPACE@50..51 " "
|
|
||||||
CONST_ARG@51..56
|
|
||||||
LITERAL@51..56
|
|
||||||
FALSE_KW@51..56 "false"
|
|
||||||
R_ANGLE@56..57 ">"
|
|
||||||
SEMICOLON@57..58 ";"
|
|
||||||
WHITESPACE@58..59 "\n"
|
|
@ -1 +0,0 @@
|
|||||||
type A = B<'static, i32, 1, { 2 }, Item=u64, true, false>;
|
|
@ -1,30 +0,0 @@
|
|||||||
SOURCE_FILE@0..19
|
|
||||||
FN@0..18
|
|
||||||
FN_KW@0..2 "fn"
|
|
||||||
WHITESPACE@2..3 " "
|
|
||||||
NAME@3..4
|
|
||||||
IDENT@3..4 "f"
|
|
||||||
PARAM_LIST@4..6
|
|
||||||
L_PAREN@4..5 "("
|
|
||||||
R_PAREN@5..6 ")"
|
|
||||||
WHITESPACE@6..7 " "
|
|
||||||
BLOCK_EXPR@7..18
|
|
||||||
L_CURLY@7..8 "{"
|
|
||||||
WHITESPACE@8..9 " "
|
|
||||||
PATH_EXPR@9..16
|
|
||||||
PATH@9..16
|
|
||||||
PATH_SEGMENT@9..16
|
|
||||||
NAME_REF@9..10
|
|
||||||
IDENT@9..10 "S"
|
|
||||||
GENERIC_ARG_LIST@10..16
|
|
||||||
COLON2@10..12 "::"
|
|
||||||
L_ANGLE@12..13 "<"
|
|
||||||
CONST_ARG@13..15
|
|
||||||
PREFIX_EXPR@13..15
|
|
||||||
MINUS@13..14 "-"
|
|
||||||
LITERAL@14..15
|
|
||||||
INT_NUMBER@14..15 "1"
|
|
||||||
R_ANGLE@15..16 ">"
|
|
||||||
WHITESPACE@16..17 " "
|
|
||||||
R_CURLY@17..18 "}"
|
|
||||||
WHITESPACE@18..19 "\n"
|
|
@ -1 +0,0 @@
|
|||||||
fn f() { S::<-1> }
|
|
@ -1,4 +1,4 @@
|
|||||||
SOURCE_FILE@0..96
|
SOURCE_FILE@0..29
|
||||||
STRUCT@0..28
|
STRUCT@0..28
|
||||||
STRUCT_KW@0..6 "struct"
|
STRUCT_KW@0..6 "struct"
|
||||||
WHITESPACE@6..7 " "
|
WHITESPACE@6..7 " "
|
||||||
@ -29,68 +29,3 @@ SOURCE_FILE@0..96
|
|||||||
R_ANGLE@26..27 ">"
|
R_ANGLE@26..27 ">"
|
||||||
SEMICOLON@27..28 ";"
|
SEMICOLON@27..28 ";"
|
||||||
WHITESPACE@28..29 "\n"
|
WHITESPACE@28..29 "\n"
|
||||||
STRUCT@29..57
|
|
||||||
STRUCT_KW@29..35 "struct"
|
|
||||||
WHITESPACE@35..36 " "
|
|
||||||
NAME@36..37
|
|
||||||
IDENT@36..37 "B"
|
|
||||||
GENERIC_PARAM_LIST@37..56
|
|
||||||
L_ANGLE@37..38 "<"
|
|
||||||
CONST_PARAM@38..55
|
|
||||||
CONST_KW@38..43 "const"
|
|
||||||
WHITESPACE@43..44 " "
|
|
||||||
NAME@44..45
|
|
||||||
IDENT@44..45 "N"
|
|
||||||
COLON@45..46 ":"
|
|
||||||
WHITESPACE@46..47 " "
|
|
||||||
PATH_TYPE@47..50
|
|
||||||
PATH@47..50
|
|
||||||
PATH_SEGMENT@47..50
|
|
||||||
NAME_REF@47..50
|
|
||||||
IDENT@47..50 "i32"
|
|
||||||
WHITESPACE@50..51 " "
|
|
||||||
EQ@51..52 "="
|
|
||||||
WHITESPACE@52..53 " "
|
|
||||||
CONST_ARG@53..55
|
|
||||||
BLOCK_EXPR@53..55
|
|
||||||
L_CURLY@53..54 "{"
|
|
||||||
R_CURLY@54..55 "}"
|
|
||||||
R_ANGLE@55..56 ">"
|
|
||||||
SEMICOLON@56..57 ";"
|
|
||||||
WHITESPACE@57..58 "\n"
|
|
||||||
STRUCT@58..95
|
|
||||||
STRUCT_KW@58..64 "struct"
|
|
||||||
WHITESPACE@64..65 " "
|
|
||||||
NAME@65..66
|
|
||||||
IDENT@65..66 "C"
|
|
||||||
GENERIC_PARAM_LIST@66..94
|
|
||||||
L_ANGLE@66..67 "<"
|
|
||||||
CONST_PARAM@67..93
|
|
||||||
CONST_KW@67..72 "const"
|
|
||||||
WHITESPACE@72..73 " "
|
|
||||||
NAME@73..74
|
|
||||||
IDENT@73..74 "N"
|
|
||||||
COLON@74..75 ":"
|
|
||||||
WHITESPACE@75..76 " "
|
|
||||||
PATH_TYPE@76..79
|
|
||||||
PATH@76..79
|
|
||||||
PATH_SEGMENT@76..79
|
|
||||||
NAME_REF@76..79
|
|
||||||
IDENT@76..79 "i32"
|
|
||||||
WHITESPACE@79..80 " "
|
|
||||||
EQ@80..81 "="
|
|
||||||
WHITESPACE@81..82 " "
|
|
||||||
CONST_ARG@82..93
|
|
||||||
PATH_EXPR@82..93
|
|
||||||
PATH@82..93
|
|
||||||
PATH@82..86
|
|
||||||
PATH_SEGMENT@82..86
|
|
||||||
NAME_REF@82..86
|
|
||||||
IDENT@82..86 "some"
|
|
||||||
COLON2@86..88 "::"
|
|
||||||
PATH_SEGMENT@88..93
|
|
||||||
NAME_REF@88..93
|
|
||||||
IDENT@88..93 "CONST"
|
|
||||||
R_ANGLE@93..94 ">"
|
|
||||||
SEMICOLON@94..95 ";"
|
|
||||||
WHITESPACE@95..96 "\n"
|
|
||||||
|
@ -1,3 +1 @@
|
|||||||
struct A<const N: i32 = -1>;
|
struct A<const N: i32 = -1>;
|
||||||
struct B<const N: i32 = {}>;
|
|
||||||
struct C<const N: i32 = some::CONST>;
|
|
||||||
|
@ -0,0 +1,31 @@
|
|||||||
|
SOURCE_FILE@0..22
|
||||||
|
TYPE_ALIAS@0..21
|
||||||
|
TYPE_KW@0..4 "type"
|
||||||
|
WHITESPACE@4..5 " "
|
||||||
|
NAME@5..6
|
||||||
|
IDENT@5..6 "T"
|
||||||
|
WHITESPACE@6..7 " "
|
||||||
|
EQ@7..8 "="
|
||||||
|
WHITESPACE@8..9 " "
|
||||||
|
PATH_TYPE@9..20
|
||||||
|
PATH@9..20
|
||||||
|
PATH_SEGMENT@9..20
|
||||||
|
NAME_REF@9..10
|
||||||
|
IDENT@9..10 "S"
|
||||||
|
GENERIC_ARG_LIST@10..20
|
||||||
|
L_ANGLE@10..11 "<"
|
||||||
|
CONST_ARG@11..19
|
||||||
|
BLOCK_EXPR@11..19
|
||||||
|
L_CURLY@11..12 "{"
|
||||||
|
BIN_EXPR@12..18
|
||||||
|
LITERAL@12..14
|
||||||
|
INT_NUMBER@12..14 "90"
|
||||||
|
WHITESPACE@14..15 " "
|
||||||
|
PLUS@15..16 "+"
|
||||||
|
WHITESPACE@16..17 " "
|
||||||
|
LITERAL@17..18
|
||||||
|
INT_NUMBER@17..18 "2"
|
||||||
|
R_CURLY@18..19 "}"
|
||||||
|
R_ANGLE@19..20 ">"
|
||||||
|
SEMICOLON@20..21 ";"
|
||||||
|
WHITESPACE@21..22 "\n"
|
@ -0,0 +1 @@
|
|||||||
|
type T = S<{90 + 2}>;
|
22
crates/syntax/test_data/parser/inline/ok/0184_const_arg.rast
Normal file
22
crates/syntax/test_data/parser/inline/ok/0184_const_arg.rast
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
SOURCE_FILE@0..16
|
||||||
|
TYPE_ALIAS@0..15
|
||||||
|
TYPE_KW@0..4 "type"
|
||||||
|
WHITESPACE@4..5 " "
|
||||||
|
NAME@5..6
|
||||||
|
IDENT@5..6 "T"
|
||||||
|
WHITESPACE@6..7 " "
|
||||||
|
EQ@7..8 "="
|
||||||
|
WHITESPACE@8..9 " "
|
||||||
|
PATH_TYPE@9..14
|
||||||
|
PATH@9..14
|
||||||
|
PATH_SEGMENT@9..14
|
||||||
|
NAME_REF@9..10
|
||||||
|
IDENT@9..10 "S"
|
||||||
|
GENERIC_ARG_LIST@10..14
|
||||||
|
L_ANGLE@10..11 "<"
|
||||||
|
CONST_ARG@11..13
|
||||||
|
LITERAL@11..13
|
||||||
|
INT_NUMBER@11..13 "92"
|
||||||
|
R_ANGLE@13..14 ">"
|
||||||
|
SEMICOLON@14..15 ";"
|
||||||
|
WHITESPACE@15..16 "\n"
|
@ -0,0 +1 @@
|
|||||||
|
type T = S<92>;
|
@ -0,0 +1,37 @@
|
|||||||
|
SOURCE_FILE@0..45
|
||||||
|
TYPE_ALIAS@0..44
|
||||||
|
TYPE_KW@0..4 "type"
|
||||||
|
WHITESPACE@4..5 " "
|
||||||
|
NAME@5..6
|
||||||
|
IDENT@5..6 "T"
|
||||||
|
WHITESPACE@6..7 " "
|
||||||
|
EQ@7..8 "="
|
||||||
|
WHITESPACE@8..9 " "
|
||||||
|
PATH_TYPE@9..43
|
||||||
|
PATH@9..43
|
||||||
|
PATH_SEGMENT@9..43
|
||||||
|
NAME_REF@9..26
|
||||||
|
IDENT@9..26 "StreamingIterator"
|
||||||
|
GENERIC_ARG_LIST@26..43
|
||||||
|
L_ANGLE@26..27 "<"
|
||||||
|
ASSOC_TYPE_ARG@27..42
|
||||||
|
NAME_REF@27..31
|
||||||
|
IDENT@27..31 "Item"
|
||||||
|
GENERIC_ARG_LIST@31..35
|
||||||
|
L_ANGLE@31..32 "<"
|
||||||
|
LIFETIME_ARG@32..34
|
||||||
|
LIFETIME@32..34
|
||||||
|
LIFETIME_IDENT@32..34 "'a"
|
||||||
|
R_ANGLE@34..35 ">"
|
||||||
|
COLON@35..36 ":"
|
||||||
|
WHITESPACE@36..37 " "
|
||||||
|
TYPE_BOUND_LIST@37..42
|
||||||
|
TYPE_BOUND@37..42
|
||||||
|
PATH_TYPE@37..42
|
||||||
|
PATH@37..42
|
||||||
|
PATH_SEGMENT@37..42
|
||||||
|
NAME_REF@37..42
|
||||||
|
IDENT@37..42 "Clone"
|
||||||
|
R_ANGLE@42..43 ">"
|
||||||
|
SEMICOLON@43..44 ";"
|
||||||
|
WHITESPACE@44..45 "\n"
|
@ -0,0 +1 @@
|
|||||||
|
type T = StreamingIterator<Item<'a>: Clone>;
|
@ -0,0 +1,22 @@
|
|||||||
|
SOURCE_FILE@0..21
|
||||||
|
TYPE_ALIAS@0..20
|
||||||
|
TYPE_KW@0..4 "type"
|
||||||
|
WHITESPACE@4..5 " "
|
||||||
|
NAME@5..6
|
||||||
|
IDENT@5..6 "T"
|
||||||
|
WHITESPACE@6..7 " "
|
||||||
|
EQ@7..8 "="
|
||||||
|
WHITESPACE@8..9 " "
|
||||||
|
PATH_TYPE@9..19
|
||||||
|
PATH@9..19
|
||||||
|
PATH_SEGMENT@9..19
|
||||||
|
NAME_REF@9..10
|
||||||
|
IDENT@9..10 "S"
|
||||||
|
GENERIC_ARG_LIST@10..19
|
||||||
|
L_ANGLE@10..11 "<"
|
||||||
|
LIFETIME_ARG@11..18
|
||||||
|
LIFETIME@11..18
|
||||||
|
LIFETIME_IDENT@11..18 "'static"
|
||||||
|
R_ANGLE@18..19 ">"
|
||||||
|
SEMICOLON@19..20 ";"
|
||||||
|
WHITESPACE@20..21 "\n"
|
@ -0,0 +1 @@
|
|||||||
|
type T = S<'static>;
|
@ -0,0 +1,41 @@
|
|||||||
|
SOURCE_FILE@0..46
|
||||||
|
TYPE_ALIAS@0..45
|
||||||
|
TYPE_KW@0..4 "type"
|
||||||
|
WHITESPACE@4..5 " "
|
||||||
|
NAME@5..6
|
||||||
|
IDENT@5..6 "T"
|
||||||
|
WHITESPACE@6..7 " "
|
||||||
|
EQ@7..8 "="
|
||||||
|
WHITESPACE@8..9 " "
|
||||||
|
PATH_TYPE@9..44
|
||||||
|
PATH@9..44
|
||||||
|
PATH_SEGMENT@9..44
|
||||||
|
NAME_REF@9..26
|
||||||
|
IDENT@9..26 "StreamingIterator"
|
||||||
|
GENERIC_ARG_LIST@26..44
|
||||||
|
L_ANGLE@26..27 "<"
|
||||||
|
ASSOC_TYPE_ARG@27..43
|
||||||
|
NAME_REF@27..31
|
||||||
|
IDENT@27..31 "Item"
|
||||||
|
GENERIC_ARG_LIST@31..35
|
||||||
|
L_ANGLE@31..32 "<"
|
||||||
|
LIFETIME_ARG@32..34
|
||||||
|
LIFETIME@32..34
|
||||||
|
LIFETIME_IDENT@32..34 "'a"
|
||||||
|
R_ANGLE@34..35 ">"
|
||||||
|
WHITESPACE@35..36 " "
|
||||||
|
EQ@36..37 "="
|
||||||
|
WHITESPACE@37..38 " "
|
||||||
|
REF_TYPE@38..43
|
||||||
|
AMP@38..39 "&"
|
||||||
|
LIFETIME@39..41
|
||||||
|
LIFETIME_IDENT@39..41 "'a"
|
||||||
|
WHITESPACE@41..42 " "
|
||||||
|
PATH_TYPE@42..43
|
||||||
|
PATH@42..43
|
||||||
|
PATH_SEGMENT@42..43
|
||||||
|
NAME_REF@42..43
|
||||||
|
IDENT@42..43 "T"
|
||||||
|
R_ANGLE@43..44 ">"
|
||||||
|
SEMICOLON@44..45 ";"
|
||||||
|
WHITESPACE@45..46 "\n"
|
@ -0,0 +1 @@
|
|||||||
|
type T = StreamingIterator<Item<'a> = &'a T>;
|
@ -0,0 +1,37 @@
|
|||||||
|
SOURCE_FILE@0..35
|
||||||
|
STRUCT@0..34
|
||||||
|
STRUCT_KW@0..6 "struct"
|
||||||
|
WHITESPACE@6..7 " "
|
||||||
|
NAME@7..8
|
||||||
|
IDENT@7..8 "S"
|
||||||
|
GENERIC_PARAM_LIST@8..33
|
||||||
|
L_ANGLE@8..9 "<"
|
||||||
|
CONST_PARAM@9..32
|
||||||
|
CONST_KW@9..14 "const"
|
||||||
|
WHITESPACE@14..15 " "
|
||||||
|
NAME@15..16
|
||||||
|
IDENT@15..16 "N"
|
||||||
|
COLON@16..17 ":"
|
||||||
|
WHITESPACE@17..18 " "
|
||||||
|
PATH_TYPE@18..21
|
||||||
|
PATH@18..21
|
||||||
|
PATH_SEGMENT@18..21
|
||||||
|
NAME_REF@18..21
|
||||||
|
IDENT@18..21 "u32"
|
||||||
|
WHITESPACE@21..22 " "
|
||||||
|
EQ@22..23 "="
|
||||||
|
WHITESPACE@23..24 " "
|
||||||
|
CONST_ARG@24..32
|
||||||
|
PATH_EXPR@24..32
|
||||||
|
PATH@24..32
|
||||||
|
PATH@24..27
|
||||||
|
PATH_SEGMENT@24..27
|
||||||
|
NAME_REF@24..27
|
||||||
|
IDENT@24..27 "u32"
|
||||||
|
COLON2@27..29 "::"
|
||||||
|
PATH_SEGMENT@29..32
|
||||||
|
NAME_REF@29..32
|
||||||
|
IDENT@29..32 "MAX"
|
||||||
|
R_ANGLE@32..33 ">"
|
||||||
|
SEMICOLON@33..34 ";"
|
||||||
|
WHITESPACE@34..35 "\n"
|
@ -0,0 +1 @@
|
|||||||
|
struct S<const N: u32 = u32::MAX>;
|
@ -0,0 +1,27 @@
|
|||||||
|
SOURCE_FILE@0..33
|
||||||
|
TYPE_ALIAS@0..32
|
||||||
|
TYPE_KW@0..4 "type"
|
||||||
|
WHITESPACE@4..5 " "
|
||||||
|
NAME@5..6
|
||||||
|
IDENT@5..6 "T"
|
||||||
|
WHITESPACE@6..7 " "
|
||||||
|
EQ@7..8 "="
|
||||||
|
WHITESPACE@8..9 " "
|
||||||
|
PATH_TYPE@9..31
|
||||||
|
PATH@9..31
|
||||||
|
PATH_SEGMENT@9..31
|
||||||
|
NAME_REF@9..10
|
||||||
|
IDENT@9..10 "S"
|
||||||
|
GENERIC_ARG_LIST@10..31
|
||||||
|
L_ANGLE@10..11 "<"
|
||||||
|
CONST_ARG@11..18
|
||||||
|
LITERAL@11..18
|
||||||
|
STRING@11..18 "\"hello\""
|
||||||
|
COMMA@18..19 ","
|
||||||
|
WHITESPACE@19..20 " "
|
||||||
|
CONST_ARG@20..30
|
||||||
|
LITERAL@20..30
|
||||||
|
INT_NUMBER@20..30 "0xdeadbeef"
|
||||||
|
R_ANGLE@30..31 ">"
|
||||||
|
SEMICOLON@31..32 ";"
|
||||||
|
WHITESPACE@32..33 "\n"
|
@ -0,0 +1 @@
|
|||||||
|
type T = S<"hello", 0xdeadbeef>;
|
@ -0,0 +1,25 @@
|
|||||||
|
SOURCE_FILE@0..17
|
||||||
|
TYPE_ALIAS@0..16
|
||||||
|
TYPE_KW@0..4 "type"
|
||||||
|
WHITESPACE@4..5 " "
|
||||||
|
NAME@5..6
|
||||||
|
IDENT@5..6 "T"
|
||||||
|
WHITESPACE@6..7 " "
|
||||||
|
EQ@7..8 "="
|
||||||
|
WHITESPACE@8..9 " "
|
||||||
|
PATH_TYPE@9..15
|
||||||
|
PATH@9..15
|
||||||
|
PATH_SEGMENT@9..15
|
||||||
|
NAME_REF@9..10
|
||||||
|
IDENT@9..10 "S"
|
||||||
|
GENERIC_ARG_LIST@10..15
|
||||||
|
L_ANGLE@10..11 "<"
|
||||||
|
TYPE_ARG@11..14
|
||||||
|
PATH_TYPE@11..14
|
||||||
|
PATH@11..14
|
||||||
|
PATH_SEGMENT@11..14
|
||||||
|
NAME_REF@11..14
|
||||||
|
IDENT@11..14 "i32"
|
||||||
|
R_ANGLE@14..15 ">"
|
||||||
|
SEMICOLON@15..16 ";"
|
||||||
|
WHITESPACE@16..17 "\n"
|
@ -0,0 +1 @@
|
|||||||
|
type T = S<i32>;
|
@ -0,0 +1,24 @@
|
|||||||
|
SOURCE_FILE@0..17
|
||||||
|
TYPE_ALIAS@0..16
|
||||||
|
TYPE_KW@0..4 "type"
|
||||||
|
WHITESPACE@4..5 " "
|
||||||
|
NAME@5..6
|
||||||
|
IDENT@5..6 "T"
|
||||||
|
WHITESPACE@6..7 " "
|
||||||
|
EQ@7..8 "="
|
||||||
|
WHITESPACE@8..9 " "
|
||||||
|
PATH_TYPE@9..15
|
||||||
|
PATH@9..15
|
||||||
|
PATH_SEGMENT@9..15
|
||||||
|
NAME_REF@9..10
|
||||||
|
IDENT@9..10 "S"
|
||||||
|
GENERIC_ARG_LIST@10..15
|
||||||
|
L_ANGLE@10..11 "<"
|
||||||
|
CONST_ARG@11..14
|
||||||
|
PREFIX_EXPR@11..14
|
||||||
|
MINUS@11..12 "-"
|
||||||
|
LITERAL@12..14
|
||||||
|
INT_NUMBER@12..14 "92"
|
||||||
|
R_ANGLE@14..15 ">"
|
||||||
|
SEMICOLON@15..16 ";"
|
||||||
|
WHITESPACE@16..17 "\n"
|
@ -0,0 +1 @@
|
|||||||
|
type T = S<-92>;
|
@ -0,0 +1,22 @@
|
|||||||
|
SOURCE_FILE@0..18
|
||||||
|
TYPE_ALIAS@0..17
|
||||||
|
TYPE_KW@0..4 "type"
|
||||||
|
WHITESPACE@4..5 " "
|
||||||
|
NAME@5..6
|
||||||
|
IDENT@5..6 "T"
|
||||||
|
WHITESPACE@6..7 " "
|
||||||
|
EQ@7..8 "="
|
||||||
|
WHITESPACE@8..9 " "
|
||||||
|
PATH_TYPE@9..16
|
||||||
|
PATH@9..16
|
||||||
|
PATH_SEGMENT@9..16
|
||||||
|
NAME_REF@9..10
|
||||||
|
IDENT@9..10 "S"
|
||||||
|
GENERIC_ARG_LIST@10..16
|
||||||
|
L_ANGLE@10..11 "<"
|
||||||
|
CONST_ARG@11..15
|
||||||
|
LITERAL@11..15
|
||||||
|
TRUE_KW@11..15 "true"
|
||||||
|
R_ANGLE@15..16 ">"
|
||||||
|
SEMICOLON@16..17 ";"
|
||||||
|
WHITESPACE@17..18 "\n"
|
@ -0,0 +1 @@
|
|||||||
|
type T = S<true>;
|
Loading…
Reference in New Issue
Block a user