Rollup merge of #119246 - GuillaumeGomez:trait-is_object_safe-json, r=aDotInTheVoid

[rustdoc] Add `is_object_safe` information for traits in JSON output

As asked by `@obi1kenobi` [here](https://github.com/rust-lang/rust/pull/113241#issuecomment-1868213677).

cc `@aDotInTheVoid`
r? `@notriddle`
This commit is contained in:
Matthias Krüger 2023-12-23 20:02:28 +01:00 committed by GitHub
commit 81161a6013
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 25 additions and 3 deletions

View File

@ -648,10 +648,12 @@ impl FromWithTcx<clean::Trait> for Trait {
fn from_tcx(trait_: clean::Trait, tcx: TyCtxt<'_>) -> Self { fn from_tcx(trait_: clean::Trait, tcx: TyCtxt<'_>) -> Self {
let is_auto = trait_.is_auto(tcx); let is_auto = trait_.is_auto(tcx);
let is_unsafe = trait_.unsafety(tcx) == rustc_hir::Unsafety::Unsafe; let is_unsafe = trait_.unsafety(tcx) == rustc_hir::Unsafety::Unsafe;
let is_object_safe = trait_.is_object_safe(tcx);
let clean::Trait { items, generics, bounds, .. } = trait_; let clean::Trait { items, generics, bounds, .. } = trait_;
Trait { Trait {
is_auto, is_auto,
is_unsafe, is_unsafe,
is_object_safe,
items: ids(items, tcx), items: ids(items, tcx),
generics: generics.into_tcx(tcx), generics: generics.into_tcx(tcx),
bounds: bounds.into_tcx(tcx), bounds: bounds.into_tcx(tcx),

View File

@ -8,7 +8,7 @@
use std::path::PathBuf; use std::path::PathBuf;
/// rustdoc format-version. /// rustdoc format-version.
pub const FORMAT_VERSION: u32 = 27; pub const FORMAT_VERSION: u32 = 28;
/// A `Crate` is the root of the emitted JSON blob. It contains all type/documentation information /// A `Crate` is the root of the emitted JSON blob. It contains all type/documentation information
/// about the language items in the local crate, as well as info about external items to allow /// about the language items in the local crate, as well as info about external items to allow
@ -634,6 +634,7 @@ pub struct FnDecl {
pub struct Trait { pub struct Trait {
pub is_auto: bool, pub is_auto: bool,
pub is_unsafe: bool, pub is_unsafe: bool,
pub is_object_safe: bool,
pub items: Vec<Id>, pub items: Vec<Id>,
pub generics: Generics, pub generics: Generics,
pub bounds: Vec<GenericBound>, pub bounds: Vec<GenericBound>,

View File

@ -0,0 +1,19 @@
#![no_std]
// @has "$.index[*][?(@.name=='FooUnsafe')]"
// @is "$.index[*][?(@.name=='FooUnsafe')].inner.trait.is_object_safe" false
pub trait FooUnsafe {
fn foo() -> Self;
}
// @has "$.index[*][?(@.name=='BarUnsafe')]"
// @is "$.index[*][?(@.name=='BarUnsafe')].inner.trait.is_object_safe" false
pub trait BarUnsafe<T> {
fn foo(i: T);
}
// @has "$.index[*][?(@.name=='FooSafe')]"
// @is "$.index[*][?(@.name=='FooSafe')].inner.trait.is_object_safe" true
pub trait FooSafe {
fn foo(&self);
}

View File

@ -22,6 +22,6 @@ pub trait Safe {
} }
// @has 'foo/struct.Foo.html' // @has 'foo/struct.Foo.html'
// @!has - '//*[@class="object-safety-info"]' '' // @count - '//*[@class="object-safety-info"]' 0
// @!has - '//*[@id="object-safety"]' '' // @count - '//*[@id="object-safety"]' 0
pub struct Foo; pub struct Foo;