From 3364ac8b1106f6f0d8a52a8981c6c598152b5642 Mon Sep 17 00:00:00 2001 From: Domantas Jadenkus Date: Sat, 13 Feb 2021 22:38:52 +0200 Subject: use generate_impl_text in generate_impl --- crates/assists/src/handlers/generate_impl.rs | 46 ++++------------------------ crates/assists/src/utils.rs | 9 +++++- 2 files changed, 14 insertions(+), 41 deletions(-) (limited to 'crates') diff --git a/crates/assists/src/handlers/generate_impl.rs b/crates/assists/src/handlers/generate_impl.rs index 61d1bd25c..e2762e5d2 100644 --- a/crates/assists/src/handlers/generate_impl.rs +++ b/crates/assists/src/handlers/generate_impl.rs @@ -1,11 +1,6 @@ -use itertools::Itertools; -use stdx::format_to; -use syntax::{ - ast::{self, AstNode, AttrsOwner, GenericParamsOwner, NameOwner}, - SmolStr, -}; +use syntax::ast::{self, AstNode, NameOwner}; -use crate::{AssistContext, AssistId, AssistKind, Assists}; +use crate::{AssistContext, AssistId, AssistKind, Assists, utils::generate_impl_text}; // Assist: generate_impl // @@ -36,44 +31,15 @@ pub(crate) fn generate_impl(acc: &mut Assists, ctx: &AssistContext) -> Option<() format!("Generate impl for `{}`", name), target, |edit| { - let type_params = nominal.generic_param_list(); let start_offset = nominal.syntax().text_range().end(); - let mut buf = String::new(); - buf.push_str("\n\n"); - nominal - .attrs() - .filter(|attr| { - attr.as_simple_call().map(|(name, _arg)| name == "cfg").unwrap_or(false) - }) - .for_each(|attr| buf.push_str(format!("{}\n", attr.to_string()).as_str())); - - buf.push_str("impl"); - if let Some(type_params) = &type_params { - format_to!(buf, "{}", type_params.syntax()); - } - buf.push_str(" "); - buf.push_str(name.text()); - if let Some(type_params) = type_params { - let lifetime_params = type_params - .lifetime_params() - .filter_map(|it| it.lifetime()) - .map(|it| SmolStr::from(it.text())); - let type_params = type_params - .type_params() - .filter_map(|it| it.name()) - .map(|it| SmolStr::from(it.text())); - - let generic_params = lifetime_params.chain(type_params).format(", "); - format_to!(buf, "<{}>", generic_params) - } match ctx.config.snippet_cap { Some(cap) => { - buf.push_str(" {\n $0\n}"); - edit.insert_snippet(cap, start_offset, buf); + let snippet = generate_impl_text(&nominal, " $0"); + edit.insert_snippet(cap, start_offset, snippet); } None => { - buf.push_str(" {\n}"); - edit.insert(start_offset, buf); + let snippet = generate_impl_text(&nominal, ""); + edit.insert(start_offset, snippet); } } }, diff --git a/crates/assists/src/utils.rs b/crates/assists/src/utils.rs index 69c107f63..b51d703db 100644 --- a/crates/assists/src/utils.rs +++ b/crates/assists/src/utils.rs @@ -379,7 +379,14 @@ pub(crate) fn generate_trait_impl_text(adt: &ast::Adt, trait_text: &str, code: & fn generate_impl_text_inner(adt: &ast::Adt, trait_text: Option<&str>, code: &str) -> String { let type_params = adt.generic_param_list(); let mut buf = String::with_capacity(code.len()); - buf.push_str("\n\nimpl"); + buf.push_str("\n\n"); + adt + .attrs() + .filter(|attr| { + attr.as_simple_call().map(|(name, _arg)| name == "cfg").unwrap_or(false) + }) + .for_each(|attr| buf.push_str(format!("{}\n", attr.to_string()).as_str())); + buf.push_str("impl"); if let Some(type_params) = &type_params { format_to!(buf, "{}", type_params.syntax()); } -- cgit v1.2.3