Skip to content
This repository was archived by the owner on May 28, 2025. It is now read-only.

Commit bb62180

Browse files
committed
add more tests and some doc
1 parent 8725368 commit bb62180

File tree

1 file changed

+69
-15
lines changed

1 file changed

+69
-15
lines changed

crates/ide-assists/src/handlers/add_label_to_loop.rs

Lines changed: 69 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,23 @@
11
use ide_db::syntax_helpers::node_ext::for_each_break_and_continue_expr;
22
use syntax::ast::{self, AstNode, HasLoopBody};
3-
use syntax::T;
43

54
use crate::{AssistContext, AssistId, AssistKind, Assists};
65

7-
// Assist: add_lifetime_to_type
6+
// Assist: add_label_to_loop
87
//
9-
// Adds a new lifetime to a struct, enum or union.
8+
// Adds a label to a loop.
109
//
1110
// ```
12-
// struct Point {
13-
// x: &u32,
14-
// y: u32,
11+
// loop$0 {
12+
// break;
13+
// continue;
1514
// }
1615
// ```
1716
// ->
1817
// ```
19-
// struct Point<'a> {
20-
// x: &'a u32,
21-
// y: u32,
18+
// 'loop: loop {
19+
// break 'loop;
20+
// continue 'loop;
2221
// }
2322
// ```
2423
pub(crate) fn add_label_to_loop(acc: &mut Assists, ctx: &AssistContext) -> Option<()> {
@@ -31,7 +30,6 @@ pub(crate) fn add_label_to_loop(acc: &mut Assists, ctx: &AssistContext) -> Optio
3130
related_exprs.push(expr)
3231
}
3332
});
34-
dbg!(loop_expr.syntax().text_range());
3533

3634
acc.add(
3735
AssistId("add_label_to_loop", AssistKind::Generate),
@@ -44,25 +42,24 @@ pub(crate) fn add_label_to_loop(acc: &mut Assists, ctx: &AssistContext) -> Optio
4442
if let Some(break_token) = break_expr.break_token() {
4543
builder.insert(break_token.text_range().end(), " 'loop")
4644
}
47-
},
45+
}
4846
ast::Expr::ContinueExpr(continue_expr) => {
4947
if let Some(continue_token) = continue_expr.continue_token() {
5048
builder.insert(continue_token.text_range().end(), " 'loop")
5149
}
52-
},
50+
}
5351
ast::Expr::LoopExpr(loop_expr) => {
5452
if let Some(loop_token) = loop_expr.loop_token() {
5553
builder.insert(loop_token.text_range().start(), "'loop: ")
5654
}
57-
},
58-
_ => todo!()
55+
}
56+
_ => todo!(),
5957
}
6058
}
6159
},
6260
)
6361
}
6462

65-
6663
#[cfg(test)]
6764
mod tests {
6865
use crate::tests::check_assist;
@@ -90,4 +87,61 @@ fn main() {
9087
);
9188
}
9289

90+
#[test]
91+
fn add_label_to_outer_loop() {
92+
check_assist(
93+
add_label_to_loop,
94+
r#"
95+
fn main() {
96+
loop$0 {
97+
break;
98+
continue;
99+
loop {
100+
break;
101+
continue;
102+
}
103+
}
104+
}"#,
105+
r#"
106+
fn main() {
107+
'loop: loop {
108+
break 'loop;
109+
continue 'loop;
110+
loop {
111+
break;
112+
continue;
113+
}
114+
}
115+
}"#,
116+
);
117+
}
118+
119+
#[test]
120+
fn add_label_to_inner_loop() {
121+
check_assist(
122+
add_label_to_loop,
123+
r#"
124+
fn main() {
125+
loop {
126+
break;
127+
continue;
128+
loop$0 {
129+
break;
130+
continue;
131+
}
132+
}
133+
}"#,
134+
r#"
135+
fn main() {
136+
loop {
137+
break;
138+
continue;
139+
'loop: loop {
140+
break 'loop;
141+
continue 'loop;
142+
}
143+
}
144+
}"#,
145+
);
146+
}
93147
}

0 commit comments

Comments
 (0)