From 3349b40d471bea1e1b154213b19fbeb5a965943c Mon Sep 17 00:00:00 2001 From: Rune Tynan Date: Wed, 20 Jan 2021 17:19:46 -0500 Subject: [PATCH] Remove StructType entirely and replace it with CtorKind --- src/librustdoc/clean/inline.rs | 10 +++------- src/librustdoc/clean/mod.rs | 15 +++------------ src/librustdoc/clean/types.rs | 16 +++------------- src/librustdoc/html/render/mod.rs | 13 +++++++------ src/librustdoc/json/conversions.rs | 12 ++++++------ 5 files changed, 22 insertions(+), 44 deletions(-) diff --git a/src/librustdoc/clean/inline.rs b/src/librustdoc/clean/inline.rs index f2439af0053..1f9e7f8ae5c 100644 --- a/src/librustdoc/clean/inline.rs +++ b/src/librustdoc/clean/inline.rs @@ -5,7 +5,7 @@ use std::iter::once; use rustc_ast as ast; use rustc_data_structures::fx::FxHashSet; use rustc_hir as hir; -use rustc_hir::def::{CtorKind, DefKind, Res}; +use rustc_hir::def::{DefKind, Res}; use rustc_hir::def_id::{DefId, CRATE_DEF_INDEX}; use rustc_hir::Mutability; use rustc_metadata::creader::LoadedMacro; @@ -15,7 +15,7 @@ use rustc_span::hygiene::MacroKind; use rustc_span::symbol::{kw, sym, Symbol}; use rustc_span::Span; -use crate::clean::{self, Attributes, GetDefId, ToSource, TypeKind, StructType}; +use crate::clean::{self, Attributes, GetDefId, ToSource, TypeKind}; use crate::core::DocContext; use super::Clean; @@ -245,11 +245,7 @@ fn build_struct(cx: &DocContext<'_>, did: DefId) -> clean::Struct { let variant = cx.tcx.adt_def(did).non_enum_variant(); clean::Struct { - struct_type: match variant.ctor_kind { - CtorKind::Fictive => StructType::Plain, - CtorKind::Fn => StructType::Tuple, - CtorKind::Const => StructType::Unit, - }, + struct_type: variant.ctor_kind, generics: (cx.tcx.generics_of(did), predicates).clean(cx), fields: variant.fields.clean(cx), fields_stripped: false, diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs index 4092ff55575..8fa60fa7178 100644 --- a/src/librustdoc/clean/mod.rs +++ b/src/librustdoc/clean/mod.rs @@ -1824,19 +1824,10 @@ impl Clean for ty::Visibility { } } -crate fn struct_type_from_def(vdata: &hir::VariantData<'_>) -> StructType { - use StructType::*; - match *vdata { - hir::VariantData::Struct(..) => Plain, - hir::VariantData::Tuple(..) => Tuple, - hir::VariantData::Unit(..) => Unit, - } -} - impl Clean for rustc_hir::VariantData<'_> { fn clean(&self, cx: &DocContext<'_>) -> VariantStruct { VariantStruct { - struct_type: struct_type_from_def(self), + struct_type: CtorKind::from_hir(self), fields: self.fields().iter().map(|x| x.clean(cx)).collect(), fields_stripped: false, } @@ -1851,7 +1842,7 @@ impl Clean for ty::VariantDef { self.fields.iter().map(|f| cx.tcx.type_of(f.did).clean(cx)).collect(), ), CtorKind::Fictive => Variant::Struct(VariantStruct { - struct_type: StructType::Plain, + struct_type: CtorKind::Fictive, fields_stripped: false, fields: self .fields @@ -2010,7 +2001,7 @@ impl Clean> for (&hir::Item<'_>, Option) { fields_stripped: false, }), ItemKind::Struct(ref variant_data, ref generics) => StructItem(Struct { - struct_type: struct_type_from_def(&variant_data), + struct_type: CtorKind::from_hir(variant_data), generics: generics.clean(cx), fields: variant_data.fields().clean(cx), fields_stripped: false, diff --git a/src/librustdoc/clean/types.rs b/src/librustdoc/clean/types.rs index 2e272aacd6b..c767b9dd85b 100644 --- a/src/librustdoc/clean/types.rs +++ b/src/librustdoc/clean/types.rs @@ -16,7 +16,7 @@ use rustc_attr::{ConstStability, Deprecation, Stability, StabilityLevel}; use rustc_data_structures::fx::{FxHashMap, FxHashSet}; use rustc_feature::UnstableFeatures; use rustc_hir as hir; -use rustc_hir::def::Res; +use rustc_hir::def::{CtorKind, Res}; use rustc_hir::def_id::{CrateNum, DefId}; use rustc_hir::lang_items::LangItem; use rustc_hir::Mutability; @@ -1682,19 +1682,9 @@ impl Visibility { } } -#[derive(Debug, Clone, Copy)] -crate enum StructType { - /// A braced struct - Plain, - /// A tuple struct - Tuple, - /// A unit struct - Unit, -} - #[derive(Clone, Debug)] crate struct Struct { - crate struct_type: StructType, + crate struct_type: CtorKind, crate generics: Generics, crate fields: Vec, crate fields_stripped: bool, @@ -1712,7 +1702,7 @@ crate struct Union { /// only as a variant in an enum. #[derive(Clone, Debug)] crate struct VariantStruct { - crate struct_type: StructType, + crate struct_type: CtorKind, crate fields: Vec, crate fields_stripped: bool, } diff --git a/src/librustdoc/html/render/mod.rs b/src/librustdoc/html/render/mod.rs index 29ded0b854e..70ea38892d3 100644 --- a/src/librustdoc/html/render/mod.rs +++ b/src/librustdoc/html/render/mod.rs @@ -52,6 +52,7 @@ use rustc_attr::{Deprecation, StabilityLevel}; use rustc_data_structures::flock; use rustc_data_structures::fx::{FxHashMap, FxHashSet}; use rustc_hir as hir; +use rustc_hir::def::CtorKind; use rustc_hir::def_id::{DefId, LOCAL_CRATE}; use rustc_hir::Mutability; use rustc_middle::middle::stability; @@ -3100,7 +3101,7 @@ fn item_struct( _ => None, }) .peekable(); - if let clean::StructType::Plain = s.struct_type { + if let CtorKind::Fictive = s.struct_type { if fields.peek().is_some() { write!( w, @@ -3350,7 +3351,7 @@ fn render_struct( w: &mut Buffer, it: &clean::Item, g: Option<&clean::Generics>, - ty: clean::StructType, + ty: CtorKind, fields: &[clean::Item], tab: &str, structhead: bool, @@ -3367,7 +3368,7 @@ fn render_struct( write!(w, "{}", g.print()) } match ty { - clean::StructType::Plain => { + CtorKind::Fictive => { if let Some(g) = g { write!(w, "{}", WhereClause { gens: g, indent: 0, end_newline: true }) } @@ -3399,7 +3400,7 @@ fn render_struct( } write!(w, "}}"); } - clean::StructType::Tuple => { + CtorKind::Fn => { write!(w, "("); for (i, field) in fields.iter().enumerate() { if i > 0 { @@ -3424,7 +3425,7 @@ fn render_struct( } write!(w, ";"); } - clean::StructType::Unit => { + CtorKind::Const => { // Needed for PhantomData. if let Some(g) = g { write!(w, "{}", WhereClause { gens: g, indent: 0, end_newline: false }) @@ -4459,7 +4460,7 @@ fn sidebar_struct(cx: &Context<'_>, buf: &mut Buffer, it: &clean::Item, s: &clea let fields = get_struct_fields_name(&s.fields); if !fields.is_empty() { - if let clean::StructType::Plain = s.struct_type { + if let CtorKind::Fictive = s.struct_type { sidebar.push_str(&format!( "Fields\
{}
", diff --git a/src/librustdoc/json/conversions.rs b/src/librustdoc/json/conversions.rs index b872f949087..32def4dde1b 100644 --- a/src/librustdoc/json/conversions.rs +++ b/src/librustdoc/json/conversions.rs @@ -5,6 +5,7 @@ use std::convert::From; use rustc_ast::ast; +use rustc_hir::def::CtorKind; use rustc_span::def_id::{DefId, CRATE_DEF_INDEX}; use rustc_span::Pos; @@ -220,13 +221,12 @@ impl From for Struct { } } -impl From for StructType { - fn from(struct_type: clean::StructType) -> Self { - use clean::StructType::*; +impl From for StructType { + fn from(struct_type: CtorKind) -> Self { match struct_type { - Plain => StructType::Plain, - Tuple => StructType::Tuple, - Unit => StructType::Unit, + CtorKind::Fictive => StructType::Plain, + CtorKind::Fn => StructType::Tuple, + CtorKind::Const => StructType::Unit, } } }