diff --git a/crates/ide_completion/src/render/type_alias.rs b/crates/ide_completion/src/render/type_alias.rs index 259fe25a6c..5df21fb36c 100644 --- a/crates/ide_completion/src/render/type_alias.rs +++ b/crates/ide_completion/src/render/type_alias.rs @@ -2,10 +2,7 @@ use hir::{AsAssocItem, HasSource}; use ide_db::SymbolKind; -use syntax::{ - ast::{HasName, TypeAlias}, - display::type_label, -}; +use syntax::{ast::HasName, display::type_label}; use crate::{item::CompletionItem, render::RenderContext}; @@ -14,7 +11,7 @@ pub(crate) fn render_type_alias( type_alias: hir::TypeAlias, ) -> Option { let _p = profile::span("render_type_alias"); - TypeAliasRender::new(ctx, type_alias)?.render(false) + render(ctx, type_alias, false) } pub(crate) fn render_type_alias_with_eq( @@ -22,53 +19,38 @@ pub(crate) fn render_type_alias_with_eq( type_alias: hir::TypeAlias, ) -> Option { let _p = profile::span("render_type_alias_with_eq"); - TypeAliasRender::new(ctx, type_alias)?.render(true) + render(ctx, type_alias, true) } -#[derive(Debug)] -struct TypeAliasRender<'a> { - ctx: RenderContext<'a>, +fn render( + ctx: RenderContext<'_>, type_alias: hir::TypeAlias, - ast_node: TypeAlias, -} + with_eq: bool, +) -> Option { + let db = ctx.db(); -impl<'a> TypeAliasRender<'a> { - fn new(ctx: RenderContext<'a>, type_alias: hir::TypeAlias) -> Option> { - let ast_node = type_alias.source(ctx.db())?.value; - Some(TypeAliasRender { ctx, type_alias, ast_node }) - } - - fn render(self, with_eq: bool) -> Option { - let name = self.ast_node.name().map(|name| { - if with_eq { - format!("{} = ", name.text()) - } else { - name.text().to_string() - } - })?; - let detail = self.detail(); - - let mut item = - CompletionItem::new(SymbolKind::TypeAlias, self.ctx.source_range(), name.clone()); - item.set_documentation(self.ctx.docs(self.type_alias)) - .set_deprecated( - self.ctx.is_deprecated(self.type_alias) - || self.ctx.is_deprecated_assoc_item(self.type_alias), - ) - .detail(detail); - - let db = self.ctx.db(); - if let Some(actm) = self.type_alias.as_assoc_item(db) { - if let Some(trt) = actm.containing_trait_or_trait_impl(db) { - item.trait_name(trt.name(db).to_smol_str()); - item.insert_text(name); - } + // FIXME: This parses the file! + let ast_node = type_alias.source(db)?.value; + let name = ast_node.name().map(|name| { + if with_eq { + format!("{} = ", name.text()) + } else { + name.text().to_string() } + })?; + let detail = type_label(&ast_node); - Some(item.build()) + let mut item = CompletionItem::new(SymbolKind::TypeAlias, ctx.source_range(), name.clone()); + item.set_documentation(ctx.docs(type_alias)) + .set_deprecated(ctx.is_deprecated(type_alias) || ctx.is_deprecated_assoc_item(type_alias)) + .detail(detail); + + if let Some(actm) = type_alias.as_assoc_item(db) { + if let Some(trt) = actm.containing_trait_or_trait_impl(db) { + item.trait_name(trt.name(db).to_smol_str()); + item.insert_text(name); + } } - fn detail(&self) -> String { - type_label(&self.ast_node) - } + Some(item.build()) }