internal: cleanup item parsing
This commit is contained in:
@@ -184,34 +184,14 @@ pub(super) fn opt_item(p: &mut Parser, m: Marker) -> Result<(), Marker> {
|
||||
|
||||
// items
|
||||
match p.current() {
|
||||
// test fn
|
||||
// fn foo() {}
|
||||
T![fn] => {
|
||||
fn_(p);
|
||||
m.complete(p, FN);
|
||||
}
|
||||
T![fn] => fn_(p, m),
|
||||
|
||||
// test trait
|
||||
// trait T {}
|
||||
T![trait] => {
|
||||
traits::trait_(p);
|
||||
m.complete(p, TRAIT);
|
||||
}
|
||||
T![const] if p.nth(1) != T!['{'] => consts::konst(p, m),
|
||||
|
||||
T![const] if p.nth(1) != T!['{'] => {
|
||||
consts::konst(p, m);
|
||||
}
|
||||
T![trait] => traits::trait_(p, m),
|
||||
T![impl] => traits::impl_(p, m),
|
||||
|
||||
// test impl
|
||||
// impl T for S {}
|
||||
T![impl] => {
|
||||
traits::impl_(p);
|
||||
m.complete(p, IMPL);
|
||||
}
|
||||
|
||||
T![type] => {
|
||||
type_alias(p, m);
|
||||
}
|
||||
T![type] => type_alias(p, m),
|
||||
|
||||
// test extern_block
|
||||
// unsafe extern "C" {}
|
||||
@@ -339,38 +319,6 @@ pub(crate) fn extern_item_list(p: &mut Parser) {
|
||||
m.complete(p, EXTERN_ITEM_LIST);
|
||||
}
|
||||
|
||||
fn fn_(p: &mut Parser) {
|
||||
assert!(p.at(T![fn]));
|
||||
p.bump(T![fn]);
|
||||
|
||||
name_r(p, ITEM_RECOVERY_SET);
|
||||
// test function_type_params
|
||||
// fn foo<T: Clone + Copy>(){}
|
||||
type_params::opt_generic_param_list(p);
|
||||
|
||||
if p.at(T!['(']) {
|
||||
params::param_list_fn_def(p);
|
||||
} else {
|
||||
p.error("expected function arguments");
|
||||
}
|
||||
// test function_ret_type
|
||||
// fn foo() {}
|
||||
// fn bar() -> () {}
|
||||
opt_ret_type(p);
|
||||
|
||||
// test function_where_clause
|
||||
// fn foo<T>() where T: Copy {}
|
||||
type_params::opt_where_clause(p);
|
||||
|
||||
// test fn_decl
|
||||
// trait T { fn foo(); }
|
||||
if p.at(T![;]) {
|
||||
p.bump(T![;]);
|
||||
} else {
|
||||
expressions::block_expr(p)
|
||||
}
|
||||
}
|
||||
|
||||
fn macro_rules(p: &mut Parser, m: Marker) {
|
||||
assert!(p.at_contextual_kw("macro_rules"));
|
||||
p.bump_remap(T![macro_rules]);
|
||||
@@ -428,6 +376,40 @@ fn macro_def(p: &mut Parser, m: Marker) {
|
||||
m.complete(p, MACRO_DEF);
|
||||
}
|
||||
|
||||
// test fn
|
||||
// fn foo() {}
|
||||
fn fn_(p: &mut Parser, m: Marker) {
|
||||
p.bump(T![fn]);
|
||||
|
||||
name_r(p, ITEM_RECOVERY_SET);
|
||||
// test function_type_params
|
||||
// fn foo<T: Clone + Copy>(){}
|
||||
type_params::opt_generic_param_list(p);
|
||||
|
||||
if p.at(T!['(']) {
|
||||
params::param_list_fn_def(p);
|
||||
} else {
|
||||
p.error("expected function arguments");
|
||||
}
|
||||
// test function_ret_type
|
||||
// fn foo() {}
|
||||
// fn bar() -> () {}
|
||||
opt_ret_type(p);
|
||||
|
||||
// test function_where_clause
|
||||
// fn foo<T>() where T: Copy {}
|
||||
type_params::opt_where_clause(p);
|
||||
|
||||
// test fn_decl
|
||||
// trait T { fn foo(); }
|
||||
if p.at(T![;]) {
|
||||
p.bump(T![;]);
|
||||
} else {
|
||||
expressions::block_expr(p)
|
||||
}
|
||||
m.complete(p, FN);
|
||||
}
|
||||
|
||||
fn macro_call(p: &mut Parser) -> BlockLike {
|
||||
assert!(paths::is_use_path_start(p));
|
||||
paths::use_path(p);
|
||||
|
||||
@@ -3,7 +3,7 @@ use super::*;
|
||||
// test trait_item
|
||||
// trait T<U>: Hash + Clone where U: Copy {}
|
||||
// trait X<U: Debug + Display>: Hash + Clone where U: Copy {}
|
||||
pub(super) fn trait_(p: &mut Parser) {
|
||||
pub(super) fn trait_(p: &mut Parser, m: Marker) {
|
||||
assert!(p.at(T![trait]));
|
||||
p.bump(T![trait]);
|
||||
name_r(p, ITEM_RECOVERY_SET);
|
||||
@@ -16,6 +16,7 @@ pub(super) fn trait_(p: &mut Parser) {
|
||||
type_params::bounds_without_colon(p);
|
||||
type_params::opt_where_clause(p);
|
||||
p.expect(T![;]);
|
||||
m.complete(p, TRAIT);
|
||||
return;
|
||||
}
|
||||
if p.at(T![:]) {
|
||||
@@ -27,11 +28,12 @@ pub(super) fn trait_(p: &mut Parser) {
|
||||
} else {
|
||||
p.error("expected `{`");
|
||||
}
|
||||
m.complete(p, TRAIT);
|
||||
}
|
||||
|
||||
// test impl_def
|
||||
// impl Foo {}
|
||||
pub(super) fn impl_(p: &mut Parser) {
|
||||
pub(super) fn impl_(p: &mut Parser, m: Marker) {
|
||||
assert!(p.at(T![impl]));
|
||||
p.bump(T![impl]);
|
||||
if choose_type_params_over_qpath(p) {
|
||||
@@ -58,6 +60,7 @@ pub(super) fn impl_(p: &mut Parser) {
|
||||
} else {
|
||||
p.error("expected `{`");
|
||||
}
|
||||
m.complete(p, IMPL);
|
||||
}
|
||||
|
||||
// test impl_item_list
|
||||
|
||||
Reference in New Issue
Block a user