jsondoclint: Recognise Typedef as valid kind for Type::ResolvedPath

Closes #104851
This commit is contained in:
Nixon Enraght-Moony 2022-11-25 10:53:14 +00:00
parent 41e0363055
commit eac8921ccf
3 changed files with 20 additions and 7 deletions

View File

@ -0,0 +1,10 @@
// Regression test for <https://github.com/rust-lang/rust/issues/104851>
/// @set foo = "$.index[*][?(@.name=='Foo')].id"
pub type Foo = i32;
// @is "$.index[*][?(@.name=='demo')].inner.decl.output.kind" '"resolved_path"'
// @is "$.index[*][?(@.name=='demo')].inner.decl.output.inner.id" $foo
pub fn demo() -> Foo {
42
}

View File

@ -114,8 +114,8 @@ pub fn is_variant(self) -> bool {
pub fn is_trait(self) -> bool {
matches!(self, Kind::Trait)
}
pub fn is_struct_enum_union(self) -> bool {
matches!(self, Kind::Struct | Kind::Enum | Kind::Union)
pub fn is_type(self) -> bool {
matches!(self, Kind::Struct | Kind::Enum | Kind::Union | Kind::Typedef)
}
pub fn from_item(i: &Item) -> Self {

View File

@ -32,7 +32,10 @@ pub struct Validator<'a> {
enum PathKind {
Trait,
StructEnumUnion,
/// Structs, Enums, Unions and Typedefs.
///
/// This doesn't include trait's because traits are not types.
Type,
}
impl<'a> Validator<'a> {
@ -224,7 +227,7 @@ fn check_generics(&mut self, x: &'a Generics) {
fn check_type(&mut self, x: &'a Type) {
match x {
Type::ResolvedPath(path) => self.check_path(path, PathKind::StructEnumUnion),
Type::ResolvedPath(path) => self.check_path(path, PathKind::Type),
Type::DynTrait(dyn_trait) => self.check_dyn_trait(dyn_trait),
Type::Generic(_) => {}
Type::Primitive(_) => {}
@ -264,7 +267,7 @@ fn check_generic_bound(&mut self, x: &'a GenericBound) {
fn check_path(&mut self, x: &'a Path, kind: PathKind) {
match kind {
PathKind::Trait => self.add_trait_id(&x.id),
PathKind::StructEnumUnion => self.add_struct_enum_union_id(&x.id),
PathKind::Type => self.add_type_id(&x.id),
}
if let Some(args) = &x.args {
self.check_generic_args(&**args);
@ -392,8 +395,8 @@ fn add_trait_id(&mut self, id: &'a Id) {
self.add_id_checked(id, Kind::is_trait, "Trait");
}
fn add_struct_enum_union_id(&mut self, id: &'a Id) {
self.add_id_checked(id, Kind::is_struct_enum_union, "Struct or Enum or Union");
fn add_type_id(&mut self, id: &'a Id) {
self.add_id_checked(id, Kind::is_type, "Type (Struct, Enum, Union or Typedef)");
}
/// Add an Id that appeared in a trait