From d890c767c4618b2ca4e8b42dae87b8ca5ebbba23 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sat, 18 Sep 2021 00:33:42 +0300 Subject: [PATCH] internal: cleanup item parsing --- crates/parser/src/grammar/items.rs | 96 ++++++++----------- crates/parser/src/grammar/items/traits.rs | 7 +- .../test_data/parser/inline/ok/0152_impl.rast | 22 ----- .../test_data/parser/inline/ok/0152_impl.rs | 1 - .../parser/inline/ok/0153_trait.rast | 11 --- .../test_data/parser/inline/ok/0153_trait.rs | 1 - 6 files changed, 44 insertions(+), 94 deletions(-) delete mode 100644 crates/syntax/test_data/parser/inline/ok/0152_impl.rast delete mode 100644 crates/syntax/test_data/parser/inline/ok/0152_impl.rs delete mode 100644 crates/syntax/test_data/parser/inline/ok/0153_trait.rast delete mode 100644 crates/syntax/test_data/parser/inline/ok/0153_trait.rs diff --git a/crates/parser/src/grammar/items.rs b/crates/parser/src/grammar/items.rs index 5fdffc4f96b..78d99f284a9 100644 --- a/crates/parser/src/grammar/items.rs +++ b/crates/parser/src/grammar/items.rs @@ -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(){} - 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() 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(){} + 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() 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); diff --git a/crates/parser/src/grammar/items/traits.rs b/crates/parser/src/grammar/items/traits.rs index 74f11b45a18..569fc58a1ce 100644 --- a/crates/parser/src/grammar/items/traits.rs +++ b/crates/parser/src/grammar/items/traits.rs @@ -3,7 +3,7 @@ use super::*; // test trait_item // trait T: Hash + Clone where U: Copy {} // trait X: 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 diff --git a/crates/syntax/test_data/parser/inline/ok/0152_impl.rast b/crates/syntax/test_data/parser/inline/ok/0152_impl.rast deleted file mode 100644 index 7968cf9ffa0..00000000000 --- a/crates/syntax/test_data/parser/inline/ok/0152_impl.rast +++ /dev/null @@ -1,22 +0,0 @@ -SOURCE_FILE@0..16 - IMPL@0..15 - IMPL_KW@0..4 "impl" - WHITESPACE@4..5 " " - PATH_TYPE@5..6 - PATH@5..6 - PATH_SEGMENT@5..6 - NAME_REF@5..6 - IDENT@5..6 "T" - WHITESPACE@6..7 " " - FOR_KW@7..10 "for" - WHITESPACE@10..11 " " - PATH_TYPE@11..12 - PATH@11..12 - PATH_SEGMENT@11..12 - NAME_REF@11..12 - IDENT@11..12 "S" - WHITESPACE@12..13 " " - ASSOC_ITEM_LIST@13..15 - L_CURLY@13..14 "{" - R_CURLY@14..15 "}" - WHITESPACE@15..16 "\n" diff --git a/crates/syntax/test_data/parser/inline/ok/0152_impl.rs b/crates/syntax/test_data/parser/inline/ok/0152_impl.rs deleted file mode 100644 index a1a550d8a60..00000000000 --- a/crates/syntax/test_data/parser/inline/ok/0152_impl.rs +++ /dev/null @@ -1 +0,0 @@ -impl T for S {} diff --git a/crates/syntax/test_data/parser/inline/ok/0153_trait.rast b/crates/syntax/test_data/parser/inline/ok/0153_trait.rast deleted file mode 100644 index 9881e5048c8..00000000000 --- a/crates/syntax/test_data/parser/inline/ok/0153_trait.rast +++ /dev/null @@ -1,11 +0,0 @@ -SOURCE_FILE@0..11 - TRAIT@0..10 - TRAIT_KW@0..5 "trait" - WHITESPACE@5..6 " " - NAME@6..7 - IDENT@6..7 "T" - WHITESPACE@7..8 " " - ASSOC_ITEM_LIST@8..10 - L_CURLY@8..9 "{" - R_CURLY@9..10 "}" - WHITESPACE@10..11 "\n" diff --git a/crates/syntax/test_data/parser/inline/ok/0153_trait.rs b/crates/syntax/test_data/parser/inline/ok/0153_trait.rs deleted file mode 100644 index 8d183dbb5d3..00000000000 --- a/crates/syntax/test_data/parser/inline/ok/0153_trait.rs +++ /dev/null @@ -1 +0,0 @@ -trait T {}