From f3ee5a15090d8ba6ec220e1f907ed3af27e57734 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Fri, 9 Aug 2019 12:16:47 +0200 Subject: Move numeric names inside of `NameRef` --- crates/ra_parser/src/grammar.rs | 14 ++++++++++++-- crates/ra_parser/src/grammar/expressions.rs | 10 ++++------ crates/ra_parser/src/grammar/items.rs | 2 +- crates/ra_parser/src/grammar/paths.rs | 2 +- crates/ra_parser/src/grammar/type_args.rs | 4 ++-- 5 files changed, 20 insertions(+), 12 deletions(-) (limited to 'crates/ra_parser/src') diff --git a/crates/ra_parser/src/grammar.rs b/crates/ra_parser/src/grammar.rs index 2ee121ccd..beedac457 100644 --- a/crates/ra_parser/src/grammar.rs +++ b/crates/ra_parser/src/grammar.rs @@ -273,8 +273,8 @@ fn name(p: &mut Parser) { name_r(p, TokenSet::empty()) } -fn name_ref(p: &mut Parser, allow_numeric_names: bool) { - if p.at(IDENT) || (allow_numeric_names && p.at(INT_NUMBER)) { +fn name_ref(p: &mut Parser) { + if p.at(IDENT) { let m = p.start(); p.bump(); m.complete(p, NAME_REF); @@ -287,6 +287,16 @@ fn name_ref(p: &mut Parser, allow_numeric_names: bool) { } } +fn name_ref_or_index(p: &mut Parser) { + if p.at(IDENT) || p.at(INT_NUMBER) { + let m = p.start(); + p.bump(); + m.complete(p, NAME_REF); + } else { + p.err_and_bump("expected identifier"); + } +} + fn error_block(p: &mut Parser, message: &str) { assert!(p.at(T!['{'])); let m = p.start(); diff --git a/crates/ra_parser/src/grammar/expressions.rs b/crates/ra_parser/src/grammar/expressions.rs index 9f9e9cb0e..9fd3a235d 100644 --- a/crates/ra_parser/src/grammar/expressions.rs +++ b/crates/ra_parser/src/grammar/expressions.rs @@ -458,7 +458,7 @@ fn method_call_expr(p: &mut Parser, lhs: CompletedMarker) -> CompletedMarker { assert!(p.at(T![.]) && p.nth(1) == IDENT && (p.nth(2) == T!['('] || p.nth(2) == T![::])); let m = lhs.precede(p); p.bump(); - name_ref(p, false); + name_ref(p); type_args::opt_type_arg_list(p, true); if p.at(T!['(']) { arg_list(p); @@ -484,10 +484,8 @@ fn field_expr(p: &mut Parser, lhs: CompletedMarker) -> CompletedMarker { assert!(p.at(T![.])); let m = lhs.precede(p); p.bump(); - if p.at(IDENT) { - name_ref(p, false) - } else if p.at(INT_NUMBER) { - p.bump(); + if p.at(IDENT) || p.at(INT_NUMBER) { + name_ref_or_index(p) } else if p.at(FLOAT_NUMBER) { // FIXME: How to recover and instead parse INT + T![.]? p.bump(); @@ -587,7 +585,7 @@ pub(crate) fn named_field_list(p: &mut Parser) { IDENT | INT_NUMBER | T![#] => { let m = p.start(); attributes::outer_attributes(p); - name_ref(p, true); + name_ref_or_index(p); if p.eat(T![:]) { expr(p); } diff --git a/crates/ra_parser/src/grammar/items.rs b/crates/ra_parser/src/grammar/items.rs index b0081f396..543af7c4b 100644 --- a/crates/ra_parser/src/grammar/items.rs +++ b/crates/ra_parser/src/grammar/items.rs @@ -279,7 +279,7 @@ fn extern_crate_item(p: &mut Parser, m: Marker) { p.bump(); assert!(p.at(T![crate])); p.bump(); - name_ref(p, false); + name_ref(p); opt_alias(p); p.expect(T![;]); m.complete(p, EXTERN_CRATE_ITEM); diff --git a/crates/ra_parser/src/grammar/paths.rs b/crates/ra_parser/src/grammar/paths.rs index 2c8f0f7e8..3537b0da1 100644 --- a/crates/ra_parser/src/grammar/paths.rs +++ b/crates/ra_parser/src/grammar/paths.rs @@ -71,7 +71,7 @@ fn path_segment(p: &mut Parser, mode: Mode, first: bool) { } match p.current() { IDENT => { - name_ref(p, false); + name_ref(p); opt_path_type_args(p, mode); } // test crate_path diff --git a/crates/ra_parser/src/grammar/type_args.rs b/crates/ra_parser/src/grammar/type_args.rs index f1d999dea..3db08b280 100644 --- a/crates/ra_parser/src/grammar/type_args.rs +++ b/crates/ra_parser/src/grammar/type_args.rs @@ -38,12 +38,12 @@ fn type_arg(p: &mut Parser) { // test associated_type_bounds // fn print_all>(printables: T) {} IDENT if p.nth(1) == T![:] => { - name_ref(p, false); + name_ref(p); type_params::bounds(p); m.complete(p, ASSOC_TYPE_ARG); } IDENT if p.nth(1) == T![=] => { - name_ref(p, false); + name_ref(p); p.bump(); types::type_(p); m.complete(p, ASSOC_TYPE_ARG); -- cgit v1.2.3