about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJonas Platte <jplatte@matrix.org>2023-04-05 18:48:21 +0200
committerJonas Platte <jplatte@matrix.org>2023-04-05 18:48:21 +0200
commitbc704e127de2b9ffce384b63812dae6b1d268024 (patch)
treebc0dae1f20d3e9e19699b94be096f5cba77f43fc
parentd01a38ce3f10158f8ecb2f15278c0b0d711fcf27 (diff)
downloadrust-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.rs22
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 = &param_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.