Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide_assists/src/handlers/generate_function.rs')
| -rw-r--r-- | crates/ide_assists/src/handlers/generate_function.rs | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/crates/ide_assists/src/handlers/generate_function.rs b/crates/ide_assists/src/handlers/generate_function.rs index 07f5eab514..ac33d56858 100644 --- a/crates/ide_assists/src/handlers/generate_function.rs +++ b/crates/ide_assists/src/handlers/generate_function.rs @@ -111,6 +111,10 @@ fn gen_fn(acc: &mut Assists, ctx: &AssistContext) -> Option<()> { fn gen_method(acc: &mut Assists, ctx: &AssistContext) -> Option<()> { let call: ast::MethodCallExpr = ctx.find_node_at_offset()?; + if ctx.sema.resolve_method_call(&call).is_some() { + return None; + } + let fn_name = call.name_ref()?; let adt = ctx.sema.type_of_expr(&call.receiver()?)?.original().strip_references().as_adt()?; @@ -481,7 +485,12 @@ fn fn_arg_name(sema: &Semantics<RootDatabase>, arg_expr: &ast::Expr) -> String { let name = (|| match arg_expr { ast::Expr::CastExpr(cast_expr) => Some(fn_arg_name(sema, &cast_expr.expr()?)), expr => { - let name_ref = expr.syntax().descendants().filter_map(ast::NameRef::cast).last()?; + let name_ref = expr + .syntax() + .descendants() + .filter_map(ast::NameRef::cast) + .filter(|name| name.ident_token().is_some()) + .last()?; if let Some(NameRefClass::Definition(Definition::Const(_) | Definition::Static(_))) = NameRefClass::classify(sema, &name_ref) { @@ -1660,7 +1669,7 @@ fn main() { foo(a.0); } -fn foo(arg0: ()) ${0:-> _} { +fn foo(a: ()) ${0:-> _} { todo!() } ", |