mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-27 12:29:21 +00:00
Add support for become
expr/tail calls
This commit is contained in:
parent
3bb8d3a32f
commit
e146139957
16 changed files with 144 additions and 6 deletions
|
@ -1095,6 +1095,16 @@ impl ReturnExpr {
|
|||
pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) }
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
||||
pub struct BecomeExpr {
|
||||
pub(crate) syntax: SyntaxNode,
|
||||
}
|
||||
impl ast::HasAttrs for BecomeExpr {}
|
||||
impl BecomeExpr {
|
||||
pub fn become_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![become]) }
|
||||
pub fn expr(&self) -> Option<Expr> { support::child(&self.syntax) }
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
||||
pub struct TryExpr {
|
||||
pub(crate) syntax: SyntaxNode,
|
||||
|
@ -1633,6 +1643,7 @@ pub enum Expr {
|
|||
RecordExpr(RecordExpr),
|
||||
RefExpr(RefExpr),
|
||||
ReturnExpr(ReturnExpr),
|
||||
BecomeExpr(BecomeExpr),
|
||||
TryExpr(TryExpr),
|
||||
TupleExpr(TupleExpr),
|
||||
WhileExpr(WhileExpr),
|
||||
|
@ -2792,6 +2803,17 @@ impl AstNode for ReturnExpr {
|
|||
}
|
||||
fn syntax(&self) -> &SyntaxNode { &self.syntax }
|
||||
}
|
||||
impl AstNode for BecomeExpr {
|
||||
fn can_cast(kind: SyntaxKind) -> bool { kind == BECOME_EXPR }
|
||||
fn cast(syntax: SyntaxNode) -> Option<Self> {
|
||||
if Self::can_cast(syntax.kind()) {
|
||||
Some(Self { syntax })
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
fn syntax(&self) -> &SyntaxNode { &self.syntax }
|
||||
}
|
||||
impl AstNode for TryExpr {
|
||||
fn can_cast(kind: SyntaxKind) -> bool { kind == TRY_EXPR }
|
||||
fn cast(syntax: SyntaxNode) -> Option<Self> {
|
||||
|
@ -3540,6 +3562,9 @@ impl From<RefExpr> for Expr {
|
|||
impl From<ReturnExpr> for Expr {
|
||||
fn from(node: ReturnExpr) -> Expr { Expr::ReturnExpr(node) }
|
||||
}
|
||||
impl From<BecomeExpr> for Expr {
|
||||
fn from(node: BecomeExpr) -> Expr { Expr::BecomeExpr(node) }
|
||||
}
|
||||
impl From<TryExpr> for Expr {
|
||||
fn from(node: TryExpr) -> Expr { Expr::TryExpr(node) }
|
||||
}
|
||||
|
@ -3593,6 +3618,7 @@ impl AstNode for Expr {
|
|||
| RECORD_EXPR
|
||||
| REF_EXPR
|
||||
| RETURN_EXPR
|
||||
| BECOME_EXPR
|
||||
| TRY_EXPR
|
||||
| TUPLE_EXPR
|
||||
| WHILE_EXPR
|
||||
|
@ -3632,6 +3658,7 @@ impl AstNode for Expr {
|
|||
RECORD_EXPR => Expr::RecordExpr(RecordExpr { syntax }),
|
||||
REF_EXPR => Expr::RefExpr(RefExpr { syntax }),
|
||||
RETURN_EXPR => Expr::ReturnExpr(ReturnExpr { syntax }),
|
||||
BECOME_EXPR => Expr::BecomeExpr(BecomeExpr { syntax }),
|
||||
TRY_EXPR => Expr::TryExpr(TryExpr { syntax }),
|
||||
TUPLE_EXPR => Expr::TupleExpr(TupleExpr { syntax }),
|
||||
WHILE_EXPR => Expr::WhileExpr(WhileExpr { syntax }),
|
||||
|
@ -3673,6 +3700,7 @@ impl AstNode for Expr {
|
|||
Expr::RecordExpr(it) => &it.syntax,
|
||||
Expr::RefExpr(it) => &it.syntax,
|
||||
Expr::ReturnExpr(it) => &it.syntax,
|
||||
Expr::BecomeExpr(it) => &it.syntax,
|
||||
Expr::TryExpr(it) => &it.syntax,
|
||||
Expr::TupleExpr(it) => &it.syntax,
|
||||
Expr::WhileExpr(it) => &it.syntax,
|
||||
|
@ -4150,6 +4178,7 @@ impl AstNode for AnyHasAttrs {
|
|||
| RANGE_EXPR
|
||||
| REF_EXPR
|
||||
| RETURN_EXPR
|
||||
| BECOME_EXPR
|
||||
| TRY_EXPR
|
||||
| TUPLE_EXPR
|
||||
| WHILE_EXPR
|
||||
|
@ -4851,6 +4880,11 @@ impl std::fmt::Display for ReturnExpr {
|
|||
std::fmt::Display::fmt(self.syntax(), f)
|
||||
}
|
||||
}
|
||||
impl std::fmt::Display for BecomeExpr {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
std::fmt::Display::fmt(self.syntax(), f)
|
||||
}
|
||||
}
|
||||
impl std::fmt::Display for TryExpr {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
std::fmt::Display::fmt(self.syntax(), f)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue