Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-assists/src/handlers/extract_function.rs')
-rw-r--r--crates/ide-assists/src/handlers/extract_function.rs28
1 files changed, 27 insertions, 1 deletions
diff --git a/crates/ide-assists/src/handlers/extract_function.rs b/crates/ide-assists/src/handlers/extract_function.rs
index d4a1230779..347a3e9ba0 100644
--- a/crates/ide-assists/src/handlers/extract_function.rs
+++ b/crates/ide-assists/src/handlers/extract_function.rs
@@ -147,7 +147,12 @@ pub(crate) fn extract_function(acc: &mut Assists, ctx: &AssistContext<'_>) -> Op
_ => format_function(ctx, module, &fun, old_indent, new_indent),
};
- if fn_def.contains("ControlFlow") {
+ // There are external control flows
+ if fun
+ .control_flow
+ .kind
+ .is_some_and(|kind| matches!(kind, FlowKind::Break(_, _) | FlowKind::Continue(_)))
+ {
let scope = match scope {
ImportScope::File(it) => ImportScope::File(builder.make_mut(it)),
ImportScope::Module(it) => ImportScope::Module(builder.make_mut(it)),
@@ -4971,6 +4976,27 @@ fn $0fun_name(arg: &mut Foo) {
"#,
);
}
+ #[test]
+ fn does_not_import_control_flow() {
+ check_assist(
+ extract_function,
+ r#"
+//- minicore: try
+fn func() {
+ $0let cf = "I'm ControlFlow";$0
+}
+"#,
+ r#"
+fn func() {
+ fun_name();
+}
+
+fn $0fun_name() {
+ let cf = "I'm ControlFlow";
+}
+"#,
+ );
+ }
#[test]
fn extract_function_copies_comment_at_start() {