Merge pull request #19653 from Veykril/push-lmrprywtztzt

feat: parse `super let`
This commit is contained in:
Lukas Wirth 2025-04-21 11:58:36 +00:00 committed by GitHub
commit 5195f9d176
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 30 additions and 4 deletions

View file

@ -58,7 +58,7 @@ pub(super) fn stmt(p: &mut Parser<'_>, semicolon: Semicolon) {
// }
attributes::outer_attrs(p);
if p.at(T![let]) {
if p.at(T![let]) || (p.at(T![super]) && p.nth_at(1, T![let])) {
let_stmt(p, semicolon);
m.complete(p, LET_STMT);
return;
@ -113,8 +113,9 @@ pub(super) fn stmt(p: &mut Parser<'_>, semicolon: Semicolon) {
}
// test let_stmt
// fn f() { let x: i32 = 92; }
// fn f() { let x: i32 = 92; super let y; super::foo; }
pub(super) fn let_stmt(p: &mut Parser<'_>, with_semi: Semicolon) {
p.eat(T![super]);
p.bump(T![let]);
patterns::pattern(p);
if p.at(T![:]) {

View file

@ -32,5 +32,28 @@ SOURCE_FILE
INT_NUMBER "92"
SEMICOLON ";"
WHITESPACE " "
LET_STMT
SUPER_KW "super"
WHITESPACE " "
LET_KW "let"
WHITESPACE " "
IDENT_PAT
NAME
IDENT "y"
SEMICOLON ";"
WHITESPACE " "
EXPR_STMT
PATH_EXPR
PATH
PATH
PATH_SEGMENT
NAME_REF
SUPER_KW "super"
COLON2 "::"
PATH_SEGMENT
NAME_REF
IDENT "foo"
SEMICOLON ";"
WHITESPACE " "
R_CURLY "}"
WHITESPACE "\n"

View file

@ -1 +1 @@
fn f() { let x: i32 = 92; }
fn f() { let x: i32 = 92; super let y; super::foo; }

View file

@ -348,7 +348,7 @@ Stmt =
| LetStmt
LetStmt =
Attr* 'let' Pat (':' Type)?
Attr* 'super'? 'let' Pat (':' Type)?
'=' initializer:Expr
LetElse?
';'

View file

@ -823,6 +823,8 @@ impl LetStmt {
pub fn eq_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![=]) }
#[inline]
pub fn let_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![let]) }
#[inline]
pub fn super_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![super]) }
}
pub struct Lifetime {
pub(crate) syntax: SyntaxNode,