aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_assists/src/handlers
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_assists/src/handlers')
-rw-r--r--crates/ra_assists/src/handlers/remove_dbg.rs68
1 files changed, 41 insertions, 27 deletions
diff --git a/crates/ra_assists/src/handlers/remove_dbg.rs b/crates/ra_assists/src/handlers/remove_dbg.rs
index c43b89661..9430ce1b5 100644
--- a/crates/ra_assists/src/handlers/remove_dbg.rs
+++ b/crates/ra_assists/src/handlers/remove_dbg.rs
@@ -27,12 +27,12 @@ pub(crate) fn remove_dbg(acc: &mut Assists, ctx: &AssistContext) -> Option<()> {
27 return None; 27 return None;
28 } 28 }
29 29
30 let semicolon_on_end = macro_call.semicolon_token().is_some();
31 let is_leaf = macro_call.syntax().next_sibling().is_none(); 30 let is_leaf = macro_call.syntax().next_sibling().is_none();
32 31
33 let macro_end = match semicolon_on_end { 32 let macro_end = if macro_call.semicolon_token().is_some() {
34 true => macro_call.syntax().text_range().end() - TextSize::of(';'), 33 macro_call.syntax().text_range().end() - TextSize::of(';')
35 false => macro_call.syntax().text_range().end(), 34 } else {
35 macro_call.syntax().text_range().end()
36 }; 36 };
37 37
38 // macro_range determines what will be deleted and replaced with macro_content 38 // macro_range determines what will be deleted and replaced with macro_content
@@ -40,12 +40,13 @@ pub(crate) fn remove_dbg(acc: &mut Assists, ctx: &AssistContext) -> Option<()> {
40 let paste_instead_of_dbg = { 40 let paste_instead_of_dbg = {
41 let text = macro_call.token_tree()?.syntax().text(); 41 let text = macro_call.token_tree()?.syntax().text();
42 42
43 // leafines determines if we should include the parenthesis or not 43 // leafiness determines if we should include the parenthesis or not
44 let slice_index: TextRange = match is_leaf { 44 let slice_index: TextRange = if is_leaf {
45 // leaf means - we can extract the contents of the dbg! in text 45 // leaf means - we can extract the contents of the dbg! in text
46 true => TextRange::new(TextSize::of('('), text.len() - TextSize::of(')')), 46 TextRange::new(TextSize::of('('), text.len() - TextSize::of(')'))
47 } else {
47 // not leaf - means we should keep the parens 48 // not leaf - means we should keep the parens
48 false => TextRange::new(TextSize::from(0 as u32), text.len()), 49 TextRange::up_to(text.len())
49 }; 50 };
50 text.slice(slice_index).to_string() 51 text.slice(slice_index).to_string()
51 }; 52 };
@@ -147,45 +148,58 @@ fn foo(n: usize) {
147 // not quite though 148 // not quite though
148 // adding a comment at the end of the line makes 149 // adding a comment at the end of the line makes
149 // the ast::MacroCall to include the semicolon at the end 150 // the ast::MacroCall to include the semicolon at the end
150 let code = " 151 check_assist(
151let res = <|>dbg!(1 * 20); // needless comment 152 remove_dbg,
152"; 153 r#"let res = <|>dbg!(1 * 20); // needless comment"#,
153 let expected = " 154 r#"let res = 1 * 20; // needless comment"#,
154let res = 1 * 20; // needless comment 155 );
155";
156 check_assist(remove_dbg, code, expected);
157 } 156 }
158 157
159 #[test] 158 #[test]
160 fn test_remove_dbg_keep_expression() { 159 fn test_remove_dbg_keep_expression() {
161 let code = " 160 check_assist(
162let res = <|>dbg!(a + b).foo();"; 161 remove_dbg,
163 let expected = "let res = (a + b).foo();"; 162 r#"let res = <|>dbg!(a + b).foo();"#,
164 check_assist(remove_dbg, code, expected); 163 r#"let res = (a + b).foo();"#,
164 );
165 } 165 }
166 166
167 #[test] 167 #[test]
168 fn test_remove_dbg_from_inside_fn() { 168 fn test_remove_dbg_from_inside_fn() {
169 let code = " 169 check_assist_target(
170 remove_dbg,
171 r#"
170fn square(x: u32) -> u32 { 172fn square(x: u32) -> u32 {
171 x * x 173 x * x
172} 174}
173 175
174fn main() { 176fn main() {
175 let x = square(dbg<|>!(5 + 10)); 177 let x = square(dbg<|>!(5 + 10));
176 println!(\"{}\", x); 178 println!("{}", x);
177}"; 179}"#,
180 "dbg!(5 + 10)",
181 );
178 182
179 let expected = " 183 check_assist(
184 remove_dbg,
185 r#"
186fn square(x: u32) -> u32 {
187 x * x
188}
189
190fn main() {
191 let x = square(dbg<|>!(5 + 10));
192 println!("{}", x);
193}"#,
194 r#"
180fn square(x: u32) -> u32 { 195fn square(x: u32) -> u32 {
181 x * x 196 x * x
182} 197}
183 198
184fn main() { 199fn main() {
185 let x = square(5 + 10); 200 let x = square(5 + 10);
186 println!(\"{}\", x); 201 println!("{}", x);
187}"; 202}"#,
188 check_assist_target(remove_dbg, code, "dbg!(5 + 10)"); 203 );
189 check_assist(remove_dbg, code, expected);
190 } 204 }
191} 205}