Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/parser/src/grammar/expressions.rs')
| -rw-r--r-- | crates/parser/src/grammar/expressions.rs | 45 |
1 files changed, 24 insertions, 21 deletions
diff --git a/crates/parser/src/grammar/expressions.rs b/crates/parser/src/grammar/expressions.rs index b063c73a9d..e7402104eb 100644 --- a/crates/parser/src/grammar/expressions.rs +++ b/crates/parser/src/grammar/expressions.rs @@ -14,17 +14,20 @@ pub(super) enum Semicolon { const EXPR_FIRST: TokenSet = LHS_FIRST; -pub(super) fn expr(p: &mut Parser) -> bool { +pub(super) fn expr(p: &mut Parser<'_>) -> bool { let r = Restrictions { forbid_structs: false, prefer_stmt: false }; expr_bp(p, None, r, 1).is_some() } -pub(super) fn expr_stmt(p: &mut Parser, m: Option<Marker>) -> Option<(CompletedMarker, BlockLike)> { +pub(super) fn expr_stmt( + p: &mut Parser<'_>, + m: Option<Marker>, +) -> Option<(CompletedMarker, BlockLike)> { let r = Restrictions { forbid_structs: false, prefer_stmt: true }; expr_bp(p, m, r, 1) } -fn expr_no_struct(p: &mut Parser) { +fn expr_no_struct(p: &mut Parser<'_>) { let r = Restrictions { forbid_structs: true, prefer_stmt: false }; expr_bp(p, None, r, 1); } @@ -33,12 +36,12 @@ fn expr_no_struct(p: &mut Parser) { /// It needs to be parsed with lower precedence than `&&`, so that /// `if let true = true && false` is parsed as `if (let true = true) && (true)` /// and not `if let true = (true && true)`. -fn expr_let(p: &mut Parser) { +fn expr_let(p: &mut Parser<'_>) { let r = Restrictions { forbid_structs: true, prefer_stmt: false }; expr_bp(p, None, r, 5); } -pub(super) fn stmt(p: &mut Parser, semicolon: Semicolon) { +pub(super) fn stmt(p: &mut Parser<'_>, semicolon: Semicolon) { if p.eat(T![;]) { return; } @@ -101,7 +104,7 @@ pub(super) fn stmt(p: &mut Parser, semicolon: Semicolon) { // test let_stmt // fn f() { let x: i32 = 92; } - fn let_stmt(p: &mut Parser, m: Marker, with_semi: Semicolon) { + fn let_stmt(p: &mut Parser<'_>, m: Marker, with_semi: Semicolon) { p.bump(T![let]); patterns::pattern(p); if p.at(T![:]) { @@ -138,7 +141,7 @@ pub(super) fn stmt(p: &mut Parser, semicolon: Semicolon) { } } -pub(super) fn expr_block_contents(p: &mut Parser) { +pub(super) fn expr_block_contents(p: &mut Parser<'_>) { attributes::inner_attrs(p); while !p.at(EOF) && !p.at(T!['}']) { @@ -170,7 +173,7 @@ struct Restrictions { /// /// See <https://matklad.github.io/2020/04/13/simple-but-powerful-pratt-parsing.html> #[rustfmt::skip] -fn current_op(p: &Parser) -> (u8, SyntaxKind) { +fn current_op(p: &Parser<'_>) -> (u8, SyntaxKind) { const NOT_AN_OP: (u8, SyntaxKind) = (0, T![@]); match p.current() { T![|] if p.at(T![||]) => (3, T![||]), @@ -214,7 +217,7 @@ fn current_op(p: &Parser) -> (u8, SyntaxKind) { // Parses expression with binding power of at least bp. fn expr_bp( - p: &mut Parser, + p: &mut Parser<'_>, m: Option<Marker>, mut r: Restrictions, bp: u8, @@ -287,7 +290,7 @@ fn expr_bp( const LHS_FIRST: TokenSet = atom::ATOM_EXPR_FIRST.union(TokenSet::new(&[T![&], T![*], T![!], T![.], T![-]])); -fn lhs(p: &mut Parser, r: Restrictions) -> Option<(CompletedMarker, BlockLike)> { +fn lhs(p: &mut Parser<'_>, r: Restrictions) -> Option<(CompletedMarker, BlockLike)> { let m; let kind = match p.current() { // test ref_expr @@ -356,7 +359,7 @@ fn lhs(p: &mut Parser, r: Restrictions) -> Option<(CompletedMarker, BlockLike)> } fn postfix_expr( - p: &mut Parser, + p: &mut Parser<'_>, mut lhs: CompletedMarker, // Calls are disallowed if the type is a block and we prefer statements because the call cannot be disambiguated from a tuple // E.g. `while true {break}();` is parsed as @@ -392,7 +395,7 @@ fn postfix_expr( return (lhs, block_like); fn postfix_dot_expr( - p: &mut Parser, + p: &mut Parser<'_>, lhs: CompletedMarker, ) -> Result<CompletedMarker, CompletedMarker> { assert!(p.at(T![.])); @@ -428,7 +431,7 @@ fn postfix_expr( // let _ = f(<Foo>::func()); // f(<Foo as Trait>::func()); // } -fn call_expr(p: &mut Parser, lhs: CompletedMarker) -> CompletedMarker { +fn call_expr(p: &mut Parser<'_>, lhs: CompletedMarker) -> CompletedMarker { assert!(p.at(T!['('])); let m = lhs.precede(p); arg_list(p); @@ -439,7 +442,7 @@ fn call_expr(p: &mut Parser, lhs: CompletedMarker) -> CompletedMarker { // fn foo() { // x[1][2]; // } -fn index_expr(p: &mut Parser, lhs: CompletedMarker) -> CompletedMarker { +fn index_expr(p: &mut Parser<'_>, lhs: CompletedMarker) -> CompletedMarker { assert!(p.at(T!['['])); let m = lhs.precede(p); p.bump(T!['[']); @@ -453,7 +456,7 @@ fn index_expr(p: &mut Parser, lhs: CompletedMarker) -> CompletedMarker { // x.foo(); // y.bar::<T>(1, 2,); // } -fn method_call_expr(p: &mut Parser, lhs: CompletedMarker) -> CompletedMarker { +fn method_call_expr(p: &mut Parser<'_>, lhs: CompletedMarker) -> CompletedMarker { assert!(p.at(T![.]) && p.nth(1) == IDENT && (p.nth(2) == T!['('] || p.nth_at(2, T![::]))); let m = lhs.precede(p); p.bump_any(); @@ -471,7 +474,7 @@ fn method_call_expr(p: &mut Parser, lhs: CompletedMarker) -> CompletedMarker { // x.0.bar; // x.0(); // } -fn field_expr(p: &mut Parser, lhs: CompletedMarker) -> CompletedMarker { +fn field_expr(p: &mut Parser<'_>, lhs: CompletedMarker) -> CompletedMarker { assert!(p.at(T![.])); let m = lhs.precede(p); p.bump(T![.]); @@ -490,7 +493,7 @@ fn field_expr(p: &mut Parser, lhs: CompletedMarker) -> CompletedMarker { // fn foo() { // x?; // } -fn try_expr(p: &mut Parser, lhs: CompletedMarker) -> CompletedMarker { +fn try_expr(p: &mut Parser<'_>, lhs: CompletedMarker) -> CompletedMarker { assert!(p.at(T![?])); let m = lhs.precede(p); p.bump(T![?]); @@ -504,7 +507,7 @@ fn try_expr(p: &mut Parser, lhs: CompletedMarker) -> CompletedMarker { // 79 as i16 - 1; // 0x36 as u8 <= 0x37; // } -fn cast_expr(p: &mut Parser, lhs: CompletedMarker) -> CompletedMarker { +fn cast_expr(p: &mut Parser<'_>, lhs: CompletedMarker) -> CompletedMarker { assert!(p.at(T![as])); let m = lhs.precede(p); p.bump(T![as]); @@ -514,7 +517,7 @@ fn cast_expr(p: &mut Parser, lhs: CompletedMarker) -> CompletedMarker { m.complete(p, CAST_EXPR) } -fn arg_list(p: &mut Parser) { +fn arg_list(p: &mut Parser<'_>) { assert!(p.at(T!['('])); let m = p.start(); p.bump(T!['(']); @@ -541,7 +544,7 @@ fn arg_list(p: &mut Parser) { // let _ = ::a::<b>; // let _ = format!(); // } -fn path_expr(p: &mut Parser, r: Restrictions) -> (CompletedMarker, BlockLike) { +fn path_expr(p: &mut Parser<'_>, r: Restrictions) -> (CompletedMarker, BlockLike) { assert!(paths::is_path_start(p)); let m = p.start(); paths::expr_path(p); @@ -565,7 +568,7 @@ fn path_expr(p: &mut Parser, r: Restrictions) -> (CompletedMarker, BlockLike) { // S { x, y: 32, ..Default::default() }; // TupleStruct { 0: 1 }; // } -pub(crate) fn record_expr_field_list(p: &mut Parser) { +pub(crate) fn record_expr_field_list(p: &mut Parser<'_>) { assert!(p.at(T!['{'])); let m = p.start(); p.bump(T!['{']); |