Auto merge of #111882 - matthiaskrgr:rollup-1xyv5mq, r=matthiaskrgr

Rollup of 7 pull requests

Successful merges:

 - #111427 ([rustdoc][JSON] Use exclusively externally tagged enums in the JSON representation)
 - #111486 (Pretty-print inherent projections correctly)
 - #111722 (Document stack-protector option)
 - #111761 (fix(resolve): not defined `extern crate shadow_name`)
 - #111845 (Update books)
 - #111851 (CFI: Fix encode_region: unexpected ReEarlyBound(0, 'a))
 - #111871 (Migrate GUI colors test to original CSS color format)

r? `@ghost`
`@rustbot` modify labels: rollup
This commit is contained in:
bors 2023-05-23 18:13:36 +00:00
commit d5699874dc
118 changed files with 882 additions and 755 deletions

View File

@ -246,6 +246,15 @@ dependencies = [
"serde",
]
[[package]]
name = "bincode"
version = "1.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
dependencies = [
"serde",
]
[[package]]
name = "bitflags"
version = "1.3.2"
@ -4351,6 +4360,7 @@ dependencies = [
name = "rustdoc-json-types"
version = "0.1.0"
dependencies = [
"bincode",
"rustc-hash",
"serde",
"serde_json",

View File

@ -58,11 +58,12 @@ impl<'tcx> Printer<'tcx> for AbsolutePathPrinter<'tcx> {
// Types with identity (print the module path).
ty::Adt(ty::AdtDef(Interned(&ty::AdtDefData { did: def_id, .. }, _)), substs)
| ty::FnDef(def_id, substs)
| ty::Alias(_, ty::AliasTy { def_id, substs, .. })
| ty::Alias(ty::Projection | ty::Opaque, ty::AliasTy { def_id, substs, .. })
| ty::Closure(def_id, substs)
| ty::Generator(def_id, substs, _) => self.print_def_path(def_id, substs),
ty::Foreign(def_id) => self.print_def_path(def_id, &[]),
ty::Alias(ty::Inherent, _) => bug!("type_name: unexpected inherent projection"),
ty::GeneratorWitness(_) => bug!("type_name: unexpected `GeneratorWitness`"),
ty::GeneratorWitnessMIR(..) => bug!("type_name: unexpected `GeneratorWitnessMIR`"),
}

View File

@ -1164,6 +1164,22 @@ pub trait PrettyPrinter<'tcx>:
traits.entry(trait_ref).or_default().extend(proj_ty);
}
fn pretty_print_inherent_projection(
self,
alias_ty: &ty::AliasTy<'tcx>,
) -> Result<Self::Path, Self::Error> {
let def_key = self.tcx().def_key(alias_ty.def_id);
self.path_generic_args(
|cx| {
cx.path_append(
|cx| cx.path_qualified(alias_ty.self_ty(), None),
&def_key.disambiguated_data,
)
},
&alias_ty.substs[1..],
)
}
fn ty_infer_name(&self, _: ty::TyVid) -> Option<Symbol> {
None
}
@ -2821,7 +2837,11 @@ define_print_and_forward_display! {
}
ty::AliasTy<'tcx> {
p!(print_def_path(self.def_id, self.substs));
if let DefKind::Impl { of_trait: false } = cx.tcx().def_kind(cx.tcx().parent(self.def_id)) {
p!(pretty_print_inherent_projection(self))
} else {
p!(print_def_path(self.def_id, self.substs));
}
}
ty::ClosureKind {

View File

@ -873,6 +873,11 @@ impl<'a, 'b, 'tcx> BuildReducedGraphVisitor<'a, 'b, 'tcx> {
let msg = "macro-expanded `extern crate` items cannot \
shadow names passed with `--extern`";
self.r.tcx.sess.span_err(item.span, msg);
// `return` is intended to discard this binding because it's an
// unregistered ambiguity error which would result in a panic
// caused by inconsistency `path_res`
// more details: https://github.com/rust-lang/rust/pull/111761
return;
}
}
let entry = self.r.extern_prelude.entry(ident.normalize_to_macros_2_0()).or_insert(

View File

@ -106,7 +106,7 @@ impl Determinacy {
/// A specific scope in which a name can be looked up.
/// This enum is currently used only for early resolution (imports and macros),
/// but not for late resolution yet.
#[derive(Clone, Copy)]
#[derive(Clone, Copy, Debug)]
enum Scope<'a> {
DeriveHelpers(LocalExpnId),
DeriveHelpersCompat,

View File

@ -220,7 +220,7 @@ impl<'tcx> Printer<'tcx> for &mut SymbolPrinter<'tcx> {
match *ty.kind() {
// Print all nominal types as paths (unlike `pretty_print_type`).
ty::FnDef(def_id, substs)
| ty::Alias(_, ty::AliasTy { def_id, substs, .. })
| ty::Alias(ty::Projection | ty::Opaque, ty::AliasTy { def_id, substs, .. })
| ty::Closure(def_id, substs)
| ty::Generator(def_id, substs, _) => self.print_def_path(def_id, substs),
@ -241,6 +241,8 @@ impl<'tcx> Printer<'tcx> for &mut SymbolPrinter<'tcx> {
Ok(self)
}
ty::Alias(ty::Inherent, _) => panic!("unexpected inherent projection"),
_ => self.pretty_print_type(ty),
}
}

View File

@ -272,12 +272,11 @@ fn encode_region<'tcx>(
s.push('E');
compress(dict, DictKey::Region(region), &mut s);
}
RegionKind::ReErased => {
RegionKind::ReEarlyBound(..) | RegionKind::ReErased => {
s.push_str("u6region");
compress(dict, DictKey::Region(region), &mut s);
}
RegionKind::ReEarlyBound(..)
| RegionKind::ReFree(..)
RegionKind::ReFree(..)
| RegionKind::ReStatic
| RegionKind::ReError(_)
| RegionKind::ReVar(..)
@ -704,14 +703,15 @@ fn transform_predicates<'tcx>(
) -> &'tcx List<ty::PolyExistentialPredicate<'tcx>> {
let predicates: Vec<ty::PolyExistentialPredicate<'tcx>> = predicates
.iter()
.map(|predicate| match predicate.skip_binder() {
.filter_map(|predicate| match predicate.skip_binder() {
ty::ExistentialPredicate::Trait(trait_ref) => {
let trait_ref = ty::TraitRef::identity(tcx, trait_ref.def_id);
ty::Binder::dummy(ty::ExistentialPredicate::Trait(
Some(ty::Binder::dummy(ty::ExistentialPredicate::Trait(
ty::ExistentialTraitRef::erase_self_ty(tcx, trait_ref),
))
)))
}
_ => predicate,
ty::ExistentialPredicate::Projection(..) => None,
ty::ExistentialPredicate::AutoTrait(..) => Some(predicate),
})
.collect();
tcx.mk_poly_existential_predicates(&predicates)

View File

@ -433,7 +433,7 @@ impl<'tcx> Printer<'tcx> for &mut SymbolMangler<'tcx> {
// Mangle all nominal types as paths.
ty::Adt(ty::AdtDef(Interned(&ty::AdtDefData { did: def_id, .. }, _)), substs)
| ty::FnDef(def_id, substs)
| ty::Alias(_, ty::AliasTy { def_id, substs, .. })
| ty::Alias(ty::Projection | ty::Opaque, ty::AliasTy { def_id, substs, .. })
| ty::Closure(def_id, substs)
| ty::Generator(def_id, substs, _) => {
self = self.print_def_path(def_id, substs)?;
@ -482,6 +482,7 @@ impl<'tcx> Printer<'tcx> for &mut SymbolMangler<'tcx> {
self = r.print(self)?;
}
ty::Alias(ty::Inherent, _) => bug!("symbol_names: unexpected inherent projection"),
ty::GeneratorWitness(_) => bug!("symbol_names: unexpected `GeneratorWitness`"),
ty::GeneratorWitnessMIR(..) => bug!("symbol_names: unexpected `GeneratorWitnessMIR`"),
}

@ -1 +1 @@
Subproject commit d9eb4c3f75435b008881062ffa77bf0d1527b37d
Subproject commit f2aed2fe8e9f55508c86ba3aa4b6789b18a08a22

@ -1 +1 @@
Subproject commit b5f7500fc40775096c2bbd204eae096612cf9047
Subproject commit b5f018fb5930cb733b0a8aaf2eed975d4771e74d

@ -1 +1 @@
Subproject commit 28dc0f3576b55f5e57c5d6e65cd68ba3161e9fd5
Subproject commit 553d99b02a53b4133a40d5bd2e19958c67487c00

@ -1 +1 @@
Subproject commit 28dbeaf5c44bc7f5111ad412e99f2d7c5cec6c90
Subproject commit f1e637883fafeb83bdd5906ee7f467e4d35b7337

View File

@ -115,9 +115,9 @@ equivalent.
<tr>
<td>Stack smashing protection
</td>
<td>No
<td>Yes
</td>
<td>
<td>Nightly
</td>
</tr>
<tr>
@ -432,18 +432,16 @@ saved return instruction pointer, and checking if this value has changed
when returning from a function. This is also known as “Stack Protector” or
“Stack Smashing Protector (SSP)”.
The Rust compiler does not support stack smashing protection. However, more
comprehensive alternatives to stack smashing protection exist, such as
shadow and safe stack (see backward-edge control flow protection).
The Rust compiler supports stack smashing protection on nightly builds[42].
![Screenshot of IDA Pro listing cross references to __stack_chk_fail in hello-rust.](images/image3.png "Cross references to __stack_chk_fail in hello-rust.")
Fig. 14. IDA Pro listing cross references to `__stack_chk_fail` in
hello-rust.
To check if stack smashing protection is enabled for a given binary, search
for cross references to `__stack_chk_fail`. The only cross references to
`__stack_chk_fail` in hello-rust are from the statically-linked libbacktrace
library (see Fig. 14).
for cross references to `__stack_chk_fail`. The presence of these
cross-references in Rust-compiled code (e.g., `hello_rust::main`) indicates
that the stack smashing protection is enabled (see Fig. 14).
### Forward-edge control flow protection
@ -697,3 +695,6 @@ defaults (unrelated to `READ_IMPLIES_EXEC`).
41. “ControlFlowIntegrity.” The Rust Unstable Book.
[https://doc.rust-lang.org/unstable-book/compiler-flags/sanitizer.html#controlflowintegrity](../unstable-book/compiler-flags/sanitizer.html#controlflowintegrity).
42. bbjornse. “add codegen option for using LLVM stack smash protection #84197.”
GitHub. <https://github.com/rust-lang/rust/pull/84197>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View File

@ -12,3 +12,4 @@ rustc-hash = "1.1.0"
[dev-dependencies]
serde_json = "1.0"
bincode = "1"

View File

@ -8,7 +8,7 @@ use serde::{Deserialize, Serialize};
use std::path::PathBuf;
/// rustdoc format-version.
pub const FORMAT_VERSION: u32 = 25;
pub const FORMAT_VERSION: u32 = 26;
/// 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
@ -83,7 +83,6 @@ pub struct Item {
/// Stringified versions of the attributes on this item (e.g. `"#[inline]"`)
pub attrs: Vec<String>,
pub deprecation: Option<Deprecation>,
#[serde(flatten)]
pub inner: ItemEnum,
}
@ -222,7 +221,7 @@ pub enum ItemKind {
}
#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(tag = "kind", content = "inner", rename_all = "snake_case")]
#[serde(rename_all = "snake_case")]
pub enum ItemEnum {
Module(Module),
ExternCrate {
@ -543,7 +542,6 @@ pub enum Term {
#[derive(Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
#[serde(tag = "kind", content = "inner")]
pub enum Type {
/// Structs, enums, and unions
ResolvedPath(Path),

View File

@ -8,11 +8,15 @@ fn test_struct_info_roundtrip() {
impls: vec![],
});
// JSON
let struct_json = serde_json::to_string(&s).unwrap();
let de_s = serde_json::from_str(&struct_json).unwrap();
assert_eq!(s, de_s);
// Bincode
let encoded: Vec<u8> = bincode::serialize(&s).unwrap();
let decoded: ItemEnum = bincode::deserialize(&encoded).unwrap();
assert_eq!(s, decoded);
}
#[test]
@ -24,9 +28,13 @@ fn test_union_info_roundtrip() {
impls: vec![],
});
// JSON
let union_json = serde_json::to_string(&u).unwrap();
let de_u = serde_json::from_str(&union_json).unwrap();
assert_eq!(u, de_u);
// Bincode
let encoded: Vec<u8> = bincode::serialize(&u).unwrap();
let decoded: ItemEnum = bincode::deserialize(&encoded).unwrap();
assert_eq!(u, decoded);
}

View File

@ -536,15 +536,15 @@ pub fn foo149(_: Type14<Bar>, _: Type14<Bar>, _: Type14<Bar>) { }
// CHECK: ![[TYPE93]] = !{i64 0, !"_ZTSFvPFu3i32S_EE"}
// CHECK: ![[TYPE94]] = !{i64 0, !"_ZTSFvPFu3i32S_ES0_E"}
// CHECK: ![[TYPE95]] = !{i64 0, !"_ZTSFvPFu3i32S_ES0_S0_E"}
// CHECK: ![[TYPE96]] = !{i64 0, !"_ZTSFvu3refIu3dynIu{{[0-9]+}}NtNtNtC{{[[:print:]]+}}_4core3ops8function2FnIu5paramEu{{[0-9]+}}NtNtNtNtC{{[[:print:]]+}}_4core3ops8function6FnOnce6OutputIu5tupleIu3i32EES1_u6regionEEE"}
// CHECK: ![[TYPE97]] = !{i64 0, !"_ZTSFvu3refIu3dynIu{{[0-9]+}}NtNtNtC{{[[:print:]]+}}_4core3ops8function2FnIu5paramEu{{[0-9]+}}NtNtNtNtC{{[[:print:]]+}}_4core3ops8function6FnOnce6OutputIu5tupleIu3i32EES1_u6regionEES6_E"}
// CHECK: ![[TYPE98]] = !{i64 0, !"_ZTSFvu3refIu3dynIu{{[0-9]+}}NtNtNtC{{[[:print:]]+}}_4core3ops8function2FnIu5paramEu{{[0-9]+}}NtNtNtNtC{{[[:print:]]+}}_4core3ops8function6FnOnce6OutputIu5tupleIu3i32EES1_u6regionEES6_S6_E"}
// CHECK: ![[TYPE99]] = !{i64 0, !"_ZTSFvu3refIu3dynIu{{[0-9]+}}NtNtNtC{{[[:print:]]+}}_4core3ops8function5FnMutIu5paramEu{{[0-9]+}}NtNtNtNtC{{[[:print:]]+}}_4core3ops8function6FnOnce6OutputIu5tupleIu3i32EES1_u6regionEEE"}
// CHECK: ![[TYPE100]] = !{i64 0, !"_ZTSFvu3refIu3dynIu{{[0-9]+}}NtNtNtC{{[[:print:]]+}}_4core3ops8function5FnMutIu5paramEu{{[0-9]+}}NtNtNtNtC{{[[:print:]]+}}_4core3ops8function6FnOnce6OutputIu5tupleIu3i32EES1_u6regionEES6_E"}
// CHECK: ![[TYPE101]] = !{i64 0, !"_ZTSFvu3refIu3dynIu{{[0-9]+}}NtNtNtC{{[[:print:]]+}}_4core3ops8function5FnMutIu5paramEu{{[0-9]+}}NtNtNtNtC{{[[:print:]]+}}_4core3ops8function6FnOnce6OutputIu5tupleIu3i32EES1_u6regionEES6_S6_E"}
// CHECK: ![[TYPE102]] = !{i64 0, !"_ZTSFvu3refIu3dynIu{{[0-9]+}}NtNtNtC{{[[:print:]]+}}_4core3ops8function6FnOnceIu5paramEu{{[0-9]+}}NtNtNtNtC{{[[:print:]]+}}_4core3ops8function6FnOnce6OutputIu5tupleIu3i32EES1_u6regionEEE"}
// CHECK: ![[TYPE103]] = !{i64 0, !"_ZTSFvu3refIu3dynIu{{[0-9]+}}NtNtNtC{{[[:print:]]+}}_4core3ops8function6FnOnceIu5paramEu{{[0-9]+}}NtNtNtNtC{{[[:print:]]+}}_4core3ops8function6FnOnce6OutputIu5tupleIu3i32EES1_u6regionEES6_E"}
// CHECK: ![[TYPE104]] = !{i64 0, !"_ZTSFvu3refIu3dynIu{{[0-9]+}}NtNtNtC{{[[:print:]]+}}_4core3ops8function6FnOnceIu5paramEu{{[0-9]+}}NtNtNtNtC{{[[:print:]]+}}_4core3ops8function6FnOnce6OutputIu5tupleIu3i32EES1_u6regionEES6_S6_E"}
// CHECK: ![[TYPE96]] = !{i64 0, !"_ZTSFvu3refIu3dynIu{{[0-9]+}}NtNtNtC{{[[:print:]]+}}_4core3ops8function2FnIu5paramEu6regionEEE"}
// CHECK: ![[TYPE97]] = !{i64 0, !"_ZTSFvu3refIu3dynIu{{[0-9]+}}NtNtNtC{{[[:print:]]+}}_4core3ops8function2FnIu5paramEu6regionEES3_E"}
// CHECK: ![[TYPE98]] = !{i64 0, !"_ZTSFvu3refIu3dynIu{{[0-9]+}}NtNtNtC{{[[:print:]]+}}_4core3ops8function2FnIu5paramEu6regionEES3_S3_E"}
// CHECK: ![[TYPE99]] = !{i64 0, !"_ZTSFvu3refIu3dynIu{{[0-9]+}}NtNtNtC{{[[:print:]]+}}_4core3ops8function5FnMutIu5paramEu6regionEEE"}
// CHECK: ![[TYPE100]] = !{i64 0, !"_ZTSFvu3refIu3dynIu{{[0-9]+}}NtNtNtC{{[[:print:]]+}}_4core3ops8function5FnMutIu5paramEu6regionEES3_E"}
// CHECK: ![[TYPE101]] = !{i64 0, !"_ZTSFvu3refIu3dynIu{{[0-9]+}}NtNtNtC{{[[:print:]]+}}_4core3ops8function5FnMutIu5paramEu6regionEES3_S3_E"}
// CHECK: ![[TYPE102]] = !{i64 0, !"_ZTSFvu3refIu3dynIu{{[0-9]+}}NtNtNtC{{[[:print:]]+}}_4core3ops8function6FnOnceIu5paramEu6regionEEE"}
// CHECK: ![[TYPE103]] = !{i64 0, !"_ZTSFvu3refIu3dynIu{{[0-9]+}}NtNtNtC{{[[:print:]]+}}_4core3ops8function6FnOnceIu5paramEu6regionEES3_E"}
// CHECK: ![[TYPE104]] = !{i64 0, !"_ZTSFvu3refIu3dynIu{{[0-9]+}}NtNtNtC{{[[:print:]]+}}_4core3ops8function6FnOnceIu5paramEu6regionEES3_S3_E"}
// CHECK: ![[TYPE105]] = !{i64 0, !"_ZTSFvu3refIu3dynIu{{[0-9]+}}NtNtC{{[[:print:]]+}}_4core6marker4Sendu6regionEEE"}
// CHECK: ![[TYPE106]] = !{i64 0, !"_ZTSFvu3refIu3dynIu{{[0-9]+}}NtNtC{{[[:print:]]+}}_4core6marker4Sendu6regionEES2_E"}
// CHECK: ![[TYPE107]] = !{i64 0, !"_ZTSFvu3refIu3dynIu{{[0-9]+}}NtNtC{{[[:print:]]+}}_4core6marker4Sendu6regionEES2_S2_E"}

View File

@ -39,6 +39,20 @@ impl<T, U> Trait3<U> for T {
}
}
pub trait Trait4<'a, T> {
type Output: 'a;
fn qux(&self, _: &T) -> Self::Output;
}
pub struct Type4;
impl<'a, T, U> Trait4<'a, U> for T {
type Output = &'a i32;
fn qux(&self, _: &U) -> Self::Output {
&0
}
}
pub fn foo1(a: &dyn Trait1) {
a.foo();
// CHECK-LABEL: define{{.*}}4foo1{{.*}}!type !{{[0-9]+}}
@ -84,6 +98,23 @@ pub fn bar3() {
// CHECK: call i1 @llvm.type.test({{i8\*|ptr}} {{%f|%[0-9]}}, metadata !"[[TYPE3:[[:print:]]+]]")
}
pub fn foo4<'a>(a: &dyn Trait4<'a, Type4, Output = &'a i32>) {
let b = Type4;
a.qux(&b);
// CHECK-LABEL: define{{.*}}4foo4{{.*}}!type !{{[0-9]+}}
// CHECK: call i1 @llvm.type.test({{i8\*|ptr}} {{%f|%[0-9]}}, metadata !"[[TYPE4:[[:print:]]+]]")
}
pub fn bar4<'a>() {
let a = Type4;
foo4(&a);
let b = &a as &dyn Trait4<'a, Type4, Output = &'a i32>;
b.qux(&a);
// CHECK-LABEL: define{{.*}}4bar4{{.*}}!type !{{[0-9]+}}
// CHECK: call i1 @llvm.type.test({{i8\*|ptr}} {{%f|%[0-9]}}, metadata !"[[TYPE4:[[:print:]]+]]")
}
// CHECK: !{{[0-9]+}} = !{i64 0, !"[[TYPE1]]"}
// CHECK: !{{[0-9]+}} = !{i64 0, !"[[TYPE2]]"}
// CHECK: !{{[0-9]+}} = !{i64 0, !"[[TYPE3]]"}
// CHECK: !{{[0-9]+}} = !{i64 0, !"[[TYPE4]]"}

View File

@ -63,6 +63,20 @@ impl<T, U> Trait3<U> for T {
}
}
pub trait Trait4<'a, T> {
type Output: 'a;
fn qux(&self, _: &T) -> Self::Output;
}
pub struct Type4;
impl<'a, T, U> Trait4<'a, U> for T {
type Output = &'a i32;
fn qux(&self, _: &U) -> Self::Output {
&0
}
}
pub fn foo1(a: &dyn Trait1) {
a.foo();
// CHECK-LABEL: define{{.*}}4foo1{{.*}}!{{<unknown kind #36>|kcfi_type}} !{{[0-9]+}}
@ -108,6 +122,23 @@ pub fn bar3() {
// CHECK: call void %{{[0-9]}}({{\{\}\*|ptr}} align 1 {{%[a-z]\.0|%_[0-9]}}, {{\{\}\*|ptr|%Type3\*}} align 1 {{%[a-z]\.0|%_[0-9]}}){{.*}}[ "kcfi"(i32 [[TYPE3:[[:print:]]+]]) ]
}
pub fn foo4<'a>(a: &dyn Trait4<'a, Type4, Output = &'a i32>) {
let b = Type4;
a.qux(&b);
// CHECK-LABEL: define{{.*}}4foo4{{.*}}!{{<unknown kind #36>|kcfi_type}} !{{[0-9]+}}
// CHECK: call align 4 {{ptr|i32\*}} %{{[0-9]}}({{\{\}\*|ptr}} align 1 {{%[a-z]\.0|%_[0-9]}}, {{\{\}\*|ptr|%Type4\*}} align 1 {{%[a-z]\.0|%_[0-9]}}){{.*}}[ "kcfi"(i32 [[TYPE4:[[:print:]]+]]) ]
}
pub fn bar4<'a>() {
let a = Type4;
foo4(&a);
let b = &a as &dyn Trait4<'a, Type4, Output = &'a i32>;
b.qux(&a);
// CHECK-LABEL: define{{.*}}4bar4{{.*}}!{{<unknown kind #36>|kcfi_type}} !{{[0-9]+}}
// CHECK: call align 4 {{ptr|i32\*}} %{{[0-9]}}({{\{\}\*|ptr}} align 1 {{%[a-z]\.0|%_[0-9]}}, {{\{\}\*|ptr|%Type4\*}} align 1 {{%[a-z]\.0|%_[0-9]}}){{.*}}[ "kcfi"(i32 [[TYPE4:[[:print:]]+]]) ]
}
// CHECK: !{{[0-9]+}} = !{i32 [[TYPE1]]}
// CHECK: !{{[0-9]+}} = !{i32 [[TYPE2]]}
// CHECK: !{{[0-9]+}} = !{i32 [[TYPE3]]}
// CHECK: !{{[0-9]+}} = !{i32 [[TYPE4]]}

View File

@ -17,6 +17,6 @@ define-function: (
},
)
call-function: ("check-background-color", ("ayu", "rgb(51, 51, 51)"))
call-function: ("check-background-color", ("dark", "rgb(51, 51, 51)"))
call-function: ("check-background-color", ("light", "rgb(238, 238, 238)"))
call-function: ("check-background-color", ("ayu", "#333"))
call-function: ("check-background-color", ("dark", "#333"))
call-function: ("check-background-color", ("light", "#eee"))

View File

@ -3,35 +3,32 @@
pub struct Simple;
impl Simple {
// @is "$.index[*][?(@.name=='CONSTANT')].kind" \"assoc_const\"
// @has "$.index[*][?(@.name=='CONSTANT')].inner.assoc_const"
pub const CONSTANT: usize = 0;
}
pub trait EasyToImpl {
// @is "$.index[*][?(@.docs=='ToDeclare trait')].kind" \"assoc_type\"
// @is "$.index[*][?(@.docs=='ToDeclare trait')].inner.default" null
// @is "$.index[*][?(@.docs=='ToDeclare trait')].inner.bounds" []
// @has "$.index[*][?(@.docs=='ToDeclare trait')].inner.assoc_type"
// @is "$.index[*][?(@.docs=='ToDeclare trait')].inner.assoc_type.default" null
// @is "$.index[*][?(@.docs=='ToDeclare trait')].inner.assoc_type.bounds" []
/// ToDeclare trait
type ToDeclare;
// @is "$.index[*][?(@.docs=='AN_ATTRIBUTE trait')].kind" \"assoc_const\"
// @is "$.index[*][?(@.docs=='AN_ATTRIBUTE trait')].inner.default" null
// @is "$.index[*][?(@.docs=='AN_ATTRIBUTE trait')].inner.type.kind" '"primitive"'
// @is "$.index[*][?(@.docs=='AN_ATTRIBUTE trait')].inner.type.inner" '"usize"'
// @has "$.index[*][?(@.docs=='AN_ATTRIBUTE trait')].inner.assoc_const"
// @is "$.index[*][?(@.docs=='AN_ATTRIBUTE trait')].inner.assoc_const.default" null
// @is "$.index[*][?(@.docs=='AN_ATTRIBUTE trait')].inner.assoc_const.type.primitive" '"usize"'
/// AN_ATTRIBUTE trait
const AN_ATTRIBUTE: usize;
}
impl EasyToImpl for Simple {
// @is "$.index[*][?(@.docs=='ToDeclare impl')].kind" '"assoc_type"'
// @is "$.index[*][?(@.docs=='ToDeclare impl')].inner.default.kind" \"primitive\"
// @is "$.index[*][?(@.docs=='ToDeclare impl')].inner.default.inner" \"usize\"
// @has "$.index[*][?(@.docs=='ToDeclare impl')].inner.assoc_type"
// @is "$.index[*][?(@.docs=='ToDeclare impl')].inner.assoc_type.default.primitive" \"usize\"
/// ToDeclare impl
type ToDeclare = usize;
// @is "$.index[*][?(@.docs=='AN_ATTRIBUTE impl')].kind" '"assoc_const"'
// @is "$.index[*][?(@.docs=='AN_ATTRIBUTE impl')].inner.type.kind" \"primitive\"
// @is "$.index[*][?(@.docs=='AN_ATTRIBUTE impl')].inner.type.inner" \"usize\"
// @is "$.index[*][?(@.docs=='AN_ATTRIBUTE impl')].inner.default" \"12\"
// @has "$.index[*][?(@.docs=='AN_ATTRIBUTE impl')].inner.assoc_const"
// @is "$.index[*][?(@.docs=='AN_ATTRIBUTE impl')].inner.assoc_const.type.primitive" \"usize\"
// @is "$.index[*][?(@.docs=='AN_ATTRIBUTE impl')].inner.assoc_const.default" \"12\"
/// AN_ATTRIBUTE impl
const AN_ATTRIBUTE: usize = 12;
}

View File

@ -2,7 +2,7 @@
#![no_std]
// @has "$.index[*][?(@.name=='Error')].kind" \"assoc_type\"
// @has "$.index[*][?(@.name=='Error')].inner.default.kind" \"resolved_path\"
// @has "$.index[*][?(@.name=='Error')].inner.default.inner.name" \"Infallible\"
// @has "$.index[*][?(@.name=='Error')].inner.assoc_type"
// @has "$.index[*][?(@.name=='Error')].inner.assoc_type.default.resolved_path"
// @has "$.index[*][?(@.name=='Error')].inner.assoc_type.default.resolved_path.name" \"Infallible\"
pub struct ForBlanketTryFromImpl;

View File

@ -1,12 +1,12 @@
#[repr(i8)]
pub enum Ordering {
// @is "$.index[*][?(@.name=='Less')].inner.discriminant.expr" '"-1"'
// @is "$.index[*][?(@.name=='Less')].inner.discriminant.value" '"-1"'
// @is "$.index[*][?(@.name=='Less')].inner.variant.discriminant.expr" '"-1"'
// @is "$.index[*][?(@.name=='Less')].inner.variant.discriminant.value" '"-1"'
Less = -1,
// @is "$.index[*][?(@.name=='Equal')].inner.discriminant.expr" '"0"'
// @is "$.index[*][?(@.name=='Equal')].inner.discriminant.value" '"0"'
// @is "$.index[*][?(@.name=='Equal')].inner.variant.discriminant.expr" '"0"'
// @is "$.index[*][?(@.name=='Equal')].inner.variant.discriminant.value" '"0"'
Equal = 0,
// @is "$.index[*][?(@.name=='Greater')].inner.discriminant.expr" '"1"'
// @is "$.index[*][?(@.name=='Greater')].inner.discriminant.value" '"1"'
// @is "$.index[*][?(@.name=='Greater')].inner.variant.discriminant.expr" '"1"'
// @is "$.index[*][?(@.name=='Greater')].inner.variant.discriminant.value" '"1"'
Greater = 1,
}

View File

@ -1,30 +1,30 @@
pub enum Foo {
// @is "$.index[*][?(@.name=='Addition')].inner.discriminant.value" '"0"'
// @is "$.index[*][?(@.name=='Addition')].inner.discriminant.expr" '"{ _ }"'
// @is "$.index[*][?(@.name=='Addition')].inner.variant.discriminant.value" '"0"'
// @is "$.index[*][?(@.name=='Addition')].inner.variant.discriminant.expr" '"{ _ }"'
Addition = 0 + 0,
// @is "$.index[*][?(@.name=='Bin')].inner.discriminant.value" '"1"'
// @is "$.index[*][?(@.name=='Bin')].inner.discriminant.expr" '"0b1"'
// @is "$.index[*][?(@.name=='Bin')].inner.variant.discriminant.value" '"1"'
// @is "$.index[*][?(@.name=='Bin')].inner.variant.discriminant.expr" '"0b1"'
Bin = 0b1,
// @is "$.index[*][?(@.name=='Oct')].inner.discriminant.value" '"2"'
// @is "$.index[*][?(@.name=='Oct')].inner.discriminant.expr" '"0o2"'
// @is "$.index[*][?(@.name=='Oct')].inner.variant.discriminant.value" '"2"'
// @is "$.index[*][?(@.name=='Oct')].inner.variant.discriminant.expr" '"0o2"'
Oct = 0o2,
// @is "$.index[*][?(@.name=='PubConst')].inner.discriminant.value" '"3"'
// @is "$.index[*][?(@.name=='PubConst')].inner.discriminant.expr" '"THREE"'
// @is "$.index[*][?(@.name=='PubConst')].inner.variant.discriminant.value" '"3"'
// @is "$.index[*][?(@.name=='PubConst')].inner.variant.discriminant.expr" '"THREE"'
PubConst = THREE,
// @is "$.index[*][?(@.name=='Hex')].inner.discriminant.value" '"4"'
// @is "$.index[*][?(@.name=='Hex')].inner.discriminant.expr" '"0x4"'
// @is "$.index[*][?(@.name=='Hex')].inner.variant.discriminant.value" '"4"'
// @is "$.index[*][?(@.name=='Hex')].inner.variant.discriminant.expr" '"0x4"'
Hex = 0x4,
// @is "$.index[*][?(@.name=='Cast')].inner.discriminant.value" '"5"'
// @is "$.index[*][?(@.name=='Cast')].inner.discriminant.expr" '"{ _ }"'
// @is "$.index[*][?(@.name=='Cast')].inner.variant.discriminant.value" '"5"'
// @is "$.index[*][?(@.name=='Cast')].inner.variant.discriminant.expr" '"{ _ }"'
Cast = 5 as isize,
// @is "$.index[*][?(@.name=='PubCall')].inner.discriminant.value" '"6"'
// @is "$.index[*][?(@.name=='PubCall')].inner.discriminant.expr" '"{ _ }"'
// @is "$.index[*][?(@.name=='PubCall')].inner.variant.discriminant.value" '"6"'
// @is "$.index[*][?(@.name=='PubCall')].inner.variant.discriminant.expr" '"{ _ }"'
PubCall = six(),
// @is "$.index[*][?(@.name=='PrivCall')].inner.discriminant.value" '"7"'
// @is "$.index[*][?(@.name=='PrivCall')].inner.discriminant.expr" '"{ _ }"'
// @is "$.index[*][?(@.name=='PrivCall')].inner.variant.discriminant.value" '"7"'
// @is "$.index[*][?(@.name=='PrivCall')].inner.variant.discriminant.expr" '"{ _ }"'
PrivCall = seven(),
// @is "$.index[*][?(@.name=='PrivConst')].inner.discriminant.value" '"8"'
// @is "$.index[*][?(@.name=='PrivConst')].inner.discriminant.expr" '"EIGHT"'
// @is "$.index[*][?(@.name=='PrivConst')].inner.variant.discriminant.value" '"8"'
// @is "$.index[*][?(@.name=='PrivConst')].inner.variant.discriminant.expr" '"EIGHT"'
PrivConst = EIGHT,
}

View File

@ -4,40 +4,40 @@
#[repr(u64)]
pub enum U64 {
// @is "$.index[*][?(@.name=='U64Min')].inner.discriminant.value" '"0"'
// @is "$.index[*][?(@.name=='U64Min')].inner.discriminant.expr" '"u64::MIN"'
// @is "$.index[*][?(@.name=='U64Min')].inner.variant.discriminant.value" '"0"'
// @is "$.index[*][?(@.name=='U64Min')].inner.variant.discriminant.expr" '"u64::MIN"'
U64Min = u64::MIN,
// @is "$.index[*][?(@.name=='U64Max')].inner.discriminant.value" '"18446744073709551615"'
// @is "$.index[*][?(@.name=='U64Max')].inner.discriminant.expr" '"u64::MAX"'
// @is "$.index[*][?(@.name=='U64Max')].inner.variant.discriminant.value" '"18446744073709551615"'
// @is "$.index[*][?(@.name=='U64Max')].inner.variant.discriminant.expr" '"u64::MAX"'
U64Max = u64::MAX,
}
#[repr(i64)]
pub enum I64 {
// @is "$.index[*][?(@.name=='I64Min')].inner.discriminant.value" '"-9223372036854775808"'
// @is "$.index[*][?(@.name=='I64Min')].inner.discriminant.expr" '"i64::MIN"'
// @is "$.index[*][?(@.name=='I64Min')].inner.variant.discriminant.value" '"-9223372036854775808"'
// @is "$.index[*][?(@.name=='I64Min')].inner.variant.discriminant.expr" '"i64::MIN"'
I64Min = i64::MIN,
// @is "$.index[*][?(@.name=='I64Max')].inner.discriminant.value" '"9223372036854775807"'
// @is "$.index[*][?(@.name=='I64Max')].inner.discriminant.expr" '"i64::MAX"'
// @is "$.index[*][?(@.name=='I64Max')].inner.variant.discriminant.value" '"9223372036854775807"'
// @is "$.index[*][?(@.name=='I64Max')].inner.variant.discriminant.expr" '"i64::MAX"'
I64Max = i64::MAX,
}
#[repr(u128)]
pub enum U128 {
// @is "$.index[*][?(@.name=='U128Min')].inner.discriminant.value" '"0"'
// @is "$.index[*][?(@.name=='U128Min')].inner.discriminant.expr" '"u128::MIN"'
// @is "$.index[*][?(@.name=='U128Min')].inner.variant.discriminant.value" '"0"'
// @is "$.index[*][?(@.name=='U128Min')].inner.variant.discriminant.expr" '"u128::MIN"'
U128Min = u128::MIN,
// @is "$.index[*][?(@.name=='U128Max')].inner.discriminant.value" '"340282366920938463463374607431768211455"'
// @is "$.index[*][?(@.name=='U128Max')].inner.discriminant.expr" '"u128::MAX"'
// @is "$.index[*][?(@.name=='U128Max')].inner.variant.discriminant.value" '"340282366920938463463374607431768211455"'
// @is "$.index[*][?(@.name=='U128Max')].inner.variant.discriminant.expr" '"u128::MAX"'
U128Max = u128::MAX,
}
#[repr(i128)]
pub enum I128 {
// @is "$.index[*][?(@.name=='I128Min')].inner.discriminant.value" '"-170141183460469231731687303715884105728"'
// @is "$.index[*][?(@.name=='I128Min')].inner.discriminant.expr" '"i128::MIN"'
// @is "$.index[*][?(@.name=='I128Min')].inner.variant.discriminant.value" '"-170141183460469231731687303715884105728"'
// @is "$.index[*][?(@.name=='I128Min')].inner.variant.discriminant.expr" '"i128::MIN"'
I128Min = i128::MIN,
// @is "$.index[*][?(@.name=='I128Max')].inner.discriminant.value" '"170141183460469231731687303715884105727"'
// @is "$.index[*][?(@.name=='I128Max')].inner.discriminant.expr" '"i128::MAX"'
// @is "$.index[*][?(@.name=='I128Max')].inner.variant.discriminant.value" '"170141183460469231731687303715884105727"'
// @is "$.index[*][?(@.name=='I128Max')].inner.variant.discriminant.expr" '"i128::MAX"'
I128Max = i128::MAX,
}

View File

@ -1,15 +1,17 @@
// ignore-tidy-linelength
#[repr(u32)]
pub enum Foo {
// @is "$.index[*][?(@.name=='Basic')].inner.discriminant.value" '"0"'
// @is "$.index[*][?(@.name=='Basic')].inner.discriminant.expr" '"0"'
// @is "$.index[*][?(@.name=='Basic')].inner.variant.discriminant.value" '"0"'
// @is "$.index[*][?(@.name=='Basic')].inner.variant.discriminant.expr" '"0"'
Basic = 0,
// @is "$.index[*][?(@.name=='Suffix')].inner.discriminant.value" '"10"'
// @is "$.index[*][?(@.name=='Suffix')].inner.discriminant.expr" '"10u32"'
// @is "$.index[*][?(@.name=='Suffix')].inner.variant.discriminant.value" '"10"'
// @is "$.index[*][?(@.name=='Suffix')].inner.variant.discriminant.expr" '"10u32"'
Suffix = 10u32,
// @is "$.index[*][?(@.name=='Underscore')].inner.discriminant.value" '"100"'
// @is "$.index[*][?(@.name=='Underscore')].inner.discriminant.expr" '"1_0_0"'
// @is "$.index[*][?(@.name=='Underscore')].inner.variant.discriminant.value" '"100"'
// @is "$.index[*][?(@.name=='Underscore')].inner.variant.discriminant.expr" '"1_0_0"'
Underscore = 1_0_0,
// @is "$.index[*][?(@.name=='SuffixUnderscore')].inner.discriminant.value" '"1000"'
// @is "$.index[*][?(@.name=='SuffixUnderscore')].inner.discriminant.expr" '"1_0_0_0u32"'
// @is "$.index[*][?(@.name=='SuffixUnderscore')].inner.variant.discriminant.value" '"1000"'
// @is "$.index[*][?(@.name=='SuffixUnderscore')].inner.variant.discriminant.expr" '"1_0_0_0u32"'
SuffixUnderscore = 1_0_0_0u32,
}

View File

@ -1,10 +1,12 @@
// ignore-tidy-linelength
pub enum Foo {
// @is "$.index[*][?(@.name=='Has')].inner.discriminant" '{"expr":"0", "value":"0"}'
// @is "$.index[*][?(@.name=='Has')].inner.variant.discriminant" '{"expr":"0", "value":"0"}'
Has = 0,
// @is "$.index[*][?(@.name=='Doesnt')].inner.discriminant" null
// @is "$.index[*][?(@.name=='Doesnt')].inner.variant.discriminant" null
Doesnt,
// @is "$.index[*][?(@.name=='AlsoDoesnt')].inner.discriminant" null
// @is "$.index[*][?(@.name=='AlsoDoesnt')].inner.variant.discriminant" null
AlsoDoesnt,
// @is "$.index[*][?(@.name=='AlsoHas')].inner.discriminant" '{"expr":"44", "value":"44"}'
// @is "$.index[*][?(@.name=='AlsoHas')].inner.variant.discriminant" '{"expr":"44", "value":"44"}'
AlsoHas = 44,
}

View File

@ -3,13 +3,13 @@
#[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
// @is "$.index[*][?(@.name=='Struct')].inner.variant.discriminant" null
// @count "$.index[*][?(@.name=='Struct')].inner.variant.kind.struct.fields[*]" 0
Struct {},
// @is "$.index[*][?(@.name=='StructWithDiscr')].inner.discriminant" '{"expr": "42", "value": "42"}'
// @count "$.index[*][?(@.name=='StructWithDiscr')].inner.kind.struct.fields[*]" 1
// @is "$.index[*][?(@.name=='StructWithDiscr')].inner.variant.discriminant" '{"expr": "42", "value": "42"}'
// @count "$.index[*][?(@.name=='StructWithDiscr')].inner.variant.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
// @is "$.index[*][?(@.name=='StructWithHexDiscr')].inner.variant.discriminant" '{"expr": "0x42", "value": "66"}'
// @count "$.index[*][?(@.name=='StructWithHexDiscr')].inner.variant.kind.struct.fields[*]" 2
StructWithHexDiscr { x: i32, y: bool } = 0x42,
}

View File

@ -3,13 +3,13 @@
#[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
// @is "$.index[*][?(@.name=='Tuple')].inner.variant.discriminant" null
// @count "$.index[*][?(@.name=='Tuple')].inner.variant.kind.tuple[*]" 0
Tuple(),
// @is "$.index[*][?(@.name=='TupleWithDiscr')].inner.discriminant" '{"expr": "1", "value": "1"}'
// @count "$.index[*][?(@.name=='TupleWithDiscr')].inner.kind.tuple[*]" 1
// @is "$.index[*][?(@.name=='TupleWithDiscr')].inner.variant.discriminant" '{"expr": "1", "value": "1"}'
// @count "$.index[*][?(@.name=='TupleWithDiscr')].inner.variant.kind.tuple[*]" 1
TupleWithDiscr(i32) = 1,
// @is "$.index[*][?(@.name=='TupleWithBinDiscr')].inner.discriminant" '{"expr": "0b10", "value": "2"}'
// @count "$.index[*][?(@.name=='TupleWithBinDiscr')].inner.kind.tuple[*]" 2
// @is "$.index[*][?(@.name=='TupleWithBinDiscr')].inner.variant.discriminant" '{"expr": "0b10", "value": "2"}'
// @count "$.index[*][?(@.name=='TupleWithBinDiscr')].inner.variant.kind.tuple[*]" 2
TupleWithBinDiscr(i32, i32) = 0b10,
}

View File

@ -5,7 +5,7 @@
extern crate color;
use color::Color::Red;
// @set red = "$.index[*][?(@.inner.is_crate == true)].links.Red"
// @set red = "$.index[*][?(@.inner.module.is_crate)].links.Red"
// @!has "$.index[*][?(@.name == 'Red')]"
// @!has "$.index[*][?(@.name == 'Color')]"

View File

@ -5,8 +5,8 @@
// @has "$.index[*][?(@.name=='ParseError')]"
// @has "$.index[*][?(@.name=='UnexpectedEndTag')]"
// @is "$.index[*][?(@.name=='UnexpectedEndTag')].inner.kind.tuple" [null]
// @is "$.index[*][?(@.name=='UnexpectedEndTag')].inner.discriminant" null
// @is "$.index[*][?(@.name=='UnexpectedEndTag')].inner.variant.kind.tuple" [null]
// @is "$.index[*][?(@.name=='UnexpectedEndTag')].inner.variant.discriminant" null
pub enum ParseError {
UnexpectedEndTag(#[doc(hidden)] u32),

View File

@ -5,28 +5,28 @@
pub enum Foo {
// @set Unit = "$.index[*][?(@.name=='Unit')].id"
// @is "$.index[*][?(@.name=='Unit')].inner.kind" '"plain"'
// @is "$.index[*][?(@.name=='Unit')].inner.variant.kind" '"plain"'
Unit,
// @set Named = "$.index[*][?(@.name=='Named')].id"
// @is "$.index[*][?(@.name=='Named')].inner.kind.struct" '{"fields": [], "fields_stripped": false}'
// @is "$.index[*][?(@.name=='Named')].inner.variant.kind.struct" '{"fields": [], "fields_stripped": false}'
Named {},
// @set Tuple = "$.index[*][?(@.name=='Tuple')].id"
// @is "$.index[*][?(@.name=='Tuple')].inner.kind.tuple" []
// @is "$.index[*][?(@.name=='Tuple')].inner.variant.kind.tuple" []
Tuple(),
// @set NamedField = "$.index[*][?(@.name=='NamedField')].id"
// @set x = "$.index[*][?(@.name=='x' && @.kind=='struct_field')].id"
// @is "$.index[*][?(@.name=='NamedField')].inner.kind.struct.fields[*]" $x
// @is "$.index[*][?(@.name=='NamedField')].inner.kind.struct.fields_stripped" false
// @set x = "$.index[*][?(@.name=='x' && @.inner.struct_field)].id"
// @is "$.index[*][?(@.name=='NamedField')].inner.variant.kind.struct.fields[*]" $x
// @is "$.index[*][?(@.name=='NamedField')].inner.variant.kind.struct.fields_stripped" false
NamedField { x: i32 },
// @set TupleField = "$.index[*][?(@.name=='TupleField')].id"
// @set tup_field = "$.index[*][?(@.name=='0' && @.kind=='struct_field')].id"
// @is "$.index[*][?(@.name=='TupleField')].inner.kind.tuple[*]" $tup_field
// @set tup_field = "$.index[*][?(@.name=='0' && @.inner.struct_field)].id"
// @is "$.index[*][?(@.name=='TupleField')].inner.variant.kind.tuple[*]" $tup_field
TupleField(i32),
}
// @is "$.index[*][?(@.name=='Foo')].inner.variants[0]" $Unit
// @is "$.index[*][?(@.name=='Foo')].inner.variants[1]" $Named
// @is "$.index[*][?(@.name=='Foo')].inner.variants[2]" $Tuple
// @is "$.index[*][?(@.name=='Foo')].inner.variants[3]" $NamedField
// @is "$.index[*][?(@.name=='Foo')].inner.variants[4]" $TupleField
// @count "$.index[*][?(@.name=='Foo')].inner.variants[*]" 5
// @is "$.index[*][?(@.name=='Foo')].inner.enum.variants[0]" $Unit
// @is "$.index[*][?(@.name=='Foo')].inner.enum.variants[1]" $Named
// @is "$.index[*][?(@.name=='Foo')].inner.enum.variants[2]" $Tuple
// @is "$.index[*][?(@.name=='Foo')].inner.enum.variants[3]" $NamedField
// @is "$.index[*][?(@.name=='Foo')].inner.enum.variants[4]" $TupleField
// @count "$.index[*][?(@.name=='Foo')].inner.enum.variants[*]" 5

View File

@ -9,8 +9,8 @@ pub enum Foo {
// @set y = "$.index[*][?(@.name=='y')].id"
y: i32,
},
// @is "$.index[*][?(@.name=='Variant')].inner.kind.struct.fields_stripped" true
// @is "$.index[*][?(@.name=='Variant')].inner.kind.struct.fields[0]" $b
// @is "$.index[*][?(@.name=='Variant')].inner.kind.struct.fields[1]" $y
// @count "$.index[*][?(@.name=='Variant')].inner.kind.struct.fields[*]" 2
// @is "$.index[*][?(@.name=='Variant')].inner.variant.kind.struct.fields_stripped" true
// @is "$.index[*][?(@.name=='Variant')].inner.variant.kind.struct.fields[0]" $b
// @is "$.index[*][?(@.name=='Variant')].inner.variant.kind.struct.fields[1]" $y
// @count "$.index[*][?(@.name=='Variant')].inner.variant.kind.struct.fields[*]" 2
}

View File

@ -14,47 +14,47 @@
// @set 3.3.1 = "$.index[*][?(@.docs=='3.3.1')].id"
pub enum EnumWithStrippedTupleVariants {
// @count "$.index[*][?(@.name=='None')].inner.kind.tuple[*]" 0
// @count "$.index[*][?(@.name=='None')].inner.variant.kind.tuple[*]" 0
None(),
// @count "$.index[*][?(@.name=='One')].inner.kind.tuple[*]" 1
// @is "$.index[*][?(@.name=='One')].inner.kind.tuple[0]" $1.1.0
// @count "$.index[*][?(@.name=='One')].inner.variant.kind.tuple[*]" 1
// @is "$.index[*][?(@.name=='One')].inner.variant.kind.tuple[0]" $1.1.0
One(/** 1.1.0*/ bool),
// @count "$.index[*][?(@.name=='OneHidden')].inner.kind.tuple[*]" 1
// @is "$.index[*][?(@.name=='OneHidden')].inner.kind.tuple[0]" null
// @count "$.index[*][?(@.name=='OneHidden')].inner.variant.kind.tuple[*]" 1
// @is "$.index[*][?(@.name=='OneHidden')].inner.variant.kind.tuple[0]" null
OneHidden(#[doc(hidden)] bool),
// @count "$.index[*][?(@.name=='Two')].inner.kind.tuple[*]" 2
// @is "$.index[*][?(@.name=='Two')].inner.kind.tuple[0]" $2.1.0
// @is "$.index[*][?(@.name=='Two')].inner.kind.tuple[1]" $2.1.1
// @count "$.index[*][?(@.name=='Two')].inner.variant.kind.tuple[*]" 2
// @is "$.index[*][?(@.name=='Two')].inner.variant.kind.tuple[0]" $2.1.0
// @is "$.index[*][?(@.name=='Two')].inner.variant.kind.tuple[1]" $2.1.1
Two(/** 2.1.0*/ bool, /** 2.1.1*/ bool),
// @count "$.index[*][?(@.name=='TwoLeftHidden')].inner.kind.tuple[*]" 2
// @is "$.index[*][?(@.name=='TwoLeftHidden')].inner.kind.tuple[0]" null
// @is "$.index[*][?(@.name=='TwoLeftHidden')].inner.kind.tuple[1]" $2.2.1
// @count "$.index[*][?(@.name=='TwoLeftHidden')].inner.variant.kind.tuple[*]" 2
// @is "$.index[*][?(@.name=='TwoLeftHidden')].inner.variant.kind.tuple[0]" null
// @is "$.index[*][?(@.name=='TwoLeftHidden')].inner.variant.kind.tuple[1]" $2.2.1
TwoLeftHidden(#[doc(hidden)] bool, /** 2.2.1*/ bool),
// @count "$.index[*][?(@.name=='TwoRightHidden')].inner.kind.tuple[*]" 2
// @is "$.index[*][?(@.name=='TwoRightHidden')].inner.kind.tuple[0]" $2.3.0
// @is "$.index[*][?(@.name=='TwoRightHidden')].inner.kind.tuple[1]" null
// @count "$.index[*][?(@.name=='TwoRightHidden')].inner.variant.kind.tuple[*]" 2
// @is "$.index[*][?(@.name=='TwoRightHidden')].inner.variant.kind.tuple[0]" $2.3.0
// @is "$.index[*][?(@.name=='TwoRightHidden')].inner.variant.kind.tuple[1]" null
TwoRightHidden(/** 2.3.0*/ bool, #[doc(hidden)] bool),
// @count "$.index[*][?(@.name=='TwoBothHidden')].inner.kind.tuple[*]" 2
// @is "$.index[*][?(@.name=='TwoBothHidden')].inner.kind.tuple[0]" null
// @is "$.index[*][?(@.name=='TwoBothHidden')].inner.kind.tuple[1]" null
// @count "$.index[*][?(@.name=='TwoBothHidden')].inner.variant.kind.tuple[*]" 2
// @is "$.index[*][?(@.name=='TwoBothHidden')].inner.variant.kind.tuple[0]" null
// @is "$.index[*][?(@.name=='TwoBothHidden')].inner.variant.kind.tuple[1]" null
TwoBothHidden(#[doc(hidden)] bool, #[doc(hidden)] bool),
// @count "$.index[*][?(@.name=='Three1')].inner.kind.tuple[*]" 3
// @is "$.index[*][?(@.name=='Three1')].inner.kind.tuple[0]" null
// @is "$.index[*][?(@.name=='Three1')].inner.kind.tuple[1]" $3.1.1
// @is "$.index[*][?(@.name=='Three1')].inner.kind.tuple[2]" $3.1.2
// @count "$.index[*][?(@.name=='Three1')].inner.variant.kind.tuple[*]" 3
// @is "$.index[*][?(@.name=='Three1')].inner.variant.kind.tuple[0]" null
// @is "$.index[*][?(@.name=='Three1')].inner.variant.kind.tuple[1]" $3.1.1
// @is "$.index[*][?(@.name=='Three1')].inner.variant.kind.tuple[2]" $3.1.2
Three1(#[doc(hidden)] bool, /** 3.1.1*/ bool, /** 3.1.2*/ bool),
// @count "$.index[*][?(@.name=='Three2')].inner.kind.tuple[*]" 3
// @is "$.index[*][?(@.name=='Three2')].inner.kind.tuple[0]" $3.2.0
// @is "$.index[*][?(@.name=='Three2')].inner.kind.tuple[1]" null
// @is "$.index[*][?(@.name=='Three2')].inner.kind.tuple[2]" $3.2.2
// @count "$.index[*][?(@.name=='Three2')].inner.variant.kind.tuple[*]" 3
// @is "$.index[*][?(@.name=='Three2')].inner.variant.kind.tuple[0]" $3.2.0
// @is "$.index[*][?(@.name=='Three2')].inner.variant.kind.tuple[1]" null
// @is "$.index[*][?(@.name=='Three2')].inner.variant.kind.tuple[2]" $3.2.2
Three2(/** 3.2.0*/ bool, #[doc(hidden)] bool, /** 3.2.2*/ bool),
// @count "$.index[*][?(@.name=='Three3')].inner.kind.tuple[*]" 3
// @is "$.index[*][?(@.name=='Three3')].inner.kind.tuple[0]" $3.3.0
// @is "$.index[*][?(@.name=='Three3')].inner.kind.tuple[1]" $3.3.1
// @is "$.index[*][?(@.name=='Three3')].inner.kind.tuple[2]" null
// @count "$.index[*][?(@.name=='Three3')].inner.variant.kind.tuple[*]" 3
// @is "$.index[*][?(@.name=='Three3')].inner.variant.kind.tuple[0]" $3.3.0
// @is "$.index[*][?(@.name=='Three3')].inner.variant.kind.tuple[1]" $3.3.1
// @is "$.index[*][?(@.name=='Three3')].inner.variant.kind.tuple[2]" null
Three3(/** 3.3.0*/ bool, /** 3.3.1*/ bool, #[doc(hidden)] bool),
}
@ -70,14 +70,14 @@ pub enum EnumWithStrippedTupleVariants {
// @is "$.index[*][?(@.docs=='3.3.0')].name" '"0"'
// @is "$.index[*][?(@.docs=='3.3.1')].name" '"1"'
// @is "$.index[*][?(@.docs=='1.1.0')].inner" '{"kind": "primitive", "inner": "bool"}'
// @is "$.index[*][?(@.docs=='2.1.0')].inner" '{"kind": "primitive", "inner": "bool"}'
// @is "$.index[*][?(@.docs=='2.1.1')].inner" '{"kind": "primitive", "inner": "bool"}'
// @is "$.index[*][?(@.docs=='2.2.1')].inner" '{"kind": "primitive", "inner": "bool"}'
// @is "$.index[*][?(@.docs=='2.3.0')].inner" '{"kind": "primitive", "inner": "bool"}'
// @is "$.index[*][?(@.docs=='3.1.1')].inner" '{"kind": "primitive", "inner": "bool"}'
// @is "$.index[*][?(@.docs=='3.1.2')].inner" '{"kind": "primitive", "inner": "bool"}'
// @is "$.index[*][?(@.docs=='3.2.0')].inner" '{"kind": "primitive", "inner": "bool"}'
// @is "$.index[*][?(@.docs=='3.2.2')].inner" '{"kind": "primitive", "inner": "bool"}'
// @is "$.index[*][?(@.docs=='3.3.0')].inner" '{"kind": "primitive", "inner": "bool"}'
// @is "$.index[*][?(@.docs=='3.3.1')].inner" '{"kind": "primitive", "inner": "bool"}'
// @is "$.index[*][?(@.docs=='1.1.0')].inner.struct_field" '{"primitive": "bool"}'
// @is "$.index[*][?(@.docs=='2.1.0')].inner.struct_field" '{"primitive": "bool"}'
// @is "$.index[*][?(@.docs=='2.1.1')].inner.struct_field" '{"primitive": "bool"}'
// @is "$.index[*][?(@.docs=='2.2.1')].inner.struct_field" '{"primitive": "bool"}'
// @is "$.index[*][?(@.docs=='2.3.0')].inner.struct_field" '{"primitive": "bool"}'
// @is "$.index[*][?(@.docs=='3.1.1')].inner.struct_field" '{"primitive": "bool"}'
// @is "$.index[*][?(@.docs=='3.1.2')].inner.struct_field" '{"primitive": "bool"}'
// @is "$.index[*][?(@.docs=='3.2.0')].inner.struct_field" '{"primitive": "bool"}'
// @is "$.index[*][?(@.docs=='3.2.2')].inner.struct_field" '{"primitive": "bool"}'
// @is "$.index[*][?(@.docs=='3.3.0')].inner.struct_field" '{"primitive": "bool"}'
// @is "$.index[*][?(@.docs=='3.3.1')].inner.struct_field" '{"primitive": "bool"}'

View File

@ -10,9 +10,9 @@ pub enum Color {
Blue,
}
// @set use_Color = "$.index[*][?(@.kind == 'import')].id"
// @is "$.index[*][?(@.kind == 'import')].inner.id" $Color
// @is "$.index[*][?(@.kind == 'import')].inner.glob" true
// @set use_Color = "$.index[*][?(@.inner.import)].id"
// @is "$.index[*][?(@.inner.import)].inner.import.id" $Color
// @is "$.index[*][?(@.inner.import)].inner.import.glob" true
pub use Color::*;
// @ismany "$.index[*][?(@.name == 'use_glob')].inner.items[*]" $Color $use_Color
// @ismany "$.index[*][?(@.name == 'use_glob')].inner.module.items[*]" $Color $use_Color

View File

@ -6,10 +6,10 @@ pub enum AlwaysNone {
// @set None = "$.index[*][?(@.name == 'None')].id"
None,
}
// @is "$.index[*][?(@.name == 'AlwaysNone')].inner.variants[*]" $None
// @is "$.index[*][?(@.name == 'AlwaysNone')].inner.enum.variants[*]" $None
// @set use_None = "$.index[*][?(@.kind == 'import')].id"
// @is "$.index[*][?(@.kind == 'import')].inner.id" $None
// @set use_None = "$.index[*][?(@.inner.import)].id"
// @is "$.index[*][?(@.inner.import)].inner.import.id" $None
pub use AlwaysNone::None;
// @ismany "$.index[*][?(@.name == 'use_variant')].inner.items[*]" $AlwaysNone $use_None
// @ismany "$.index[*][?(@.name == 'use_variant')].inner.module.items[*]" $AlwaysNone $use_None

View File

@ -2,7 +2,7 @@
extern crate color;
// @is "$.index[*][?(@.inner.name == 'Red')].kind" '"import"'
// @has "$.index[*].inner.import[?(@.name == 'Red')]"
pub use color::Color::Red;
// @!has "$.index[*][?(@.name == 'Red')]"

View File

@ -1,10 +1,10 @@
// @is "$.index[*][?(@.name=='EnumStruct')].visibility" \"public\"
// @is "$.index[*][?(@.name=='EnumStruct')].kind" \"enum\"
// @has "$.index[*][?(@.name=='EnumStruct')].inner.enum"
pub enum EnumStruct {
// @is "$.index[*][?(@.name=='x')].kind" \"struct_field\"
// @has "$.index[*][?(@.name=='x')].inner.struct_field"
// @set x = "$.index[*][?(@.name=='x')].id"
// @is "$.index[*][?(@.name=='y')].kind" \"struct_field\"
// @has "$.index[*][?(@.name=='y')].inner.struct_field"
// @set y = "$.index[*][?(@.name=='y')].id"
// @ismany "$.index[*][?(@.name=='VariantS')].inner.kind.struct.fields[*]" $x $y
// @ismany "$.index[*][?(@.name=='VariantS')].inner.variant.kind.struct.fields[*]" $x $y
VariantS { x: u32, y: String },
}

View File

@ -1,10 +1,10 @@
// @is "$.index[*][?(@.name=='EnumTupleStruct')].visibility" \"public\"
// @is "$.index[*][?(@.name=='EnumTupleStruct')].kind" \"enum\"
// @has "$.index[*][?(@.name=='EnumTupleStruct')].inner.enum"
pub enum EnumTupleStruct {
// @is "$.index[*][?(@.name=='0')].kind" \"struct_field\"
// @has "$.index[*][?(@.name=='0')].inner.struct_field"
// @set f0 = "$.index[*][?(@.name=='0')].id"
// @is "$.index[*][?(@.name=='1')].kind" \"struct_field\"
// @has "$.index[*][?(@.name=='1')].inner.struct_field"
// @set f1 = "$.index[*][?(@.name=='1')].id"
// @ismany "$.index[*][?(@.name=='VariantA')].inner.kind.tuple[*]" $f0 $f1
// @ismany "$.index[*][?(@.name=='VariantA')].inner.variant.kind.tuple[*]" $f0 $f1
VariantA(u32, String),
}

View File

@ -2,23 +2,23 @@
#![feature(abi_vectorcall)]
// @is "$.index[*][?(@.name=='AbiRust')].inner.type.inner.header.abi" \"Rust\"
// @is "$.index[*][?(@.name=='AbiRust')].inner.typedef.type.function_pointer.header.abi" \"Rust\"
pub type AbiRust = fn();
// @is "$.index[*][?(@.name=='AbiC')].inner.type.inner.header.abi" '{"C": {"unwind": false}}'
// @is "$.index[*][?(@.name=='AbiC')].inner.typedef.type.function_pointer.header.abi" '{"C": {"unwind": false}}'
pub type AbiC = extern "C" fn();
// @is "$.index[*][?(@.name=='AbiSystem')].inner.type.inner.header.abi" '{"System": {"unwind": false}}'
// @is "$.index[*][?(@.name=='AbiSystem')].inner.typedef.type.function_pointer.header.abi" '{"System": {"unwind": false}}'
pub type AbiSystem = extern "system" fn();
// @is "$.index[*][?(@.name=='AbiCUnwind')].inner.type.inner.header.abi" '{"C": {"unwind": true}}'
// @is "$.index[*][?(@.name=='AbiCUnwind')].inner.typedef.type.function_pointer.header.abi" '{"C": {"unwind": true}}'
pub type AbiCUnwind = extern "C-unwind" fn();
// @is "$.index[*][?(@.name=='AbiSystemUnwind')].inner.type.inner.header.abi" '{"System": {"unwind": true}}'
// @is "$.index[*][?(@.name=='AbiSystemUnwind')].inner.typedef.type.function_pointer.header.abi" '{"System": {"unwind": true}}'
pub type AbiSystemUnwind = extern "system-unwind" fn();
// @is "$.index[*][?(@.name=='AbiVecorcall')].inner.type.inner.header.abi.Other" '"\"vectorcall\""'
// @is "$.index[*][?(@.name=='AbiVecorcall')].inner.typedef.type.function_pointer.header.abi.Other" '"\"vectorcall\""'
pub type AbiVecorcall = extern "vectorcall" fn();
// @is "$.index[*][?(@.name=='AbiVecorcallUnwind')].inner.type.inner.header.abi.Other" '"\"vectorcall-unwind\""'
// @is "$.index[*][?(@.name=='AbiVecorcallUnwind')].inner.typedef.type.function_pointer.header.abi.Other" '"\"vectorcall-unwind\""'
pub type AbiVecorcallUnwind = extern "vectorcall-unwind" fn();

View File

@ -3,12 +3,11 @@
#![feature(no_core)]
#![no_core]
// @count "$.index[*][?(@.name=='WithHigherRankTraitBounds')].inner.type.inner.decl.inputs[*]" 1
// @is "$.index[*][?(@.name=='WithHigherRankTraitBounds')].inner.type.inner.decl.inputs[0][0]" '"val"'
// @is "$.index[*][?(@.name=='WithHigherRankTraitBounds')].inner.type.inner.decl.inputs[0][1].kind" '"borrowed_ref"'
// @is "$.index[*][?(@.name=='WithHigherRankTraitBounds')].inner.type.inner.decl.inputs[0][1].inner.lifetime" \"\'c\"
// @is "$.index[*][?(@.name=='WithHigherRankTraitBounds')].inner.type.inner.decl.output" '{ "kind": "primitive", "inner": "i32" }'
// @count "$.index[*][?(@.name=='WithHigherRankTraitBounds')].inner.type.inner.generic_params[*]" 1
// @is "$.index[*][?(@.name=='WithHigherRankTraitBounds')].inner.type.inner.generic_params[0].name" \"\'c\"
// @is "$.index[*][?(@.name=='WithHigherRankTraitBounds')].inner.type.inner.generic_params[0].kind" '{ "lifetime": { "outlives": [] } }'
// @count "$.index[*][?(@.name=='WithHigherRankTraitBounds')].inner.typedef.type.function_pointer.decl.inputs[*]" 1
// @is "$.index[*][?(@.name=='WithHigherRankTraitBounds')].inner.typedef.type.function_pointer.decl.inputs[0][0]" '"val"'
// @is "$.index[*][?(@.name=='WithHigherRankTraitBounds')].inner.typedef.type.function_pointer.decl.inputs[0][1].borrowed_ref.lifetime" \"\'c\"
// @is "$.index[*][?(@.name=='WithHigherRankTraitBounds')].inner.typedef.type.function_pointer.decl.output.primitive" \"i32\"
// @count "$.index[*][?(@.name=='WithHigherRankTraitBounds')].inner.typedef.type.function_pointer.generic_params[*]" 1
// @is "$.index[*][?(@.name=='WithHigherRankTraitBounds')].inner.typedef.type.function_pointer.generic_params[0].name" \"\'c\"
// @is "$.index[*][?(@.name=='WithHigherRankTraitBounds')].inner.typedef.type.function_pointer.generic_params[0].kind" '{ "lifetime": { "outlives": [] } }'
pub type WithHigherRankTraitBounds = for<'c> fn(val: &'c i32) -> i32;

View File

@ -1,9 +1,11 @@
// @is "$.index[*][?(@.name=='FnPointer')].inner.type.inner.header.unsafe" false
// @is "$.index[*][?(@.name=='FnPointer')].inner.type.inner.header.const" false
// @is "$.index[*][?(@.name=='FnPointer')].inner.type.inner.header.async" false
// ignore-tidy-linelength
// @is "$.index[*][?(@.name=='FnPointer')].inner.typedef.type.function_pointer.header.unsafe" false
// @is "$.index[*][?(@.name=='FnPointer')].inner.typedef.type.function_pointer.header.const" false
// @is "$.index[*][?(@.name=='FnPointer')].inner.typedef.type.function_pointer.header.async" false
pub type FnPointer = fn();
// @is "$.index[*][?(@.name=='UnsafePointer')].inner.type.inner.header.unsafe" true
// @is "$.index[*][?(@.name=='UnsafePointer')].inner.type.inner.header.const" false
// @is "$.index[*][?(@.name=='UnsafePointer')].inner.type.inner.header.async" false
// @is "$.index[*][?(@.name=='UnsafePointer')].inner.typedef.type.function_pointer.header.unsafe" true
// @is "$.index[*][?(@.name=='UnsafePointer')].inner.typedef.type.function_pointer.header.const" false
// @is "$.index[*][?(@.name=='UnsafePointer')].inner.typedef.type.function_pointer.header.async" false
pub type UnsafePointer = unsafe fn();

View File

@ -2,23 +2,23 @@
#![feature(abi_vectorcall)]
// @is "$.index[*][?(@.name=='abi_rust')].inner.header.abi" \"Rust\"
// @is "$.index[*][?(@.name=='abi_rust')].inner.function.header.abi" \"Rust\"
pub fn abi_rust() {}
// @is "$.index[*][?(@.name=='abi_c')].inner.header.abi" '{"C": {"unwind": false}}'
// @is "$.index[*][?(@.name=='abi_c')].inner.function.header.abi" '{"C": {"unwind": false}}'
pub extern "C" fn abi_c() {}
// @is "$.index[*][?(@.name=='abi_system')].inner.header.abi" '{"System": {"unwind": false}}'
// @is "$.index[*][?(@.name=='abi_system')].inner.function.header.abi" '{"System": {"unwind": false}}'
pub extern "system" fn abi_system() {}
// @is "$.index[*][?(@.name=='abi_c_unwind')].inner.header.abi" '{"C": {"unwind": true}}'
// @is "$.index[*][?(@.name=='abi_c_unwind')].inner.function.header.abi" '{"C": {"unwind": true}}'
pub extern "C-unwind" fn abi_c_unwind() {}
// @is "$.index[*][?(@.name=='abi_system_unwind')].inner.header.abi" '{"System": {"unwind": true}}'
// @is "$.index[*][?(@.name=='abi_system_unwind')].inner.function.header.abi" '{"System": {"unwind": true}}'
pub extern "system-unwind" fn abi_system_unwind() {}
// @is "$.index[*][?(@.name=='abi_vectorcall')].inner.header.abi.Other" '"\"vectorcall\""'
// @is "$.index[*][?(@.name=='abi_vectorcall')].inner.function.header.abi.Other" '"\"vectorcall\""'
pub extern "vectorcall" fn abi_vectorcall() {}
// @is "$.index[*][?(@.name=='abi_vectorcall_unwind')].inner.header.abi.Other" '"\"vectorcall-unwind\""'
// @is "$.index[*][?(@.name=='abi_vectorcall_unwind')].inner.function.header.abi.Other" '"\"vectorcall-unwind\""'
pub extern "vectorcall-unwind" fn abi_vectorcall_unwind() {}

View File

@ -5,32 +5,30 @@
use std::future::Future;
// @is "$.index[*][?(@.name=='get_int')].inner.decl.output" '{"inner": "i32", "kind": "primitive"}'
// @is "$.index[*][?(@.name=='get_int')].inner.header.async" false
// @is "$.index[*][?(@.name=='get_int')].inner.function.decl.output.primitive" \"i32\"
// @is "$.index[*][?(@.name=='get_int')].inner.function.header.async" false
pub fn get_int() -> i32 {
42
}
// @is "$.index[*][?(@.name=='get_int_async')].inner.decl.output" '{"inner": "i32", "kind": "primitive"}'
// @is "$.index[*][?(@.name=='get_int_async')].inner.header.async" true
// @is "$.index[*][?(@.name=='get_int_async')].inner.function.decl.output.primitive" \"i32\"
// @is "$.index[*][?(@.name=='get_int_async')].inner.function.header.async" true
pub async fn get_int_async() -> i32 {
42
}
// @is "$.index[*][?(@.name=='get_int_future')].inner.decl.output.kind" '"impl_trait"'
// @is "$.index[*][?(@.name=='get_int_future')].inner.decl.output.inner[0].trait_bound.trait.name" '"Future"'
// @is "$.index[*][?(@.name=='get_int_future')].inner.decl.output.inner[0].trait_bound.trait.args.angle_bracketed.bindings[0].name" '"Output"'
// @is "$.index[*][?(@.name=='get_int_future')].inner.decl.output.inner[0].trait_bound.trait.args.angle_bracketed.bindings[0].binding.equality.type" '{"inner": "i32", "kind": "primitive"}'
// @is "$.index[*][?(@.name=='get_int_future')].inner.header.async" false
// @is "$.index[*][?(@.name=='get_int_future')].inner.function.decl.output.impl_trait[0].trait_bound.trait.name" '"Future"'
// @is "$.index[*][?(@.name=='get_int_future')].inner.function.decl.output.impl_trait[0].trait_bound.trait.args.angle_bracketed.bindings[0].name" '"Output"'
// @is "$.index[*][?(@.name=='get_int_future')].inner.function.decl.output.impl_trait[0].trait_bound.trait.args.angle_bracketed.bindings[0].binding.equality.type.primitive" \"i32\"
// @is "$.index[*][?(@.name=='get_int_future')].inner.function.header.async" false
pub fn get_int_future() -> impl Future<Output = i32> {
async { 42 }
}
// @is "$.index[*][?(@.name=='get_int_future_async')].inner.decl.output.kind" '"impl_trait"'
// @is "$.index[*][?(@.name=='get_int_future_async')].inner.decl.output.inner[0].trait_bound.trait.name" '"Future"'
// @is "$.index[*][?(@.name=='get_int_future_async')].inner.decl.output.inner[0].trait_bound.trait.args.angle_bracketed.bindings[0].name" '"Output"'
// @is "$.index[*][?(@.name=='get_int_future_async')].inner.decl.output.inner[0].trait_bound.trait.args.angle_bracketed.bindings[0].binding.equality.type" '{"inner": "i32", "kind": "primitive"}'
// @is "$.index[*][?(@.name=='get_int_future_async')].inner.header.async" true
// @is "$.index[*][?(@.name=='get_int_future_async')].inner.function.decl.output.impl_trait[0].trait_bound.trait.name" '"Future"'
// @is "$.index[*][?(@.name=='get_int_future_async')].inner.function.decl.output.impl_trait[0].trait_bound.trait.args.angle_bracketed.bindings[0].name" '"Output"'
// @is "$.index[*][?(@.name=='get_int_future_async')].inner.function.decl.output.impl_trait[0].trait_bound.trait.args.angle_bracketed.bindings[0].binding.equality.type.primitive" \"i32\"
// @is "$.index[*][?(@.name=='get_int_future_async')].inner.function.header.async" true
pub async fn get_int_future_async() -> impl Future<Output = i32> {
async { 42 }
}

View File

@ -2,8 +2,8 @@
#![no_core]
extern "C" {
// @is "$.index[*][?(@.name == 'not_variadic')].inner.decl.c_variadic" false
// @is "$.index[*][?(@.name == 'not_variadic')].inner.function.decl.c_variadic" false
pub fn not_variadic(_: i32);
// @is "$.index[*][?(@.name == 'variadic')].inner.decl.c_variadic" true
// @is "$.index[*][?(@.name == 'variadic')].inner.function.decl.c_variadic" true
pub fn variadic(_: i32, ...);
}

View File

@ -9,59 +9,55 @@ pub trait Foo {}
// @set generic_foo = "$.index[*][?(@.name=='GenericFoo')].id"
pub trait GenericFoo<'a> {}
// @is "$.index[*][?(@.name=='generics')].inner.generics.where_predicates" "[]"
// @count "$.index[*][?(@.name=='generics')].inner.generics.params[*]" 1
// @is "$.index[*][?(@.name=='generics')].inner.generics.params[0].name" '"F"'
// @is "$.index[*][?(@.name=='generics')].inner.generics.params[0].kind.type.default" 'null'
// @count "$.index[*][?(@.name=='generics')].inner.generics.params[0].kind.type.bounds[*]" 1
// @is "$.index[*][?(@.name=='generics')].inner.generics.params[0].kind.type.bounds[0].trait_bound.trait.id" '$foo'
// @count "$.index[*][?(@.name=='generics')].inner.decl.inputs[*]" 1
// @is "$.index[*][?(@.name=='generics')].inner.decl.inputs[0][0]" '"f"'
// @is "$.index[*][?(@.name=='generics')].inner.decl.inputs[0][1].kind" '"generic"'
// @is "$.index[*][?(@.name=='generics')].inner.decl.inputs[0][1].inner" '"F"'
// @is "$.index[*][?(@.name=='generics')].inner.function.generics.where_predicates" "[]"
// @count "$.index[*][?(@.name=='generics')].inner.function.generics.params[*]" 1
// @is "$.index[*][?(@.name=='generics')].inner.function.generics.params[0].name" '"F"'
// @is "$.index[*][?(@.name=='generics')].inner.function.generics.params[0].kind.type.default" 'null'
// @count "$.index[*][?(@.name=='generics')].inner.function.generics.params[0].kind.type.bounds[*]" 1
// @is "$.index[*][?(@.name=='generics')].inner.function.generics.params[0].kind.type.bounds[0].trait_bound.trait.id" '$foo'
// @count "$.index[*][?(@.name=='generics')].inner.function.decl.inputs[*]" 1
// @is "$.index[*][?(@.name=='generics')].inner.function.decl.inputs[0][0]" '"f"'
// @is "$.index[*][?(@.name=='generics')].inner.function.decl.inputs[0][1].generic" '"F"'
pub fn generics<F: Foo>(f: F) {}
// @is "$.index[*][?(@.name=='impl_trait')].inner.generics.where_predicates" "[]"
// @count "$.index[*][?(@.name=='impl_trait')].inner.generics.params[*]" 1
// @is "$.index[*][?(@.name=='impl_trait')].inner.generics.params[0].name" '"impl Foo"'
// @is "$.index[*][?(@.name=='impl_trait')].inner.generics.params[0].kind.type.bounds[0].trait_bound.trait.id" $foo
// @count "$.index[*][?(@.name=='impl_trait')].inner.decl.inputs[*]" 1
// @is "$.index[*][?(@.name=='impl_trait')].inner.decl.inputs[0][0]" '"f"'
// @is "$.index[*][?(@.name=='impl_trait')].inner.decl.inputs[0][1].kind" '"impl_trait"'
// @count "$.index[*][?(@.name=='impl_trait')].inner.decl.inputs[0][1].inner[*]" 1
// @is "$.index[*][?(@.name=='impl_trait')].inner.decl.inputs[0][1].inner[0].trait_bound.trait.id" $foo
// @is "$.index[*][?(@.name=='impl_trait')].inner.function.generics.where_predicates" "[]"
// @count "$.index[*][?(@.name=='impl_trait')].inner.function.generics.params[*]" 1
// @is "$.index[*][?(@.name=='impl_trait')].inner.function.generics.params[0].name" '"impl Foo"'
// @is "$.index[*][?(@.name=='impl_trait')].inner.function.generics.params[0].kind.type.bounds[0].trait_bound.trait.id" $foo
// @count "$.index[*][?(@.name=='impl_trait')].inner.function.decl.inputs[*]" 1
// @is "$.index[*][?(@.name=='impl_trait')].inner.function.decl.inputs[0][0]" '"f"'
// @count "$.index[*][?(@.name=='impl_trait')].inner.function.decl.inputs[0][1].impl_trait[*]" 1
// @is "$.index[*][?(@.name=='impl_trait')].inner.function.decl.inputs[0][1].impl_trait[0].trait_bound.trait.id" $foo
pub fn impl_trait(f: impl Foo) {}
// @count "$.index[*][?(@.name=='where_clase')].inner.generics.params[*]" 3
// @is "$.index[*][?(@.name=='where_clase')].inner.generics.params[0].name" '"F"'
// @is "$.index[*][?(@.name=='where_clase')].inner.generics.params[0].kind" '{"type": {"bounds": [], "default": null, "synthetic": false}}'
// @count "$.index[*][?(@.name=='where_clase')].inner.decl.inputs[*]" 3
// @is "$.index[*][?(@.name=='where_clase')].inner.decl.inputs[0][0]" '"f"'
// @is "$.index[*][?(@.name=='where_clase')].inner.decl.inputs[0][1].kind" '"generic"'
// @is "$.index[*][?(@.name=='where_clase')].inner.decl.inputs[0][1].inner" '"F"'
// @count "$.index[*][?(@.name=='where_clase')].inner.generics.where_predicates[*]" 3
// @count "$.index[*][?(@.name=='where_clase')].inner.function.generics.params[*]" 3
// @is "$.index[*][?(@.name=='where_clase')].inner.function.generics.params[0].name" '"F"'
// @is "$.index[*][?(@.name=='where_clase')].inner.function.generics.params[0].kind" '{"type": {"bounds": [], "default": null, "synthetic": false}}'
// @count "$.index[*][?(@.name=='where_clase')].inner.function.decl.inputs[*]" 3
// @is "$.index[*][?(@.name=='where_clase')].inner.function.decl.inputs[0][0]" '"f"'
// @is "$.index[*][?(@.name=='where_clase')].inner.function.decl.inputs[0][1].generic" '"F"'
// @count "$.index[*][?(@.name=='where_clase')].inner.function.generics.where_predicates[*]" 3
// @is "$.index[*][?(@.name=='where_clase')].inner.generics.where_predicates[0].bound_predicate.type" '{"inner": "F", "kind": "generic"}'
// @count "$.index[*][?(@.name=='where_clase')].inner.generics.where_predicates[0].bound_predicate.bounds[*]" 1
// @is "$.index[*][?(@.name=='where_clase')].inner.generics.where_predicates[0].bound_predicate.bounds[0].trait_bound.trait.id" $foo
// @is "$.index[*][?(@.name=='where_clase')].inner.function.generics.where_predicates[0].bound_predicate.type.generic" \"F\"
// @count "$.index[*][?(@.name=='where_clase')].inner.function.generics.where_predicates[0].bound_predicate.bounds[*]" 1
// @is "$.index[*][?(@.name=='where_clase')].inner.function.generics.where_predicates[0].bound_predicate.bounds[0].trait_bound.trait.id" $foo
// @is "$.index[*][?(@.name=='where_clase')].inner.generics.where_predicates[1].bound_predicate.type" '{"inner": "G", "kind": "generic"}'
// @count "$.index[*][?(@.name=='where_clase')].inner.generics.where_predicates[1].bound_predicate.bounds[*]" 1
// @is "$.index[*][?(@.name=='where_clase')].inner.generics.where_predicates[1].bound_predicate.bounds[0].trait_bound.trait.id" $generic_foo
// @count "$.index[*][?(@.name=='where_clase')].inner.generics.where_predicates[1].bound_predicate.bounds[0].trait_bound.generic_params[*]" 1
// @is "$.index[*][?(@.name=='where_clase')].inner.generics.where_predicates[1].bound_predicate.bounds[0].trait_bound.generic_params[0].name" \"\'a\"
// @is "$.index[*][?(@.name=='where_clase')].inner.generics.where_predicates[1].bound_predicate.bounds[0].trait_bound.generic_params[0].kind" '{ "lifetime": { "outlives": [] } }'
// @is "$.index[*][?(@.name=='where_clase')].inner.generics.where_predicates[1].bound_predicate.generic_params" "[]"
// @is "$.index[*][?(@.name=='where_clase')].inner.function.generics.where_predicates[1].bound_predicate.type.generic" \"G\"
// @count "$.index[*][?(@.name=='where_clase')].inner.function.generics.where_predicates[1].bound_predicate.bounds[*]" 1
// @is "$.index[*][?(@.name=='where_clase')].inner.function.generics.where_predicates[1].bound_predicate.bounds[0].trait_bound.trait.id" $generic_foo
// @count "$.index[*][?(@.name=='where_clase')].inner.function.generics.where_predicates[1].bound_predicate.bounds[0].trait_bound.generic_params[*]" 1
// @is "$.index[*][?(@.name=='where_clase')].inner.function.generics.where_predicates[1].bound_predicate.bounds[0].trait_bound.generic_params[0].name" \"\'a\"
// @is "$.index[*][?(@.name=='where_clase')].inner.function.generics.where_predicates[1].bound_predicate.bounds[0].trait_bound.generic_params[0].kind.lifetime.outlives" "[]"
// @is "$.index[*][?(@.name=='where_clase')].inner.function.generics.where_predicates[1].bound_predicate.generic_params" "[]"
// @is "$.index[*][?(@.name=='where_clase')].inner.generics.where_predicates[2].bound_predicate.type.kind" '"borrowed_ref"'
// @is "$.index[*][?(@.name=='where_clase')].inner.generics.where_predicates[2].bound_predicate.type.inner.lifetime" \"\'b\"
// @is "$.index[*][?(@.name=='where_clase')].inner.generics.where_predicates[2].bound_predicate.type.inner.type" '{"inner": "H", "kind": "generic"}'
// @count "$.index[*][?(@.name=='where_clase')].inner.generics.where_predicates[2].bound_predicate.bounds[*]" 1
// @is "$.index[*][?(@.name=='where_clase')].inner.generics.where_predicates[2].bound_predicate.bounds[0].trait_bound.trait.id" $foo
// @is "$.index[*][?(@.name=='where_clase')].inner.generics.where_predicates[2].bound_predicate.bounds[0].trait_bound.generic_params" "[]"
// @count "$.index[*][?(@.name=='where_clase')].inner.generics.where_predicates[2].bound_predicate.generic_params[*]" 1
// @is "$.index[*][?(@.name=='where_clase')].inner.generics.where_predicates[2].bound_predicate.generic_params[0].name" \"\'b\"
// @is "$.index[*][?(@.name=='where_clase')].inner.generics.where_predicates[2].bound_predicate.generic_params[0].kind" '{ "lifetime": { "outlives": [] } }'
// @is "$.index[*][?(@.name=='where_clase')].inner.function.generics.where_predicates[2].bound_predicate.type.borrowed_ref.lifetime" \"\'b\"
// @is "$.index[*][?(@.name=='where_clase')].inner.function.generics.where_predicates[2].bound_predicate.type.borrowed_ref.type.generic" \"H\"
// @count "$.index[*][?(@.name=='where_clase')].inner.function.generics.where_predicates[2].bound_predicate.bounds[*]" 1
// @is "$.index[*][?(@.name=='where_clase')].inner.function.generics.where_predicates[2].bound_predicate.bounds[0].trait_bound.trait.id" $foo
// @is "$.index[*][?(@.name=='where_clase')].inner.function.generics.where_predicates[2].bound_predicate.bounds[0].trait_bound.generic_params" "[]"
// @count "$.index[*][?(@.name=='where_clase')].inner.function.generics.where_predicates[2].bound_predicate.generic_params[*]" 1
// @is "$.index[*][?(@.name=='where_clase')].inner.function.generics.where_predicates[2].bound_predicate.generic_params[0].name" \"\'b\"
// @is "$.index[*][?(@.name=='where_clase')].inner.function.generics.where_predicates[2].bound_predicate.generic_params[0].kind.lifetime.outlives" "[]"
pub fn where_clase<F, G, H>(f: F, g: G, h: H)
where
F: Foo,

View File

@ -3,15 +3,14 @@
#![feature(no_core)]
#![no_core]
// @count "$.index[*][?(@.name=='generic_returns')].inner.items[*]" 2
// @count "$.index[*][?(@.name=='generic_returns')].inner.module.items[*]" 2
// @set foo = "$.index[*][?(@.name=='Foo')].id"
pub trait Foo {}
// @is "$.index[*][?(@.name=='get_foo')].inner.decl.inputs" []
// @is "$.index[*][?(@.name=='get_foo')].inner.decl.output.kind" '"impl_trait"'
// @count "$.index[*][?(@.name=='get_foo')].inner.decl.output.inner[*]" 1
// @is "$.index[*][?(@.name=='get_foo')].inner.decl.output.inner[0].trait_bound.trait.id" $foo
// @is "$.index[*][?(@.name=='get_foo')].inner.function.decl.inputs" []
// @count "$.index[*][?(@.name=='get_foo')].inner.function.decl.output.impl_trait[*]" 1
// @is "$.index[*][?(@.name=='get_foo')].inner.function.decl.output.impl_trait[0].trait_bound.trait.id" $foo
pub fn get_foo() -> impl Foo {
Fooer {}
}

View File

@ -6,21 +6,20 @@
// @set wham_id = "$.index[*][?(@.name=='Wham')].id"
pub trait Wham {}
// @is "$.index[*][?(@.name=='one_generic_param_fn')].inner.generics.where_predicates" []
// @count "$.index[*][?(@.name=='one_generic_param_fn')].inner.generics.params[*]" 1
// @is "$.index[*][?(@.name=='one_generic_param_fn')].inner.generics.params[0].name" '"T"'
// @is "$.index[*][?(@.name=='one_generic_param_fn')].inner.generics.params[0].kind.type.synthetic" false
// @is "$.index[*][?(@.name=='one_generic_param_fn')].inner.generics.params[0].kind.type.bounds[0].trait_bound.trait.id" $wham_id
// @is "$.index[*][?(@.name=='one_generic_param_fn')].inner.decl.inputs" '[["w", {"inner": "T", "kind": "generic"}]]'
// @is "$.index[*][?(@.name=='one_generic_param_fn')].inner.function.generics.where_predicates" []
// @count "$.index[*][?(@.name=='one_generic_param_fn')].inner.function.generics.params[*]" 1
// @is "$.index[*][?(@.name=='one_generic_param_fn')].inner.function.generics.params[0].name" '"T"'
// @is "$.index[*][?(@.name=='one_generic_param_fn')].inner.function.generics.params[0].kind.type.synthetic" false
// @is "$.index[*][?(@.name=='one_generic_param_fn')].inner.function.generics.params[0].kind.type.bounds[0].trait_bound.trait.id" $wham_id
// @is "$.index[*][?(@.name=='one_generic_param_fn')].inner.function.decl.inputs" '[["w", {"generic": "T"}]]'
pub fn one_generic_param_fn<T: Wham>(w: T) {}
// @is "$.index[*][?(@.name=='one_synthetic_generic_param_fn')].inner.generics.where_predicates" []
// @count "$.index[*][?(@.name=='one_synthetic_generic_param_fn')].inner.generics.params[*]" 1
// @is "$.index[*][?(@.name=='one_synthetic_generic_param_fn')].inner.generics.params[0].name" '"impl Wham"'
// @is "$.index[*][?(@.name=='one_synthetic_generic_param_fn')].inner.generics.params[0].kind.type.synthetic" true
// @is "$.index[*][?(@.name=='one_synthetic_generic_param_fn')].inner.generics.params[0].kind.type.bounds[0].trait_bound.trait.id" $wham_id
// @count "$.index[*][?(@.name=='one_synthetic_generic_param_fn')].inner.decl.inputs[*]" 1
// @is "$.index[*][?(@.name=='one_synthetic_generic_param_fn')].inner.decl.inputs[0][0]" '"w"'
// @is "$.index[*][?(@.name=='one_synthetic_generic_param_fn')].inner.decl.inputs[0][1].kind" '"impl_trait"'
// @is "$.index[*][?(@.name=='one_synthetic_generic_param_fn')].inner.decl.inputs[0][1].inner[0].trait_bound.trait.id" $wham_id
// @is "$.index[*][?(@.name=='one_synthetic_generic_param_fn')].inner.function.generics.where_predicates" []
// @count "$.index[*][?(@.name=='one_synthetic_generic_param_fn')].inner.function.generics.params[*]" 1
// @is "$.index[*][?(@.name=='one_synthetic_generic_param_fn')].inner.function.generics.params[0].name" '"impl Wham"'
// @is "$.index[*][?(@.name=='one_synthetic_generic_param_fn')].inner.function.generics.params[0].kind.type.synthetic" true
// @is "$.index[*][?(@.name=='one_synthetic_generic_param_fn')].inner.function.generics.params[0].kind.type.bounds[0].trait_bound.trait.id" $wham_id
// @count "$.index[*][?(@.name=='one_synthetic_generic_param_fn')].inner.function.decl.inputs[*]" 1
// @is "$.index[*][?(@.name=='one_synthetic_generic_param_fn')].inner.function.decl.inputs[0][0]" '"w"'
// @is "$.index[*][?(@.name=='one_synthetic_generic_param_fn')].inner.function.decl.inputs[0][1].impl_trait[0].trait_bound.trait.id" $wham_id
pub fn one_synthetic_generic_param_fn(w: impl Wham) {}

View File

@ -1,7 +1,7 @@
// @is "$.index[*][?(@.name=='fst')].inner.decl.inputs[0][0]" '"(x, _)"'
// @is "$.index[*][?(@.name=='fst')].inner.function.decl.inputs[0][0]" '"(x, _)"'
pub fn fst<X, Y>((x, _): (X, Y)) -> X {
x
}
// @is "$.index[*][?(@.name=='drop_int')].inner.decl.inputs[0][0]" '"_"'
// @is "$.index[*][?(@.name=='drop_int')].inner.function.decl.inputs[0][0]" '"_"'
pub fn drop_int(_: i32) {}

View File

@ -1,33 +1,33 @@
// edition:2018
// @is "$.index[*][?(@.name=='nothing_fn')].inner.header.async" false
// @is "$.index[*][?(@.name=='nothing_fn')].inner.header.const" false
// @is "$.index[*][?(@.name=='nothing_fn')].inner.header.unsafe" false
// @is "$.index[*][?(@.name=='nothing_fn')].inner.function.header.async" false
// @is "$.index[*][?(@.name=='nothing_fn')].inner.function.header.const" false
// @is "$.index[*][?(@.name=='nothing_fn')].inner.function.header.unsafe" false
pub fn nothing_fn() {}
// @is "$.index[*][?(@.name=='unsafe_fn')].inner.header.async" false
// @is "$.index[*][?(@.name=='unsafe_fn')].inner.header.const" false
// @is "$.index[*][?(@.name=='unsafe_fn')].inner.header.unsafe" true
// @is "$.index[*][?(@.name=='unsafe_fn')].inner.function.header.async" false
// @is "$.index[*][?(@.name=='unsafe_fn')].inner.function.header.const" false
// @is "$.index[*][?(@.name=='unsafe_fn')].inner.function.header.unsafe" true
pub unsafe fn unsafe_fn() {}
// @is "$.index[*][?(@.name=='const_fn')].inner.header.async" false
// @is "$.index[*][?(@.name=='const_fn')].inner.header.const" true
// @is "$.index[*][?(@.name=='const_fn')].inner.header.unsafe" false
// @is "$.index[*][?(@.name=='const_fn')].inner.function.header.async" false
// @is "$.index[*][?(@.name=='const_fn')].inner.function.header.const" true
// @is "$.index[*][?(@.name=='const_fn')].inner.function.header.unsafe" false
pub const fn const_fn() {}
// @is "$.index[*][?(@.name=='async_fn')].inner.header.async" true
// @is "$.index[*][?(@.name=='async_fn')].inner.header.const" false
// @is "$.index[*][?(@.name=='async_fn')].inner.header.unsafe" false
// @is "$.index[*][?(@.name=='async_fn')].inner.function.header.async" true
// @is "$.index[*][?(@.name=='async_fn')].inner.function.header.const" false
// @is "$.index[*][?(@.name=='async_fn')].inner.function.header.unsafe" false
pub async fn async_fn() {}
// @is "$.index[*][?(@.name=='async_unsafe_fn')].inner.header.async" true
// @is "$.index[*][?(@.name=='async_unsafe_fn')].inner.header.const" false
// @is "$.index[*][?(@.name=='async_unsafe_fn')].inner.header.unsafe" true
// @is "$.index[*][?(@.name=='async_unsafe_fn')].inner.function.header.async" true
// @is "$.index[*][?(@.name=='async_unsafe_fn')].inner.function.header.const" false
// @is "$.index[*][?(@.name=='async_unsafe_fn')].inner.function.header.unsafe" true
pub async unsafe fn async_unsafe_fn() {}
// @is "$.index[*][?(@.name=='const_unsafe_fn')].inner.header.async" false
// @is "$.index[*][?(@.name=='const_unsafe_fn')].inner.header.const" true
// @is "$.index[*][?(@.name=='const_unsafe_fn')].inner.header.unsafe" true
// @is "$.index[*][?(@.name=='const_unsafe_fn')].inner.function.header.async" false
// @is "$.index[*][?(@.name=='const_unsafe_fn')].inner.function.header.const" true
// @is "$.index[*][?(@.name=='const_unsafe_fn')].inner.function.header.unsafe" true
pub const unsafe fn const_unsafe_fn() {}
// It's impossible for a function to be both const and async, so no test for that

View File

@ -3,8 +3,7 @@
/// @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
// @is "$.index[*][?(@.name=='demo')].inner.function.decl.output.resolved_path.id" $foo
pub fn demo() -> Foo {
42
}

View File

@ -9,34 +9,32 @@ pub trait Sized {}
pub trait Display {}
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.type.inner" \"Self\"
// @is "$.index[*][?(@.name=='LendingItem')].inner.generics.where_predicates[*].bound_predicate.bounds[*].outlives" \"\'a\"
// @count "$.index[*][?(@.name=='LendingItem')].inner.bounds[*]" 1
// @count "$.index[*][?(@.name=='LendingItem')].inner.assoc_type.generics.params[*]" 1
// @is "$.index[*][?(@.name=='LendingItem')].inner.assoc_type.generics.params[*].name" \"\'a\"
// @count "$.index[*][?(@.name=='LendingItem')].inner.assoc_type.generics.where_predicates[*]" 1
// @is "$.index[*][?(@.name=='LendingItem')].inner.assoc_type.generics.where_predicates[*].bound_predicate.type.generic" \"Self\"
// @is "$.index[*][?(@.name=='LendingItem')].inner.assoc_type.generics.where_predicates[*].bound_predicate.bounds[*].outlives" \"\'a\"
// @count "$.index[*][?(@.name=='LendingItem')].inner.assoc_type.bounds[*]" 1
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
// @count "$.index[*][?(@.name=='lending_next')].inner.decl.output.inner.args.angle_bracketed.bindings[*]" 0
// @is "$.index[*][?(@.name=='lending_next')].inner.decl.output.inner.self_type.inner" \"Self\"
// @is "$.index[*][?(@.name=='lending_next')].inner.decl.output.inner.name" \"LendingItem\"
// @count "$.index[*][?(@.name=='lending_next')].inner.function.decl.output.qualified_path.args.angle_bracketed.args[*]" 1
// @count "$.index[*][?(@.name=='lending_next')].inner.function.decl.output.qualified_path.args.angle_bracketed.bindings[*]" 0
// @is "$.index[*][?(@.name=='lending_next')].inner.function.decl.output.qualified_path.self_type.generic" \"Self\"
// @is "$.index[*][?(@.name=='lending_next')].inner.function.decl.output.qualified_path.name" \"LendingItem\"
fn lending_next<'a>(&'a self) -> Self::LendingItem<'a>;
}
pub trait Iterator {
// @count "$.index[*][?(@.name=='Item')].inner.generics.params[*]" 0
// @count "$.index[*][?(@.name=='Item')].inner.generics.where_predicates[*]" 0
// @count "$.index[*][?(@.name=='Item')].inner.bounds[*]" 1
// @count "$.index[*][?(@.name=='Item')].inner.assoc_type.generics.params[*]" 0
// @count "$.index[*][?(@.name=='Item')].inner.assoc_type.generics.where_predicates[*]" 0
// @count "$.index[*][?(@.name=='Item')].inner.assoc_type.bounds[*]" 1
type Item: Display;
// @is "$.index[*][?(@.name=='next')].inner.decl.output.kind" \"qualified_path\"
// @count "$.index[*][?(@.name=='next')].inner.decl.output.inner.args.angle_bracketed.args[*]" 0
// @count "$.index[*][?(@.name=='next')].inner.decl.output.inner.args.angle_bracketed.bindings[*]" 0
// @is "$.index[*][?(@.name=='next')].inner.decl.output.inner.self_type.inner" \"Self\"
// @is "$.index[*][?(@.name=='next')].inner.decl.output.inner.name" \"Item\"
// @count "$.index[*][?(@.name=='next')].inner.function.decl.output.qualified_path.args.angle_bracketed.args[*]" 0
// @count "$.index[*][?(@.name=='next')].inner.function.decl.output.qualified_path.args.angle_bracketed.bindings[*]" 0
// @is "$.index[*][?(@.name=='next')].inner.function.decl.output.qualified_path.self_type.generic" \"Self\"
// @is "$.index[*][?(@.name=='next')].inner.function.decl.output.qualified_path.name" \"Item\"
fn next<'a>(&'a self) -> Self::Item;
}

View File

@ -5,7 +5,7 @@
#![no_core]
// @has "$.index[*][?(@.name=='glob')]"
// @has "$.index[*][?(@.kind=='import')].inner.name" \"*\"
// @has "$.index[*][?(@.inner.import)].inner.import.name" \"*\"
mod m1 {

View File

@ -12,7 +12,8 @@ impl Foo {
}
// Testing spans, so all tests below code
// @is "$.index[*][?(@.kind=='impl' && @.inner.synthetic==true)].span" null
// @is "$.index[*][?(@.docs=='has span')].span.begin" "[10, 0]"
// @is "$.index[*][?(@.docs=='has span')].span.end" "[12, 1]"
// FIXME: this doesn't work due to https://github.com/freestrings/jsonpath/issues/91
// is "$.index[*][?(@.inner.impl.synthetic==true)].span" null
pub struct Foo;

View File

@ -3,7 +3,7 @@ extern crate foreign_trait;
/// ForeignTrait id hack
pub use foreign_trait::ForeignTrait as _;
// @set ForeignTrait = "$.index[*][?(@.docs=='ForeignTrait id hack')].inner.id"
// @set ForeignTrait = "$.index[*][?(@.docs=='ForeignTrait id hack')].inner.import.id"
pub struct LocalStruct;
// @set LocalStruct = "$.index[*][?(@.name=='LocalStruct')].id"
@ -12,7 +12,7 @@ pub struct LocalStruct;
impl foreign_trait::ForeignTrait for LocalStruct {}
// @set impl = "$.index[*][?(@.docs=='foreign for local')].id"
// @is "$.index[*][?(@.docs=='foreign for local')].inner.for.inner.id" $LocalStruct
// @is "$.index[*][?(@.docs=='foreign for local')].inner.trait.id" $ForeignTrait
// @is "$.index[*][?(@.docs=='foreign for local')].inner.impl.for.resolved_path.id" $LocalStruct
// @is "$.index[*][?(@.docs=='foreign for local')].inner.impl.trait.id" $ForeignTrait
// @has "$.index[*][?(@.name=='LocalStruct')].inner.impls[*]" $impl
// @has "$.index[*][?(@.name=='LocalStruct')].inner.struct.impls[*]" $impl

View File

@ -4,19 +4,19 @@
#![no_core]
mod bar {
// @set baz = "$.index[*][?(@.kind=='struct')].id"
// @set baz = "$.index[*][?(@.inner.struct)].id"
pub struct Baz;
// @set impl = "$.index[*][?(@.kind=='impl')].id"
// @set impl = "$.index[*][?(@.inner.impl)].id"
impl Baz {
// @set doit = "$.index[*][?(@.kind=='function')].id"
// @set doit = "$.index[*][?(@.inner.function)].id"
pub fn doit() {}
}
}
// @set import = "$.index[*][?(@.kind=='import')].id"
// @set import = "$.index[*][?(@.inner.import)].id"
pub use bar::Baz;
// @is "$.index[*][?(@.kind=='module')].inner.items[*]" $import
// @is "$.index[*][?(@.kind=='import')].inner.id" $baz
// @is "$.index[*][?(@.kind=='struct')].inner.impls[*]" $impl
// @is "$.index[*][?(@.kind=='impl')].inner.items[*]" $doit
// @is "$.index[*].inner.module.items[*]" $import
// @is "$.index[*].inner.import.id" $baz
// @is "$.index[*].inner.struct.impls[*]" $impl
// @is "$.index[*].inner.impl.items[*]" $doit

View File

@ -3,7 +3,7 @@ extern crate foreign_struct;
/// ForeignStruct id hack
pub use foreign_struct::ForeignStruct as _;
// @set ForeignStruct = "$.index[*][?(@.docs=='ForeignStruct id hack')].inner.id"
// @set ForeignStruct = "$.index[*][?(@.docs=='ForeignStruct id hack')].inner.import.id"
pub trait LocalTrait {}
// @set LocalTrait = "$.index[*][?(@.name=='LocalTrait')].id"
@ -12,7 +12,7 @@ pub trait LocalTrait {}
impl LocalTrait for foreign_struct::ForeignStruct {}
// @set impl = "$.index[*][?(@.docs=='local for foreign')].id"
// @is "$.index[*][?(@.docs=='local for foreign')].inner.trait.id" $LocalTrait
// @is "$.index[*][?(@.docs=='local for foreign')].inner.for.inner.id" $ForeignStruct
// @is "$.index[*][?(@.docs=='local for foreign')].inner.impl.trait.id" $LocalTrait
// @is "$.index[*][?(@.docs=='local for foreign')].inner.impl.for.resolved_path.id" $ForeignStruct
// @is "$.index[*][?(@.name=='LocalTrait')].inner.implementations[*]" $impl
// @is "$.index[*][?(@.name=='LocalTrait')].inner.trait.implementations[*]" $impl

View File

@ -9,7 +9,7 @@ pub trait Trait {}
/// impl
impl Trait for Struct {}
// @is "$.index[*][?(@.name=='Struct')].inner.impls[*]" $impl
// @is "$.index[*][?(@.name=='Trait')].inner.implementations[*]" $impl
// @is "$.index[*][?(@.docs=='impl')].inner.trait.id" $trait
// @is "$.index[*][?(@.docs=='impl')].inner.for.inner.id" $struct
// @is "$.index[*][?(@.name=='Struct')].inner.struct.impls[*]" $impl
// @is "$.index[*][?(@.name=='Trait')].inner.trait.implementations[*]" $impl
// @is "$.index[*][?(@.docs=='impl')].inner.impl.trait.id" $trait
// @is "$.index[*][?(@.docs=='impl')].inner.impl.for.resolved_path.id" $struct

View File

@ -5,14 +5,13 @@
// @set Local = "$.index[*][?(@.name=='Local')].id"
pub trait Local {}
// @is "$.index[*][?(@.docs=='Local for bool')].inner.trait.id" $Local
// @is "$.index[*][?(@.docs=='Local for bool')].inner.for.kind" '"primitive"'
// @is "$.index[*][?(@.docs=='Local for bool')].inner.for.inner" '"bool"'
// @is "$.index[*][?(@.docs=='Local for bool')].inner.impl.trait.id" $Local
// @is "$.index[*][?(@.docs=='Local for bool')].inner.impl.for.primitive" '"bool"'
/// Local for bool
impl Local for bool {}
// @set impl = "$.index[*][?(@.docs=='Local for bool')].id"
// @is "$.index[*][?(@.name=='Local')].inner.implementations[*]" $impl
// @is "$.index[*][?(@.name=='Local')].inner.trait.implementations[*]" $impl
// FIXME(#101695): Test bool's `impls` include "Local for bool"
// @has "$.index[*][?(@.name=='bool')]"

View File

@ -2,6 +2,6 @@
pub trait Local {}
// @set impl = "$.index[*][?(@.docs=='local for bool')].id"
// @is "$.index[*][?(@.name=='Local')].inner.implementations[*]" $impl
// @is "$.index[*][?(@.name=='Local')].inner.trait.implementations[*]" $impl
/// local for bool
impl Local for bool {}

View File

@ -3,30 +3,27 @@
#![feature(no_core)]
#![no_core]
// @is "$.index[*][?(@.name=='longest')].inner.generics.params[0].name" \"\'a\"
// @is "$.index[*][?(@.name=='longest')].inner.generics.params[0].kind" '{"lifetime": {"outlives": []}}'
// @is "$.index[*][?(@.name=='longest')].inner.generics.params[0].kind" '{"lifetime": {"outlives": []}}'
// @count "$.index[*][?(@.name=='longest')].inner.generics.params[*]" 1
// @is "$.index[*][?(@.name=='longest')].inner.generics.where_predicates" []
// @is "$.index[*][?(@.name=='longest')].inner.function.generics.params[0].name" \"\'a\"
// @is "$.index[*][?(@.name=='longest')].inner.function.generics.params[0].kind" '{"lifetime": {"outlives": []}}'
// @is "$.index[*][?(@.name=='longest')].inner.function.generics.params[0].kind" '{"lifetime": {"outlives": []}}'
// @count "$.index[*][?(@.name=='longest')].inner.function.generics.params[*]" 1
// @is "$.index[*][?(@.name=='longest')].inner.function.generics.where_predicates" []
// @count "$.index[*][?(@.name=='longest')].inner.decl.inputs[*]" 2
// @is "$.index[*][?(@.name=='longest')].inner.decl.inputs[0][0]" '"l"'
// @is "$.index[*][?(@.name=='longest')].inner.decl.inputs[1][0]" '"r"'
// @count "$.index[*][?(@.name=='longest')].inner.function.decl.inputs[*]" 2
// @is "$.index[*][?(@.name=='longest')].inner.function.decl.inputs[0][0]" '"l"'
// @is "$.index[*][?(@.name=='longest')].inner.function.decl.inputs[1][0]" '"r"'
// @is "$.index[*][?(@.name=='longest')].inner.decl.inputs[0][1].kind" '"borrowed_ref"'
// @is "$.index[*][?(@.name=='longest')].inner.decl.inputs[0][1].inner.lifetime" \"\'a\"
// @is "$.index[*][?(@.name=='longest')].inner.decl.inputs[0][1].inner.mutable" false
// @is "$.index[*][?(@.name=='longest')].inner.decl.inputs[0][1].inner.type" '{"inner": "str", "kind": "primitive"}'
// @is "$.index[*][?(@.name=='longest')].inner.function.decl.inputs[0][1].borrowed_ref.lifetime" \"\'a\"
// @is "$.index[*][?(@.name=='longest')].inner.function.decl.inputs[0][1].borrowed_ref.mutable" false
// @is "$.index[*][?(@.name=='longest')].inner.function.decl.inputs[0][1].borrowed_ref.type.primitive" \"str\"
// @is "$.index[*][?(@.name=='longest')].inner.decl.inputs[1][1].kind" '"borrowed_ref"'
// @is "$.index[*][?(@.name=='longest')].inner.decl.inputs[1][1].inner.lifetime" \"\'a\"
// @is "$.index[*][?(@.name=='longest')].inner.decl.inputs[1][1].inner.mutable" false
// @is "$.index[*][?(@.name=='longest')].inner.decl.inputs[1][1].inner.type" '{"inner": "str", "kind": "primitive"}'
// @is "$.index[*][?(@.name=='longest')].inner.function.decl.inputs[1][1].borrowed_ref.lifetime" \"\'a\"
// @is "$.index[*][?(@.name=='longest')].inner.function.decl.inputs[1][1].borrowed_ref.mutable" false
// @is "$.index[*][?(@.name=='longest')].inner.function.decl.inputs[1][1].borrowed_ref.type.primitive" \"str\"
// @is "$.index[*][?(@.name=='longest')].inner.decl.output.kind" '"borrowed_ref"'
// @is "$.index[*][?(@.name=='longest')].inner.decl.output.inner.lifetime" \"\'a\"
// @is "$.index[*][?(@.name=='longest')].inner.decl.output.inner.mutable" false
// @is "$.index[*][?(@.name=='longest')].inner.decl.output.inner.type" '{"inner": "str", "kind": "primitive"}'
// @is "$.index[*][?(@.name=='longest')].inner.function.decl.output.borrowed_ref.lifetime" \"\'a\"
// @is "$.index[*][?(@.name=='longest')].inner.function.decl.output.borrowed_ref.mutable" false
// @is "$.index[*][?(@.name=='longest')].inner.function.decl.output.borrowed_ref.type.primitive" \"str\"
pub fn longest<'a>(l: &'a str, r: &'a str) -> &'a str {
if l.len() > r.len() { l } else { r }

View File

@ -3,21 +3,19 @@
#![feature(no_core)]
#![no_core]
// @count "$.index[*][?(@.name=='foo')].inner.generics.params[*]" 3
// @is "$.index[*][?(@.name=='foo')].inner.generics.where_predicates" []
// @is "$.index[*][?(@.name=='foo')].inner.generics.params[0].name" \"\'a\"
// @is "$.index[*][?(@.name=='foo')].inner.generics.params[1].name" \"\'b\"
// @is "$.index[*][?(@.name=='foo')].inner.generics.params[2].name" '"T"'
// @is "$.index[*][?(@.name=='foo')].inner.generics.params[0].kind.lifetime.outlives" []
// @is "$.index[*][?(@.name=='foo')].inner.generics.params[1].kind.lifetime.outlives" [\"\'a\"]
// @is "$.index[*][?(@.name=='foo')].inner.generics.params[2].kind.type.default" null
// @count "$.index[*][?(@.name=='foo')].inner.generics.params[2].kind.type.bounds[*]" 1
// @is "$.index[*][?(@.name=='foo')].inner.generics.params[2].kind.type.bounds[0].outlives" \"\'b\"
// @is "$.index[*][?(@.name=='foo')].inner.decl.inputs[0][1].kind" '"borrowed_ref"'
// @is "$.index[*][?(@.name=='foo')].inner.decl.inputs[0][1].inner.lifetime" \"\'a\"
// @is "$.index[*][?(@.name=='foo')].inner.decl.inputs[0][1].inner.mutable" false
// @is "$.index[*][?(@.name=='foo')].inner.decl.inputs[0][1].inner.type.kind" '"borrowed_ref"'
// @is "$.index[*][?(@.name=='foo')].inner.decl.inputs[0][1].inner.type.inner.lifetime" \"\'b\"
// @is "$.index[*][?(@.name=='foo')].inner.decl.inputs[0][1].inner.type.inner.mutable" false
// @is "$.index[*][?(@.name=='foo')].inner.decl.inputs[0][1].inner.type.inner.type" '{"inner": "T", "kind": "generic"}'
// @count "$.index[*][?(@.name=='foo')].inner.function.generics.params[*]" 3
// @is "$.index[*][?(@.name=='foo')].inner.function.generics.where_predicates" []
// @is "$.index[*][?(@.name=='foo')].inner.function.generics.params[0].name" \"\'a\"
// @is "$.index[*][?(@.name=='foo')].inner.function.generics.params[1].name" \"\'b\"
// @is "$.index[*][?(@.name=='foo')].inner.function.generics.params[2].name" '"T"'
// @is "$.index[*][?(@.name=='foo')].inner.function.generics.params[0].kind.lifetime.outlives" []
// @is "$.index[*][?(@.name=='foo')].inner.function.generics.params[1].kind.lifetime.outlives" [\"\'a\"]
// @is "$.index[*][?(@.name=='foo')].inner.function.generics.params[2].kind.type.default" null
// @count "$.index[*][?(@.name=='foo')].inner.function.generics.params[2].kind.type.bounds[*]" 1
// @is "$.index[*][?(@.name=='foo')].inner.function.generics.params[2].kind.type.bounds[0].outlives" \"\'b\"
// @is "$.index[*][?(@.name=='foo')].inner.function.decl.inputs[0][1].borrowed_ref.lifetime" \"\'a\"
// @is "$.index[*][?(@.name=='foo')].inner.function.decl.inputs[0][1].borrowed_ref.mutable" false
// @is "$.index[*][?(@.name=='foo')].inner.function.decl.inputs[0][1].borrowed_ref.type.borrowed_ref.lifetime" \"\'b\"
// @is "$.index[*][?(@.name=='foo')].inner.function.decl.inputs[0][1].borrowed_ref.type.borrowed_ref.mutable" false
// @is "$.index[*][?(@.name=='foo')].inner.function.decl.inputs[0][1].borrowed_ref.type.borrowed_ref.type.generic" \"T\"
pub fn foo<'a, 'b: 'a, T: 'b>(_: &'a &'b T) {}

View File

@ -8,47 +8,47 @@
pub struct Foo;
impl Foo {
// @is "$.index[*][?(@.name=='abi_rust')].inner.header.abi" \"Rust\"
// @is "$.index[*][?(@.name=='abi_rust')].inner.function.header.abi" \"Rust\"
pub fn abi_rust() {}
// @is "$.index[*][?(@.name=='abi_c')].inner.header.abi" '{"C": {"unwind": false}}'
// @is "$.index[*][?(@.name=='abi_c')].inner.function.header.abi" '{"C": {"unwind": false}}'
pub extern "C" fn abi_c() {}
// @is "$.index[*][?(@.name=='abi_system')].inner.header.abi" '{"System": {"unwind": false}}'
// @is "$.index[*][?(@.name=='abi_system')].inner.function.header.abi" '{"System": {"unwind": false}}'
pub extern "system" fn abi_system() {}
// @is "$.index[*][?(@.name=='abi_c_unwind')].inner.header.abi" '{"C": {"unwind": true}}'
// @is "$.index[*][?(@.name=='abi_c_unwind')].inner.function.header.abi" '{"C": {"unwind": true}}'
pub extern "C-unwind" fn abi_c_unwind() {}
// @is "$.index[*][?(@.name=='abi_system_unwind')].inner.header.abi" '{"System": {"unwind": true}}'
// @is "$.index[*][?(@.name=='abi_system_unwind')].inner.function.header.abi" '{"System": {"unwind": true}}'
pub extern "system-unwind" fn abi_system_unwind() {}
// @is "$.index[*][?(@.name=='abi_vectorcall')].inner.header.abi.Other" '"\"vectorcall\""'
// @is "$.index[*][?(@.name=='abi_vectorcall')].inner.function.header.abi.Other" '"\"vectorcall\""'
pub extern "vectorcall" fn abi_vectorcall() {}
// @is "$.index[*][?(@.name=='abi_vectorcall_unwind')].inner.header.abi.Other" '"\"vectorcall-unwind\""'
// @is "$.index[*][?(@.name=='abi_vectorcall_unwind')].inner.function.header.abi.Other" '"\"vectorcall-unwind\""'
pub extern "vectorcall-unwind" fn abi_vectorcall_unwind() {}
}
pub trait Bar {
// @is "$.index[*][?(@.name=='trait_abi_rust')].inner.header.abi" \"Rust\"
// @is "$.index[*][?(@.name=='trait_abi_rust')].inner.function.header.abi" \"Rust\"
fn trait_abi_rust() {}
// @is "$.index[*][?(@.name=='trait_abi_c')].inner.header.abi" '{"C": {"unwind": false}}'
// @is "$.index[*][?(@.name=='trait_abi_c')].inner.function.header.abi" '{"C": {"unwind": false}}'
extern "C" fn trait_abi_c() {}
// @is "$.index[*][?(@.name=='trait_abi_system')].inner.header.abi" '{"System": {"unwind": false}}'
// @is "$.index[*][?(@.name=='trait_abi_system')].inner.function.header.abi" '{"System": {"unwind": false}}'
extern "system" fn trait_abi_system() {}
// @is "$.index[*][?(@.name=='trait_abi_c_unwind')].inner.header.abi" '{"C": {"unwind": true}}'
// @is "$.index[*][?(@.name=='trait_abi_c_unwind')].inner.function.header.abi" '{"C": {"unwind": true}}'
extern "C-unwind" fn trait_abi_c_unwind() {}
// @is "$.index[*][?(@.name=='trait_abi_system_unwind')].inner.header.abi" '{"System": {"unwind": true}}'
// @is "$.index[*][?(@.name=='trait_abi_system_unwind')].inner.function.header.abi" '{"System": {"unwind": true}}'
extern "system-unwind" fn trait_abi_system_unwind() {}
// @is "$.index[*][?(@.name=='trait_abi_vectorcall')].inner.header.abi.Other" '"\"vectorcall\""'
// @is "$.index[*][?(@.name=='trait_abi_vectorcall')].inner.function.header.abi.Other" '"\"vectorcall\""'
extern "vectorcall" fn trait_abi_vectorcall() {}
// @is "$.index[*][?(@.name=='trait_abi_vectorcall_unwind')].inner.header.abi.Other" '"\"vectorcall-unwind\""'
// @is "$.index[*][?(@.name=='trait_abi_vectorcall_unwind')].inner.function.header.abi.Other" '"\"vectorcall-unwind\""'
extern "vectorcall-unwind" fn trait_abi_vectorcall_unwind() {}
}

View File

@ -3,34 +3,34 @@
pub struct Foo;
impl Foo {
// @is "$.index[*][?(@.name=='const_meth')].inner.header.async" false
// @is "$.index[*][?(@.name=='const_meth')].inner.header.const" true
// @is "$.index[*][?(@.name=='const_meth')].inner.header.unsafe" false
// @is "$.index[*][?(@.name=='const_meth')].inner.function.header.async" false
// @is "$.index[*][?(@.name=='const_meth')].inner.function.header.const" true
// @is "$.index[*][?(@.name=='const_meth')].inner.function.header.unsafe" false
pub const fn const_meth() {}
// @is "$.index[*][?(@.name=='nothing_meth')].inner.header.async" false
// @is "$.index[*][?(@.name=='nothing_meth')].inner.header.const" false
// @is "$.index[*][?(@.name=='nothing_meth')].inner.header.unsafe" false
// @is "$.index[*][?(@.name=='nothing_meth')].inner.function.header.async" false
// @is "$.index[*][?(@.name=='nothing_meth')].inner.function.header.const" false
// @is "$.index[*][?(@.name=='nothing_meth')].inner.function.header.unsafe" false
pub fn nothing_meth() {}
// @is "$.index[*][?(@.name=='unsafe_meth')].inner.header.async" false
// @is "$.index[*][?(@.name=='unsafe_meth')].inner.header.const" false
// @is "$.index[*][?(@.name=='unsafe_meth')].inner.header.unsafe" true
// @is "$.index[*][?(@.name=='unsafe_meth')].inner.function.header.async" false
// @is "$.index[*][?(@.name=='unsafe_meth')].inner.function.header.const" false
// @is "$.index[*][?(@.name=='unsafe_meth')].inner.function.header.unsafe" true
pub unsafe fn unsafe_meth() {}
// @is "$.index[*][?(@.name=='async_meth')].inner.header.async" true
// @is "$.index[*][?(@.name=='async_meth')].inner.header.const" false
// @is "$.index[*][?(@.name=='async_meth')].inner.header.unsafe" false
// @is "$.index[*][?(@.name=='async_meth')].inner.function.header.async" true
// @is "$.index[*][?(@.name=='async_meth')].inner.function.header.const" false
// @is "$.index[*][?(@.name=='async_meth')].inner.function.header.unsafe" false
pub async fn async_meth() {}
// @is "$.index[*][?(@.name=='async_unsafe_meth')].inner.header.async" true
// @is "$.index[*][?(@.name=='async_unsafe_meth')].inner.header.const" false
// @is "$.index[*][?(@.name=='async_unsafe_meth')].inner.header.unsafe" true
// @is "$.index[*][?(@.name=='async_unsafe_meth')].inner.function.header.async" true
// @is "$.index[*][?(@.name=='async_unsafe_meth')].inner.function.header.const" false
// @is "$.index[*][?(@.name=='async_unsafe_meth')].inner.function.header.unsafe" true
pub async unsafe fn async_unsafe_meth() {}
// @is "$.index[*][?(@.name=='const_unsafe_meth')].inner.header.async" false
// @is "$.index[*][?(@.name=='const_unsafe_meth')].inner.header.const" true
// @is "$.index[*][?(@.name=='const_unsafe_meth')].inner.header.unsafe" true
// @is "$.index[*][?(@.name=='const_unsafe_meth')].inner.function.header.async" false
// @is "$.index[*][?(@.name=='const_unsafe_meth')].inner.function.header.const" true
// @is "$.index[*][?(@.name=='const_unsafe_meth')].inner.function.header.unsafe" true
pub const unsafe fn const_unsafe_meth() {}
// It's impossible for a method to be both const and async, so no test for that

View File

@ -2,30 +2,31 @@
// compile-flags: --crate-version 1.0.0
// @is "$.crate_version" \"1.0.0\"
// @is "$.index[*][?(@.name=='nested')].kind" \"module\"
// @is "$.index[*][?(@.name=='nested')].inner.is_crate" true
// @has "$.index[*][?(@.name=='nested')].inner.module"
// @is "$.index[*][?(@.name=='nested')].inner.module.is_crate" true
// @set l1_id = "$.index[*][?(@.name=='l1')].id"
// @ismany "$.index[*][?(@.name=='nested')].inner.items[*]" $l1_id
// @ismany "$.index[*][?(@.name=='nested')].inner.module.items[*]" $l1_id
// @is "$.index[*][?(@.name=='l1')].kind" \"module\"
// @is "$.index[*][?(@.name=='l1')].inner.is_crate" false
// @has "$.index[*][?(@.name=='l1')].inner.module"
// @is "$.index[*][?(@.name=='l1')].inner.module.is_crate" false
pub mod l1 {
// @is "$.index[*][?(@.name=='l3')].kind" \"module\"
// @is "$.index[*][?(@.name=='l3')].inner.is_crate" false
// @has "$.index[*][?(@.name=='l3')].inner.module"
// @is "$.index[*][?(@.name=='l3')].inner.module.is_crate" false
// @set l3_id = "$.index[*][?(@.name=='l3')].id"
pub mod l3 {
// @is "$.index[*][?(@.name=='L4')].kind" \"struct\"
// @is "$.index[*][?(@.name=='L4')].inner.kind" \"unit\"
// @has "$.index[*][?(@.name=='L4')].inner.struct"
// @is "$.index[*][?(@.name=='L4')].inner.struct.kind" '"unit"'
// @set l4_id = "$.index[*][?(@.name=='L4')].id"
// @ismany "$.index[*][?(@.name=='l3')].inner.items[*]" $l4_id
// @ismany "$.index[*][?(@.name=='l3')].inner.module.items[*]" $l4_id
pub struct L4;
}
// @is "$.index[*][?(@.inner.source=='l3::L4')].kind" \"import\"
// @is "$.index[*][?(@.inner.source=='l3::L4')].inner.glob" false
// @is "$.index[*][?(@.inner.source=='l3::L4')].inner.id" $l4_id
// @set l4_use_id = "$.index[*][?(@.inner.source=='l3::L4')].id"
// @is "$.index[*][?(@.inner.import)].inner.import.glob" false
// @is "$.index[*][?(@.inner.import)].inner.import.source" '"l3::L4"'
// @is "$.index[*][?(@.inner.import)].inner.import.glob" false
// @is "$.index[*][?(@.inner.import)].inner.import.id" $l4_id
// @set l4_use_id = "$.index[*][?(@.inner.import)].id"
pub use l3::L4;
}
// @ismany "$.index[*][?(@.name=='l1')].inner.items[*]" $l3_id $l4_use_id
// @ismany "$.index[*][?(@.name=='l1')].inner.module.items[*]" $l3_id $l4_use_id

View File

@ -16,9 +16,9 @@ struct PhantomData<T_>;
pub struct Wrapper<T_>(PhantomData<T_>);
// @count "$.index[*][?(@.name=='foo')].inner.generics.where_predicates[0].bound_predicate.generic_params[*]" 2
// @is "$.index[*][?(@.name=='foo')].inner.generics.where_predicates[0].bound_predicate.generic_params[0].name" \"\'a\"
// @is "$.index[*][?(@.name=='foo')].inner.generics.where_predicates[0].bound_predicate.generic_params[0].kind" '{ "lifetime": { "outlives": [] } }'
// @is "$.index[*][?(@.name=='foo')].inner.generics.where_predicates[0].bound_predicate.generic_params[1].name" \"T\"
// @is "$.index[*][?(@.name=='foo')].inner.generics.where_predicates[0].bound_predicate.generic_params[1].kind" '{ "type": { "bounds": [], "default": null, "synthetic": false } }'
// @count "$.index[*][?(@.name=='foo')].inner.function.generics.where_predicates[0].bound_predicate.generic_params[*]" 2
// @is "$.index[*][?(@.name=='foo')].inner.function.generics.where_predicates[0].bound_predicate.generic_params[0].name" \"\'a\"
// @is "$.index[*][?(@.name=='foo')].inner.function.generics.where_predicates[0].bound_predicate.generic_params[0].kind" '{ "lifetime": { "outlives": [] } }'
// @is "$.index[*][?(@.name=='foo')].inner.function.generics.where_predicates[0].bound_predicate.generic_params[1].name" \"T\"
// @is "$.index[*][?(@.name=='foo')].inner.function.generics.where_predicates[0].bound_predicate.generic_params[1].kind" '{ "type": { "bounds": [], "default": null, "synthetic": false } }'
pub fn foo() where for<'a, T> &'a Wrapper<T>: Trait {}

View File

@ -14,7 +14,7 @@ mod prim_i32 {}
// @set local_i32 = "$.index[*][?(@.name=='i32')].id"
// @has "$.index[*][?(@.name=='local_primitive')]"
// @ismany "$.index[*][?(@.name=='local_primitive')].inner.items[*]" $local_i32
// @ismany "$.index[*][?(@.name=='local_primitive')].inner.module.items[*]" $local_i32
// @is "$.index[*][?(@.name=='local_primitive')].links['prim@i32']" $local_i32
// Let's ensure the `prim_i32` module isn't present in the output JSON:

View File

@ -15,7 +15,7 @@ impl i32 {
self
}
// @is "$.index[*][?(@.docs=='Only core can do this')].inner.items[*]" $identity
// @is "$.index[*][?(@.docs=='Only core can do this')].inner.impl.items[*]" $identity
}
// @set Trait = "$.index[*][?(@.name=='Trait')].id"
@ -30,5 +30,5 @@ mod prim_i32 {}
// @set i32 = "$.index[*][?(@.docs=='i32')].id"
// @is "$.index[*][?(@.docs=='i32')].name" '"i32"'
// @is "$.index[*][?(@.docs=='i32')].inner.name" '"i32"'
// @ismany "$.index[*][?(@.docs=='i32')].inner.impls[*]" $impl_i32 $impl_trait_for_i32
// @is "$.index[*][?(@.docs=='i32')].inner.primitive.name" '"i32"'
// @ismany "$.index[*][?(@.docs=='i32')].inner.primitive.impls[*]" $impl_i32 $impl_trait_for_i32

View File

@ -1,22 +1,17 @@
#![feature(never_type)]
// @is "$.index[*][?(@.name=='PrimNever')].visibility" \"public\"
// @is "$.index[*][?(@.name=='PrimNever')].inner.type.kind" \"primitive\"
// @is "$.index[*][?(@.name=='PrimNever')].inner.type.inner" \"never\"
// @is "$.index[*][?(@.name=='PrimNever')].inner.typedef.type.primitive" \"never\"
pub type PrimNever = !;
// @is "$.index[*][?(@.name=='PrimStr')].inner.type.kind" \"primitive\"
// @is "$.index[*][?(@.name=='PrimStr')].inner.type.inner" \"str\"
// @is "$.index[*][?(@.name=='PrimStr')].inner.typedef.type.primitive" \"str\"
pub type PrimStr = str;
// @is "$.index[*][?(@.name=='PrimBool')].inner.type.kind" \"primitive\"
// @is "$.index[*][?(@.name=='PrimBool')].inner.type.inner" \"bool\"
// @is "$.index[*][?(@.name=='PrimBool')].inner.typedef.type.primitive" \"bool\"
pub type PrimBool = bool;
// @is "$.index[*][?(@.name=='PrimChar')].inner.type.kind" \"primitive\"
// @is "$.index[*][?(@.name=='PrimChar')].inner.type.inner" \"char\"
// @is "$.index[*][?(@.name=='PrimChar')].inner.typedef.type.primitive" \"char\"
pub type PrimChar = char;
// @is "$.index[*][?(@.name=='PrimU8')].inner.type.kind" \"primitive\"
// @is "$.index[*][?(@.name=='PrimU8')].inner.type.inner" \"u8\"
// @is "$.index[*][?(@.name=='PrimU8')].inner.typedef.type.primitive" \"u8\"
pub type PrimU8 = u8;

View File

@ -13,8 +13,8 @@ mod usize {}
// @!is "$.index[*][?(@.name=='checked_add')]" $local_crate_id
// @!has "$.index[*][?(@.name=='is_ascii_uppercase')]"
// @is "$.index[*][?(@.kind=='import' && @.inner.name=='my_i32')].inner.id" null
// @is "$.index[*].inner.import[?(@.name=='my_i32')].id" null
pub use i32 as my_i32;
// @is "$.index[*][?(@.kind=='import' && @.inner.name=='u32')].inner.id" null
// @is "$.index[*].inner.import[?(@.name=='u32')].id" null
pub use u32;

View File

@ -1,10 +1,11 @@
// Regression Test for https://github.com/rust-lang/rust/issues/110138
// aux-build: enum_with_discriminant.rs
// ignore-tidy-linelength
#[doc(inline)]
pub extern crate enum_with_discriminant;
// @!has '$.index[*][?(@.docs == "Should not be inlined")]'
// @is '$.index[*][?(@.name == "enum_with_discriminant")].kind' '"extern_crate"'
// @has '$.index[*][?(@.name == "enum_with_discriminant")].inner.extern_crate'
// @set enum_with_discriminant = '$.index[*][?(@.name == "enum_with_discriminant")].id'
// @is '$.index[*][?(@.name == "doc_inline_external_crate")].inner.items[*]' $enum_with_discriminant
// @is '$.index[*][?(@.name == "doc_inline_external_crate")].inner.module.items[*]' $enum_with_discriminant

View File

@ -7,5 +7,5 @@
// ignore-tidy-linelength
// @is "$.index[*][?(@.kind=='module')].name" \"export_extern_crate_as_self\"
// @is "$.index[*][?(@.inner.module)].name" \"export_extern_crate_as_self\"
pub extern crate self as export_extern_crate_as_self; // Must be the same name as the crate already has

View File

@ -6,5 +6,6 @@ extern crate enum_with_discriminant;
pub use enum_with_discriminant::*;
// @!has '$.index[*][?(@.docs == "Should not be inlined")]'
// @set use = '$.index[*][?(@.inner.name == "enum_with_discriminant")].id'
// @is '$.index[*][?(@.name == "extern_crate_glob")].inner.items[*]' $use
// @is '$.index[*][?(@.inner.import)].inner.import.name' \"enum_with_discriminant\"
// @set use = '$.index[*][?(@.inner.import)].id'
// @is '$.index[*][?(@.name == "extern_crate_glob")].inner.module.items[*]' $use

View File

@ -3,26 +3,28 @@
#![feature(no_core)]
#![no_core]
// @set m1 = "$.index[*][?(@.name == 'm1' && @.kind == 'module')].id"
// @is "$.index[*][?(@.name == 'm1' && @.kind == 'module')].inner.items" []
// @is "$.index[*][?(@.name == 'm1' && @.kind == 'module')].inner.is_stripped" true
// @set m1 = "$.index[*][?(@.name == 'm1' && @.inner.module)].id"
// @is "$.index[*][?(@.name == 'm1')].inner.module.items" []
// @is "$.index[*][?(@.name == 'm1')].inner.module.is_stripped" true
mod m1 {
pub fn f() {}
}
// @set m2 = "$.index[*][?(@.name == 'm2' && @.kind == 'module')].id"
// @is "$.index[*][?(@.name == 'm2' && @.kind == 'module')].inner.items" []
// @is "$.index[*][?(@.name == 'm2' && @.kind == 'module')].inner.is_stripped" true
// @set m2 = "$.index[*][?(@.name == 'm2' && @.inner.module)].id"
// @is "$.index[*][?(@.name == 'm2')].inner.module.items" []
// @is "$.index[*][?(@.name == 'm2')].inner.module.is_stripped" true
mod m2 {
pub fn f(_: u8) {}
}
// @set m1_use = "$.index[*][?(@.inner.name=='m1')].id"
// @is "$.index[*][?(@.inner.name=='m1')].inner.id" $m1
// @is "$.index[*][?(@.inner.name=='m1')].inner.glob" true
// @set m1_use = "$.index[*][?(@.docs=='m1 re-export')].id"
// @is "$.index[*].inner.import[?(@.name=='m1')].id" $m1
// @is "$.index[*].inner.import[?(@.name=='m1')].glob" true
/// m1 re-export
pub use m1::*;
// @set m2_use = "$.index[*][?(@.inner.name=='m2')].id"
// @is "$.index[*][?(@.inner.name=='m2')].inner.id" $m2
// @is "$.index[*][?(@.inner.name=='m2')].inner.glob" true
// @set m2_use = "$.index[*][?(@.docs=='m2 re-export')].id"
// @is "$.index[*].inner.import[?(@.name=='m2')].id" $m2
// @is "$.index[*].inner.import[?(@.name=='m2')].glob" true
/// m2 re-export
pub use m2::*;
// @ismany "$.index[*][?(@.inner.is_crate==true)].inner.items[*]" $m1_use $m2_use
// @ismany "$.index[*].inner.module[?(@.is_crate==true)].items[*]" $m1_use $m2_use

View File

@ -1,8 +1,8 @@
// Regression test for https://github.com/rust-lang/rust/issues/100973
// @is "$.index[*][?(@.name=='m1' && @.kind == 'module')].inner.is_stripped" true
// @is "$.index[*][?(@.name=='m1' && @.inner.module)].inner.module.is_stripped" true
// @set m1 = "$.index[*][?(@.name=='m1')].id"
mod m1 {}
// @is "$.index[*][?(@.inner.name=='m1' && @.kind=='import')].inner.id" $m1
// @is "$.index[*][?(@.inner.import)].inner.import.id" $m1
pub use m1::*;

View File

@ -3,8 +3,7 @@
#![no_core]
#![feature(no_core)]
// @is "$.index[*][?(@.name=='mod1')].kind" \"module\"
// @is "$.index[*][?(@.name=='mod1')].inner.is_stripped" "true"
// @is "$.index[*][?(@.name=='mod1')].inner.module.is_stripped" "true"
mod mod1 {
extern "C" {
// @set public_fn_id = "$.index[*][?(@.name=='public_fn')].id"
@ -12,12 +11,12 @@ mod mod1 {
// @!has "$.index[*][?(@.name=='private_fn')]"
fn private_fn();
}
// @ismany "$.index[*][?(@.name=='mod1')].inner.items[*]" $public_fn_id
// @ismany "$.index[*][?(@.name=='mod1')].inner.module.items[*]" $public_fn_id
// @set mod1_id = "$.index[*][?(@.name=='mod1')].id"
}
// @is "$.index[*][?(@.kind=='import')].inner.glob" true
// @is "$.index[*][?(@.kind=='import')].inner.id" $mod1_id
// @set use_id = "$.index[*][?(@.kind=='import')].id"
// @ismany "$.index[*][?(@.name=='glob_extern')].inner.items[*]" $use_id
// @is "$.index[*][?(@.inner.import)].inner.import.glob" true
// @is "$.index[*][?(@.inner.import)].inner.import.id" $mod1_id
// @set use_id = "$.index[*][?(@.inner.import)].id"
// @ismany "$.index[*][?(@.name=='glob_extern')].inner.module.items[*]" $use_id
pub use mod1::*;

View File

@ -3,11 +3,9 @@
#![no_core]
#![feature(no_core)]
// @is "$.index[*][?(@.name=='mod1')].kind" \"module\"
// @is "$.index[*][?(@.name=='mod1')].inner.is_stripped" "true"
// @is "$.index[*][?(@.name=='mod1')].inner.module.is_stripped" "true"
mod mod1 {
// @is "$.index[*][?(@.name=='mod2')].kind" \"module\"
// @is "$.index[*][?(@.name=='mod2')].inner.is_stripped" "true"
// @is "$.index[*][?(@.name=='mod2')].inner.module.is_stripped" "true"
mod mod2 {
// @set m2pub_id = "$.index[*][?(@.name=='Mod2Public')].id"
pub struct Mod2Public;
@ -16,7 +14,9 @@ mod mod1 {
struct Mod2Private;
}
// @set mod2_use_id = "$.index[*][?(@.kind=='import' && @.inner.name=='mod2')].id"
// @set mod2_use_id = "$.index[*][?(@.docs=='Mod2 re-export')].id"
// @is "$.index[*][?(@.docs=='Mod2 re-export')].inner.import.name" \"mod2\"
/// Mod2 re-export
pub use self::mod2::*;
// @set m1pub_id = "$.index[*][?(@.name=='Mod1Public')].id"
@ -25,9 +25,11 @@ mod mod1 {
struct Mod1Private;
}
// @set mod1_use_id = "$.index[*][?(@.kind=='import' && @.inner.name=='mod1')].id"
// @set mod1_use_id = "$.index[*][?(@.docs=='Mod1 re-export')].id"
// @is "$.index[*][?(@.docs=='Mod1 re-export')].inner.import.name" \"mod1\"
/// Mod1 re-export
pub use mod1::*;
// @ismany "$.index[*][?(@.name=='mod2')].inner.items[*]" $m2pub_id
// @ismany "$.index[*][?(@.name=='mod1')].inner.items[*]" $m1pub_id $mod2_use_id
// @ismany "$.index[*][?(@.name=='glob_private')].inner.items[*]" $mod1_use_id
// @ismany "$.index[*][?(@.name=='mod2')].inner.module.items[*]" $m2pub_id
// @ismany "$.index[*][?(@.name=='mod1')].inner.module.items[*]" $m1pub_id $mod2_use_id
// @ismany "$.index[*][?(@.name=='glob_private')].inner.module.items[*]" $mod1_use_id

View File

@ -7,10 +7,10 @@ mod foo {
pub struct Foo;
}
// @has "$.index[*][?(@.kind=='import' && @.inner.source=='foo::Foo')]"
// @has "$.index[*].inner[?(@.import.source=='foo::Foo')]"
pub use foo::Foo;
pub mod bar {
// @has "$.index[*][?(@.kind=='import' && @.inner.source=='crate::foo::Foo')]"
// @has "$.index[*].inner[?(@.import.source=='crate::foo::Foo')]"
pub use crate::foo::Foo;
}

View File

@ -3,18 +3,20 @@
pub mod foo {
// @set bar_id = "$.index[*][?(@.name=='Bar')].id"
// @ismany "$.index[*][?(@.name=='foo')].inner.items[*]" $bar_id
// @ismany "$.index[*][?(@.name=='foo')].inner.module.items[*]" $bar_id
pub struct Bar;
}
// @set root_import_id = "$.index[*][?(@.inner.source=='foo::Bar')].id"
// @is "$.index[*][?(@.inner.source=='foo::Bar')].inner.id" $bar_id
// @has "$.index[*][?(@.name=='in_root_and_mod_pub')].inner.items[*]" $root_import_id
// @set root_import_id = "$.index[*][?(@.docs=='Outer re-export')].id"
// @is "$.index[*].inner[?(@.import.source=='foo::Bar')].import.id" $bar_id
// @has "$.index[*][?(@.name=='in_root_and_mod_pub')].inner.module.items[*]" $root_import_id
/// Outer re-export
pub use foo::Bar;
pub mod baz {
// @set baz_import_id = "$.index[*][?(@.inner.source=='crate::foo::Bar')].id"
// @is "$.index[*][?(@.inner.source=='crate::foo::Bar')].inner.id" $bar_id
// @ismany "$.index[*][?(@.name=='baz')].inner.items[*]" $baz_import_id
// @set baz_import_id = "$.index[*][?(@.docs=='Inner re-export')].id"
// @is "$.index[*].inner[?(@.import.source=='crate::foo::Bar')].import.id" $bar_id
// @ismany "$.index[*][?(@.name=='baz')].inner.module.items[*]" $baz_import_id
/// Inner re-export
pub use crate::foo::Bar;
}

View File

@ -9,7 +9,8 @@ macro_rules! repro {
() => {};
}
// @set repro2_id = "$.index[*][?(@.inner.name=='repro2')].id"
// @set repro2_id = "$.index[*][?(@.docs=='Re-export')].id"
/// Re-export
pub use crate::repro as repro2;
// @ismany "$.index[*][?(@.name=='macro')].inner.items[*]" $repro_id $repro2_id
// @ismany "$.index[*][?(@.name=='macro')].inner.module.items[*]" $repro_id $repro2_id

View File

@ -9,6 +9,6 @@ mod m1 {
pub use m1::x;
// @has "$.index[*][?(@.name=='x' && @.kind=='function')]"
// @has "$.index[*][?(@.kind=='import' && @.inner.name=='x')].inner.source" '"m1::x"'
// @has "$.index[*][?(@.name=='x' && @.inner.function)]"
// @has "$.index[*].inner[?(@.import.name=='x')].import.source" '"m1::x"'
// @!has "$.index[*][?(@.name=='m1')]"

View File

@ -11,18 +11,18 @@ extern crate pub_struct as foo;
#[doc(inline)]
// @set crate_use_id = "$.index[*][?(@.docs=='Hack A')].id"
// @set foo_id = "$.index[*][?(@.docs=='Hack A')].inner.id"
// @set foo_id = "$.index[*][?(@.docs=='Hack A')].inner.import.id"
/// Hack A
pub use foo::Foo;
// @set bar_id = "$.index[*][?(@.name=='bar')].id"
pub mod bar {
// @is "$.index[*][?(@.docs=='Hack B')].inner.id" $foo_id
// @is "$.index[*][?(@.docs=='Hack B')].inner.import.id" $foo_id
// @set bar_use_id = "$.index[*][?(@.docs=='Hack B')].id"
// @ismany "$.index[*][?(@.name=='bar')].inner.items[*]" $bar_use_id
// @ismany "$.index[*][?(@.name=='bar')].inner.module.items[*]" $bar_use_id
/// Hack B
pub use foo::Foo;
}
// @ismany "$.index[*][?(@.kind=='import')].id" $crate_use_id $bar_use_id
// @ismany "$.index[*][?(@.name=='private_twice_one_inline')].inner.items[*]" $bar_id $crate_use_id
// @ismany "$.index[*][?(@.inner.import)].id" $crate_use_id $bar_use_id
// @ismany "$.index[*][?(@.name=='private_twice_one_inline')].inner.module.items[*]" $bar_id $crate_use_id

View File

@ -8,15 +8,19 @@
// @!has "$.index[*][?(@.name=='style')]"
mod style {
// @set color_struct_id = "$.index[*][?(@.kind=='struct' && @.name=='Color')].id"
// @set color_struct_id = "$.index[*][?(@.inner.struct && @.name=='Color')].id"
pub struct Color;
}
// @is "$.index[*][?(@.kind=='import' && @.inner.name=='Color')].inner.id" $color_struct_id
// @set color_export_id = "$.index[*][?(@.kind=='import' && @.inner.name=='Color')].id"
// @is "$.index[*][?(@.docs=='First re-export')].inner.import.id" $color_struct_id
// @is "$.index[*][?(@.docs=='First re-export')].inner.import.name" \"Color\"
// @set color_export_id = "$.index[*][?(@.docs=='First re-export')].id"
/// First re-export
pub use style::Color;
// @is "$.index[*][?(@.kind=='import' && @.inner.name=='Colour')].inner.id" $color_struct_id
// @set colour_export_id = "$.index[*][?(@.kind=='import' && @.inner.name=='Colour')].id"
// @is "$.index[*][?(@.docs=='Second re-export')].inner.import.id" $color_struct_id
// @is "$.index[*][?(@.docs=='Second re-export')].inner.import.name" \"Colour\"
// @set colour_export_id = "$.index[*][?(@.docs=='Second re-export')].id"
/// Second re-export
pub use style::Color as Colour;
// @ismany "$.index[*][?(@.name=='private_two_names')].inner.items[*]" $color_export_id $colour_export_id
// @ismany "$.index[*][?(@.name=='private_two_names')].inner.module.items[*]" $color_export_id $colour_export_id

View File

@ -1,9 +1,9 @@
// Regression test for <https://github.com/rust-lang/rust/issues/102583>.
// @set impl_S = "$.index[*][?(@.docs=='impl S')].id"
// @has "$.index[*][?(@.name=='S')].inner.impls[*]" $impl_S
// @has "$.index[*][?(@.name=='S')].inner.struct.impls[*]" $impl_S
// @set is_present = "$.index[*][?(@.name=='is_present')].id"
// @is "$.index[*][?(@.docs=='impl S')].inner.items[*]" $is_present
// @is "$.index[*][?(@.docs=='impl S')].inner.impl.items[*]" $is_present
// @!has "$.index[*][?(@.name=='hidden_impl')]"
// @!has "$.index[*][?(@.name=='hidden_fn')]"

View File

@ -3,11 +3,11 @@
#![no_core]
#![feature(no_core)]
// @!has "$.index[*][?(@.kind=='inner')]"
// @!has "$.index[*][?(@.name=='inner')]"
mod inner {
// @has "$.index[*][?(@.name=='Public')]"
pub struct Public;
}
// @is "$.index[*][?(@.kind=='import')].inner.name" \"NewName\"
// @is "$.index[*][?(@.inner.import)].inner.import.name" \"NewName\"
pub use inner::Public as NewName;

View File

@ -6,12 +6,13 @@
// @set inner_id = "$.index[*][?(@.name=='inner')].id"
pub mod inner {
// @set public_id = "$.index[*][?(@.name=='Public')].id"
// @ismany "$.index[*][?(@.name=='inner')].inner.items[*]" $public_id
// @ismany "$.index[*][?(@.name=='inner')].inner.module.items[*]" $public_id
pub struct Public;
}
// @set import_id = "$.index[*][?(@.inner.name=='NewName')].id"
// @!has "$.index[*][?(@.inner.name=='Public')]"
// @is "$.index[*][?(@.inner.name=='NewName')].inner.source" \"inner::Public\"
// @set import_id = "$.index[*][?(@.docs=='Re-export')].id"
// @!has "$.index[*].inner[?(@.import.name=='Public')]"
// @is "$.index[*].inner[?(@.import.name=='NewName')].import.source" \"inner::Public\"
/// Re-export
pub use inner::Public as NewName;
// @ismany "$.index[*][?(@.name=='rename_public')].inner.items[*]" $inner_id $import_id
// @ismany "$.index[*][?(@.name=='rename_public')].inner.module.items[*]" $inner_id $import_id

View File

@ -16,10 +16,10 @@ pub mod nested {
pub fn Foo() {}
}
// @ismany "$.index[*][?(@.inner.name == 'Foo' && @.kind == 'import')].inner.id" $foo_fn $foo_struct
// @ismany "$.index[*][?(@.inner.name == 'Bar' && @.kind == 'import')].inner.id" $foo_fn $foo_struct
// @ismany "$.index[*].inner[?(@.import.name == 'Foo')].import.id" $foo_fn $foo_struct
// @ismany "$.index[*].inner[?(@.import.name == 'Bar')].import.id" $foo_fn $foo_struct
// @count "$.index[*][?(@.inner.name == 'Foo' && @.kind == 'import')]" 2
// @count "$.index[*].inner[?(@.import.name == 'Foo')]" 2
pub use nested::Foo;
// @count "$.index[*][?(@.inner.name == 'Bar' && @.kind == 'import')]" 2
// @count "$.index[*].inner[?(@.import.name == 'Bar')]" 2
pub use Foo as Bar;

View File

@ -11,11 +11,13 @@ mod inner {
pub trait Trait {}
}
// @set export_id = "$.index[*][?(@.inner.name=='Trait')].id"
// @is "$.index[*][?(@.inner.name=='Trait')].inner.id" $trait_id
// @set export_id = "$.index[*][?(@.docs=='First re-export')].id"
// @is "$.index[*].inner[?(@.import.name=='Trait')].import.id" $trait_id
/// First re-export
pub use inner::Trait;
// @set reexport_id = "$.index[*][?(@.inner.name=='Reexport')].id"
// @is "$.index[*][?(@.inner.name=='Reexport')].inner.id" $trait_id
// @set reexport_id = "$.index[*][?(@.docs=='Second re-export')].id"
// @is "$.index[*].inner[?(@.import.name=='Reexport')].import.id" $trait_id
/// Second re-export
pub use inner::Trait as Reexport;
// @ismany "$.index[*][?(@.name=='same_type_reexported_more_than_once')].inner.items[*]" $reexport_id $export_id
// @ismany "$.index[*][?(@.name=='same_type_reexported_more_than_once')].inner.module.items[*]" $reexport_id $export_id

View File

@ -8,9 +8,9 @@ mod inner {
pub struct Public;
}
// @is "$.index[*][?(@.kind=='import')].inner.name" \"Public\"
// @is "$.index[*][?(@.kind=='import')].inner.id" $pub_id
// @set use_id = "$.index[*][?(@.kind=='import')].id"
// @is "$.index[*][?(@.inner.import)].inner.import.name" \"Public\"
// @is "$.index[*][?(@.inner.import)].inner.import.id" $pub_id
// @set use_id = "$.index[*][?(@.inner.import)].id"
pub use inner::Public;
// @ismany "$.index[*][?(@.name=='simple_private')].inner.items[*]" $use_id
// @ismany "$.index[*][?(@.name=='simple_private')].inner.module.items[*]" $use_id

View File

@ -7,12 +7,13 @@
pub mod inner {
// @set public_id = "$.index[*][?(@.name=='Public')].id"
// @ismany "$.index[*][?(@.name=='inner')].inner.items[*]" $public_id
// @ismany "$.index[*][?(@.name=='inner')].inner.module.items[*]" $public_id
pub struct Public;
}
// @set import_id = "$.index[*][?(@.inner.name=='Public')].id"
// @is "$.index[*][?(@.inner.name=='Public')].inner.source" \"inner::Public\"
// @set import_id = "$.index[*][?(@.docs=='Outer')].id"
// @is "$.index[*][?(@.docs=='Outer')].inner.import.source" \"inner::Public\"
/// Outer
pub use inner::Public;
// @ismany "$.index[*][?(@.name=='simple_public')].inner.items[*]" $import_id $inner_id
// @ismany "$.index[*][?(@.name=='simple_public')].inner.module.items[*]" $import_id $inner_id

View File

@ -8,8 +8,8 @@ mod secret {
pub struct Secret;
}
// @is "$.index[*][?(@.name=='get_secret')].kind" \"function\"
// @is "$.index[*][?(@.name=='get_secret')].inner.decl.output.inner.name" \"secret::Secret\"
// @has "$.index[*][?(@.name=='get_secret')].inner.function"
// @is "$.index[*][?(@.name=='get_secret')].inner.function.decl.output.resolved_path.name" \"secret::Secret\"
pub fn get_secret() -> secret::Secret {
secret::Secret
}

View File

@ -5,7 +5,7 @@ pub struct Demo {
// @set x = "$.index[*][?(@.name=='x')].id"
// @set y = "$.index[*][?(@.name=='y')].id"
// @is "$.index[*][?(@.name=='Demo')].inner.kind.plain.fields[0]" $x
// @is "$.index[*][?(@.name=='Demo')].inner.kind.plain.fields[1]" $y
// @count "$.index[*][?(@.name=='Demo')].inner.kind.plain.fields[*]" 2
// @is "$.index[*][?(@.name=='Demo')].inner.kind.plain.fields_stripped" false
// @is "$.index[*][?(@.name=='Demo')].inner.struct.kind.plain.fields[0]" $x
// @is "$.index[*][?(@.name=='Demo')].inner.struct.kind.plain.fields[1]" $y
// @count "$.index[*][?(@.name=='Demo')].inner.struct.kind.plain.fields[*]" 2
// @is "$.index[*][?(@.name=='Demo')].inner.struct.kind.plain.fields_stripped" false

View File

@ -6,6 +6,6 @@ pub struct Demo {
// @set x = "$.index[*][?(@.name=='x')].id"
// @!has "$.index[*][?(@.name=='y')].id"
// @is "$.index[*][?(@.name=='Demo')].inner.kind.plain.fields[0]" $x
// @count "$.index[*][?(@.name=='Demo')].inner.kind.plain.fields[*]" 1
// @is "$.index[*][?(@.name=='Demo')].inner.kind.plain.fields_stripped" true
// @is "$.index[*][?(@.name=='Demo')].inner.struct.kind.plain.fields[0]" $x
// @count "$.index[*][?(@.name=='Demo')].inner.struct.kind.plain.fields[*]" 1
// @is "$.index[*][?(@.name=='Demo')].inner.struct.kind.plain.fields_stripped" true

View File

@ -1,5 +1,5 @@
// @is "$.index[*][?(@.name=='PlainEmpty')].visibility" \"public\"
// @is "$.index[*][?(@.name=='PlainEmpty')].kind" \"struct\"
// @is "$.index[*][?(@.name=='PlainEmpty')].inner.kind.plain.fields_stripped" false
// @is "$.index[*][?(@.name=='PlainEmpty')].inner.kind.plain.fields" []
// @has "$.index[*][?(@.name=='PlainEmpty')].inner.struct"
// @is "$.index[*][?(@.name=='PlainEmpty')].inner.struct.kind.plain.fields_stripped" false
// @is "$.index[*][?(@.name=='PlainEmpty')].inner.struct.kind.plain.fields" []
pub struct PlainEmpty {}

View File

@ -4,6 +4,6 @@ pub struct Demo {
}
// @set x = "$.index[*][?(@.name=='x')].id"
// @is "$.index[*][?(@.name=='Demo')].inner.kind.plain.fields[0]" $x
// @count "$.index[*][?(@.name=='Demo')].inner.kind.plain.fields[*]" 1
// @is "$.index[*][?(@.name=='Demo')].inner.kind.plain.fields_stripped" true
// @is "$.index[*][?(@.name=='Demo')].inner.struct.kind.plain.fields[0]" $x
// @count "$.index[*][?(@.name=='Demo')].inner.struct.kind.plain.fields[*]" 1
// @is "$.index[*][?(@.name=='Demo')].inner.struct.kind.plain.fields_stripped" true

View File

@ -1,4 +1,4 @@
// @is "$.index[*][?(@.name=='Tuple')].visibility" \"public\"
// @is "$.index[*][?(@.name=='Tuple')].kind" \"struct\"
// @is "$.index[*][?(@.name=='Tuple')].inner.kind.tuple" '[null, null]'
// @has "$.index[*][?(@.name=='Tuple')].inner.struct"
// @is "$.index[*][?(@.name=='Tuple')].inner.struct.kind.tuple" '[null, null]'
pub struct Tuple(u32, String);

View File

@ -1,2 +1,2 @@
// @is "$.index[*][?(@.name=='TupleUnit')].inner.kind.tuple" []
// @is "$.index[*][?(@.name=='TupleUnit')].inner.struct.kind.tuple" []
pub struct TupleUnit();

View File

@ -7,7 +7,7 @@ pub struct Demo(
// @set field = "$.index[*][?(@.docs=='field')].id"
// @is "$.index[*][?(@.name=='Demo')].inner.kind.tuple[0]" null
// @is "$.index[*][?(@.name=='Demo')].inner.kind.tuple[1]" $field
// @is "$.index[*][?(@.name=='Demo')].inner.kind.tuple[2]" null
// @count "$.index[*][?(@.name=='Demo')].inner.kind.tuple[*]" 3
// @is "$.index[*][?(@.name=='Demo')].inner.struct.kind.tuple[0]" null
// @is "$.index[*][?(@.name=='Demo')].inner.struct.kind.tuple[1]" $field
// @is "$.index[*][?(@.name=='Demo')].inner.struct.kind.tuple[2]" null
// @count "$.index[*][?(@.name=='Demo')].inner.struct.kind.tuple[*]" 3

View File

@ -1,4 +1,4 @@
// @is "$.index[*][?(@.name=='Unit')].visibility" \"public\"
// @is "$.index[*][?(@.name=='Unit')].kind" \"struct\"
// @is "$.index[*][?(@.name=='Unit')].inner.kind" \"unit\"
// @has "$.index[*][?(@.name=='Unit')].inner.struct"
// @is "$.index[*][?(@.name=='Unit')].inner.struct.kind" \"unit\"
pub struct Unit;

Some files were not shown because too many files have changed in this diff Show More