Skip to content

Commit 5195f9d

Browse files
authored
Merge pull request #19653 from Veykril/push-lmrprywtztzt
feat: parse `super let`
2 parents 5004778 + 1b6948e commit 5195f9d

File tree

5 files changed

+30
-4
lines changed

5 files changed

+30
-4
lines changed

crates/parser/src/grammar/expressions.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ pub(super) fn stmt(p: &mut Parser<'_>, semicolon: Semicolon) {
5858
// }
5959
attributes::outer_attrs(p);
6060

61-
if p.at(T![let]) {
61+
if p.at(T![let]) || (p.at(T![super]) && p.nth_at(1, T![let])) {
6262
let_stmt(p, semicolon);
6363
m.complete(p, LET_STMT);
6464
return;
@@ -113,8 +113,9 @@ pub(super) fn stmt(p: &mut Parser<'_>, semicolon: Semicolon) {
113113
}
114114

115115
// test let_stmt
116-
// fn f() { let x: i32 = 92; }
116+
// fn f() { let x: i32 = 92; super let y; super::foo; }
117117
pub(super) fn let_stmt(p: &mut Parser<'_>, with_semi: Semicolon) {
118+
p.eat(T![super]);
118119
p.bump(T![let]);
119120
patterns::pattern(p);
120121
if p.at(T![:]) {

crates/parser/test_data/parser/inline/ok/let_stmt.rast

+23
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,28 @@ SOURCE_FILE
3232
INT_NUMBER "92"
3333
SEMICOLON ";"
3434
WHITESPACE " "
35+
LET_STMT
36+
SUPER_KW "super"
37+
WHITESPACE " "
38+
LET_KW "let"
39+
WHITESPACE " "
40+
IDENT_PAT
41+
NAME
42+
IDENT "y"
43+
SEMICOLON ";"
44+
WHITESPACE " "
45+
EXPR_STMT
46+
PATH_EXPR
47+
PATH
48+
PATH
49+
PATH_SEGMENT
50+
NAME_REF
51+
SUPER_KW "super"
52+
COLON2 "::"
53+
PATH_SEGMENT
54+
NAME_REF
55+
IDENT "foo"
56+
SEMICOLON ";"
57+
WHITESPACE " "
3558
R_CURLY "}"
3659
WHITESPACE "\n"
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
fn f() { let x: i32 = 92; }
1+
fn f() { let x: i32 = 92; super let y; super::foo; }

crates/syntax/rust.ungram

+1-1
Original file line numberDiff line numberDiff line change
@@ -348,7 +348,7 @@ Stmt =
348348
| LetStmt
349349

350350
LetStmt =
351-
Attr* 'let' Pat (':' Type)?
351+
Attr* 'super'? 'let' Pat (':' Type)?
352352
'=' initializer:Expr
353353
LetElse?
354354
';'

crates/syntax/src/ast/generated/nodes.rs

+2
Original file line numberDiff line numberDiff line change
@@ -823,6 +823,8 @@ impl LetStmt {
823823
pub fn eq_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![=]) }
824824
#[inline]
825825
pub fn let_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![let]) }
826+
#[inline]
827+
pub fn super_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![super]) }
826828
}
827829
pub struct Lifetime {
828830
pub(crate) syntax: SyntaxNode,

0 commit comments

Comments
 (0)