Rustdoc-Json: Report discriminant on all kinds of enum variant.
Closes #106299
This commit is contained in:
parent
b7b252a4f4
commit
cca5d219e6
16 changed files with 167 additions and 144 deletions
|
@ -650,14 +650,16 @@ impl FromWithTcx<clean::Variant> for Variant {
|
||||||
|
|
||||||
let discriminant = variant.discriminant.map(|d| d.into_tcx(tcx));
|
let discriminant = variant.discriminant.map(|d| d.into_tcx(tcx));
|
||||||
|
|
||||||
match variant.kind {
|
let kind = match variant.kind {
|
||||||
CLike => Variant::Plain(discriminant),
|
CLike => VariantKind::Plain,
|
||||||
Tuple(fields) => Variant::Tuple(ids_keeping_stripped(fields, tcx)),
|
Tuple(fields) => VariantKind::Tuple(ids_keeping_stripped(fields, tcx)),
|
||||||
Struct(s) => Variant::Struct {
|
Struct(s) => VariantKind::Struct {
|
||||||
fields_stripped: s.has_stripped_entries(),
|
fields_stripped: s.has_stripped_entries(),
|
||||||
fields: ids(s.fields, tcx),
|
fields: ids(s.fields, tcx),
|
||||||
},
|
},
|
||||||
}
|
};
|
||||||
|
|
||||||
|
Variant { kind, discriminant }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ use std::path::PathBuf;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
/// rustdoc format-version.
|
/// rustdoc format-version.
|
||||||
pub const FORMAT_VERSION: u32 = 23;
|
pub const FORMAT_VERSION: u32 = 24;
|
||||||
|
|
||||||
/// A `Crate` is the root of the emitted JSON blob. It contains all type/documentation information
|
/// 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
|
/// about the language items in the local crate, as well as info about external items to allow
|
||||||
|
@ -333,11 +333,18 @@ pub struct Enum {
|
||||||
pub impls: Vec<Id>,
|
pub impls: Vec<Id>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
|
||||||
|
pub struct Variant {
|
||||||
|
/// Whether the variant is plain, a tuple-like, or struct-like. Contains the fields.
|
||||||
|
pub kind: VariantKind,
|
||||||
|
/// The discriminant, if explicitly specified.
|
||||||
|
pub discriminant: Option<Discriminant>,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
|
#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
|
||||||
#[serde(rename_all = "snake_case")]
|
#[serde(rename_all = "snake_case")]
|
||||||
#[serde(tag = "variant_kind", content = "variant_inner")]
|
pub enum VariantKind {
|
||||||
pub enum Variant {
|
/// A variant with no parentheses
|
||||||
/// A variant with no parentheses, and possible discriminant.
|
|
||||||
///
|
///
|
||||||
/// ```rust
|
/// ```rust
|
||||||
/// enum Demo {
|
/// enum Demo {
|
||||||
|
@ -345,7 +352,7 @@ pub enum Variant {
|
||||||
/// PlainWithDiscriminant = 1,
|
/// PlainWithDiscriminant = 1,
|
||||||
/// }
|
/// }
|
||||||
/// ```
|
/// ```
|
||||||
Plain(Option<Discriminant>),
|
Plain,
|
||||||
/// A variant with unnamed fields.
|
/// A variant with unnamed fields.
|
||||||
///
|
///
|
||||||
/// Unlike most of json, `#[doc(hidden)]` fields will be given as `None`
|
/// Unlike most of json, `#[doc(hidden)]` fields will be given as `None`
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
#[repr(i8)]
|
#[repr(i8)]
|
||||||
pub enum Ordering {
|
pub enum Ordering {
|
||||||
// @is "$.index[*][?(@.name=='Less')].inner.variant_inner.expr" '"-1"'
|
// @is "$.index[*][?(@.name=='Less')].inner.discriminant.expr" '"-1"'
|
||||||
// @is "$.index[*][?(@.name=='Less')].inner.variant_inner.value" '"-1"'
|
// @is "$.index[*][?(@.name=='Less')].inner.discriminant.value" '"-1"'
|
||||||
Less = -1,
|
Less = -1,
|
||||||
// @is "$.index[*][?(@.name=='Equal')].inner.variant_inner.expr" '"0"'
|
// @is "$.index[*][?(@.name=='Equal')].inner.discriminant.expr" '"0"'
|
||||||
// @is "$.index[*][?(@.name=='Equal')].inner.variant_inner.value" '"0"'
|
// @is "$.index[*][?(@.name=='Equal')].inner.discriminant.value" '"0"'
|
||||||
Equal = 0,
|
Equal = 0,
|
||||||
// @is "$.index[*][?(@.name=='Greater')].inner.variant_inner.expr" '"1"'
|
// @is "$.index[*][?(@.name=='Greater')].inner.discriminant.expr" '"1"'
|
||||||
// @is "$.index[*][?(@.name=='Greater')].inner.variant_inner.value" '"1"'
|
// @is "$.index[*][?(@.name=='Greater')].inner.discriminant.value" '"1"'
|
||||||
Greater = 1,
|
Greater = 1,
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,30 +1,30 @@
|
||||||
pub enum Foo {
|
pub enum Foo {
|
||||||
// @is "$.index[*][?(@.name=='Addition')].inner.variant_inner.value" '"0"'
|
// @is "$.index[*][?(@.name=='Addition')].inner.discriminant.value" '"0"'
|
||||||
// @is "$.index[*][?(@.name=='Addition')].inner.variant_inner.expr" '"{ _ }"'
|
// @is "$.index[*][?(@.name=='Addition')].inner.discriminant.expr" '"{ _ }"'
|
||||||
Addition = 0 + 0,
|
Addition = 0 + 0,
|
||||||
// @is "$.index[*][?(@.name=='Bin')].inner.variant_inner.value" '"1"'
|
// @is "$.index[*][?(@.name=='Bin')].inner.discriminant.value" '"1"'
|
||||||
// @is "$.index[*][?(@.name=='Bin')].inner.variant_inner.expr" '"0b1"'
|
// @is "$.index[*][?(@.name=='Bin')].inner.discriminant.expr" '"0b1"'
|
||||||
Bin = 0b1,
|
Bin = 0b1,
|
||||||
// @is "$.index[*][?(@.name=='Oct')].inner.variant_inner.value" '"2"'
|
// @is "$.index[*][?(@.name=='Oct')].inner.discriminant.value" '"2"'
|
||||||
// @is "$.index[*][?(@.name=='Oct')].inner.variant_inner.expr" '"0o2"'
|
// @is "$.index[*][?(@.name=='Oct')].inner.discriminant.expr" '"0o2"'
|
||||||
Oct = 0o2,
|
Oct = 0o2,
|
||||||
// @is "$.index[*][?(@.name=='PubConst')].inner.variant_inner.value" '"3"'
|
// @is "$.index[*][?(@.name=='PubConst')].inner.discriminant.value" '"3"'
|
||||||
// @is "$.index[*][?(@.name=='PubConst')].inner.variant_inner.expr" '"THREE"'
|
// @is "$.index[*][?(@.name=='PubConst')].inner.discriminant.expr" '"THREE"'
|
||||||
PubConst = THREE,
|
PubConst = THREE,
|
||||||
// @is "$.index[*][?(@.name=='Hex')].inner.variant_inner.value" '"4"'
|
// @is "$.index[*][?(@.name=='Hex')].inner.discriminant.value" '"4"'
|
||||||
// @is "$.index[*][?(@.name=='Hex')].inner.variant_inner.expr" '"0x4"'
|
// @is "$.index[*][?(@.name=='Hex')].inner.discriminant.expr" '"0x4"'
|
||||||
Hex = 0x4,
|
Hex = 0x4,
|
||||||
// @is "$.index[*][?(@.name=='Cast')].inner.variant_inner.value" '"5"'
|
// @is "$.index[*][?(@.name=='Cast')].inner.discriminant.value" '"5"'
|
||||||
// @is "$.index[*][?(@.name=='Cast')].inner.variant_inner.expr" '"{ _ }"'
|
// @is "$.index[*][?(@.name=='Cast')].inner.discriminant.expr" '"{ _ }"'
|
||||||
Cast = 5 as isize,
|
Cast = 5 as isize,
|
||||||
// @is "$.index[*][?(@.name=='PubCall')].inner.variant_inner.value" '"6"'
|
// @is "$.index[*][?(@.name=='PubCall')].inner.discriminant.value" '"6"'
|
||||||
// @is "$.index[*][?(@.name=='PubCall')].inner.variant_inner.expr" '"{ _ }"'
|
// @is "$.index[*][?(@.name=='PubCall')].inner.discriminant.expr" '"{ _ }"'
|
||||||
PubCall = six(),
|
PubCall = six(),
|
||||||
// @is "$.index[*][?(@.name=='PrivCall')].inner.variant_inner.value" '"7"'
|
// @is "$.index[*][?(@.name=='PrivCall')].inner.discriminant.value" '"7"'
|
||||||
// @is "$.index[*][?(@.name=='PrivCall')].inner.variant_inner.expr" '"{ _ }"'
|
// @is "$.index[*][?(@.name=='PrivCall')].inner.discriminant.expr" '"{ _ }"'
|
||||||
PrivCall = seven(),
|
PrivCall = seven(),
|
||||||
// @is "$.index[*][?(@.name=='PrivConst')].inner.variant_inner.value" '"8"'
|
// @is "$.index[*][?(@.name=='PrivConst')].inner.discriminant.value" '"8"'
|
||||||
// @is "$.index[*][?(@.name=='PrivConst')].inner.variant_inner.expr" '"EIGHT"'
|
// @is "$.index[*][?(@.name=='PrivConst')].inner.discriminant.expr" '"EIGHT"'
|
||||||
PrivConst = EIGHT,
|
PrivConst = EIGHT,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,40 +4,40 @@
|
||||||
|
|
||||||
#[repr(u64)]
|
#[repr(u64)]
|
||||||
pub enum U64 {
|
pub enum U64 {
|
||||||
// @is "$.index[*][?(@.name=='U64Min')].inner.variant_inner.value" '"0"'
|
// @is "$.index[*][?(@.name=='U64Min')].inner.discriminant.value" '"0"'
|
||||||
// @is "$.index[*][?(@.name=='U64Min')].inner.variant_inner.expr" '"u64::MIN"'
|
// @is "$.index[*][?(@.name=='U64Min')].inner.discriminant.expr" '"u64::MIN"'
|
||||||
U64Min = u64::MIN,
|
U64Min = u64::MIN,
|
||||||
// @is "$.index[*][?(@.name=='U64Max')].inner.variant_inner.value" '"18446744073709551615"'
|
// @is "$.index[*][?(@.name=='U64Max')].inner.discriminant.value" '"18446744073709551615"'
|
||||||
// @is "$.index[*][?(@.name=='U64Max')].inner.variant_inner.expr" '"u64::MAX"'
|
// @is "$.index[*][?(@.name=='U64Max')].inner.discriminant.expr" '"u64::MAX"'
|
||||||
U64Max = u64::MAX,
|
U64Max = u64::MAX,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[repr(i64)]
|
#[repr(i64)]
|
||||||
pub enum I64 {
|
pub enum I64 {
|
||||||
// @is "$.index[*][?(@.name=='I64Min')].inner.variant_inner.value" '"-9223372036854775808"'
|
// @is "$.index[*][?(@.name=='I64Min')].inner.discriminant.value" '"-9223372036854775808"'
|
||||||
// @is "$.index[*][?(@.name=='I64Min')].inner.variant_inner.expr" '"i64::MIN"'
|
// @is "$.index[*][?(@.name=='I64Min')].inner.discriminant.expr" '"i64::MIN"'
|
||||||
I64Min = i64::MIN,
|
I64Min = i64::MIN,
|
||||||
// @is "$.index[*][?(@.name=='I64Max')].inner.variant_inner.value" '"9223372036854775807"'
|
// @is "$.index[*][?(@.name=='I64Max')].inner.discriminant.value" '"9223372036854775807"'
|
||||||
// @is "$.index[*][?(@.name=='I64Max')].inner.variant_inner.expr" '"i64::MAX"'
|
// @is "$.index[*][?(@.name=='I64Max')].inner.discriminant.expr" '"i64::MAX"'
|
||||||
I64Max = i64::MAX,
|
I64Max = i64::MAX,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[repr(u128)]
|
#[repr(u128)]
|
||||||
pub enum U128 {
|
pub enum U128 {
|
||||||
// @is "$.index[*][?(@.name=='U128Min')].inner.variant_inner.value" '"0"'
|
// @is "$.index[*][?(@.name=='U128Min')].inner.discriminant.value" '"0"'
|
||||||
// @is "$.index[*][?(@.name=='U128Min')].inner.variant_inner.expr" '"u128::MIN"'
|
// @is "$.index[*][?(@.name=='U128Min')].inner.discriminant.expr" '"u128::MIN"'
|
||||||
U128Min = u128::MIN,
|
U128Min = u128::MIN,
|
||||||
// @is "$.index[*][?(@.name=='U128Max')].inner.variant_inner.value" '"340282366920938463463374607431768211455"'
|
// @is "$.index[*][?(@.name=='U128Max')].inner.discriminant.value" '"340282366920938463463374607431768211455"'
|
||||||
// @is "$.index[*][?(@.name=='U128Max')].inner.variant_inner.expr" '"u128::MAX"'
|
// @is "$.index[*][?(@.name=='U128Max')].inner.discriminant.expr" '"u128::MAX"'
|
||||||
U128Max = u128::MAX,
|
U128Max = u128::MAX,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[repr(i128)]
|
#[repr(i128)]
|
||||||
pub enum I128 {
|
pub enum I128 {
|
||||||
// @is "$.index[*][?(@.name=='I128Min')].inner.variant_inner.value" '"-170141183460469231731687303715884105728"'
|
// @is "$.index[*][?(@.name=='I128Min')].inner.discriminant.value" '"-170141183460469231731687303715884105728"'
|
||||||
// @is "$.index[*][?(@.name=='I128Min')].inner.variant_inner.expr" '"i128::MIN"'
|
// @is "$.index[*][?(@.name=='I128Min')].inner.discriminant.expr" '"i128::MIN"'
|
||||||
I128Min = i128::MIN,
|
I128Min = i128::MIN,
|
||||||
// @is "$.index[*][?(@.name=='I128Max')].inner.variant_inner.value" '"170141183460469231731687303715884105727"'
|
// @is "$.index[*][?(@.name=='I128Max')].inner.discriminant.value" '"170141183460469231731687303715884105727"'
|
||||||
// @is "$.index[*][?(@.name=='I128Max')].inner.variant_inner.expr" '"i128::MAX"'
|
// @is "$.index[*][?(@.name=='I128Max')].inner.discriminant.expr" '"i128::MAX"'
|
||||||
I128Max = i128::MAX,
|
I128Max = i128::MAX,
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
#[repr(u32)]
|
#[repr(u32)]
|
||||||
pub enum Foo {
|
pub enum Foo {
|
||||||
// @is "$.index[*][?(@.name=='Basic')].inner.variant_inner.value" '"0"'
|
// @is "$.index[*][?(@.name=='Basic')].inner.discriminant.value" '"0"'
|
||||||
// @is "$.index[*][?(@.name=='Basic')].inner.variant_inner.expr" '"0"'
|
// @is "$.index[*][?(@.name=='Basic')].inner.discriminant.expr" '"0"'
|
||||||
Basic = 0,
|
Basic = 0,
|
||||||
// @is "$.index[*][?(@.name=='Suffix')].inner.variant_inner.value" '"10"'
|
// @is "$.index[*][?(@.name=='Suffix')].inner.discriminant.value" '"10"'
|
||||||
// @is "$.index[*][?(@.name=='Suffix')].inner.variant_inner.expr" '"10u32"'
|
// @is "$.index[*][?(@.name=='Suffix')].inner.discriminant.expr" '"10u32"'
|
||||||
Suffix = 10u32,
|
Suffix = 10u32,
|
||||||
// @is "$.index[*][?(@.name=='Underscore')].inner.variant_inner.value" '"100"'
|
// @is "$.index[*][?(@.name=='Underscore')].inner.discriminant.value" '"100"'
|
||||||
// @is "$.index[*][?(@.name=='Underscore')].inner.variant_inner.expr" '"1_0_0"'
|
// @is "$.index[*][?(@.name=='Underscore')].inner.discriminant.expr" '"1_0_0"'
|
||||||
Underscore = 1_0_0,
|
Underscore = 1_0_0,
|
||||||
// @is "$.index[*][?(@.name=='SuffixUnderscore')].inner.variant_inner.value" '"1000"'
|
// @is "$.index[*][?(@.name=='SuffixUnderscore')].inner.discriminant.value" '"1000"'
|
||||||
// @is "$.index[*][?(@.name=='SuffixUnderscore')].inner.variant_inner.expr" '"1_0_0_0u32"'
|
// @is "$.index[*][?(@.name=='SuffixUnderscore')].inner.discriminant.expr" '"1_0_0_0u32"'
|
||||||
SuffixUnderscore = 1_0_0_0u32,
|
SuffixUnderscore = 1_0_0_0u32,
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
pub enum Foo {
|
pub enum Foo {
|
||||||
// @is "$.index[*][?(@.name=='Has')].inner.variant_inner" '{"expr":"0", "value":"0"}'
|
// @is "$.index[*][?(@.name=='Has')].inner.discriminant" '{"expr":"0", "value":"0"}'
|
||||||
Has = 0,
|
Has = 0,
|
||||||
// @is "$.index[*][?(@.name=='Doesnt')].inner.variant_inner" null
|
// @is "$.index[*][?(@.name=='Doesnt')].inner.discriminant" null
|
||||||
Doesnt,
|
Doesnt,
|
||||||
// @is "$.index[*][?(@.name=='AlsoDoesnt')].inner.variant_inner" null
|
// @is "$.index[*][?(@.name=='AlsoDoesnt')].inner.discriminant" null
|
||||||
AlsoDoesnt,
|
AlsoDoesnt,
|
||||||
// @is "$.index[*][?(@.name=='AlsoHas')].inner.variant_inner" '{"expr":"44", "value":"44"}'
|
// @is "$.index[*][?(@.name=='AlsoHas')].inner.discriminant" '{"expr":"44", "value":"44"}'
|
||||||
AlsoHas = 44,
|
AlsoHas = 44,
|
||||||
}
|
}
|
||||||
|
|
15
src/test/rustdoc-json/enums/discriminant/struct.rs
Normal file
15
src/test/rustdoc-json/enums/discriminant/struct.rs
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
// ignore-tidy-linelength
|
||||||
|
|
||||||
|
#[repr(i32)]
|
||||||
|
// @is "$.index[*][?(@.name=='Foo')].attrs" '["#[repr(i32)]"]'
|
||||||
|
pub enum Foo {
|
||||||
|
// @is "$.index[*][?(@.name=='Struct')].inner.discriminant" null
|
||||||
|
// @count "$.index[*][?(@.name=='Struct')].inner.kind.struct.fields[*]" 0
|
||||||
|
Struct {},
|
||||||
|
// @is "$.index[*][?(@.name=='StructWithDiscr')].inner.discriminant" '{"expr": "42", "value": "42"}'
|
||||||
|
// @count "$.index[*][?(@.name=='StructWithDiscr')].inner.kind.struct.fields[*]" 1
|
||||||
|
StructWithDiscr { x: i32 } = 42,
|
||||||
|
// @is "$.index[*][?(@.name=='StructWithHexDiscr')].inner.discriminant" '{"expr": "0x42", "value": "66"}'
|
||||||
|
// @count "$.index[*][?(@.name=='StructWithHexDiscr')].inner.kind.struct.fields[*]" 2
|
||||||
|
StructWithHexDiscr { x: i32, y: bool } = 0x42,
|
||||||
|
}
|
15
src/test/rustdoc-json/enums/discriminant/tuple.rs
Normal file
15
src/test/rustdoc-json/enums/discriminant/tuple.rs
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
// ignore-tidy-linelength
|
||||||
|
|
||||||
|
#[repr(u32)]
|
||||||
|
// @is "$.index[*][?(@.name=='Foo')].attrs" '["#[repr(u32)]"]'
|
||||||
|
pub enum Foo {
|
||||||
|
// @is "$.index[*][?(@.name=='Tuple')].inner.discriminant" null
|
||||||
|
// @count "$.index[*][?(@.name=='Tuple')].inner.kind.tuple[*]" 0
|
||||||
|
Tuple(),
|
||||||
|
// @is "$.index[*][?(@.name=='TupleWithDiscr')].inner.discriminant" '{"expr": "1", "value": "1"}'
|
||||||
|
// @count "$.index[*][?(@.name=='TupleWithDiscr')].inner.kind.tuple[*]" 1
|
||||||
|
TupleWithDiscr(i32) = 1,
|
||||||
|
// @is "$.index[*][?(@.name=='TupleWithBinDiscr')].inner.discriminant" '{"expr": "0b10", "value": "2"}'
|
||||||
|
// @count "$.index[*][?(@.name=='TupleWithBinDiscr')].inner.kind.tuple[*]" 2
|
||||||
|
TupleWithBinDiscr(i32, i32) = 0b10,
|
||||||
|
}
|
|
@ -5,8 +5,8 @@
|
||||||
|
|
||||||
// @has "$.index[*][?(@.name=='ParseError')]"
|
// @has "$.index[*][?(@.name=='ParseError')]"
|
||||||
// @has "$.index[*][?(@.name=='UnexpectedEndTag')]"
|
// @has "$.index[*][?(@.name=='UnexpectedEndTag')]"
|
||||||
// @is "$.index[*][?(@.name=='UnexpectedEndTag')].inner.variant_kind" '"tuple"'
|
// @is "$.index[*][?(@.name=='UnexpectedEndTag')].inner.kind.tuple" [null]
|
||||||
// @is "$.index[*][?(@.name=='UnexpectedEndTag')].inner.variant_inner" [null]
|
// @is "$.index[*][?(@.name=='UnexpectedEndTag')].inner.discriminant" null
|
||||||
|
|
||||||
pub enum ParseError {
|
pub enum ParseError {
|
||||||
UnexpectedEndTag(#[doc(hidden)] u32),
|
UnexpectedEndTag(#[doc(hidden)] u32),
|
||||||
|
|
|
@ -5,27 +5,22 @@
|
||||||
|
|
||||||
pub enum Foo {
|
pub enum Foo {
|
||||||
// @set Unit = "$.index[*][?(@.name=='Unit')].id"
|
// @set Unit = "$.index[*][?(@.name=='Unit')].id"
|
||||||
// @is "$.index[*][?(@.name=='Unit')].inner.variant_kind" '"plain"'
|
// @is "$.index[*][?(@.name=='Unit')].inner.kind" '"plain"'
|
||||||
// @is "$.index[*][?(@.name=='Unit')].inner.variant_inner" null
|
|
||||||
Unit,
|
Unit,
|
||||||
// @set Named = "$.index[*][?(@.name=='Named')].id"
|
// @set Named = "$.index[*][?(@.name=='Named')].id"
|
||||||
// @is "$.index[*][?(@.name=='Named')].inner.variant_kind" '"struct"'
|
// @is "$.index[*][?(@.name=='Named')].inner.kind.struct" '{"fields": [], "fields_stripped": false}'
|
||||||
// @is "$.index[*][?(@.name=='Named')].inner.variant_inner" '{"fields": [], "fields_stripped": false}'
|
|
||||||
Named {},
|
Named {},
|
||||||
// @set Tuple = "$.index[*][?(@.name=='Tuple')].id"
|
// @set Tuple = "$.index[*][?(@.name=='Tuple')].id"
|
||||||
// @is "$.index[*][?(@.name=='Tuple')].inner.variant_kind" '"tuple"'
|
// @is "$.index[*][?(@.name=='Tuple')].inner.kind.tuple" []
|
||||||
// @is "$.index[*][?(@.name=='Tuple')].inner.variant_inner" []
|
|
||||||
Tuple(),
|
Tuple(),
|
||||||
// @set NamedField = "$.index[*][?(@.name=='NamedField')].id"
|
// @set NamedField = "$.index[*][?(@.name=='NamedField')].id"
|
||||||
// @set x = "$.index[*][?(@.name=='x' && @.kind=='struct_field')].id"
|
// @set x = "$.index[*][?(@.name=='x' && @.kind=='struct_field')].id"
|
||||||
// @is "$.index[*][?(@.name=='NamedField')].inner.variant_kind" '"struct"'
|
// @is "$.index[*][?(@.name=='NamedField')].inner.kind.struct.fields[*]" $x
|
||||||
// @is "$.index[*][?(@.name=='NamedField')].inner.variant_inner.fields[*]" $x
|
// @is "$.index[*][?(@.name=='NamedField')].inner.kind.struct.fields_stripped" false
|
||||||
// @is "$.index[*][?(@.name=='NamedField')].inner.variant_inner.fields_stripped" false
|
|
||||||
NamedField { x: i32 },
|
NamedField { x: i32 },
|
||||||
// @set TupleField = "$.index[*][?(@.name=='TupleField')].id"
|
// @set TupleField = "$.index[*][?(@.name=='TupleField')].id"
|
||||||
// @is "$.index[*][?(@.name=='TupleField')].inner.variant_kind" '"tuple"'
|
|
||||||
// @set tup_field = "$.index[*][?(@.name=='0' && @.kind=='struct_field')].id"
|
// @set tup_field = "$.index[*][?(@.name=='0' && @.kind=='struct_field')].id"
|
||||||
// @is "$.index[*][?(@.name=='TupleField')].inner.variant_inner[*]" $tup_field
|
// @is "$.index[*][?(@.name=='TupleField')].inner.kind.tuple[*]" $tup_field
|
||||||
TupleField(i32),
|
TupleField(i32),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,9 +9,8 @@ pub enum Foo {
|
||||||
// @set y = "$.index[*][?(@.name=='y')].id"
|
// @set y = "$.index[*][?(@.name=='y')].id"
|
||||||
y: i32,
|
y: i32,
|
||||||
},
|
},
|
||||||
// @is "$.index[*][?(@.name=='Variant')].inner.variant_kind" '"struct"'
|
// @is "$.index[*][?(@.name=='Variant')].inner.kind.struct.fields_stripped" true
|
||||||
// @is "$.index[*][?(@.name=='Variant')].inner.variant_inner.fields_stripped" true
|
// @is "$.index[*][?(@.name=='Variant')].inner.kind.struct.fields[0]" $b
|
||||||
// @is "$.index[*][?(@.name=='Variant')].inner.variant_inner.fields[0]" $b
|
// @is "$.index[*][?(@.name=='Variant')].inner.kind.struct.fields[1]" $y
|
||||||
// @is "$.index[*][?(@.name=='Variant')].inner.variant_inner.fields[1]" $y
|
// @count "$.index[*][?(@.name=='Variant')].inner.kind.struct.fields[*]" 2
|
||||||
// @count "$.index[*][?(@.name=='Variant')].inner.variant_inner.fields[*]" 2
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,61 +14,50 @@
|
||||||
// @set 3.3.1 = "$.index[*][?(@.docs=='3.3.1')].id"
|
// @set 3.3.1 = "$.index[*][?(@.docs=='3.3.1')].id"
|
||||||
|
|
||||||
pub enum EnumWithStrippedTupleVariants {
|
pub enum EnumWithStrippedTupleVariants {
|
||||||
// @is "$.index[*][?(@.name=='None')].inner.variant_kind" '"tuple"'
|
// @count "$.index[*][?(@.name=='None')].inner.kind.tuple[*]" 0
|
||||||
// @count "$.index[*][?(@.name=='None')].inner.variant_inner[*]" 0
|
|
||||||
None(),
|
None(),
|
||||||
|
|
||||||
// @is "$.index[*][?(@.name=='One')].inner.variant_kind" '"tuple"'
|
// @count "$.index[*][?(@.name=='One')].inner.kind.tuple[*]" 1
|
||||||
// @count "$.index[*][?(@.name=='One')].inner.variant_inner[*]" 1
|
// @is "$.index[*][?(@.name=='One')].inner.kind.tuple[0]" $1.1.0
|
||||||
// @is "$.index[*][?(@.name=='One')].inner.variant_inner[0]" $1.1.0
|
|
||||||
One(/** 1.1.0*/ bool),
|
One(/** 1.1.0*/ bool),
|
||||||
// @is "$.index[*][?(@.name=='OneHidden')].inner.variant_kind" '"tuple"'
|
// @count "$.index[*][?(@.name=='OneHidden')].inner.kind.tuple[*]" 1
|
||||||
// @count "$.index[*][?(@.name=='OneHidden')].inner.variant_inner[*]" 1
|
// @is "$.index[*][?(@.name=='OneHidden')].inner.kind.tuple[0]" null
|
||||||
// @is "$.index[*][?(@.name=='OneHidden')].inner.variant_inner[0]" null
|
|
||||||
OneHidden(#[doc(hidden)] bool),
|
OneHidden(#[doc(hidden)] bool),
|
||||||
|
|
||||||
// @is "$.index[*][?(@.name=='Two')].inner.variant_kind" '"tuple"'
|
// @count "$.index[*][?(@.name=='Two')].inner.kind.tuple[*]" 2
|
||||||
// @count "$.index[*][?(@.name=='Two')].inner.variant_inner[*]" 2
|
// @is "$.index[*][?(@.name=='Two')].inner.kind.tuple[0]" $2.1.0
|
||||||
// @is "$.index[*][?(@.name=='Two')].inner.variant_inner[0]" $2.1.0
|
// @is "$.index[*][?(@.name=='Two')].inner.kind.tuple[1]" $2.1.1
|
||||||
// @is "$.index[*][?(@.name=='Two')].inner.variant_inner[1]" $2.1.1
|
|
||||||
Two(/** 2.1.0*/ bool, /** 2.1.1*/ bool),
|
Two(/** 2.1.0*/ bool, /** 2.1.1*/ bool),
|
||||||
// @is "$.index[*][?(@.name=='TwoLeftHidden')].inner.variant_kind" '"tuple"'
|
// @count "$.index[*][?(@.name=='TwoLeftHidden')].inner.kind.tuple[*]" 2
|
||||||
// @count "$.index[*][?(@.name=='TwoLeftHidden')].inner.variant_inner[*]" 2
|
// @is "$.index[*][?(@.name=='TwoLeftHidden')].inner.kind.tuple[0]" null
|
||||||
// @is "$.index[*][?(@.name=='TwoLeftHidden')].inner.variant_inner[0]" null
|
// @is "$.index[*][?(@.name=='TwoLeftHidden')].inner.kind.tuple[1]" $2.2.1
|
||||||
// @is "$.index[*][?(@.name=='TwoLeftHidden')].inner.variant_inner[1]" $2.2.1
|
|
||||||
TwoLeftHidden(#[doc(hidden)] bool, /** 2.2.1*/ bool),
|
TwoLeftHidden(#[doc(hidden)] bool, /** 2.2.1*/ bool),
|
||||||
// @is "$.index[*][?(@.name=='TwoRightHidden')].inner.variant_kind" '"tuple"'
|
// @count "$.index[*][?(@.name=='TwoRightHidden')].inner.kind.tuple[*]" 2
|
||||||
// @count "$.index[*][?(@.name=='TwoRightHidden')].inner.variant_inner[*]" 2
|
// @is "$.index[*][?(@.name=='TwoRightHidden')].inner.kind.tuple[0]" $2.3.0
|
||||||
// @is "$.index[*][?(@.name=='TwoRightHidden')].inner.variant_inner[0]" $2.3.0
|
// @is "$.index[*][?(@.name=='TwoRightHidden')].inner.kind.tuple[1]" null
|
||||||
// @is "$.index[*][?(@.name=='TwoRightHidden')].inner.variant_inner[1]" null
|
|
||||||
TwoRightHidden(/** 2.3.0*/ bool, #[doc(hidden)] bool),
|
TwoRightHidden(/** 2.3.0*/ bool, #[doc(hidden)] bool),
|
||||||
// @is "$.index[*][?(@.name=='TwoBothHidden')].inner.variant_kind" '"tuple"'
|
// @count "$.index[*][?(@.name=='TwoBothHidden')].inner.kind.tuple[*]" 2
|
||||||
// @count "$.index[*][?(@.name=='TwoBothHidden')].inner.variant_inner[*]" 2
|
// @is "$.index[*][?(@.name=='TwoBothHidden')].inner.kind.tuple[0]" null
|
||||||
// @is "$.index[*][?(@.name=='TwoBothHidden')].inner.variant_inner[0]" null
|
// @is "$.index[*][?(@.name=='TwoBothHidden')].inner.kind.tuple[1]" null
|
||||||
// @is "$.index[*][?(@.name=='TwoBothHidden')].inner.variant_inner[1]" null
|
|
||||||
TwoBothHidden(#[doc(hidden)] bool, #[doc(hidden)] bool),
|
TwoBothHidden(#[doc(hidden)] bool, #[doc(hidden)] bool),
|
||||||
|
|
||||||
// @is "$.index[*][?(@.name=='Three1')].inner.variant_kind" '"tuple"'
|
// @count "$.index[*][?(@.name=='Three1')].inner.kind.tuple[*]" 3
|
||||||
// @count "$.index[*][?(@.name=='Three1')].inner.variant_inner[*]" 3
|
// @is "$.index[*][?(@.name=='Three1')].inner.kind.tuple[0]" null
|
||||||
// @is "$.index[*][?(@.name=='Three1')].inner.variant_inner[0]" null
|
// @is "$.index[*][?(@.name=='Three1')].inner.kind.tuple[1]" $3.1.1
|
||||||
// @is "$.index[*][?(@.name=='Three1')].inner.variant_inner[1]" $3.1.1
|
// @is "$.index[*][?(@.name=='Three1')].inner.kind.tuple[2]" $3.1.2
|
||||||
// @is "$.index[*][?(@.name=='Three1')].inner.variant_inner[2]" $3.1.2
|
|
||||||
Three1(#[doc(hidden)] bool, /** 3.1.1*/ bool, /** 3.1.2*/ bool),
|
Three1(#[doc(hidden)] bool, /** 3.1.1*/ bool, /** 3.1.2*/ bool),
|
||||||
// @is "$.index[*][?(@.name=='Three2')].inner.variant_kind" '"tuple"'
|
// @count "$.index[*][?(@.name=='Three2')].inner.kind.tuple[*]" 3
|
||||||
// @count "$.index[*][?(@.name=='Three2')].inner.variant_inner[*]" 3
|
// @is "$.index[*][?(@.name=='Three2')].inner.kind.tuple[0]" $3.2.0
|
||||||
// @is "$.index[*][?(@.name=='Three2')].inner.variant_inner[0]" $3.2.0
|
// @is "$.index[*][?(@.name=='Three2')].inner.kind.tuple[1]" null
|
||||||
// @is "$.index[*][?(@.name=='Three2')].inner.variant_inner[1]" null
|
// @is "$.index[*][?(@.name=='Three2')].inner.kind.tuple[2]" $3.2.2
|
||||||
// @is "$.index[*][?(@.name=='Three2')].inner.variant_inner[2]" $3.2.2
|
|
||||||
Three2(/** 3.2.0*/ bool, #[doc(hidden)] bool, /** 3.2.2*/ bool),
|
Three2(/** 3.2.0*/ bool, #[doc(hidden)] bool, /** 3.2.2*/ bool),
|
||||||
// @is "$.index[*][?(@.name=='Three3')].inner.variant_kind" '"tuple"'
|
// @count "$.index[*][?(@.name=='Three3')].inner.kind.tuple[*]" 3
|
||||||
// @count "$.index[*][?(@.name=='Three3')].inner.variant_inner[*]" 3
|
// @is "$.index[*][?(@.name=='Three3')].inner.kind.tuple[0]" $3.3.0
|
||||||
// @is "$.index[*][?(@.name=='Three3')].inner.variant_inner[0]" $3.3.0
|
// @is "$.index[*][?(@.name=='Three3')].inner.kind.tuple[1]" $3.3.1
|
||||||
// @is "$.index[*][?(@.name=='Three3')].inner.variant_inner[1]" $3.3.1
|
// @is "$.index[*][?(@.name=='Three3')].inner.kind.tuple[2]" null
|
||||||
// @is "$.index[*][?(@.name=='Three3')].inner.variant_inner[2]" null
|
|
||||||
Three3(/** 3.3.0*/ bool, /** 3.3.1*/ bool, #[doc(hidden)] bool),
|
Three3(/** 3.3.0*/ bool, /** 3.3.1*/ bool, #[doc(hidden)] bool),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// @is "$.index[*][?(@.docs=='1.1.0')].name" '"0"'
|
// @is "$.index[*][?(@.docs=='1.1.0')].name" '"0"'
|
||||||
// @is "$.index[*][?(@.docs=='2.1.0')].name" '"0"'
|
// @is "$.index[*][?(@.docs=='2.1.0')].name" '"0"'
|
||||||
// @is "$.index[*][?(@.docs=='2.1.1')].name" '"1"'
|
// @is "$.index[*][?(@.docs=='2.1.1')].name" '"1"'
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
// @is "$.index[*][?(@.name=='EnumStruct')].visibility" \"public\"
|
// @is "$.index[*][?(@.name=='EnumStruct')].visibility" \"public\"
|
||||||
// @is "$.index[*][?(@.name=='EnumStruct')].kind" \"enum\"
|
// @is "$.index[*][?(@.name=='EnumStruct')].kind" \"enum\"
|
||||||
pub enum EnumStruct {
|
pub enum EnumStruct {
|
||||||
// @is "$.index[*][?(@.name=='VariantS')].inner.variant_kind" \"struct\"
|
|
||||||
// @is "$.index[*][?(@.name=='x')].kind" \"struct_field\"
|
// @is "$.index[*][?(@.name=='x')].kind" \"struct_field\"
|
||||||
|
// @set x = "$.index[*][?(@.name=='x')].id"
|
||||||
// @is "$.index[*][?(@.name=='y')].kind" \"struct_field\"
|
// @is "$.index[*][?(@.name=='y')].kind" \"struct_field\"
|
||||||
VariantS {
|
// @set y = "$.index[*][?(@.name=='y')].id"
|
||||||
x: u32,
|
// @ismany "$.index[*][?(@.name=='VariantS')].inner.kind.struct.fields[*]" $x $y
|
||||||
y: String,
|
VariantS { x: u32, y: String },
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
// @is "$.index[*][?(@.name=='EnumTupleStruct')].visibility" \"public\"
|
// @is "$.index[*][?(@.name=='EnumTupleStruct')].visibility" \"public\"
|
||||||
// @is "$.index[*][?(@.name=='EnumTupleStruct')].kind" \"enum\"
|
// @is "$.index[*][?(@.name=='EnumTupleStruct')].kind" \"enum\"
|
||||||
pub enum EnumTupleStruct {
|
pub enum EnumTupleStruct {
|
||||||
// @is "$.index[*][?(@.name=='VariantA')].inner.variant_kind" \"tuple\"
|
|
||||||
// @is "$.index[*][?(@.name=='0')].kind" \"struct_field\"
|
// @is "$.index[*][?(@.name=='0')].kind" \"struct_field\"
|
||||||
|
// @set f0 = "$.index[*][?(@.name=='0')].id"
|
||||||
// @is "$.index[*][?(@.name=='1')].kind" \"struct_field\"
|
// @is "$.index[*][?(@.name=='1')].kind" \"struct_field\"
|
||||||
|
// @set f1 = "$.index[*][?(@.name=='1')].id"
|
||||||
|
// @ismany "$.index[*][?(@.name=='VariantA')].inner.kind.tuple[*]" $f0 $f1
|
||||||
VariantA(u32, String),
|
VariantA(u32, String),
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@ use rustdoc_json_types::{
|
||||||
Constant, Crate, DynTrait, Enum, FnDecl, Function, FunctionPointer, GenericArg, GenericArgs,
|
Constant, Crate, DynTrait, Enum, FnDecl, Function, FunctionPointer, GenericArg, GenericArgs,
|
||||||
GenericBound, GenericParamDef, Generics, Id, Impl, Import, ItemEnum, Module, OpaqueTy, Path,
|
GenericBound, GenericParamDef, Generics, Id, Impl, Import, ItemEnum, Module, OpaqueTy, Path,
|
||||||
Primitive, ProcMacro, Static, Struct, StructKind, Term, Trait, TraitAlias, Type, TypeBinding,
|
Primitive, ProcMacro, Static, Struct, StructKind, Term, Trait, TraitAlias, Type, TypeBinding,
|
||||||
TypeBindingKind, Typedef, Union, Variant, WherePredicate,
|
TypeBindingKind, Typedef, Union, Variant, VariantKind, WherePredicate,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::{item_kind::Kind, Error, ErrorKind};
|
use crate::{item_kind::Kind, Error, ErrorKind};
|
||||||
|
@ -140,12 +140,10 @@ impl<'a> Validator<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn check_variant(&mut self, x: &'a Variant, id: &'a Id) {
|
fn check_variant(&mut self, x: &'a Variant, id: &'a Id) {
|
||||||
match x {
|
let Variant { kind, discriminant } = x;
|
||||||
Variant::Plain(discr) => {
|
|
||||||
if let Some(discr) = discr {
|
if let Some(discr) = discriminant {
|
||||||
if let (Err(_), Err(_)) =
|
if let (Err(_), Err(_)) = (discr.value.parse::<i128>(), discr.value.parse::<u128>()) {
|
||||||
(discr.value.parse::<i128>(), discr.value.parse::<u128>())
|
|
||||||
{
|
|
||||||
self.fail(
|
self.fail(
|
||||||
id,
|
id,
|
||||||
ErrorKind::Custom(format!(
|
ErrorKind::Custom(format!(
|
||||||
|
@ -155,9 +153,11 @@ impl<'a> Validator<'a> {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
Variant::Tuple(tys) => tys.iter().flatten().for_each(|t| self.add_field_id(t)),
|
match kind {
|
||||||
Variant::Struct { fields, fields_stripped: _ } => {
|
VariantKind::Plain => {}
|
||||||
|
VariantKind::Tuple(tys) => tys.iter().flatten().for_each(|t| self.add_field_id(t)),
|
||||||
|
VariantKind::Struct { fields, fields_stripped: _ } => {
|
||||||
fields.iter().for_each(|f| self.add_field_id(f))
|
fields.iter().for_each(|f| self.add_field_id(f))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue