@@ -12,7 +12,7 @@ use ide_db::{
1212use itertools:: { izip, Itertools } ;
1313use syntax:: {
1414 ast:: { self , edit_in_place:: Indent , HasArgList , PathExpr } ,
15- ted, AstNode , SyntaxNode ,
15+ ted, AstNode ,
1616} ;
1717
1818use crate :: {
@@ -178,7 +178,7 @@ pub(crate) fn inline_call(acc: &mut Assists, ctx: &AssistContext) -> Option<()>
178178 let name_ref: ast:: NameRef = ctx. find_node_at_offset ( ) ?;
179179 let call_info = CallInfo :: from_name_ref ( name_ref. clone ( ) ) ?;
180180 let ( function, label) = match & call_info. node {
181- CallExprNode :: Call ( call) => {
181+ ast :: CallableExpr :: Call ( call) => {
182182 let path = match call. expr ( ) ? {
183183 ast:: Expr :: PathExpr ( path) => path. path ( ) ,
184184 _ => None ,
@@ -190,7 +190,7 @@ pub(crate) fn inline_call(acc: &mut Assists, ctx: &AssistContext) -> Option<()>
190190 } ;
191191 ( function, format ! ( "Inline `{}`" , path) )
192192 }
193- CallExprNode :: MethodCallExpr ( call) => {
193+ ast :: CallableExpr :: MethodCall ( call) => {
194194 ( ctx. sema . resolve_method_call ( call) ?, format ! ( "Inline `{}`" , name_ref) )
195195 }
196196 } ;
@@ -223,31 +223,17 @@ pub(crate) fn inline_call(acc: &mut Assists, ctx: &AssistContext) -> Option<()>
223223
224224 builder. replace_ast (
225225 match call_info. node {
226- CallExprNode :: Call ( it) => ast:: Expr :: CallExpr ( it) ,
227- CallExprNode :: MethodCallExpr ( it) => ast:: Expr :: MethodCallExpr ( it) ,
226+ ast :: CallableExpr :: Call ( it) => ast:: Expr :: CallExpr ( it) ,
227+ ast :: CallableExpr :: MethodCall ( it) => ast:: Expr :: MethodCallExpr ( it) ,
228228 } ,
229229 replacement,
230230 ) ;
231231 } ,
232232 )
233233}
234234
235- enum CallExprNode {
236- Call ( ast:: CallExpr ) ,
237- MethodCallExpr ( ast:: MethodCallExpr ) ,
238- }
239-
240- impl CallExprNode {
241- fn syntax ( & self ) -> & SyntaxNode {
242- match self {
243- CallExprNode :: Call ( it) => it. syntax ( ) ,
244- CallExprNode :: MethodCallExpr ( it) => it. syntax ( ) ,
245- }
246- }
247- }
248-
249235struct CallInfo {
250- node : CallExprNode ,
236+ node : ast :: CallableExpr ,
251237 arguments : Vec < ast:: Expr > ,
252238 generic_arg_list : Option < ast:: GenericArgList > ,
253239}
@@ -261,7 +247,7 @@ impl CallInfo {
261247 arguments. extend ( call. arg_list ( ) ?. args ( ) ) ;
262248 Some ( CallInfo {
263249 generic_arg_list : call. generic_arg_list ( ) ,
264- node : CallExprNode :: MethodCallExpr ( call) ,
250+ node : ast :: CallableExpr :: MethodCall ( call) ,
265251 arguments,
266252 } )
267253 } else if let Some ( segment) = ast:: PathSegment :: cast ( parent) {
@@ -271,7 +257,7 @@ impl CallInfo {
271257
272258 Some ( CallInfo {
273259 arguments : call. arg_list ( ) ?. args ( ) . collect ( ) ,
274- node : CallExprNode :: Call ( call) ,
260+ node : ast :: CallableExpr :: Call ( call) ,
275261 generic_arg_list : segment. generic_arg_list ( ) ,
276262 } )
277263 } else {
@@ -367,8 +353,9 @@ fn inline(
367353 ted:: replace ( usage. syntax ( ) , & replacement. syntax ( ) . clone_for_update ( ) ) ;
368354 }
369355 } ;
370- // izip confuses RA due to our lack of hygiene info currently losing us typeinfo
356+ // izip confuses RA due to our lack of hygiene info currently losing us type info causing incorrect errors
371357 let usages: & [ ast:: PathExpr ] = & * usages;
358+ let expr: & ast:: Expr = expr;
372359 match usages {
373360 // inline single use closure arguments
374361 [ usage]
@@ -414,8 +401,8 @@ fn inline(
414401 }
415402
416403 let original_indentation = match node {
417- CallExprNode :: Call ( it) => it. indent_level ( ) ,
418- CallExprNode :: MethodCallExpr ( it) => it. indent_level ( ) ,
404+ ast :: CallableExpr :: Call ( it) => it. indent_level ( ) ,
405+ ast :: CallableExpr :: MethodCall ( it) => it. indent_level ( ) ,
419406 } ;
420407 body. reindent_to ( original_indentation) ;
421408
0 commit comments