mirror of
https://github.com/rust-lang/rust
synced 2024-10-04 07:40:48 +00:00
Simplify type alias rendering, remove constructor structs
This commit is contained in:
parent
97f7865c56
commit
95ae67b0b0
|
@ -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,
|
||||
}
|
||||
with_eq: bool,
|
||||
) -> Option<CompletionItem> {
|
||||
let db = ctx.db();
|
||||
|
||||
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);
|
||||
}
|
||||
// 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())
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue