Skip to content

Commit ea02d27

Browse files
committed
Fixup emitted whitespace in most cases
1 parent 6181154 commit ea02d27

File tree

3 files changed

+93
-27
lines changed

3 files changed

+93
-27
lines changed

crates/ide_assists/src/handlers/inline_call.rs

Lines changed: 77 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,23 @@ use crate::{
1717
// Inlines a function or method body.
1818
//
1919
// ```
20-
// fn align(a: u32, b: u32) -> u32 { (a + b - 1) & !(b - 1) }
20+
// fn align(a: u32, b: u32) -> u32 {
21+
// (a + b - 1) & !(b - 1)
22+
// }
2123
// fn main() {
2224
// let x = align$0(1, 2);
2325
// }
2426
// ```
2527
// ->
2628
// ```
27-
// fn align(a: u32, b: u32) -> u32 { (a + b - 1) & !(b - 1) }
29+
// fn align(a: u32, b: u32) -> u32 {
30+
// (a + b - 1) & !(b - 1)
31+
// }
2832
// fn main() {
29-
// let x = { let b = 2; (1 + b - 1) & !(b - 1) };
33+
// let x = {
34+
// let b = 2;
35+
// (1 + b - 1) & !(b - 1)
36+
// };
3037
// }
3138
// ```
3239
pub(crate) fn inline_call(acc: &mut Assists, ctx: &AssistContext) -> Option<()> {
@@ -140,14 +147,14 @@ pub(crate) fn inline_(
140147

141148
// Rewrite `self` to `this`
142149
if param_list.self_param().is_some() {
143-
let this = make::name_ref("this").syntax().clone_for_update();
150+
let this = || make::name_ref("this").syntax().clone_for_update();
144151
usages_for_locals(params[0].1.as_local(ctx.sema.db))
145152
.flat_map(|FileReference { name, range, .. }| match name {
146153
ast::NameLike::NameRef(_) => Some(body.syntax().covering_element(range)),
147154
_ => None,
148155
})
149156
.for_each(|it| {
150-
ted::replace(it, &this);
157+
ted::replace(it, &this());
151158
})
152159
}
153160

@@ -212,37 +219,44 @@ fn main() {
212219
);
213220
}
214221

222+
#[test]
223+
fn not_applicable_when_incorrect_number_of_parameters_are_provided() {
224+
cov_mark::check!(inline_call_incorrect_number_of_arguments);
225+
check_assist_not_applicable(
226+
inline_call,
227+
r#"
228+
fn add(a: u32, b: u32) -> u32 { a + b }
229+
fn main() { let x = add$0(42); }
230+
"#,
231+
);
232+
}
233+
215234
#[test]
216235
fn args_with_side_effects() {
217236
check_assist(
218237
inline_call,
219238
r#"
220-
fn foo(name: String) { println!("Hello, {}!", name); }
239+
fn foo(name: String) {
240+
println!("Hello, {}!", name);
241+
}
221242
fn main() {
222243
foo$0(String::from("Michael"));
223244
}
224245
"#,
225246
r#"
226-
fn foo(name: String) { println!("Hello, {}!", name); }
247+
fn foo(name: String) {
248+
println!("Hello, {}!", name);
249+
}
227250
fn main() {
228-
{ let name = String::from("Michael"); println!("Hello, {}!", name); };
251+
{
252+
let name = String::from("Michael");
253+
println!("Hello, {}!", name);
254+
};
229255
}
230256
"#,
231257
);
232258
}
233259

234-
#[test]
235-
fn not_applicable_when_incorrect_number_of_parameters_are_provided() {
236-
cov_mark::check!(inline_call_incorrect_number_of_arguments);
237-
check_assist_not_applicable(
238-
inline_call,
239-
r#"
240-
fn add(a: u32, b: u32) -> u32 { a + b }
241-
fn main() { let x = add$0(42); }
242-
"#,
243-
);
244-
}
245-
246260
#[test]
247261
fn function_with_multiple_statements() {
248262
check_assist(
@@ -266,7 +280,8 @@ fn foo(a: u32, b: u32) -> u32 {
266280
}
267281
268282
fn main() {
269-
let x = { let b = 2;
283+
let x = {
284+
let b = 2;
270285
let x = 1 + b;
271286
let y = x - b;
272287
x * y
@@ -369,7 +384,8 @@ impl Foo {
369384
}
370385
371386
fn main() {
372-
let x = { let ref this = Foo(3);
387+
let x = {
388+
let ref this = Foo(3);
373389
Foo(this.0 + 2)
374390
};
375391
}
@@ -406,7 +422,8 @@ impl Foo {
406422
407423
fn main() {
408424
let mut foo = Foo(3);
409-
{ let ref mut this = foo;
425+
{
426+
let ref mut this = foo;
410427
this.0 = 0;
411428
};
412429
}
@@ -458,7 +475,8 @@ fn square(x: u32) -> u32 {
458475
}
459476
fn main() {
460477
let x = 51;
461-
let y = { let x = 10 + x;
478+
let y = {
479+
let x = 10 + x;
462480
x * x
463481
};
464482
}
@@ -487,6 +505,41 @@ fn main() {
487505
let local = 51;
488506
let y = local * local;
489507
}
508+
"#,
509+
);
510+
}
511+
512+
#[test]
513+
fn method_in_impl() {
514+
check_assist(
515+
inline_call,
516+
r#"
517+
struct Foo;
518+
impl Foo {
519+
fn foo(&self) {
520+
self;
521+
self;
522+
}
523+
fn bar(&self) {
524+
self.foo$0();
525+
}
526+
}
527+
"#,
528+
r#"
529+
struct Foo;
530+
impl Foo {
531+
fn foo(&self) {
532+
self;
533+
self;
534+
}
535+
fn bar(&self) {
536+
{
537+
let ref this = self;
538+
this;
539+
this;
540+
};
541+
}
542+
}
490543
"#,
491544
);
492545
}

crates/ide_assists/src/tests/generated.rs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -923,15 +923,22 @@ fn doctest_inline_call() {
923923
check_doc_test(
924924
"inline_call",
925925
r#####"
926-
fn align(a: u32, b: u32) -> u32 { (a + b - 1) & !(b - 1) }
926+
fn align(a: u32, b: u32) -> u32 {
927+
(a + b - 1) & !(b - 1)
928+
}
927929
fn main() {
928930
let x = align$0(1, 2);
929931
}
930932
"#####,
931933
r#####"
932-
fn align(a: u32, b: u32) -> u32 { (a + b - 1) & !(b - 1) }
934+
fn align(a: u32, b: u32) -> u32 {
935+
(a + b - 1) & !(b - 1)
936+
}
933937
fn main() {
934-
let x = { let b = 2; (1 + b - 1) & !(b - 1) };
938+
let x = {
939+
let b = 2;
940+
(1 + b - 1) & !(b - 1)
941+
};
935942
}
936943
"#####,
937944
)

crates/syntax/src/ted.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,12 @@ fn ws_between(left: &SyntaxElement, right: &SyntaxElement) -> Option<SyntaxToken
188188
return None;
189189
}
190190

191+
if left.kind() == T!['{'] && right.kind() == SyntaxKind::LET_STMT {
192+
let mut indent = IndentLevel::from_element(left);
193+
indent.0 += 1;
194+
return Some(make::tokens::whitespace(&format!("\n{}", indent)));
195+
}
196+
191197
if right.kind() == SyntaxKind::USE {
192198
let mut indent = IndentLevel::from_element(left);
193199
if left.kind() == SyntaxKind::USE {

0 commit comments

Comments
 (0)