Unnamed repository; edit this file 'description' to name the repository.
| -rw-r--r-- | crates/ide_assists/src/handlers/generate_function.rs | 24 |
1 files changed, 9 insertions, 15 deletions
diff --git a/crates/ide_assists/src/handlers/generate_function.rs b/crates/ide_assists/src/handlers/generate_function.rs index ad0090ed8a..0255e508b4 100644 --- a/crates/ide_assists/src/handlers/generate_function.rs +++ b/crates/ide_assists/src/handlers/generate_function.rs @@ -1,8 +1,9 @@ -use hir::{HasSource, HirDisplay, Module, ModuleDef, TypeInfo}; +use hir::{HasSource, HirDisplay, Module, ModuleDef, Semantics, TypeInfo}; use ide_db::{ base_db::FileId, defs::{Definition, NameRefClass}, helpers::SnippetCap, + RootDatabase, }; use rustc_hash::{FxHashMap, FxHashSet}; use stdx::to_lower_snake_case; @@ -442,7 +443,7 @@ fn fn_args( let mut arg_names = Vec::new(); let mut arg_types = Vec::new(); for arg in call.arg_list()?.args() { - arg_names.push(fn_arg_name(ctx, &arg)); + arg_names.push(fn_arg_name(&ctx.sema, &arg)); arg_types.push(match fn_arg_type(ctx, target_module, &arg) { Some(ty) => { if !ty.is_empty() && ty.starts_with('&') { @@ -507,23 +508,16 @@ fn deduplicate_arg_names(arg_names: &mut Vec<String>) { } } -fn fn_arg_name(ctx: &AssistContext, arg_expr: &ast::Expr) -> String { +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(ctx, &cast_expr.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()?; - if let Some(NameRefClass::Definition(def)) = - NameRefClass::classify(&ctx.sema, &name_ref) + if let Some(NameRefClass::Definition(Definition::ModuleDef( + ModuleDef::Const(_) | ModuleDef::Static(_), + ))) = NameRefClass::classify(sema, &name_ref) { - match def { - Definition::ModuleDef(ModuleDef::Const(_)) => { - return Some(name_ref.to_string().to_lowercase()); - } - Definition::ModuleDef(ModuleDef::Static(_)) => { - return Some(name_ref.to_string().to_lowercase()); - } - _ => {} - } + return Some(name_ref.to_string().to_lowercase()); }; Some(to_lower_snake_case(&name_ref.to_string())) } |