mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-27 10:17:15 +00:00
Merge pull request #19653 from Veykril/push-lmrprywtztzt
feat: parse `super let`
This commit is contained in:
commit
5195f9d176
5 changed files with 30 additions and 4 deletions
|
|
@ -58,7 +58,7 @@ pub(super) fn stmt(p: &mut Parser<'_>, semicolon: Semicolon) {
|
||||||
// }
|
// }
|
||||||
attributes::outer_attrs(p);
|
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);
|
let_stmt(p, semicolon);
|
||||||
m.complete(p, LET_STMT);
|
m.complete(p, LET_STMT);
|
||||||
return;
|
return;
|
||||||
|
|
@ -113,8 +113,9 @@ pub(super) fn stmt(p: &mut Parser<'_>, semicolon: Semicolon) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// test let_stmt
|
// 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) {
|
pub(super) fn let_stmt(p: &mut Parser<'_>, with_semi: Semicolon) {
|
||||||
|
p.eat(T![super]);
|
||||||
p.bump(T![let]);
|
p.bump(T![let]);
|
||||||
patterns::pattern(p);
|
patterns::pattern(p);
|
||||||
if p.at(T![:]) {
|
if p.at(T![:]) {
|
||||||
|
|
|
||||||
|
|
@ -32,5 +32,28 @@ SOURCE_FILE
|
||||||
INT_NUMBER "92"
|
INT_NUMBER "92"
|
||||||
SEMICOLON ";"
|
SEMICOLON ";"
|
||||||
WHITESPACE " "
|
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 "}"
|
R_CURLY "}"
|
||||||
WHITESPACE "\n"
|
WHITESPACE "\n"
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
fn f() { let x: i32 = 92; }
|
fn f() { let x: i32 = 92; super let y; super::foo; }
|
||||||
|
|
|
||||||
|
|
@ -348,7 +348,7 @@ Stmt =
|
||||||
| LetStmt
|
| LetStmt
|
||||||
|
|
||||||
LetStmt =
|
LetStmt =
|
||||||
Attr* 'let' Pat (':' Type)?
|
Attr* 'super'? 'let' Pat (':' Type)?
|
||||||
'=' initializer:Expr
|
'=' initializer:Expr
|
||||||
LetElse?
|
LetElse?
|
||||||
';'
|
';'
|
||||||
|
|
|
||||||
|
|
@ -823,6 +823,8 @@ impl LetStmt {
|
||||||
pub fn eq_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![=]) }
|
pub fn eq_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![=]) }
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn let_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![let]) }
|
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 struct Lifetime {
|
||||||
pub(crate) syntax: SyntaxNode,
|
pub(crate) syntax: SyntaxNode,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue