diff options
| author | ponyii <ponyii@protonmail.com> | 2023-05-06 22:04:47 +0400 |
|---|---|---|
| committer | ponyii <ponyii@protonmail.com> | 2023-05-10 16:35:43 +0400 |
| commit | a0db4781dca403a33fcc9209f71fa1a26387d05c (patch) | |
| tree | 8ef3c7fad074951b58fe0a9a46ab046b1f451245 | |
| parent | 5ee39a6ee50e6ddfdf5ac5532bbd13e268b3bf36 (diff) | |
| download | rust-a0db4781dca403a33fcc9209f71fa1a26387d05c.tar.gz rust-a0db4781dca403a33fcc9209f71fa1a26387d05c.zip | |
`generate_derive` no longer breaks indentation
| -rw-r--r-- | crates/ide-assists/src/handlers/generate_derive.rs | 41 |
1 files changed, 39 insertions, 2 deletions
diff --git a/crates/ide-assists/src/handlers/generate_derive.rs b/crates/ide-assists/src/handlers/generate_derive.rs index 339245b94ec..78ac2eb30e5 100644 --- a/crates/ide-assists/src/handlers/generate_derive.rs +++ b/crates/ide-assists/src/handlers/generate_derive.rs @@ -1,5 +1,5 @@ use syntax::{ - ast::{self, AstNode, HasAttrs}, + ast::{self, edit::IndentLevel, AstNode, HasAttrs}, SyntaxKind::{COMMENT, WHITESPACE}, TextSize, }; @@ -42,7 +42,12 @@ pub(crate) fn generate_derive(acc: &mut Assists, ctx: &AssistContext<'_>) -> Opt .next(); match derive_attr { None => { - builder.insert_snippet(cap, node_start, "#[derive($0)]\n"); + let indent_level = IndentLevel::from_node(nominal.syntax()); + builder.insert_snippet( + cap, + node_start, + format!("#[derive($0)]\n{indent_level}"), + ); } Some(tt) => { // Just move the cursor. @@ -84,6 +89,20 @@ mod tests { "struct Foo { $0 a: i32, }", "#[derive($0)]\nstruct Foo { a: i32, }", ); + check_assist( + generate_derive, + " +mod m { + struct Foo { a: i32,$0 } +} + ", + " +mod m { + #[derive($0)] + struct Foo { a: i32, } +} + ", + ); } #[test] @@ -111,6 +130,24 @@ struct Foo { a: i32$0, } struct Foo { a: i32, } ", ); + check_assist( + generate_derive, + " +mod m { + /// `Foo` is a pretty important struct. + /// It does stuff. + struct Foo { a: i32,$0 } +} + ", + " +mod m { + /// `Foo` is a pretty important struct. + /// It does stuff. + #[derive($0)] + struct Foo { a: i32, } +} + ", + ); } #[test] |
