Skip to content

Commit a5f2b16

Browse files
bors[bot]matklad
andauthored
Merge #4233
4233: Remove dead TryBlock expressio r=matklad a=matklad bors r+ 🤖 Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
2 parents c96b218 + 1412634 commit a5f2b16

File tree

9 files changed

+30
-63
lines changed

9 files changed

+30
-63
lines changed

crates/ra_hir_def/src/body/lower.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -182,10 +182,6 @@ impl ExprCollector<'_> {
182182

183183
self.alloc_expr(Expr::If { condition, then_branch, else_branch }, syntax_ptr)
184184
}
185-
ast::Expr::TryBlockExpr(e) => {
186-
let body = self.collect_block_opt(e.body());
187-
self.alloc_expr(Expr::TryBlock { body }, syntax_ptr)
188-
}
189185
ast::Expr::BlockExpr(e) => self.collect_block(e),
190186
ast::Expr::LoopExpr(e) => {
191187
let body = self.collect_block_opt(e.loop_body());

crates/ra_hir_def/src/expr.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,6 @@ pub enum Expr {
101101
Try {
102102
expr: ExprId,
103103
},
104-
TryBlock {
105-
body: ExprId,
106-
},
107104
Cast {
108105
expr: ExprId,
109106
type_ref: TypeRef,
@@ -239,7 +236,6 @@ impl Expr {
239236
f(*expr);
240237
}
241238
}
242-
Expr::TryBlock { body } => f(*body),
243239
Expr::Loop { body } => f(*body),
244240
Expr::While { condition, body } => {
245241
f(*condition);

crates/ra_hir_ty/src/infer/expr.rs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,6 @@ impl<'a> InferenceContext<'a> {
7373
self.coerce_merge_branch(&then_ty, &else_ty)
7474
}
7575
Expr::Block { statements, tail } => self.infer_block(statements, *tail, expected),
76-
Expr::TryBlock { body } => {
77-
let _inner = self.infer_expr(*body, expected);
78-
// FIXME should be std::result::Result<{inner}, _>
79-
Ty::Unknown
80-
}
8176
Expr::Loop { body } => {
8277
self.infer_expr(*body, &Expectation::has_type(Ty::unit()));
8378
// FIXME handle break with value

crates/ra_parser/src/grammar/expressions/atom.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ pub(super) fn atom_expr(p: &mut Parser, r: Restrictions) -> Option<(CompletedMar
8484
T![box] => box_expr(p, None),
8585
T![for] => for_expr(p, None),
8686
T![while] => while_expr(p, None),
87-
T![try] => try_block_expr(p, None),
87+
T![try] => try_expr(p, None),
8888
LIFETIME if la == T![:] => {
8989
let m = p.start();
9090
label(p);
@@ -134,7 +134,7 @@ pub(super) fn atom_expr(p: &mut Parser, r: Restrictions) -> Option<(CompletedMar
134134
}
135135
};
136136
let blocklike = match done.kind() {
137-
IF_EXPR | WHILE_EXPR | FOR_EXPR | LOOP_EXPR | MATCH_EXPR | BLOCK_EXPR | TRY_BLOCK_EXPR => {
137+
IF_EXPR | WHILE_EXPR | FOR_EXPR | LOOP_EXPR | MATCH_EXPR | BLOCK_EXPR | TRY_EXPR => {
138138
BlockLike::Block
139139
}
140140
_ => BlockLike::NotBlock,
@@ -532,7 +532,7 @@ fn break_expr(p: &mut Parser, r: Restrictions) -> CompletedMarker {
532532
// fn foo() {
533533
// let _ = try {};
534534
// }
535-
fn try_block_expr(p: &mut Parser, m: Option<Marker>) -> CompletedMarker {
535+
fn try_expr(p: &mut Parser, m: Option<Marker>) -> CompletedMarker {
536536
assert!(p.at(T![try]));
537537
let m = m.unwrap_or_else(|| p.start());
538538
// Special-case `try!` as macro.

crates/ra_parser/src/syntax_kind/generated.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,6 @@ pub enum SyntaxKind {
191191
RECORD_LIT,
192192
RECORD_FIELD_LIST,
193193
RECORD_FIELD,
194-
TRY_BLOCK_EXPR,
195194
BOX_EXPR,
196195
CALL_EXPR,
197196
INDEX_EXPR,

crates/ra_syntax/src/ast.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@ use crate::{
1616
};
1717

1818
pub use self::{
19-
expr_extensions::{ArrayExprKind, BinOp, ElseBranch, LiteralKind, PrefixOp, RangeOp},
19+
expr_extensions::{
20+
ArrayExprKind, BinOp, BlockModifier, ElseBranch, LiteralKind, PrefixOp, RangeOp,
21+
},
2022
extensions::{
2123
AttrKind, FieldKind, NameOrNameRef, PathSegmentKind, SelfParamKind, SlicePatComponents,
2224
StructKind, TypeBoundKind, VisibilityKind,

crates/ra_syntax/src/ast/expr_extensions.rs

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ impl ast::Expr {
1616
| ast::Expr::WhileExpr(_)
1717
| ast::Expr::BlockExpr(_)
1818
| ast::Expr::MatchExpr(_)
19-
| ast::Expr::TryBlockExpr(_) => true,
19+
| ast::Expr::TryExpr(_) => true,
2020
_ => false,
2121
}
2222
}
@@ -359,7 +359,22 @@ impl ast::Literal {
359359
}
360360
}
361361

362+
pub enum BlockModifier {
363+
Async(SyntaxToken),
364+
Unsafe(SyntaxToken),
365+
}
366+
362367
impl ast::BlockExpr {
368+
pub fn modifier(&self) -> Option<BlockModifier> {
369+
if let Some(token) = self.async_token() {
370+
return Some(BlockModifier::Async(token));
371+
}
372+
if let Some(token) = self.unsafe_token() {
373+
return Some(BlockModifier::Unsafe(token));
374+
}
375+
None
376+
}
377+
363378
/// false if the block is an intrinsic part of the syntax and can't be
364379
/// replaced with arbitrary expression.
365380
///
@@ -368,15 +383,15 @@ impl ast::BlockExpr {
368383
/// const FOO: () = { stand_alone };
369384
/// ```
370385
pub fn is_standalone(&self) -> bool {
371-
if self.unsafe_token().is_some() || self.async_token().is_some() {
386+
if self.modifier().is_some() {
372387
return false;
373388
}
374-
let kind = match self.syntax().parent() {
389+
let parent = match self.syntax().parent() {
390+
Some(it) => it,
375391
None => return true,
376-
Some(it) => it.kind(),
377392
};
378-
match kind {
379-
FN_DEF | IF_EXPR | WHILE_EXPR | LOOP_EXPR | TRY_BLOCK_EXPR => false,
393+
match parent.kind() {
394+
FN_DEF | IF_EXPR | WHILE_EXPR | LOOP_EXPR => false,
380395
_ => true,
381396
}
382397
}

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

Lines changed: 2 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -475,16 +475,6 @@ impl LoopExpr {
475475
pub fn loop_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![loop]) }
476476
}
477477

478-
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
479-
pub struct TryBlockExpr {
480-
pub(crate) syntax: SyntaxNode,
481-
}
482-
impl ast::AttrsOwner for TryBlockExpr {}
483-
impl TryBlockExpr {
484-
pub fn try_token(&self) -> Option<SyntaxToken> { support::token(&self.syntax, T![try]) }
485-
pub fn body(&self) -> Option<BlockExpr> { support::child(&self.syntax) }
486-
}
487-
488478
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
489479
pub struct ForExpr {
490480
pub(crate) syntax: SyntaxNode,
@@ -1475,7 +1465,6 @@ pub enum Expr {
14751465
FieldExpr(FieldExpr),
14761466
AwaitExpr(AwaitExpr),
14771467
TryExpr(TryExpr),
1478-
TryBlockExpr(TryBlockExpr),
14791468
CastExpr(CastExpr),
14801469
RefExpr(RefExpr),
14811470
PrefixExpr(PrefixExpr),
@@ -1958,17 +1947,6 @@ impl AstNode for LoopExpr {
19581947
}
19591948
fn syntax(&self) -> &SyntaxNode { &self.syntax }
19601949
}
1961-
impl AstNode for TryBlockExpr {
1962-
fn can_cast(kind: SyntaxKind) -> bool { kind == TRY_BLOCK_EXPR }
1963-
fn cast(syntax: SyntaxNode) -> Option<Self> {
1964-
if Self::can_cast(syntax.kind()) {
1965-
Some(Self { syntax })
1966-
} else {
1967-
None
1968-
}
1969-
}
1970-
fn syntax(&self) -> &SyntaxNode { &self.syntax }
1971-
}
19721950
impl AstNode for ForExpr {
19731951
fn can_cast(kind: SyntaxKind) -> bool { kind == FOR_EXPR }
19741952
fn cast(syntax: SyntaxNode) -> Option<Self> {
@@ -3310,9 +3288,6 @@ impl From<AwaitExpr> for Expr {
33103288
impl From<TryExpr> for Expr {
33113289
fn from(node: TryExpr) -> Expr { Expr::TryExpr(node) }
33123290
}
3313-
impl From<TryBlockExpr> for Expr {
3314-
fn from(node: TryBlockExpr) -> Expr { Expr::TryBlockExpr(node) }
3315-
}
33163291
impl From<CastExpr> for Expr {
33173292
fn from(node: CastExpr) -> Expr { Expr::CastExpr(node) }
33183293
}
@@ -3343,9 +3318,8 @@ impl AstNode for Expr {
33433318
TUPLE_EXPR | ARRAY_EXPR | PAREN_EXPR | PATH_EXPR | LAMBDA_EXPR | IF_EXPR
33443319
| LOOP_EXPR | FOR_EXPR | WHILE_EXPR | CONTINUE_EXPR | BREAK_EXPR | LABEL
33453320
| BLOCK_EXPR | RETURN_EXPR | MATCH_EXPR | RECORD_LIT | CALL_EXPR | INDEX_EXPR
3346-
| METHOD_CALL_EXPR | FIELD_EXPR | AWAIT_EXPR | TRY_EXPR | TRY_BLOCK_EXPR
3347-
| CAST_EXPR | REF_EXPR | PREFIX_EXPR | RANGE_EXPR | BIN_EXPR | LITERAL | MACRO_CALL
3348-
| BOX_EXPR => true,
3321+
| METHOD_CALL_EXPR | FIELD_EXPR | AWAIT_EXPR | TRY_EXPR | CAST_EXPR | REF_EXPR
3322+
| PREFIX_EXPR | RANGE_EXPR | BIN_EXPR | LITERAL | MACRO_CALL | BOX_EXPR => true,
33493323
_ => false,
33503324
}
33513325
}
@@ -3373,7 +3347,6 @@ impl AstNode for Expr {
33733347
FIELD_EXPR => Expr::FieldExpr(FieldExpr { syntax }),
33743348
AWAIT_EXPR => Expr::AwaitExpr(AwaitExpr { syntax }),
33753349
TRY_EXPR => Expr::TryExpr(TryExpr { syntax }),
3376-
TRY_BLOCK_EXPR => Expr::TryBlockExpr(TryBlockExpr { syntax }),
33773350
CAST_EXPR => Expr::CastExpr(CastExpr { syntax }),
33783351
REF_EXPR => Expr::RefExpr(RefExpr { syntax }),
33793352
PREFIX_EXPR => Expr::PrefixExpr(PrefixExpr { syntax }),
@@ -3410,7 +3383,6 @@ impl AstNode for Expr {
34103383
Expr::FieldExpr(it) => &it.syntax,
34113384
Expr::AwaitExpr(it) => &it.syntax,
34123385
Expr::TryExpr(it) => &it.syntax,
3413-
Expr::TryBlockExpr(it) => &it.syntax,
34143386
Expr::CastExpr(it) => &it.syntax,
34153387
Expr::RefExpr(it) => &it.syntax,
34163388
Expr::PrefixExpr(it) => &it.syntax,
@@ -3891,11 +3863,6 @@ impl std::fmt::Display for LoopExpr {
38913863
std::fmt::Display::fmt(self.syntax(), f)
38923864
}
38933865
}
3894-
impl std::fmt::Display for TryBlockExpr {
3895-
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
3896-
std::fmt::Display::fmt(self.syntax(), f)
3897-
}
3898-
}
38993866
impl std::fmt::Display for ForExpr {
39003867
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
39013868
std::fmt::Display::fmt(self.syntax(), f)

xtask/src/ast_src.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,6 @@ pub(crate) const KINDS_SRC: KindsSrc = KindsSrc {
162162
"RECORD_LIT",
163163
"RECORD_FIELD_LIST",
164164
"RECORD_FIELD",
165-
"TRY_BLOCK_EXPR",
166165
"BOX_EXPR",
167166
// postfix
168167
"CALL_EXPR",
@@ -440,7 +439,6 @@ pub(crate) const AST_SRC: AstSrc = AstSrc {
440439
}
441440
struct IfExpr: AttrsOwner { T![if], Condition }
442441
struct LoopExpr: AttrsOwner, LoopBodyOwner { T![loop] }
443-
struct TryBlockExpr: AttrsOwner { T![try], body: BlockExpr }
444442
struct ForExpr: AttrsOwner, LoopBodyOwner {
445443
T![for],
446444
Pat,
@@ -451,7 +449,7 @@ pub(crate) const AST_SRC: AstSrc = AstSrc {
451449
struct ContinueExpr: AttrsOwner { T![continue], T![lifetime] }
452450
struct BreakExpr: AttrsOwner { T![break], T![lifetime], Expr }
453451
struct Label { T![lifetime] }
454-
struct BlockExpr: AttrsOwner { Label, T![unsafe], T![async], Block }
452+
struct BlockExpr: AttrsOwner { Label, T![unsafe], T![async], Block }
455453
struct ReturnExpr: AttrsOwner { Expr }
456454
struct CallExpr: ArgListOwner { Expr }
457455
struct MethodCallExpr: AttrsOwner, ArgListOwner {
@@ -722,7 +720,6 @@ pub(crate) const AST_SRC: AstSrc = AstSrc {
722720
FieldExpr,
723721
AwaitExpr,
724722
TryExpr,
725-
TryBlockExpr,
726723
CastExpr,
727724
RefExpr,
728725
PrefixExpr,

0 commit comments

Comments
 (0)