Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide_assists/src/handlers/inline_call.rs')
-rw-r--r--crates/ide_assists/src/handlers/inline_call.rs37
1 files changed, 12 insertions, 25 deletions
diff --git a/crates/ide_assists/src/handlers/inline_call.rs b/crates/ide_assists/src/handlers/inline_call.rs
index d252d61a69..b3dc95df41 100644
--- a/crates/ide_assists/src/handlers/inline_call.rs
+++ b/crates/ide_assists/src/handlers/inline_call.rs
@@ -12,7 +12,7 @@ use ide_db::{
use itertools::{izip, Itertools};
use syntax::{
ast::{self, edit_in_place::Indent, HasArgList, PathExpr},
- ted, AstNode, SyntaxNode,
+ ted, AstNode,
};
use crate::{
@@ -178,7 +178,7 @@ pub(crate) fn inline_call(acc: &mut Assists, ctx: &AssistContext) -> Option<()>
let name_ref: ast::NameRef = ctx.find_node_at_offset()?;
let call_info = CallInfo::from_name_ref(name_ref.clone())?;
let (function, label) = match &call_info.node {
- CallExprNode::Call(call) => {
+ ast::CallableExpr::Call(call) => {
let path = match call.expr()? {
ast::Expr::PathExpr(path) => path.path(),
_ => None,
@@ -190,7 +190,7 @@ pub(crate) fn inline_call(acc: &mut Assists, ctx: &AssistContext) -> Option<()>
};
(function, format!("Inline `{}`", path))
}
- CallExprNode::MethodCallExpr(call) => {
+ ast::CallableExpr::MethodCall(call) => {
(ctx.sema.resolve_method_call(call)?, format!("Inline `{}`", name_ref))
}
};
@@ -223,8 +223,8 @@ pub(crate) fn inline_call(acc: &mut Assists, ctx: &AssistContext) -> Option<()>
builder.replace_ast(
match call_info.node {
- CallExprNode::Call(it) => ast::Expr::CallExpr(it),
- CallExprNode::MethodCallExpr(it) => ast::Expr::MethodCallExpr(it),
+ ast::CallableExpr::Call(it) => ast::Expr::CallExpr(it),
+ ast::CallableExpr::MethodCall(it) => ast::Expr::MethodCallExpr(it),
},
replacement,
);
@@ -232,22 +232,8 @@ pub(crate) fn inline_call(acc: &mut Assists, ctx: &AssistContext) -> Option<()>
)
}
-enum CallExprNode {
- Call(ast::CallExpr),
- MethodCallExpr(ast::MethodCallExpr),
-}
-
-impl CallExprNode {
- fn syntax(&self) -> &SyntaxNode {
- match self {
- CallExprNode::Call(it) => it.syntax(),
- CallExprNode::MethodCallExpr(it) => it.syntax(),
- }
- }
-}
-
struct CallInfo {
- node: CallExprNode,
+ node: ast::CallableExpr,
arguments: Vec<ast::Expr>,
generic_arg_list: Option<ast::GenericArgList>,
}
@@ -261,7 +247,7 @@ impl CallInfo {
arguments.extend(call.arg_list()?.args());
Some(CallInfo {
generic_arg_list: call.generic_arg_list(),
- node: CallExprNode::MethodCallExpr(call),
+ node: ast::CallableExpr::MethodCall(call),
arguments,
})
} else if let Some(segment) = ast::PathSegment::cast(parent) {
@@ -271,7 +257,7 @@ impl CallInfo {
Some(CallInfo {
arguments: call.arg_list()?.args().collect(),
- node: CallExprNode::Call(call),
+ node: ast::CallableExpr::Call(call),
generic_arg_list: segment.generic_arg_list(),
})
} else {
@@ -367,8 +353,9 @@ fn inline(
ted::replace(usage.syntax(), &replacement.syntax().clone_for_update());
}
};
- // izip confuses RA due to our lack of hygiene info currently losing us typeinfo
+ // izip confuses RA due to our lack of hygiene info currently losing us type info causing incorrect errors
let usages: &[ast::PathExpr] = &*usages;
+ let expr: &ast::Expr = expr;
match usages {
// inline single use closure arguments
[usage]
@@ -414,8 +401,8 @@ fn inline(
}
let original_indentation = match node {
- CallExprNode::Call(it) => it.indent_level(),
- CallExprNode::MethodCallExpr(it) => it.indent_level(),
+ ast::CallableExpr::Call(it) => it.indent_level(),
+ ast::CallableExpr::MethodCall(it) => it.indent_level(),
};
body.reindent_to(original_indentation);