]> git.lizzy.rs Git - rust.git/commitdiff
Simplify type alias rendering, remove constructor structs
authorLukas Wirth <lukastw97@gmail.com>
Tue, 21 Dec 2021 14:37:43 +0000 (15:37 +0100)
committerLukas Wirth <lukastw97@gmail.com>
Tue, 21 Dec 2021 14:37:43 +0000 (15:37 +0100)
crates/ide_completion/src/render/type_alias.rs

index 259fe25a6cd6ce2ee40010e83392ab09ff9259c8..5df21fb36cddea4b842ebeeff18fb2c1d0290924 100644 (file)
@@ -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<CompletionItem> {
     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<CompletionItem> {
     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,
-}
-
-impl<'a> TypeAliasRender<'a> {
-    fn new(ctx: RenderContext<'a>, type_alias: hir::TypeAlias) -> Option<TypeAliasRender<'a>> {
-        let ast_node = type_alias.source(ctx.db())?.value;
-        Some(TypeAliasRender { ctx, type_alias, ast_node })
-    }
-
-    fn render(self, with_eq: bool) -> Option<CompletionItem> {
-        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);
-            }
+    with_eq: bool,
+) -> Option<CompletionItem> {
+    let db = ctx.db();
+
+    // 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);
+
+    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);
         }
-
-        Some(item.build())
     }
 
-    fn detail(&self) -> String {
-        type_label(&self.ast_node)
-    }
+    Some(item.build())
 }