Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-assists/src/handlers/inline_local_variable.rs')
-rw-r--r--crates/ide-assists/src/handlers/inline_local_variable.rs59
1 files changed, 23 insertions, 36 deletions
diff --git a/crates/ide-assists/src/handlers/inline_local_variable.rs b/crates/ide-assists/src/handlers/inline_local_variable.rs
index b9fc075ae8..5d4fbfc10a 100644
--- a/crates/ide-assists/src/handlers/inline_local_variable.rs
+++ b/crates/ide-assists/src/handlers/inline_local_variable.rs
@@ -5,7 +5,11 @@ use ide_db::{
EditionedFileId, RootDatabase,
};
use syntax::{
- ast::{self, AstNode, AstToken, HasName},
+ ast::{
+ self,
+ prec::{precedence, ExprPrecedence},
+ AstNode, AstToken, HasName,
+ },
SyntaxElement, TextRange,
};
@@ -79,33 +83,16 @@ pub(crate) fn inline_local_variable(acc: &mut Assists, ctx: &AssistContext<'_>)
Some(u) => u,
None => return Some((range, name_ref, false)),
};
- let initializer = matches!(
- initializer_expr,
- ast::Expr::CallExpr(_)
- | ast::Expr::IndexExpr(_)
- | ast::Expr::MethodCallExpr(_)
- | ast::Expr::FieldExpr(_)
- | ast::Expr::TryExpr(_)
- | ast::Expr::Literal(_)
- | ast::Expr::TupleExpr(_)
- | ast::Expr::ArrayExpr(_)
- | ast::Expr::ParenExpr(_)
- | ast::Expr::PathExpr(_)
- | ast::Expr::BlockExpr(_),
- );
- let parent = matches!(
- usage_parent,
- ast::Expr::TupleExpr(_)
- | ast::Expr::ArrayExpr(_)
- | ast::Expr::ParenExpr(_)
- | ast::Expr::ForExpr(_)
- | ast::Expr::WhileExpr(_)
- | ast::Expr::BreakExpr(_)
- | ast::Expr::ReturnExpr(_)
- | ast::Expr::MatchExpr(_)
- | ast::Expr::BlockExpr(_)
- );
- Some((range, name_ref, !(initializer || parent)))
+ let initializer = precedence(&initializer_expr);
+ let parent = precedence(&usage_parent);
+ Some((
+ range,
+ name_ref,
+ parent != ExprPrecedence::Unambiguous
+ && initializer < parent
+ // initializer == ExprPrecedence::Prefix -> parent != ExprPrecedence::Jump
+ && (initializer != ExprPrecedence::Prefix || parent != ExprPrecedence::Jump),
+ ))
})
.collect::<Option<Vec<_>>>()?;
@@ -281,11 +268,11 @@ fn foo() {
r"
fn bar(a: usize) {}
fn foo() {
- (1 + 1) + 1;
- if (1 + 1) > 10 {
+ 1 + 1 + 1;
+ if 1 + 1 > 10 {
}
- while (1 + 1) > 10 {
+ while 1 + 1 > 10 {
}
let b = (1 + 1) * 10;
@@ -350,14 +337,14 @@ fn foo() {
r"
fn bar(a: usize) -> usize { a }
fn foo() {
- (bar(1) as u64) + 1;
- if (bar(1) as u64) > 10 {
+ bar(1) as u64 + 1;
+ if bar(1) as u64 > 10 {
}
- while (bar(1) as u64) > 10 {
+ while bar(1) as u64 > 10 {
}
- let b = (bar(1) as u64) * 10;
+ let b = bar(1) as u64 * 10;
bar(bar(1) as u64);
}",
);
@@ -574,7 +561,7 @@ fn foo() {
r"
fn foo() {
let bar = 10;
- let b = (&bar) * 10;
+ let b = &bar * 10;
}",
);
}