mirror of
https://github.com/rust-lang/rust.git
synced 2025-04-13 04:26:48 +00:00
Merge #10265
10265: internal: parser cleanups r=matklad a=matklad
bors r+
🤖
Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
This commit is contained in:
commit
4badd2faf8
@ -12,6 +12,28 @@ pub(super) fn outer_attrs(p: &mut Parser) {
|
||||
}
|
||||
}
|
||||
|
||||
fn attr(p: &mut Parser, inner: bool) {
|
||||
assert!(p.at(T![#]));
|
||||
|
||||
let attr = p.start();
|
||||
p.bump(T![#]);
|
||||
|
||||
if inner {
|
||||
p.bump(T![!]);
|
||||
}
|
||||
|
||||
if p.eat(T!['[']) {
|
||||
meta(p);
|
||||
|
||||
if !p.eat(T![']']) {
|
||||
p.error("expected `]`");
|
||||
}
|
||||
} else {
|
||||
p.error("expected `[`");
|
||||
}
|
||||
attr.complete(p, ATTR);
|
||||
}
|
||||
|
||||
pub(super) fn meta(p: &mut Parser) {
|
||||
let meta = p.start();
|
||||
paths::use_path(p);
|
||||
@ -29,25 +51,3 @@ pub(super) fn meta(p: &mut Parser) {
|
||||
|
||||
meta.complete(p, META);
|
||||
}
|
||||
|
||||
fn attr(p: &mut Parser, inner: bool) {
|
||||
let attr = p.start();
|
||||
assert!(p.at(T![#]));
|
||||
p.bump(T![#]);
|
||||
|
||||
if inner {
|
||||
assert!(p.at(T![!]));
|
||||
p.bump(T![!]);
|
||||
}
|
||||
|
||||
if p.eat(T!['[']) {
|
||||
meta(p);
|
||||
|
||||
if !p.eat(T![']']) {
|
||||
p.error("expected `]`");
|
||||
}
|
||||
} else {
|
||||
p.error("expected `[`");
|
||||
}
|
||||
attr.complete(p, ATTR);
|
||||
}
|
||||
|
@ -71,7 +71,7 @@ pub(super) fn stmt(p: &mut Parser, with_semi: StmtWithSemi, prefer_expr: bool) {
|
||||
|
||||
// test block_items
|
||||
// fn a() { fn b() {} }
|
||||
let m = match items::maybe_item(p, m) {
|
||||
let m = match items::opt_item(p, m) {
|
||||
Ok(()) => return,
|
||||
Err(m) => m,
|
||||
};
|
||||
|
@ -44,7 +44,8 @@ pub(super) const ITEM_RECOVERY_SET: TokenSet = TokenSet::new(&[
|
||||
pub(super) fn item_or_macro(p: &mut Parser, stop_on_r_curly: bool) {
|
||||
let m = p.start();
|
||||
attributes::outer_attrs(p);
|
||||
let m = match maybe_item(p, m) {
|
||||
|
||||
let m = match opt_item(p, m) {
|
||||
Ok(()) => {
|
||||
if p.at(T![;]) {
|
||||
p.err_and_bump(
|
||||
@ -56,6 +57,7 @@ pub(super) fn item_or_macro(p: &mut Parser, stop_on_r_curly: bool) {
|
||||
}
|
||||
Err(m) => m,
|
||||
};
|
||||
|
||||
if paths::is_use_path_start(p) {
|
||||
match macro_call(p) {
|
||||
BlockLike::Block => (),
|
||||
@ -64,30 +66,30 @@ pub(super) fn item_or_macro(p: &mut Parser, stop_on_r_curly: bool) {
|
||||
}
|
||||
}
|
||||
m.complete(p, MACRO_CALL);
|
||||
} else {
|
||||
m.abandon(p);
|
||||
if p.at(T!['{']) {
|
||||
error_block(p, "expected an item");
|
||||
} else if p.at(T!['}']) && !stop_on_r_curly {
|
||||
return;
|
||||
}
|
||||
|
||||
m.abandon(p);
|
||||
match p.current() {
|
||||
T!['{'] => error_block(p, "expected an item"),
|
||||
T!['}'] if !stop_on_r_curly => {
|
||||
let e = p.start();
|
||||
p.error("unmatched `}`");
|
||||
p.bump(T!['}']);
|
||||
e.complete(p, ERROR);
|
||||
} else if !p.at(EOF) && !p.at(T!['}']) {
|
||||
p.err_and_bump("expected an item");
|
||||
} else {
|
||||
p.error("expected an item");
|
||||
}
|
||||
EOF | T!['}'] => p.error("expected an item"),
|
||||
_ => p.err_and_bump("expected an item"),
|
||||
}
|
||||
}
|
||||
|
||||
/// Try to parse an item, completing `m` in case of success.
|
||||
pub(super) fn maybe_item(p: &mut Parser, m: Marker) -> Result<(), Marker> {
|
||||
pub(super) fn opt_item(p: &mut Parser, m: Marker) -> Result<(), Marker> {
|
||||
// test_err pub_expr
|
||||
// fn foo() { pub 92; }
|
||||
let has_visibility = opt_visibility(p);
|
||||
|
||||
let m = match items_without_modifiers(p, m) {
|
||||
let m = match opt_item_without_modifiers(p, m) {
|
||||
Ok(()) => return Ok(()),
|
||||
Err(m) => m,
|
||||
};
|
||||
@ -235,48 +237,20 @@ pub(super) fn maybe_item(p: &mut Parser, m: Marker) -> Result<(), Marker> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn items_without_modifiers(p: &mut Parser, m: Marker) -> Result<(), Marker> {
|
||||
fn opt_item_without_modifiers(p: &mut Parser, m: Marker) -> Result<(), Marker> {
|
||||
let la = p.nth(1);
|
||||
match p.current() {
|
||||
// test extern_crate
|
||||
// extern crate foo;
|
||||
T![extern] if la == T![crate] => extern_crate(p, m),
|
||||
T![use] => use_item::use_(p, m),
|
||||
T![mod] => mod_item(p, m),
|
||||
|
||||
T![type] => type_alias(p, m),
|
||||
|
||||
T![struct] => {
|
||||
// test struct_items
|
||||
// struct Foo;
|
||||
// struct Foo {}
|
||||
// struct Foo();
|
||||
// struct Foo(String, usize);
|
||||
// struct Foo {
|
||||
// a: i32,
|
||||
// b: f32,
|
||||
// }
|
||||
adt::strukt(p, m);
|
||||
}
|
||||
T![struct] => adt::strukt(p, m),
|
||||
T![enum] => adt::enum_(p, m),
|
||||
IDENT if p.at_contextual_kw("union") && p.nth(1) == IDENT => {
|
||||
// test union_items
|
||||
// union Foo {}
|
||||
// union Foo {
|
||||
// a: i32,
|
||||
// b: f32,
|
||||
// }
|
||||
adt::union(p, m);
|
||||
}
|
||||
IDENT if p.at_contextual_kw("union") && p.nth(1) == IDENT => adt::union(p, m),
|
||||
|
||||
// test pub_macro_def
|
||||
// pub macro m($:ident) {}
|
||||
T![macro] => {
|
||||
macro_def(p, m);
|
||||
}
|
||||
IDENT if p.at_contextual_kw("macro_rules") && p.nth(1) == BANG => {
|
||||
macro_rules(p, m);
|
||||
}
|
||||
T![macro] => macro_def(p, m),
|
||||
IDENT if p.at_contextual_kw("macro_rules") && p.nth(1) == BANG => macro_rules(p, m),
|
||||
|
||||
T![const] if (la == IDENT || la == T![_] || la == T![mut]) => consts::konst(p, m),
|
||||
T![static] => consts::static_(p, m),
|
||||
@ -286,14 +260,15 @@ fn items_without_modifiers(p: &mut Parser, m: Marker) -> Result<(), Marker> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
// test extern_crate
|
||||
// extern crate foo;
|
||||
fn extern_crate(p: &mut Parser, m: Marker) {
|
||||
assert!(p.at(T![extern]));
|
||||
p.bump(T![extern]);
|
||||
|
||||
assert!(p.at(T![crate]));
|
||||
p.bump(T![crate]);
|
||||
|
||||
if p.at(T![self]) {
|
||||
// test extern_crate_self
|
||||
// extern crate self;
|
||||
let m = p.start();
|
||||
p.bump(T![self]);
|
||||
m.complete(p, NAME_REF);
|
||||
@ -301,11 +276,62 @@ fn extern_crate(p: &mut Parser, m: Marker) {
|
||||
name_ref(p);
|
||||
}
|
||||
|
||||
// test extern_crate_rename
|
||||
// extern crate foo as bar;
|
||||
opt_rename(p);
|
||||
p.expect(T![;]);
|
||||
m.complete(p, EXTERN_CRATE);
|
||||
}
|
||||
|
||||
// test mod_item
|
||||
// mod a;
|
||||
pub(crate) fn mod_item(p: &mut Parser, m: Marker) {
|
||||
p.bump(T![mod]);
|
||||
name(p);
|
||||
if p.at(T!['{']) {
|
||||
// test mod_item_curly
|
||||
// mod b { }
|
||||
item_list(p);
|
||||
} else if !p.eat(T![;]) {
|
||||
p.error("expected `;` or `{`");
|
||||
}
|
||||
m.complete(p, MODULE);
|
||||
}
|
||||
|
||||
// test type_alias
|
||||
// type Foo = Bar;
|
||||
fn type_alias(p: &mut Parser, m: Marker) {
|
||||
p.bump(T![type]);
|
||||
|
||||
name(p);
|
||||
|
||||
// test type_item_type_params
|
||||
// type Result<T> = ();
|
||||
type_params::opt_generic_param_list(p);
|
||||
|
||||
if p.at(T![:]) {
|
||||
type_params::bounds(p);
|
||||
}
|
||||
|
||||
// test type_item_where_clause
|
||||
// type Foo where Foo: Copy = ();
|
||||
type_params::opt_where_clause(p);
|
||||
if p.eat(T![=]) {
|
||||
types::type_(p);
|
||||
}
|
||||
p.expect(T![;]);
|
||||
m.complete(p, TYPE_ALIAS);
|
||||
}
|
||||
|
||||
pub(crate) fn item_list(p: &mut Parser) {
|
||||
assert!(p.at(T!['{']));
|
||||
let m = p.start();
|
||||
p.bump(T!['{']);
|
||||
mod_contents(p, true);
|
||||
p.expect(T!['}']);
|
||||
m.complete(p, ITEM_LIST);
|
||||
}
|
||||
|
||||
pub(crate) fn extern_item_list(p: &mut Parser) {
|
||||
assert!(p.at(T!['{']));
|
||||
let m = p.start();
|
||||
@ -347,54 +373,6 @@ fn fn_(p: &mut Parser) {
|
||||
}
|
||||
}
|
||||
|
||||
// test type_item
|
||||
// type Foo = Bar;
|
||||
fn type_alias(p: &mut Parser, m: Marker) {
|
||||
assert!(p.at(T![type]));
|
||||
p.bump(T![type]);
|
||||
|
||||
name(p);
|
||||
|
||||
// test type_item_type_params
|
||||
// type Result<T> = ();
|
||||
type_params::opt_generic_param_list(p);
|
||||
|
||||
if p.at(T![:]) {
|
||||
type_params::bounds(p);
|
||||
}
|
||||
|
||||
// test type_item_where_clause
|
||||
// type Foo where Foo: Copy = ();
|
||||
type_params::opt_where_clause(p);
|
||||
if p.eat(T![=]) {
|
||||
types::type_(p);
|
||||
}
|
||||
p.expect(T![;]);
|
||||
m.complete(p, TYPE_ALIAS);
|
||||
}
|
||||
|
||||
pub(crate) fn mod_item(p: &mut Parser, m: Marker) {
|
||||
assert!(p.at(T![mod]));
|
||||
p.bump(T![mod]);
|
||||
|
||||
name(p);
|
||||
if p.at(T!['{']) {
|
||||
item_list(p);
|
||||
} else if !p.eat(T![;]) {
|
||||
p.error("expected `;` or `{`");
|
||||
}
|
||||
m.complete(p, MODULE);
|
||||
}
|
||||
|
||||
pub(crate) fn item_list(p: &mut Parser) {
|
||||
assert!(p.at(T!['{']));
|
||||
let m = p.start();
|
||||
p.bump(T!['{']);
|
||||
mod_contents(p, true);
|
||||
p.expect(T!['}']);
|
||||
m.complete(p, ITEM_LIST);
|
||||
}
|
||||
|
||||
fn macro_rules(p: &mut Parser, m: Marker) {
|
||||
assert!(p.at_contextual_kw("macro_rules"));
|
||||
p.bump_remap(T![macro_rules]);
|
||||
@ -429,16 +407,15 @@ fn macro_rules(p: &mut Parser, m: Marker) {
|
||||
}
|
||||
|
||||
// test macro_def
|
||||
// macro m { ($i:ident) => {} }
|
||||
// macro m($i:ident) {}
|
||||
fn macro_def(p: &mut Parser, m: Marker) {
|
||||
p.expect(T![macro]);
|
||||
name_r(p, ITEM_RECOVERY_SET);
|
||||
if p.at(T!['{']) {
|
||||
// test macro_def_curly
|
||||
// macro m { ($i:ident) => {} }
|
||||
token_tree(p);
|
||||
} else if !p.at(T!['(']) {
|
||||
p.error("unmatched `(`");
|
||||
} else {
|
||||
} else if p.at(T!['(']) {
|
||||
let m = p.start();
|
||||
token_tree(p);
|
||||
match p.current() {
|
||||
@ -446,6 +423,8 @@ fn macro_def(p: &mut Parser, m: Marker) {
|
||||
_ => p.error("expected `{`, `[`, `(`"),
|
||||
}
|
||||
m.complete(p, TOKEN_TREE);
|
||||
} else {
|
||||
p.error("unmatched `(`");
|
||||
}
|
||||
|
||||
m.complete(p, MACRO_DEF);
|
||||
|
@ -1,18 +1,21 @@
|
||||
use super::*;
|
||||
|
||||
// test struct_item
|
||||
// struct S {}
|
||||
pub(super) fn strukt(p: &mut Parser, m: Marker) {
|
||||
assert!(p.at(T![struct]));
|
||||
p.bump(T![struct]);
|
||||
struct_or_union(p, m, T![struct], STRUCT);
|
||||
struct_or_union(p, m, true);
|
||||
}
|
||||
|
||||
// test union_item
|
||||
// struct U { i: i32, f: f32 }
|
||||
pub(super) fn union(p: &mut Parser, m: Marker) {
|
||||
assert!(p.at_contextual_kw("union"));
|
||||
p.bump_remap(T![union]);
|
||||
struct_or_union(p, m, T![union], UNION);
|
||||
struct_or_union(p, m, false);
|
||||
}
|
||||
|
||||
fn struct_or_union(p: &mut Parser, m: Marker, kw: SyntaxKind, def: SyntaxKind) {
|
||||
fn struct_or_union(p: &mut Parser, m: Marker, is_struct: bool) {
|
||||
name_r(p, ITEM_RECOVERY_SET);
|
||||
type_params::opt_generic_param_list(p);
|
||||
match p.current() {
|
||||
@ -29,26 +32,24 @@ fn struct_or_union(p: &mut Parser, m: Marker, kw: SyntaxKind, def: SyntaxKind) {
|
||||
}
|
||||
}
|
||||
}
|
||||
T![;] if kw == T![struct] => {
|
||||
T!['{'] => record_field_list(p),
|
||||
// test unit_struct
|
||||
// struct S;
|
||||
T![;] if is_struct => {
|
||||
p.bump(T![;]);
|
||||
}
|
||||
T!['{'] => record_field_list(p),
|
||||
T!['('] if kw == T![struct] => {
|
||||
// test tuple_struct
|
||||
// struct S(String, usize);
|
||||
T!['('] if is_struct => {
|
||||
tuple_field_list(p);
|
||||
// test tuple_struct_where
|
||||
// struct Test<T>(T) where T: Clone;
|
||||
// struct Test<T>(T);
|
||||
// struct S<T>(T) where T: Clone;
|
||||
type_params::opt_where_clause(p);
|
||||
p.expect(T![;]);
|
||||
}
|
||||
_ if kw == T![struct] => {
|
||||
p.error("expected `;`, `{`, or `(`");
|
||||
}
|
||||
_ => {
|
||||
p.error("expected `{`");
|
||||
}
|
||||
_ => p.error(if is_struct { "expected `;`, `{`, or `(`" } else { "expected `{`" }),
|
||||
}
|
||||
m.complete(p, def);
|
||||
m.complete(p, if is_struct { STRUCT } else { UNION });
|
||||
}
|
||||
|
||||
pub(super) fn enum_(p: &mut Parser, m: Marker) {
|
||||
@ -102,6 +103,8 @@ pub(crate) fn variant_list(p: &mut Parser) {
|
||||
m.complete(p, VARIANT_LIST);
|
||||
}
|
||||
|
||||
// test record_field_list
|
||||
// struct S { a: i32, b: f32 }
|
||||
pub(crate) fn record_field_list(p: &mut Parser) {
|
||||
assert!(p.at(T!['{']));
|
||||
let m = p.start();
|
||||
|
@ -1,46 +0,0 @@
|
||||
SOURCE_FILE@0..51
|
||||
UNION@0..12
|
||||
UNION_KW@0..5 "union"
|
||||
WHITESPACE@5..6 " "
|
||||
NAME@6..9
|
||||
IDENT@6..9 "Foo"
|
||||
WHITESPACE@9..10 " "
|
||||
RECORD_FIELD_LIST@10..12
|
||||
L_CURLY@10..11 "{"
|
||||
R_CURLY@11..12 "}"
|
||||
WHITESPACE@12..13 "\n"
|
||||
UNION@13..50
|
||||
UNION_KW@13..18 "union"
|
||||
WHITESPACE@18..19 " "
|
||||
NAME@19..22
|
||||
IDENT@19..22 "Foo"
|
||||
WHITESPACE@22..23 " "
|
||||
RECORD_FIELD_LIST@23..50
|
||||
L_CURLY@23..24 "{"
|
||||
WHITESPACE@24..29 "\n "
|
||||
RECORD_FIELD@29..35
|
||||
NAME@29..30
|
||||
IDENT@29..30 "a"
|
||||
COLON@30..31 ":"
|
||||
WHITESPACE@31..32 " "
|
||||
PATH_TYPE@32..35
|
||||
PATH@32..35
|
||||
PATH_SEGMENT@32..35
|
||||
NAME_REF@32..35
|
||||
IDENT@32..35 "i32"
|
||||
COMMA@35..36 ","
|
||||
WHITESPACE@36..41 "\n "
|
||||
RECORD_FIELD@41..47
|
||||
NAME@41..42
|
||||
IDENT@41..42 "b"
|
||||
COLON@42..43 ":"
|
||||
WHITESPACE@43..44 " "
|
||||
PATH_TYPE@44..47
|
||||
PATH@44..47
|
||||
PATH_SEGMENT@44..47
|
||||
NAME_REF@44..47
|
||||
IDENT@44..47 "f32"
|
||||
COMMA@47..48 ","
|
||||
WHITESPACE@48..49 "\n"
|
||||
R_CURLY@49..50 "}"
|
||||
WHITESPACE@50..51 "\n"
|
@ -1,5 +0,0 @@
|
||||
union Foo {}
|
||||
union Foo {
|
||||
a: i32,
|
||||
b: f32,
|
||||
}
|
@ -1,8 +0,0 @@
|
||||
struct Foo;
|
||||
struct Foo {}
|
||||
struct Foo();
|
||||
struct Foo(String, usize);
|
||||
struct Foo {
|
||||
a: i32,
|
||||
b: f32,
|
||||
}
|
@ -1,64 +1,42 @@
|
||||
SOURCE_FILE@0..53
|
||||
STRUCT@0..33
|
||||
SOURCE_FILE@0..31
|
||||
STRUCT@0..30
|
||||
STRUCT_KW@0..6 "struct"
|
||||
WHITESPACE@6..7 " "
|
||||
NAME@7..11
|
||||
IDENT@7..11 "Test"
|
||||
GENERIC_PARAM_LIST@11..14
|
||||
L_ANGLE@11..12 "<"
|
||||
TYPE_PARAM@12..13
|
||||
NAME@12..13
|
||||
IDENT@12..13 "T"
|
||||
R_ANGLE@13..14 ">"
|
||||
TUPLE_FIELD_LIST@14..17
|
||||
L_PAREN@14..15 "("
|
||||
TUPLE_FIELD@15..16
|
||||
PATH_TYPE@15..16
|
||||
PATH@15..16
|
||||
PATH_SEGMENT@15..16
|
||||
NAME_REF@15..16
|
||||
IDENT@15..16 "T"
|
||||
R_PAREN@16..17 ")"
|
||||
WHITESPACE@17..18 " "
|
||||
WHERE_CLAUSE@18..32
|
||||
WHERE_KW@18..23 "where"
|
||||
WHITESPACE@23..24 " "
|
||||
WHERE_PRED@24..32
|
||||
PATH_TYPE@24..25
|
||||
PATH@24..25
|
||||
PATH_SEGMENT@24..25
|
||||
NAME_REF@24..25
|
||||
IDENT@24..25 "T"
|
||||
COLON@25..26 ":"
|
||||
WHITESPACE@26..27 " "
|
||||
TYPE_BOUND_LIST@27..32
|
||||
TYPE_BOUND@27..32
|
||||
PATH_TYPE@27..32
|
||||
PATH@27..32
|
||||
PATH_SEGMENT@27..32
|
||||
NAME_REF@27..32
|
||||
IDENT@27..32 "Clone"
|
||||
SEMICOLON@32..33 ";"
|
||||
WHITESPACE@33..34 "\n"
|
||||
STRUCT@34..52
|
||||
STRUCT_KW@34..40 "struct"
|
||||
WHITESPACE@40..41 " "
|
||||
NAME@41..45
|
||||
IDENT@41..45 "Test"
|
||||
GENERIC_PARAM_LIST@45..48
|
||||
L_ANGLE@45..46 "<"
|
||||
TYPE_PARAM@46..47
|
||||
NAME@46..47
|
||||
IDENT@46..47 "T"
|
||||
R_ANGLE@47..48 ">"
|
||||
TUPLE_FIELD_LIST@48..51
|
||||
L_PAREN@48..49 "("
|
||||
TUPLE_FIELD@49..50
|
||||
PATH_TYPE@49..50
|
||||
PATH@49..50
|
||||
PATH_SEGMENT@49..50
|
||||
NAME_REF@49..50
|
||||
IDENT@49..50 "T"
|
||||
R_PAREN@50..51 ")"
|
||||
SEMICOLON@51..52 ";"
|
||||
WHITESPACE@52..53 "\n"
|
||||
NAME@7..8
|
||||
IDENT@7..8 "S"
|
||||
GENERIC_PARAM_LIST@8..11
|
||||
L_ANGLE@8..9 "<"
|
||||
TYPE_PARAM@9..10
|
||||
NAME@9..10
|
||||
IDENT@9..10 "T"
|
||||
R_ANGLE@10..11 ">"
|
||||
TUPLE_FIELD_LIST@11..14
|
||||
L_PAREN@11..12 "("
|
||||
TUPLE_FIELD@12..13
|
||||
PATH_TYPE@12..13
|
||||
PATH@12..13
|
||||
PATH_SEGMENT@12..13
|
||||
NAME_REF@12..13
|
||||
IDENT@12..13 "T"
|
||||
R_PAREN@13..14 ")"
|
||||
WHITESPACE@14..15 " "
|
||||
WHERE_CLAUSE@15..29
|
||||
WHERE_KW@15..20 "where"
|
||||
WHITESPACE@20..21 " "
|
||||
WHERE_PRED@21..29
|
||||
PATH_TYPE@21..22
|
||||
PATH@21..22
|
||||
PATH_SEGMENT@21..22
|
||||
NAME_REF@21..22
|
||||
IDENT@21..22 "T"
|
||||
COLON@22..23 ":"
|
||||
WHITESPACE@23..24 " "
|
||||
TYPE_BOUND_LIST@24..29
|
||||
TYPE_BOUND@24..29
|
||||
PATH_TYPE@24..29
|
||||
PATH@24..29
|
||||
PATH_SEGMENT@24..29
|
||||
NAME_REF@24..29
|
||||
IDENT@24..29 "Clone"
|
||||
SEMICOLON@29..30 ";"
|
||||
WHITESPACE@30..31 "\n"
|
||||
|
@ -1,2 +1 @@
|
||||
struct Test<T>(T) where T: Clone;
|
||||
struct Test<T>(T);
|
||||
struct S<T>(T) where T: Clone;
|
||||
|
@ -1,45 +1,19 @@
|
||||
SOURCE_FILE@0..50
|
||||
MACRO_DEF@0..28
|
||||
SOURCE_FILE@0..21
|
||||
MACRO_DEF@0..20
|
||||
MACRO_KW@0..5 "macro"
|
||||
WHITESPACE@5..6 " "
|
||||
NAME@6..7
|
||||
IDENT@6..7 "m"
|
||||
WHITESPACE@7..8 " "
|
||||
TOKEN_TREE@8..28
|
||||
L_CURLY@8..9 "{"
|
||||
WHITESPACE@9..10 " "
|
||||
TOKEN_TREE@10..20
|
||||
L_PAREN@10..11 "("
|
||||
DOLLAR@11..12 "$"
|
||||
IDENT@12..13 "i"
|
||||
COLON@13..14 ":"
|
||||
IDENT@14..19 "ident"
|
||||
R_PAREN@19..20 ")"
|
||||
WHITESPACE@20..21 " "
|
||||
EQ@21..22 "="
|
||||
R_ANGLE@22..23 ">"
|
||||
WHITESPACE@23..24 " "
|
||||
TOKEN_TREE@24..26
|
||||
L_CURLY@24..25 "{"
|
||||
R_CURLY@25..26 "}"
|
||||
WHITESPACE@26..27 " "
|
||||
R_CURLY@27..28 "}"
|
||||
WHITESPACE@28..29 "\n"
|
||||
MACRO_DEF@29..49
|
||||
MACRO_KW@29..34 "macro"
|
||||
WHITESPACE@34..35 " "
|
||||
NAME@35..36
|
||||
IDENT@35..36 "m"
|
||||
TOKEN_TREE@36..49
|
||||
TOKEN_TREE@36..46
|
||||
L_PAREN@36..37 "("
|
||||
DOLLAR@37..38 "$"
|
||||
IDENT@38..39 "i"
|
||||
COLON@39..40 ":"
|
||||
IDENT@40..45 "ident"
|
||||
R_PAREN@45..46 ")"
|
||||
WHITESPACE@46..47 " "
|
||||
TOKEN_TREE@47..49
|
||||
L_CURLY@47..48 "{"
|
||||
R_CURLY@48..49 "}"
|
||||
WHITESPACE@49..50 "\n"
|
||||
TOKEN_TREE@7..20
|
||||
TOKEN_TREE@7..17
|
||||
L_PAREN@7..8 "("
|
||||
DOLLAR@8..9 "$"
|
||||
IDENT@9..10 "i"
|
||||
COLON@10..11 ":"
|
||||
IDENT@11..16 "ident"
|
||||
R_PAREN@16..17 ")"
|
||||
WHITESPACE@17..18 " "
|
||||
TOKEN_TREE@18..20
|
||||
L_CURLY@18..19 "{"
|
||||
R_CURLY@19..20 "}"
|
||||
WHITESPACE@20..21 "\n"
|
||||
|
@ -1,2 +1 @@
|
||||
macro m { ($i:ident) => {} }
|
||||
macro m($i:ident) {}
|
||||
|
@ -1,21 +0,0 @@
|
||||
SOURCE_FILE@0..24
|
||||
MACRO_DEF@0..23
|
||||
VISIBILITY@0..3
|
||||
PUB_KW@0..3 "pub"
|
||||
WHITESPACE@3..4 " "
|
||||
MACRO_KW@4..9 "macro"
|
||||
WHITESPACE@9..10 " "
|
||||
NAME@10..11
|
||||
IDENT@10..11 "m"
|
||||
TOKEN_TREE@11..23
|
||||
TOKEN_TREE@11..20
|
||||
L_PAREN@11..12 "("
|
||||
DOLLAR@12..13 "$"
|
||||
COLON@13..14 ":"
|
||||
IDENT@14..19 "ident"
|
||||
R_PAREN@19..20 ")"
|
||||
WHITESPACE@20..21 " "
|
||||
TOKEN_TREE@21..23
|
||||
L_CURLY@21..22 "{"
|
||||
R_CURLY@22..23 "}"
|
||||
WHITESPACE@23..24 "\n"
|
@ -1 +0,0 @@
|
||||
pub macro m($:ident) {}
|
@ -0,0 +1,16 @@
|
||||
SOURCE_FILE@0..25
|
||||
EXTERN_CRATE@0..24
|
||||
EXTERN_KW@0..6 "extern"
|
||||
WHITESPACE@6..7 " "
|
||||
CRATE_KW@7..12 "crate"
|
||||
WHITESPACE@12..13 " "
|
||||
NAME_REF@13..16
|
||||
IDENT@13..16 "foo"
|
||||
WHITESPACE@16..17 " "
|
||||
RENAME@17..23
|
||||
AS_KW@17..19 "as"
|
||||
WHITESPACE@19..20 " "
|
||||
NAME@20..23
|
||||
IDENT@20..23 "bar"
|
||||
SEMICOLON@23..24 ";"
|
||||
WHITESPACE@24..25 "\n"
|
@ -0,0 +1 @@
|
||||
extern crate foo as bar;
|
@ -0,0 +1,10 @@
|
||||
SOURCE_FILE@0..19
|
||||
EXTERN_CRATE@0..18
|
||||
EXTERN_KW@0..6 "extern"
|
||||
WHITESPACE@6..7 " "
|
||||
CRATE_KW@7..12 "crate"
|
||||
WHITESPACE@12..13 " "
|
||||
NAME_REF@13..17
|
||||
SELF_KW@13..17 "self"
|
||||
SEMICOLON@17..18 ";"
|
||||
WHITESPACE@18..19 "\n"
|
@ -0,0 +1 @@
|
||||
extern crate self;
|
@ -0,0 +1,8 @@
|
||||
SOURCE_FILE@0..7
|
||||
MODULE@0..6
|
||||
MOD_KW@0..3 "mod"
|
||||
WHITESPACE@3..4 " "
|
||||
NAME@4..5
|
||||
IDENT@4..5 "a"
|
||||
SEMICOLON@5..6 ";"
|
||||
WHITESPACE@6..7 "\n"
|
@ -0,0 +1 @@
|
||||
mod a;
|
@ -0,0 +1,12 @@
|
||||
SOURCE_FILE@0..10
|
||||
MODULE@0..9
|
||||
MOD_KW@0..3 "mod"
|
||||
WHITESPACE@3..4 " "
|
||||
NAME@4..5
|
||||
IDENT@4..5 "b"
|
||||
WHITESPACE@5..6 " "
|
||||
ITEM_LIST@6..9
|
||||
L_CURLY@6..7 "{"
|
||||
WHITESPACE@7..8 " "
|
||||
R_CURLY@8..9 "}"
|
||||
WHITESPACE@9..10 "\n"
|
@ -0,0 +1 @@
|
||||
mod b { }
|
@ -0,0 +1,25 @@
|
||||
SOURCE_FILE@0..25
|
||||
STRUCT@0..24
|
||||
STRUCT_KW@0..6 "struct"
|
||||
WHITESPACE@6..7 " "
|
||||
NAME@7..8
|
||||
IDENT@7..8 "S"
|
||||
TUPLE_FIELD_LIST@8..23
|
||||
L_PAREN@8..9 "("
|
||||
TUPLE_FIELD@9..15
|
||||
PATH_TYPE@9..15
|
||||
PATH@9..15
|
||||
PATH_SEGMENT@9..15
|
||||
NAME_REF@9..15
|
||||
IDENT@9..15 "String"
|
||||
COMMA@15..16 ","
|
||||
WHITESPACE@16..17 " "
|
||||
TUPLE_FIELD@17..22
|
||||
PATH_TYPE@17..22
|
||||
PATH@17..22
|
||||
PATH_SEGMENT@17..22
|
||||
NAME_REF@17..22
|
||||
IDENT@17..22 "usize"
|
||||
R_PAREN@22..23 ")"
|
||||
SEMICOLON@23..24 ";"
|
||||
WHITESPACE@24..25 "\n"
|
@ -0,0 +1 @@
|
||||
struct S(String, usize);
|
@ -0,0 +1,11 @@
|
||||
SOURCE_FILE@0..12
|
||||
STRUCT@0..11
|
||||
STRUCT_KW@0..6 "struct"
|
||||
WHITESPACE@6..7 " "
|
||||
NAME@7..8
|
||||
IDENT@7..8 "S"
|
||||
WHITESPACE@8..9 " "
|
||||
RECORD_FIELD_LIST@9..11
|
||||
L_CURLY@9..10 "{"
|
||||
R_CURLY@10..11 "}"
|
||||
WHITESPACE@11..12 "\n"
|
@ -0,0 +1 @@
|
||||
struct S {}
|
@ -0,0 +1,35 @@
|
||||
SOURCE_FILE@0..28
|
||||
STRUCT@0..27
|
||||
STRUCT_KW@0..6 "struct"
|
||||
WHITESPACE@6..7 " "
|
||||
NAME@7..8
|
||||
IDENT@7..8 "S"
|
||||
WHITESPACE@8..9 " "
|
||||
RECORD_FIELD_LIST@9..27
|
||||
L_CURLY@9..10 "{"
|
||||
WHITESPACE@10..11 " "
|
||||
RECORD_FIELD@11..17
|
||||
NAME@11..12
|
||||
IDENT@11..12 "a"
|
||||
COLON@12..13 ":"
|
||||
WHITESPACE@13..14 " "
|
||||
PATH_TYPE@14..17
|
||||
PATH@14..17
|
||||
PATH_SEGMENT@14..17
|
||||
NAME_REF@14..17
|
||||
IDENT@14..17 "i32"
|
||||
COMMA@17..18 ","
|
||||
WHITESPACE@18..19 " "
|
||||
RECORD_FIELD@19..25
|
||||
NAME@19..20
|
||||
IDENT@19..20 "b"
|
||||
COLON@20..21 ":"
|
||||
WHITESPACE@21..22 " "
|
||||
PATH_TYPE@22..25
|
||||
PATH@22..25
|
||||
PATH_SEGMENT@22..25
|
||||
NAME_REF@22..25
|
||||
IDENT@22..25 "f32"
|
||||
WHITESPACE@25..26 " "
|
||||
R_CURLY@26..27 "}"
|
||||
WHITESPACE@27..28 "\n"
|
@ -0,0 +1 @@
|
||||
struct S { a: i32, b: f32 }
|
@ -0,0 +1,27 @@
|
||||
SOURCE_FILE@0..29
|
||||
MACRO_DEF@0..28
|
||||
MACRO_KW@0..5 "macro"
|
||||
WHITESPACE@5..6 " "
|
||||
NAME@6..7
|
||||
IDENT@6..7 "m"
|
||||
WHITESPACE@7..8 " "
|
||||
TOKEN_TREE@8..28
|
||||
L_CURLY@8..9 "{"
|
||||
WHITESPACE@9..10 " "
|
||||
TOKEN_TREE@10..20
|
||||
L_PAREN@10..11 "("
|
||||
DOLLAR@11..12 "$"
|
||||
IDENT@12..13 "i"
|
||||
COLON@13..14 ":"
|
||||
IDENT@14..19 "ident"
|
||||
R_PAREN@19..20 ")"
|
||||
WHITESPACE@20..21 " "
|
||||
EQ@21..22 "="
|
||||
R_ANGLE@22..23 ">"
|
||||
WHITESPACE@23..24 " "
|
||||
TOKEN_TREE@24..26
|
||||
L_CURLY@24..25 "{"
|
||||
R_CURLY@25..26 "}"
|
||||
WHITESPACE@26..27 " "
|
||||
R_CURLY@27..28 "}"
|
||||
WHITESPACE@28..29 "\n"
|
@ -0,0 +1 @@
|
||||
macro m { ($i:ident) => {} }
|
@ -0,0 +1,35 @@
|
||||
SOURCE_FILE@0..28
|
||||
STRUCT@0..27
|
||||
STRUCT_KW@0..6 "struct"
|
||||
WHITESPACE@6..7 " "
|
||||
NAME@7..8
|
||||
IDENT@7..8 "U"
|
||||
WHITESPACE@8..9 " "
|
||||
RECORD_FIELD_LIST@9..27
|
||||
L_CURLY@9..10 "{"
|
||||
WHITESPACE@10..11 " "
|
||||
RECORD_FIELD@11..17
|
||||
NAME@11..12
|
||||
IDENT@11..12 "i"
|
||||
COLON@12..13 ":"
|
||||
WHITESPACE@13..14 " "
|
||||
PATH_TYPE@14..17
|
||||
PATH@14..17
|
||||
PATH_SEGMENT@14..17
|
||||
NAME_REF@14..17
|
||||
IDENT@14..17 "i32"
|
||||
COMMA@17..18 ","
|
||||
WHITESPACE@18..19 " "
|
||||
RECORD_FIELD@19..25
|
||||
NAME@19..20
|
||||
IDENT@19..20 "f"
|
||||
COLON@20..21 ":"
|
||||
WHITESPACE@21..22 " "
|
||||
PATH_TYPE@22..25
|
||||
PATH@22..25
|
||||
PATH_SEGMENT@22..25
|
||||
NAME_REF@22..25
|
||||
IDENT@22..25 "f32"
|
||||
WHITESPACE@25..26 " "
|
||||
R_CURLY@26..27 "}"
|
||||
WHITESPACE@27..28 "\n"
|
@ -0,0 +1 @@
|
||||
struct U { i: i32, f: f32 }
|
@ -0,0 +1,8 @@
|
||||
SOURCE_FILE@0..10
|
||||
STRUCT@0..9
|
||||
STRUCT_KW@0..6 "struct"
|
||||
WHITESPACE@6..7 " "
|
||||
NAME@7..8
|
||||
IDENT@7..8 "S"
|
||||
SEMICOLON@8..9 ";"
|
||||
WHITESPACE@9..10 "\n"
|
@ -0,0 +1 @@
|
||||
struct S;
|
@ -1,93 +1,76 @@
|
||||
SOURCE_FILE@0..118
|
||||
MODULE@0..6
|
||||
SOURCE_FILE@0..100
|
||||
MODULE@0..46
|
||||
MOD_KW@0..3 "mod"
|
||||
WHITESPACE@3..4 " "
|
||||
NAME@4..5
|
||||
IDENT@4..5 "a"
|
||||
SEMICOLON@5..6 ";"
|
||||
WHITESPACE@6..8 "\n\n"
|
||||
MODULE@8..17
|
||||
MOD_KW@8..11 "mod"
|
||||
WHITESPACE@11..12 " "
|
||||
NAME@12..13
|
||||
IDENT@12..13 "b"
|
||||
WHITESPACE@13..14 " "
|
||||
ITEM_LIST@14..17
|
||||
L_CURLY@14..15 "{"
|
||||
WHITESPACE@15..16 "\n"
|
||||
R_CURLY@16..17 "}"
|
||||
WHITESPACE@17..19 "\n\n"
|
||||
MODULE@19..65
|
||||
MOD_KW@19..22 "mod"
|
||||
WHITESPACE@22..23 " "
|
||||
NAME@23..24
|
||||
IDENT@23..24 "c"
|
||||
WHITESPACE@24..25 " "
|
||||
ITEM_LIST@25..65
|
||||
L_CURLY@25..26 "{"
|
||||
WHITESPACE@26..31 "\n "
|
||||
FN@31..47
|
||||
FN_KW@31..33 "fn"
|
||||
WHITESPACE@33..34 " "
|
||||
NAME@34..37
|
||||
IDENT@34..37 "foo"
|
||||
PARAM_LIST@37..39
|
||||
L_PAREN@37..38 "("
|
||||
R_PAREN@38..39 ")"
|
||||
IDENT@4..5 "c"
|
||||
WHITESPACE@5..6 " "
|
||||
ITEM_LIST@6..46
|
||||
L_CURLY@6..7 "{"
|
||||
WHITESPACE@7..12 "\n "
|
||||
FN@12..28
|
||||
FN_KW@12..14 "fn"
|
||||
WHITESPACE@14..15 " "
|
||||
NAME@15..18
|
||||
IDENT@15..18 "foo"
|
||||
PARAM_LIST@18..20
|
||||
L_PAREN@18..19 "("
|
||||
R_PAREN@19..20 ")"
|
||||
WHITESPACE@20..21 " "
|
||||
BLOCK_EXPR@21..28
|
||||
L_CURLY@21..22 "{"
|
||||
WHITESPACE@22..27 "\n "
|
||||
R_CURLY@27..28 "}"
|
||||
WHITESPACE@28..33 "\n "
|
||||
STRUCT@33..44
|
||||
STRUCT_KW@33..39 "struct"
|
||||
WHITESPACE@39..40 " "
|
||||
BLOCK_EXPR@40..47
|
||||
L_CURLY@40..41 "{"
|
||||
WHITESPACE@41..46 "\n "
|
||||
R_CURLY@46..47 "}"
|
||||
WHITESPACE@47..52 "\n "
|
||||
STRUCT@52..63
|
||||
STRUCT_KW@52..58 "struct"
|
||||
WHITESPACE@58..59 " "
|
||||
NAME@59..60
|
||||
IDENT@59..60 "S"
|
||||
WHITESPACE@60..61 " "
|
||||
RECORD_FIELD_LIST@61..63
|
||||
L_CURLY@61..62 "{"
|
||||
R_CURLY@62..63 "}"
|
||||
WHITESPACE@63..64 "\n"
|
||||
R_CURLY@64..65 "}"
|
||||
WHITESPACE@65..67 "\n\n"
|
||||
MODULE@67..118
|
||||
MOD_KW@67..70 "mod"
|
||||
WHITESPACE@70..71 " "
|
||||
NAME@71..72
|
||||
IDENT@71..72 "d"
|
||||
WHITESPACE@72..73 " "
|
||||
ITEM_LIST@73..118
|
||||
L_CURLY@73..74 "{"
|
||||
WHITESPACE@74..79 "\n "
|
||||
ATTR@79..87
|
||||
POUND@79..80 "#"
|
||||
BANG@80..81 "!"
|
||||
L_BRACK@81..82 "["
|
||||
META@82..86
|
||||
PATH@82..86
|
||||
PATH_SEGMENT@82..86
|
||||
NAME_REF@82..86
|
||||
IDENT@82..86 "attr"
|
||||
R_BRACK@86..87 "]"
|
||||
WHITESPACE@87..92 "\n "
|
||||
MODULE@92..98
|
||||
MOD_KW@92..95 "mod"
|
||||
WHITESPACE@95..96 " "
|
||||
NAME@96..97
|
||||
IDENT@96..97 "e"
|
||||
SEMICOLON@97..98 ";"
|
||||
WHITESPACE@98..103 "\n "
|
||||
MODULE@103..116
|
||||
MOD_KW@103..106 "mod"
|
||||
WHITESPACE@106..107 " "
|
||||
NAME@107..108
|
||||
IDENT@107..108 "f"
|
||||
WHITESPACE@108..109 " "
|
||||
ITEM_LIST@109..116
|
||||
L_CURLY@109..110 "{"
|
||||
WHITESPACE@110..115 "\n "
|
||||
R_CURLY@115..116 "}"
|
||||
WHITESPACE@116..117 "\n"
|
||||
R_CURLY@117..118 "}"
|
||||
NAME@40..41
|
||||
IDENT@40..41 "S"
|
||||
WHITESPACE@41..42 " "
|
||||
RECORD_FIELD_LIST@42..44
|
||||
L_CURLY@42..43 "{"
|
||||
R_CURLY@43..44 "}"
|
||||
WHITESPACE@44..45 "\n"
|
||||
R_CURLY@45..46 "}"
|
||||
WHITESPACE@46..48 "\n\n"
|
||||
MODULE@48..99
|
||||
MOD_KW@48..51 "mod"
|
||||
WHITESPACE@51..52 " "
|
||||
NAME@52..53
|
||||
IDENT@52..53 "d"
|
||||
WHITESPACE@53..54 " "
|
||||
ITEM_LIST@54..99
|
||||
L_CURLY@54..55 "{"
|
||||
WHITESPACE@55..60 "\n "
|
||||
ATTR@60..68
|
||||
POUND@60..61 "#"
|
||||
BANG@61..62 "!"
|
||||
L_BRACK@62..63 "["
|
||||
META@63..67
|
||||
PATH@63..67
|
||||
PATH_SEGMENT@63..67
|
||||
NAME_REF@63..67
|
||||
IDENT@63..67 "attr"
|
||||
R_BRACK@67..68 "]"
|
||||
WHITESPACE@68..73 "\n "
|
||||
MODULE@73..79
|
||||
MOD_KW@73..76 "mod"
|
||||
WHITESPACE@76..77 " "
|
||||
NAME@77..78
|
||||
IDENT@77..78 "e"
|
||||
SEMICOLON@78..79 ";"
|
||||
WHITESPACE@79..84 "\n "
|
||||
MODULE@84..97
|
||||
MOD_KW@84..87 "mod"
|
||||
WHITESPACE@87..88 " "
|
||||
NAME@88..89
|
||||
IDENT@88..89 "f"
|
||||
WHITESPACE@89..90 " "
|
||||
ITEM_LIST@90..97
|
||||
L_CURLY@90..91 "{"
|
||||
WHITESPACE@91..96 "\n "
|
||||
R_CURLY@96..97 "}"
|
||||
WHITESPACE@97..98 "\n"
|
||||
R_CURLY@98..99 "}"
|
||||
WHITESPACE@99..100 "\n"
|
||||
|
@ -1,8 +1,3 @@
|
||||
mod a;
|
||||
|
||||
mod b {
|
||||
}
|
||||
|
||||
mod c {
|
||||
fn foo() {
|
||||
}
|
||||
@ -14,4 +9,4 @@ mod d {
|
||||
mod e;
|
||||
mod f {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
SOURCE_FILE@0..98
|
||||
SOURCE_FILE@0..122
|
||||
FN@0..9
|
||||
FN_KW@0..2 "fn"
|
||||
WHITESPACE@2..3 " "
|
||||
@ -28,81 +28,101 @@ SOURCE_FILE@0..98
|
||||
L_CURLY@21..22 "{"
|
||||
R_CURLY@22..23 "}"
|
||||
WHITESPACE@23..24 "\n"
|
||||
FN@24..44
|
||||
VISIBILITY@24..34
|
||||
MACRO_DEF@24..47
|
||||
VISIBILITY@24..27
|
||||
PUB_KW@24..27 "pub"
|
||||
L_PAREN@27..28 "("
|
||||
PATH@28..33
|
||||
PATH_SEGMENT@28..33
|
||||
NAME_REF@28..33
|
||||
CRATE_KW@28..33 "crate"
|
||||
R_PAREN@33..34 ")"
|
||||
WHITESPACE@34..35 " "
|
||||
FN_KW@35..37 "fn"
|
||||
WHITESPACE@37..38 " "
|
||||
NAME@38..39
|
||||
IDENT@38..39 "c"
|
||||
PARAM_LIST@39..41
|
||||
L_PAREN@39..40 "("
|
||||
R_PAREN@40..41 ")"
|
||||
WHITESPACE@41..42 " "
|
||||
BLOCK_EXPR@42..44
|
||||
L_CURLY@42..43 "{"
|
||||
R_CURLY@43..44 "}"
|
||||
WHITESPACE@44..45 "\n"
|
||||
FN@45..65
|
||||
VISIBILITY@45..55
|
||||
PUB_KW@45..48 "pub"
|
||||
L_PAREN@48..49 "("
|
||||
PATH@49..54
|
||||
PATH_SEGMENT@49..54
|
||||
NAME_REF@49..54
|
||||
SUPER_KW@49..54 "super"
|
||||
R_PAREN@54..55 ")"
|
||||
WHITESPACE@55..56 " "
|
||||
FN_KW@56..58 "fn"
|
||||
WHITESPACE@27..28 " "
|
||||
MACRO_KW@28..33 "macro"
|
||||
WHITESPACE@33..34 " "
|
||||
NAME@34..35
|
||||
IDENT@34..35 "m"
|
||||
TOKEN_TREE@35..47
|
||||
TOKEN_TREE@35..44
|
||||
L_PAREN@35..36 "("
|
||||
DOLLAR@36..37 "$"
|
||||
COLON@37..38 ":"
|
||||
IDENT@38..43 "ident"
|
||||
R_PAREN@43..44 ")"
|
||||
WHITESPACE@44..45 " "
|
||||
TOKEN_TREE@45..47
|
||||
L_CURLY@45..46 "{"
|
||||
R_CURLY@46..47 "}"
|
||||
WHITESPACE@47..48 "\n"
|
||||
FN@48..68
|
||||
VISIBILITY@48..58
|
||||
PUB_KW@48..51 "pub"
|
||||
L_PAREN@51..52 "("
|
||||
PATH@52..57
|
||||
PATH_SEGMENT@52..57
|
||||
NAME_REF@52..57
|
||||
CRATE_KW@52..57 "crate"
|
||||
R_PAREN@57..58 ")"
|
||||
WHITESPACE@58..59 " "
|
||||
NAME@59..60
|
||||
IDENT@59..60 "d"
|
||||
PARAM_LIST@60..62
|
||||
L_PAREN@60..61 "("
|
||||
R_PAREN@61..62 ")"
|
||||
WHITESPACE@62..63 " "
|
||||
BLOCK_EXPR@63..65
|
||||
L_CURLY@63..64 "{"
|
||||
R_CURLY@64..65 "}"
|
||||
WHITESPACE@65..66 "\n"
|
||||
FN@66..97
|
||||
VISIBILITY@66..87
|
||||
PUB_KW@66..69 "pub"
|
||||
L_PAREN@69..70 "("
|
||||
IN_KW@70..72 "in"
|
||||
WHITESPACE@72..73 " "
|
||||
PATH@73..86
|
||||
PATH@73..81
|
||||
PATH@73..76
|
||||
PATH_SEGMENT@73..76
|
||||
NAME_REF@73..76
|
||||
IDENT@73..76 "foo"
|
||||
COLON2@76..78 "::"
|
||||
PATH_SEGMENT@78..81
|
||||
NAME_REF@78..81
|
||||
IDENT@78..81 "bar"
|
||||
COLON2@81..83 "::"
|
||||
PATH_SEGMENT@83..86
|
||||
NAME_REF@83..86
|
||||
IDENT@83..86 "baz"
|
||||
R_PAREN@86..87 ")"
|
||||
WHITESPACE@87..88 " "
|
||||
FN_KW@88..90 "fn"
|
||||
WHITESPACE@90..91 " "
|
||||
NAME@91..92
|
||||
IDENT@91..92 "e"
|
||||
PARAM_LIST@92..94
|
||||
L_PAREN@92..93 "("
|
||||
R_PAREN@93..94 ")"
|
||||
WHITESPACE@94..95 " "
|
||||
BLOCK_EXPR@95..97
|
||||
L_CURLY@95..96 "{"
|
||||
R_CURLY@96..97 "}"
|
||||
WHITESPACE@97..98 "\n"
|
||||
FN_KW@59..61 "fn"
|
||||
WHITESPACE@61..62 " "
|
||||
NAME@62..63
|
||||
IDENT@62..63 "c"
|
||||
PARAM_LIST@63..65
|
||||
L_PAREN@63..64 "("
|
||||
R_PAREN@64..65 ")"
|
||||
WHITESPACE@65..66 " "
|
||||
BLOCK_EXPR@66..68
|
||||
L_CURLY@66..67 "{"
|
||||
R_CURLY@67..68 "}"
|
||||
WHITESPACE@68..69 "\n"
|
||||
FN@69..89
|
||||
VISIBILITY@69..79
|
||||
PUB_KW@69..72 "pub"
|
||||
L_PAREN@72..73 "("
|
||||
PATH@73..78
|
||||
PATH_SEGMENT@73..78
|
||||
NAME_REF@73..78
|
||||
SUPER_KW@73..78 "super"
|
||||
R_PAREN@78..79 ")"
|
||||
WHITESPACE@79..80 " "
|
||||
FN_KW@80..82 "fn"
|
||||
WHITESPACE@82..83 " "
|
||||
NAME@83..84
|
||||
IDENT@83..84 "d"
|
||||
PARAM_LIST@84..86
|
||||
L_PAREN@84..85 "("
|
||||
R_PAREN@85..86 ")"
|
||||
WHITESPACE@86..87 " "
|
||||
BLOCK_EXPR@87..89
|
||||
L_CURLY@87..88 "{"
|
||||
R_CURLY@88..89 "}"
|
||||
WHITESPACE@89..90 "\n"
|
||||
FN@90..121
|
||||
VISIBILITY@90..111
|
||||
PUB_KW@90..93 "pub"
|
||||
L_PAREN@93..94 "("
|
||||
IN_KW@94..96 "in"
|
||||
WHITESPACE@96..97 " "
|
||||
PATH@97..110
|
||||
PATH@97..105
|
||||
PATH@97..100
|
||||
PATH_SEGMENT@97..100
|
||||
NAME_REF@97..100
|
||||
IDENT@97..100 "foo"
|
||||
COLON2@100..102 "::"
|
||||
PATH_SEGMENT@102..105
|
||||
NAME_REF@102..105
|
||||
IDENT@102..105 "bar"
|
||||
COLON2@105..107 "::"
|
||||
PATH_SEGMENT@107..110
|
||||
NAME_REF@107..110
|
||||
IDENT@107..110 "baz"
|
||||
R_PAREN@110..111 ")"
|
||||
WHITESPACE@111..112 " "
|
||||
FN_KW@112..114 "fn"
|
||||
WHITESPACE@114..115 " "
|
||||
NAME@115..116
|
||||
IDENT@115..116 "e"
|
||||
PARAM_LIST@116..118
|
||||
L_PAREN@116..117 "("
|
||||
R_PAREN@117..118 ")"
|
||||
WHITESPACE@118..119 " "
|
||||
BLOCK_EXPR@119..121
|
||||
L_CURLY@119..120 "{"
|
||||
R_CURLY@120..121 "}"
|
||||
WHITESPACE@121..122 "\n"
|
||||
|
@ -1,5 +1,6 @@
|
||||
fn a() {}
|
||||
pub fn b() {}
|
||||
pub macro m($:ident) {}
|
||||
pub(crate) fn c() {}
|
||||
pub(super) fn d() {}
|
||||
pub(in foo::bar::baz) fn e() {}
|
||||
|
Loading…
Reference in New Issue
Block a user