Auto merge of #94921 - aDotInTheVoid:rustdoc-json-format-cleanup, r=CraftSpider
rustdoc-json: Clean Up json format No semantic changes, but better names Closes https://github.com/rust-lang/rust/issues/94198 Closes https://github.com/rust-lang/rust/issues/94889 r? `@CraftSpider` `@rustbot` modify labels: +A-rustdoc-json +T-rustdoc +C-cleanup
This commit is contained in:
commit
6b9b2bd315
6 changed files with 49 additions and 16 deletions
|
@ -31,7 +31,7 @@ def check_generics(generics):
|
|||
for where_predicate in generics["where_predicates"]:
|
||||
if "bound_predicate" in where_predicate:
|
||||
pred = where_predicate["bound_predicate"]
|
||||
check_type(pred["ty"])
|
||||
check_type(pred["type"])
|
||||
for bound in pred["bounds"]:
|
||||
check_generic_bound(bound)
|
||||
elif "region_predicate" in where_predicate:
|
||||
|
@ -171,7 +171,7 @@ while work_list:
|
|||
for bound in item["inner"]["bounds"]:
|
||||
check_generic_bound(bound)
|
||||
work_list |= (
|
||||
set(item["inner"]["items"]) | set(item["inner"]["implementors"])
|
||||
set(item["inner"]["items"]) | set(item["inner"]["implementations"])
|
||||
) - visited
|
||||
elif item["kind"] == "impl":
|
||||
check_generics(item["inner"]["generics"])
|
||||
|
|
|
@ -345,9 +345,10 @@ impl FromWithTcx<clean::GenericParamDefKind> for GenericParamDefKind {
|
|||
default: default.map(|x| (*x).into_tcx(tcx)),
|
||||
synthetic,
|
||||
},
|
||||
Const { did: _, ty, default } => {
|
||||
GenericParamDefKind::Const { ty: (*ty).into_tcx(tcx), default: default.map(|x| *x) }
|
||||
}
|
||||
Const { did: _, ty, default } => GenericParamDefKind::Const {
|
||||
type_: (*ty).into_tcx(tcx),
|
||||
default: default.map(|x| *x),
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -357,7 +358,7 @@ impl FromWithTcx<clean::WherePredicate> for WherePredicate {
|
|||
use clean::WherePredicate::*;
|
||||
match predicate {
|
||||
BoundPredicate { ty, bounds, .. } => WherePredicate::BoundPredicate {
|
||||
ty: ty.into_tcx(tcx),
|
||||
type_: ty.into_tcx(tcx),
|
||||
bounds: bounds.into_iter().map(|x| x.into_tcx(tcx)).collect(),
|
||||
// FIXME: add `bound_params` to rustdoc-json-params?
|
||||
},
|
||||
|
@ -516,7 +517,7 @@ impl FromWithTcx<clean::Trait> for Trait {
|
|||
items: ids(items),
|
||||
generics: generics.into_tcx(tcx),
|
||||
bounds: bounds.into_iter().map(|x| x.into_tcx(tcx)).collect(),
|
||||
implementors: Vec::new(), // Added in JsonRenderer::item
|
||||
implementations: Vec::new(), // Added in JsonRenderer::item
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -179,7 +179,7 @@ impl<'tcx> FormatRenderer<'tcx> for JsonRenderer<'tcx> {
|
|||
let id = item.def_id;
|
||||
if let Some(mut new_item) = self.convert_item(item) {
|
||||
if let types::ItemEnum::Trait(ref mut t) = new_item.inner {
|
||||
t.implementors = self.get_trait_implementors(id.expect_def_id())
|
||||
t.implementations = self.get_trait_implementors(id.expect_def_id())
|
||||
} else if let types::ItemEnum::Struct(ref mut s) = new_item.inner {
|
||||
s.impls = self.get_impls(id.expect_def_id())
|
||||
} else if let types::ItemEnum::Enum(ref mut e) = new_item.inner {
|
||||
|
|
|
@ -9,7 +9,7 @@ use std::path::PathBuf;
|
|||
use serde::{Deserialize, Serialize};
|
||||
|
||||
/// rustdoc format-version.
|
||||
pub const FORMAT_VERSION: u32 = 13;
|
||||
pub const FORMAT_VERSION: u32 = 14;
|
||||
|
||||
/// A `Crate` is the root of the emitted JSON blob. It contains all type/documentation information
|
||||
/// about the language items in the local crate, as well as info about external items to allow
|
||||
|
@ -378,7 +378,8 @@ pub enum GenericParamDefKind {
|
|||
synthetic: bool,
|
||||
},
|
||||
Const {
|
||||
ty: Type,
|
||||
#[serde(rename = "type")]
|
||||
type_: Type,
|
||||
default: Option<String>,
|
||||
},
|
||||
}
|
||||
|
@ -386,9 +387,19 @@ pub enum GenericParamDefKind {
|
|||
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
|
||||
#[serde(rename_all = "snake_case")]
|
||||
pub enum WherePredicate {
|
||||
BoundPredicate { ty: Type, bounds: Vec<GenericBound> },
|
||||
RegionPredicate { lifetime: String, bounds: Vec<GenericBound> },
|
||||
EqPredicate { lhs: Type, rhs: Term },
|
||||
BoundPredicate {
|
||||
#[serde(rename = "type")]
|
||||
type_: Type,
|
||||
bounds: Vec<GenericBound>,
|
||||
},
|
||||
RegionPredicate {
|
||||
lifetime: String,
|
||||
bounds: Vec<GenericBound>,
|
||||
},
|
||||
EqPredicate {
|
||||
lhs: Type,
|
||||
rhs: Term,
|
||||
},
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
|
||||
|
@ -494,7 +505,7 @@ pub struct Trait {
|
|||
pub items: Vec<Id>,
|
||||
pub generics: Generics,
|
||||
pub bounds: Vec<GenericBound>,
|
||||
pub implementors: Vec<Id>,
|
||||
pub implementations: Vec<Id>,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
|
||||
|
|
|
@ -13,10 +13,12 @@ pub trait LendingIterator {
|
|||
// @count - "$.index[*][?(@.name=='LendingItem')].inner.generics.params[*]" 1
|
||||
// @is - "$.index[*][?(@.name=='LendingItem')].inner.generics.params[*].name" \"\'a\"
|
||||
// @count - "$.index[*][?(@.name=='LendingItem')].inner.generics.where_predicates[*]" 1
|
||||
// @is - "$.index[*][?(@.name=='LendingItem')].inner.generics.where_predicates[*].bound_predicate.ty.inner" \"Self\"
|
||||
// @is - "$.index[*][?(@.name=='LendingItem')].inner.generics.where_predicates[*].bound_predicate.type.inner" \"Self\"
|
||||
// @is - "$.index[*][?(@.name=='LendingItem')].inner.generics.where_predicates[*].bound_predicate.bounds[*].outlives" \"\'a\"
|
||||
// @count - "$.index[*][?(@.name=='LendingItem')].inner.bounds[*]" 1
|
||||
type LendingItem<'a>: Display where Self: 'a;
|
||||
type LendingItem<'a>: Display
|
||||
where
|
||||
Self: 'a;
|
||||
|
||||
// @is - "$.index[*][?(@.name=='lending_next')].inner.decl.output.kind" \"qualified_path\"
|
||||
// @count - "$.index[*][?(@.name=='lending_next')].inner.decl.output.inner.args.angle_bracketed.args[*]" 1
|
||||
|
|
19
src/test/rustdoc-json/traits/implementors.rs
Normal file
19
src/test/rustdoc-json/traits/implementors.rs
Normal file
|
@ -0,0 +1,19 @@
|
|||
#![feature(no_core)]
|
||||
#![no_core]
|
||||
|
||||
// @set wham = implementors.json "$.index[*][?(@.name=='Wham')].id"
|
||||
// @count - "$.index[*][?(@.name=='Wham')].inner.implementations[*]" 1
|
||||
// @set gmWham = - "$.index[*][?(@.name=='Wham')].inner.implementations[0]"
|
||||
pub trait Wham {}
|
||||
|
||||
// @count - "$.index[*][?(@.name=='GeorgeMichael')].inner.impls[*]" 1
|
||||
// @is - "$.index[*][?(@.name=='GeorgeMichael')].inner.impls[0]" $gmWham
|
||||
// @set gm = - "$.index[*][?(@.name=='Wham')].id"
|
||||
|
||||
// jsonpath_lib isnt expressive enough (for now) to get the "impl" item, so we
|
||||
// just check it isn't pointing to the type, but when you port to jsondocck-ng
|
||||
// check what the impl item is
|
||||
// @!is - "$.index[*][?(@.name=='Wham')].inner.implementations[0]" $gm
|
||||
pub struct GeorgeMichael {}
|
||||
|
||||
impl Wham for GeorgeMichael {}
|
Loading…
Add table
Reference in a new issue