diff options
| author | Jonas Platte <jplatte@matrix.org> | 2023-04-05 18:48:21 +0200 |
|---|---|---|
| committer | Jonas Platte <jplatte@matrix.org> | 2023-04-05 18:48:21 +0200 |
| commit | bc704e127de2b9ffce384b63812dae6b1d268024 (patch) | |
| tree | bc0dae1f20d3e9e19699b94be096f5cba77f43fc | |
| parent | d01a38ce3f10158f8ecb2f15278c0b0d711fcf27 (diff) | |
| download | rust-bc704e127de2b9ffce384b63812dae6b1d268024.tar.gz rust-bc704e127de2b9ffce384b63812dae6b1d268024.zip | |
Address another round of review comments
| -rw-r--r-- | crates/ide-assists/src/handlers/convert_nested_function_to_closure.rs | 22 |
1 files changed, 9 insertions, 13 deletions
diff --git a/crates/ide-assists/src/handlers/convert_nested_function_to_closure.rs b/crates/ide-assists/src/handlers/convert_nested_function_to_closure.rs index fb79ec3e50b..399f87c8f50 100644 --- a/crates/ide-assists/src/handlers/convert_nested_function_to_closure.rs +++ b/crates/ide-assists/src/handlers/convert_nested_function_to_closure.rs @@ -41,35 +41,31 @@ pub(crate) fn convert_nested_function_to_closure( let target = function.syntax().text_range(); let body = function.body()?; let name = function.name()?; - let params = function.param_list()?; - - let params_text = params.syntax().text().to_string(); - let closure_params = params_text.strip_prefix("(").and_then(|p| p.strip_suffix(")"))?; + let param_list = function.param_list()?; acc.add( AssistId("convert_nested_function_to_closure", AssistKind::RefactorRewrite), "Convert nested function to closure", target, |edit| { - let has_semicolon = has_semicolon(&function); + let params = ¶m_list.syntax().text().to_string(); + let params = params.strip_prefix("(").unwrap_or(params); + let params = params.strip_suffix(")").unwrap_or(params); let mut body = body.to_string(); - if !has_semicolon { + if !has_semicolon(&function) { body.push(';'); } - edit.replace(target, format!("let {} = |{}| {}", name, closure_params, body)); + edit.replace(target, format!("let {name} = |{params}| {body}")); }, ) } /// Returns whether the given function is nested within the body of another function. fn is_nested_function(function: &ast::Fn) -> bool { - function - .syntax() - .ancestors() - .skip(1) - .find_map(ast::Item::cast) - .map_or(false, |it| matches!(it, ast::Item::Fn(_))) + function.syntax().ancestors().skip(1).find_map(ast::Item::cast).map_or(false, |it| { + matches!(it, ast::Item::Fn(_) | ast::Item::Static(_) | ast::Item::Const(_)) + }) } /// Returns whether the given nested function has generic parameters. |
