diff options
author | Yoshua Wuyts <[email protected]> | 2021-02-05 15:32:34 +0000 |
---|---|---|
committer | Yoshua Wuyts <[email protected]> | 2021-02-05 16:19:31 +0000 |
commit | 2cf161266941eac300ae66a633ead26f5109ea16 (patch) | |
tree | f7909b18efed14e2a6bd5f410b50310a2167b72d /crates/assists/src/handlers/generate_new.rs | |
parent | ae7bee70a10d01f0fdebfc12c70aca4f765826b3 (diff) |
Add `find_or_create_impl_block` to assist utils
Diffstat (limited to 'crates/assists/src/handlers/generate_new.rs')
-rw-r--r-- | crates/assists/src/handlers/generate_new.rs | 21 |
1 files changed, 7 insertions, 14 deletions
diff --git a/crates/assists/src/handlers/generate_new.rs b/crates/assists/src/handlers/generate_new.rs index 84832273f..307f2e228 100644 --- a/crates/assists/src/handlers/generate_new.rs +++ b/crates/assists/src/handlers/generate_new.rs | |||
@@ -2,10 +2,13 @@ use itertools::Itertools; | |||
2 | use stdx::format_to; | 2 | use stdx::format_to; |
3 | use syntax::{ | 3 | use syntax::{ |
4 | ast::{self, AstNode, GenericParamsOwner, NameOwner, StructKind, VisibilityOwner}, | 4 | ast::{self, AstNode, GenericParamsOwner, NameOwner, StructKind, VisibilityOwner}, |
5 | SmolStr, T, | 5 | SmolStr, |
6 | }; | 6 | }; |
7 | 7 | ||
8 | use crate::{utils::find_struct_impl, AssistContext, AssistId, AssistKind, Assists}; | 8 | use crate::{ |
9 | utils::{find_impl_block, find_struct_impl}, | ||
10 | AssistContext, AssistId, AssistKind, Assists, | ||
11 | }; | ||
9 | 12 | ||
10 | // Assist: generate_new | 13 | // Assist: generate_new |
11 | // | 14 | // |
@@ -58,17 +61,7 @@ pub(crate) fn generate_new(acc: &mut Assists, ctx: &AssistContext) -> Option<()> | |||
58 | format_to!(buf, " {}fn new({}) -> Self {{ Self {{ {} }} }}", vis, params, fields); | 61 | format_to!(buf, " {}fn new({}) -> Self {{ Self {{ {} }} }}", vis, params, fields); |
59 | 62 | ||
60 | let start_offset = impl_def | 63 | let start_offset = impl_def |
61 | .and_then(|impl_def| { | 64 | .and_then(|impl_def| find_impl_block(impl_def, &mut buf)) |
62 | buf.push('\n'); | ||
63 | let start = impl_def | ||
64 | .syntax() | ||
65 | .descendants_with_tokens() | ||
66 | .find(|t| t.kind() == T!['{'])? | ||
67 | .text_range() | ||
68 | .end(); | ||
69 | |||
70 | Some(start) | ||
71 | }) | ||
72 | .unwrap_or_else(|| { | 65 | .unwrap_or_else(|| { |
73 | buf = generate_impl_text(&strukt, &buf); | 66 | buf = generate_impl_text(&strukt, &buf); |
74 | strukt.syntax().text_range().end() | 67 | strukt.syntax().text_range().end() |
@@ -93,7 +86,7 @@ fn generate_impl_text(strukt: &ast::Struct, code: &str) -> String { | |||
93 | if let Some(type_params) = &type_params { | 86 | if let Some(type_params) = &type_params { |
94 | format_to!(buf, "{}", type_params.syntax()); | 87 | format_to!(buf, "{}", type_params.syntax()); |
95 | } | 88 | } |
96 | buf.push_str(" "); | 89 | buf.push(' '); |
97 | buf.push_str(strukt.name().unwrap().text()); | 90 | buf.push_str(strukt.name().unwrap().text()); |
98 | if let Some(type_params) = type_params { | 91 | if let Some(type_params) = type_params { |
99 | let lifetime_params = type_params | 92 | let lifetime_params = type_params |