Unnamed repository; edit this file 'description' to name the repository.
make generated test pass and make tidy happy
| -rw-r--r-- | crates/ide-assists/src/handlers/add_label_to_loop.rs | 73 | ||||
| -rw-r--r-- | crates/ide-assists/src/tests/generated.rs | 23 |
2 files changed, 70 insertions, 26 deletions
diff --git a/crates/ide-assists/src/handlers/add_label_to_loop.rs b/crates/ide-assists/src/handlers/add_label_to_loop.rs index 93fd80f148..5d7774af5b 100644 --- a/crates/ide-assists/src/handlers/add_label_to_loop.rs +++ b/crates/ide-assists/src/handlers/add_label_to_loop.rs @@ -8,20 +8,27 @@ use crate::{AssistContext, AssistId, AssistKind, Assists}; // Adds a label to a loop. // // ``` -// loop$0 { -// break; -// continue; +// fn main() { +// loop$0 { +// break; +// continue; +// } // } // ``` // -> // ``` -// 'loop: loop { -// break 'loop; -// continue 'loop; +// fn main() { +// 'loop: loop { +// break 'loop; +// continue 'loop; +// } // } // ``` pub(crate) fn add_label_to_loop(acc: &mut Assists, ctx: &AssistContext) -> Option<()> { let loop_expr = ctx.find_node_at_offset::<ast::LoopExpr>()?; + if loop_expr.label().is_some() { + return None; + } let loop_body = loop_expr.loop_body().and_then(|it| it.stmt_list()); let mut related_exprs = vec![]; related_exprs.push(ast::Expr::LoopExpr(loop_expr.clone())); @@ -53,7 +60,7 @@ pub(crate) fn add_label_to_loop(acc: &mut Assists, ctx: &AssistContext) -> Optio builder.insert(loop_token.text_range().start(), "'loop: ") } } - _ => todo!(), + _ => {} } } }, @@ -62,7 +69,7 @@ pub(crate) fn add_label_to_loop(acc: &mut Assists, ctx: &AssistContext) -> Optio #[cfg(test)] mod tests { - use crate::tests::check_assist; + use crate::tests::{check_assist, check_assist_not_applicable}; use super::*; @@ -72,16 +79,16 @@ mod tests { add_label_to_loop, r#" fn main() { - loop$0 { - break; - continue; + loop$0 { + break; + continue; } }"#, r#" fn main() { - 'loop: loop { - break 'loop; - continue 'loop; + 'loop: loop { + break 'loop; + continue 'loop; } }"#, ); @@ -93,9 +100,9 @@ fn main() { add_label_to_loop, r#" fn main() { - loop$0 { - break; - continue; + loop$0 { + break; + continue; loop { break; continue; @@ -104,9 +111,9 @@ fn main() { }"#, r#" fn main() { - 'loop: loop { - break 'loop; - continue 'loop; + 'loop: loop { + break 'loop; + continue 'loop; loop { break; continue; @@ -122,9 +129,9 @@ fn main() { add_label_to_loop, r#" fn main() { - loop { - break; - continue; + loop { + break; + continue; loop$0 { break; continue; @@ -133,9 +140,9 @@ fn main() { }"#, r#" fn main() { - loop { - break; - continue; + loop { + break; + continue; 'loop: loop { break 'loop; continue 'loop; @@ -144,4 +151,18 @@ fn main() { }"#, ); } + + #[test] + fn do_not_add_label_if_exists() { + check_assist_not_applicable( + add_label_to_loop, + r#" +fn main() { + 'loop: loop$0 { + break 'loop; + continue 'loop; + } +}"#, + ); + } } diff --git a/crates/ide-assists/src/tests/generated.rs b/crates/ide-assists/src/tests/generated.rs index 2d57101409..a519c9b825 100644 --- a/crates/ide-assists/src/tests/generated.rs +++ b/crates/ide-assists/src/tests/generated.rs @@ -103,6 +103,29 @@ impl Trait<u32> for () { } #[test] +fn doctest_add_label_to_loop() { + check_doc_test( + "add_label_to_loop", + r#####" +fn main() { + loop$0 { + break; + continue; + } +} +"#####, + r#####" +fn main() { + 'loop: loop { + break 'loop; + continue 'loop; + } +} +"#####, + ) +} + +#[test] fn doctest_add_lifetime_to_type() { check_doc_test( "add_lifetime_to_type", |