Rollup merge of #81227 - CraftSpider:struct-type-clean, r=jyn514
Remove doctree::StructType Also removes it from the Union type, as unions can only ever be 'Plain'. Adds a new StructType to JSON, 'union', as the easiest way to encode the type of a union there. This leaves only one item in doctree, `Module`. r? `@jyn514`
This commit is contained in:
commit
2ceee72427
@ -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;
|
||||
@ -17,7 +17,6 @@ use rustc_span::Span;
|
||||
|
||||
use crate::clean::{self, Attributes, GetDefId, ToSource, TypeKind};
|
||||
use crate::core::DocContext;
|
||||
use crate::doctree;
|
||||
|
||||
use super::Clean;
|
||||
|
||||
@ -246,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 => doctree::Plain,
|
||||
CtorKind::Fn => doctree::Tuple,
|
||||
CtorKind::Const => doctree::Unit,
|
||||
},
|
||||
struct_type: variant.ctor_kind,
|
||||
generics: (cx.tcx.generics_of(did), predicates).clean(cx),
|
||||
fields: variant.fields.clean(cx),
|
||||
fields_stripped: false,
|
||||
@ -262,7 +257,6 @@ fn build_union(cx: &DocContext<'_>, did: DefId) -> clean::Union {
|
||||
let variant = cx.tcx.adt_def(did).non_enum_variant();
|
||||
|
||||
clean::Union {
|
||||
struct_type: doctree::Plain,
|
||||
generics: (cx.tcx.generics_of(did), predicates).clean(cx),
|
||||
fields: variant.fields.clean(cx),
|
||||
fields_stripped: false,
|
||||
|
@ -1827,7 +1827,7 @@ impl Clean<Visibility> for ty::Visibility {
|
||||
impl Clean<VariantStruct> for rustc_hir::VariantData<'_> {
|
||||
fn clean(&self, cx: &DocContext<'_>) -> VariantStruct {
|
||||
VariantStruct {
|
||||
struct_type: doctree::struct_type_from_def(self),
|
||||
struct_type: CtorKind::from_hir(self),
|
||||
fields: self.fields().iter().map(|x| x.clean(cx)).collect(),
|
||||
fields_stripped: false,
|
||||
}
|
||||
@ -1842,7 +1842,7 @@ impl Clean<Item> for ty::VariantDef {
|
||||
self.fields.iter().map(|f| cx.tcx.type_of(f.did).clean(cx)).collect(),
|
||||
),
|
||||
CtorKind::Fictive => Variant::Struct(VariantStruct {
|
||||
struct_type: doctree::Plain,
|
||||
struct_type: CtorKind::Fictive,
|
||||
fields_stripped: false,
|
||||
fields: self
|
||||
.fields
|
||||
@ -1996,13 +1996,12 @@ impl Clean<Vec<Item>> for (&hir::Item<'_>, Option<Symbol>) {
|
||||
bounds: bounds.clean(cx),
|
||||
}),
|
||||
ItemKind::Union(ref variant_data, ref generics) => UnionItem(Union {
|
||||
struct_type: doctree::struct_type_from_def(&variant_data),
|
||||
generics: generics.clean(cx),
|
||||
fields: variant_data.fields().clean(cx),
|
||||
fields_stripped: false,
|
||||
}),
|
||||
ItemKind::Struct(ref variant_data, ref generics) => StructItem(Struct {
|
||||
struct_type: doctree::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,
|
||||
|
@ -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;
|
||||
@ -37,7 +37,6 @@ use crate::clean::inline;
|
||||
use crate::clean::types::Type::{QPath, ResolvedPath};
|
||||
use crate::clean::Clean;
|
||||
use crate::core::DocContext;
|
||||
use crate::doctree;
|
||||
use crate::formats::cache::cache;
|
||||
use crate::formats::item_type::ItemType;
|
||||
use crate::html::render::cache::ExternalLocation;
|
||||
@ -1685,7 +1684,7 @@ impl Visibility {
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
crate struct Struct {
|
||||
crate struct_type: doctree::StructType,
|
||||
crate struct_type: CtorKind,
|
||||
crate generics: Generics,
|
||||
crate fields: Vec<Item>,
|
||||
crate fields_stripped: bool,
|
||||
@ -1693,7 +1692,6 @@ crate struct Struct {
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
crate struct Union {
|
||||
crate struct_type: doctree::StructType,
|
||||
crate generics: Generics,
|
||||
crate fields: Vec<Item>,
|
||||
crate fields_stripped: bool,
|
||||
@ -1704,7 +1702,7 @@ crate struct Union {
|
||||
/// only as a variant in an enum.
|
||||
#[derive(Clone, Debug)]
|
||||
crate struct VariantStruct {
|
||||
crate struct_type: doctree::StructType,
|
||||
crate struct_type: CtorKind,
|
||||
crate fields: Vec<Item>,
|
||||
crate fields_stripped: bool,
|
||||
}
|
||||
|
@ -1,7 +1,5 @@
|
||||
//! This module is used to store stuff from Rust's AST in a more convenient
|
||||
//! manner (and with prettier names) before cleaning.
|
||||
crate use self::StructType::*;
|
||||
|
||||
use rustc_span::{self, Span, Symbol};
|
||||
|
||||
use rustc_hir as hir;
|
||||
@ -34,21 +32,3 @@ impl Module<'hir> {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
crate enum StructType {
|
||||
/// A braced struct
|
||||
Plain,
|
||||
/// A tuple struct
|
||||
Tuple,
|
||||
/// A unit struct
|
||||
Unit,
|
||||
}
|
||||
|
||||
crate fn struct_type_from_def(vdata: &hir::VariantData<'_>) -> StructType {
|
||||
match *vdata {
|
||||
hir::VariantData::Struct(..) => Plain,
|
||||
hir::VariantData::Tuple(..) => Tuple,
|
||||
hir::VariantData::Unit(..) => Unit,
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
@ -67,7 +68,6 @@ use serde::{Serialize, Serializer};
|
||||
use crate::clean::{self, AttributesExt, GetDefId, RenderedLink, SelfTy, TypeKind};
|
||||
use crate::config::{RenderInfo, RenderOptions};
|
||||
use crate::docfs::{DocFS, PathError};
|
||||
use crate::doctree;
|
||||
use crate::error::Error;
|
||||
use crate::formats::cache::{cache, Cache};
|
||||
use crate::formats::item_type::ItemType;
|
||||
@ -3103,7 +3103,7 @@ fn item_struct(
|
||||
_ => None,
|
||||
})
|
||||
.peekable();
|
||||
if let doctree::Plain = s.struct_type {
|
||||
if let CtorKind::Fictive = s.struct_type {
|
||||
if fields.peek().is_some() {
|
||||
write!(
|
||||
w,
|
||||
@ -3353,7 +3353,7 @@ fn render_struct(
|
||||
w: &mut Buffer,
|
||||
it: &clean::Item,
|
||||
g: Option<&clean::Generics>,
|
||||
ty: doctree::StructType,
|
||||
ty: CtorKind,
|
||||
fields: &[clean::Item],
|
||||
tab: &str,
|
||||
structhead: bool,
|
||||
@ -3370,7 +3370,7 @@ fn render_struct(
|
||||
write!(w, "{}", g.print())
|
||||
}
|
||||
match ty {
|
||||
doctree::Plain => {
|
||||
CtorKind::Fictive => {
|
||||
if let Some(g) = g {
|
||||
write!(w, "{}", WhereClause { gens: g, indent: 0, end_newline: true })
|
||||
}
|
||||
@ -3402,7 +3402,7 @@ fn render_struct(
|
||||
}
|
||||
write!(w, "}}");
|
||||
}
|
||||
doctree::Tuple => {
|
||||
CtorKind::Fn => {
|
||||
write!(w, "(");
|
||||
for (i, field) in fields.iter().enumerate() {
|
||||
if i > 0 {
|
||||
@ -3427,7 +3427,7 @@ fn render_struct(
|
||||
}
|
||||
write!(w, ";");
|
||||
}
|
||||
doctree::Unit => {
|
||||
CtorKind::Const => {
|
||||
// Needed for PhantomData.
|
||||
if let Some(g) = g {
|
||||
write!(w, "{}", WhereClause { gens: g, indent: 0, end_newline: false })
|
||||
@ -4462,7 +4462,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 doctree::Plain = s.struct_type {
|
||||
if let CtorKind::Fictive = s.struct_type {
|
||||
sidebar.push_str(&format!(
|
||||
"<a class=\"sidebar-title\" href=\"#fields\">Fields</a>\
|
||||
<div class=\"sidebar-links\">{}</div>",
|
||||
|
@ -5,11 +5,11 @@
|
||||
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;
|
||||
|
||||
use crate::clean;
|
||||
use crate::doctree;
|
||||
use crate::formats::item_type::ItemType;
|
||||
use crate::json::types::*;
|
||||
use crate::json::JsonRenderer;
|
||||
@ -210,9 +210,9 @@ impl From<clean::Struct> for Struct {
|
||||
|
||||
impl From<clean::Union> for Struct {
|
||||
fn from(struct_: clean::Union) -> Self {
|
||||
let clean::Union { struct_type, generics, fields, fields_stripped } = struct_;
|
||||
let clean::Union { generics, fields, fields_stripped } = struct_;
|
||||
Struct {
|
||||
struct_type: struct_type.into(),
|
||||
struct_type: StructType::Union,
|
||||
generics: generics.into(),
|
||||
fields_stripped,
|
||||
fields: ids(fields),
|
||||
@ -221,13 +221,12 @@ impl From<clean::Union> for Struct {
|
||||
}
|
||||
}
|
||||
|
||||
impl From<doctree::StructType> for StructType {
|
||||
fn from(struct_type: doctree::StructType) -> Self {
|
||||
use doctree::StructType::*;
|
||||
impl From<CtorKind> 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,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -270,6 +270,7 @@ pub enum StructType {
|
||||
Plain,
|
||||
Tuple,
|
||||
Unit,
|
||||
Union,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
|
||||
|
Loading…
Reference in New Issue
Block a user