diff options
| author | roife <roifewu@gmail.com> | 2024-03-06 15:32:26 +0800 |
|---|---|---|
| committer | roife <roifewu@gmail.com> | 2024-03-06 15:32:26 +0800 |
| commit | faea7fca0145019a0f17a5b0bb0f4a84d7225cb7 (patch) | |
| tree | 013f10393ee6112c29215b39f08501527db07944 | |
| parent | 7c786ed96f78dcd938d4a143993a3bb6c136435d (diff) | |
| download | rust-faea7fca0145019a0f17a5b0bb0f4a84d7225cb7.tar.gz rust-faea7fca0145019a0f17a5b0bb0f4a84d7225cb7.zip | |
fix: keep attrs for assist 'generate_delegate_trait'
| -rw-r--r-- | crates/ide-assists/src/handlers/generate_delegate_trait.rs | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/crates/ide-assists/src/handlers/generate_delegate_trait.rs b/crates/ide-assists/src/handlers/generate_delegate_trait.rs index e0bcd78c99b..92c10ec818a 100644 --- a/crates/ide-assists/src/handlers/generate_delegate_trait.rs +++ b/crates/ide-assists/src/handlers/generate_delegate_trait.rs @@ -16,7 +16,8 @@ use syntax::{ ast::{ self, edit::{self, AstNodeEdit}, - make, AssocItem, GenericArgList, GenericParamList, HasGenericParams, HasName, + edit_in_place::AttrsOwnerEdit, + make, AssocItem, GenericArgList, GenericParamList, HasAttrs, HasGenericParams, HasName, HasTypeBounds, HasVisibility as astHasVisibility, Path, WherePred, }, ted::{self, Position}, @@ -619,7 +620,8 @@ fn process_assoc_item( qual_path_ty: ast::Path, base_name: &str, ) -> Option<ast::AssocItem> { - match item { + let attrs = item.attrs(); + let assoc = match item { AssocItem::Const(c) => const_assoc_item(c, qual_path_ty), AssocItem::Fn(f) => func_assoc_item(f, qual_path_ty, base_name), AssocItem::MacroCall(_) => { @@ -628,7 +630,18 @@ fn process_assoc_item( None } AssocItem::TypeAlias(ta) => ty_assoc_item(ta, qual_path_ty), + }; + if let Some(assoc) = &assoc { + attrs.for_each(|attr| { + assoc.add_attr(attr.clone()); + // fix indentations + if let Some(tok) = attr.syntax().next_sibling_or_token() { + let pos = Position::after(tok); + ted::insert(pos, make::tokens::whitespace(" ")); + } + }) } + assoc } fn const_assoc_item(item: syntax::ast::Const, qual_path_ty: ast::Path) -> Option<AssocItem> { |
