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 {
let is_auto = trait_.is_auto(tcx);
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_;
Trait {
is_auto,
is_unsafe,
is_object_safe,
items: ids(items, tcx),
generics: generics.into_tcx(tcx),
bounds: bounds.into_tcx(tcx),

View File

@ -8,7 +8,7 @@
use std::path::PathBuf;
/// 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
/// 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 is_auto: bool,
pub is_unsafe: bool,
pub is_object_safe: bool,
pub items: Vec<Id>,
pub generics: Generics,
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 - '//*[@class="object-safety-info"]' ''
// @!has - '//*[@id="object-safety"]' ''
// @count - '//*[@class="object-safety-info"]' 0
// @count - '//*[@id="object-safety"]' 0
pub struct Foo;