pub struct IndexedCrate<'a> { /* private fields */ }
Expand description
The rustdoc for a crate, together with associated indexed data to speed up common operations.
Besides the parsed rustdoc, it also contains some manually-inlined rustdoc_types::Trait
s
of the most common built-in traits.
This is a temporary step, until we’re able to combine rustdocs of multiple crates.
Implementations§
Source§impl<'a> IndexedCrate<'a>
impl<'a> IndexedCrate<'a>
pub fn new(crate_: &'a Crate) -> Self
Sourcepub fn publicly_importable_names(&self, id: &'a Id) -> Vec<ImportablePath<'a>>
pub fn publicly_importable_names(&self, id: &'a Id) -> Vec<ImportablePath<'a>>
Return all the paths with which the given item can be imported from this crate.
Sourcepub fn is_trait_sealed(&self, id: &'a Id) -> bool
pub fn is_trait_sealed(&self, id: &'a Id) -> bool
Return true
if our analysis indicates the trait is sealed, and false
otherwise.
Our analysis is conservative: it has false-negatives but no false-positives.
If this method returns true
, the trait is definitely sealed or else you’ve found a bug.
It may be possible to construct traits that technically are sealed for which our analysis
returns false
.
The goal of this method is to reflect author intent, not technicalities. When Rustaceans seal traits on purpose, they do so with a limited number of techniques that are well-defined and immediately recognizable to readers in the community: https://predr.ag/blog/definitive-guide-to-sealed-traits-in-rust/
The analysis here looks for such techniques, which are always applied at the type signature level. It does not inspect function bodies or do interprocedural analysis.
§Panics
This method will panic if the provided Id
is not an item in this crate.
If the provided Id
is not a trait, the result is sound but not specified.
It could be any return value or a panic, but not undefined behavior.
Sourcepub fn is_trait_public_api_sealed(&self, id: &'a Id) -> bool
pub fn is_trait_public_api_sealed(&self, id: &'a Id) -> bool
Report whether our analysis indicates the trait can be implemented within public API.
A trait can be implemented within public API if the trait is not sealed, and implementing it
does not require using any non-public-API items in the impl
. A non-public-API item is
one that is #[doc(hidden)]
but not #[deprecated]
.
Our analysis is conservative: it has false-negatives but no false-positives.
If this method returns true
, the trait is definitely not implementable within public API
or else you’ve found a bug. It may be possible to construct traits that technically
are not implementable within public API for which our analysis returns false
.
Our analysis does not inspect function bodies or do interprocedural analysis.
The same caveats apply as for the Self::is_trait_sealed
function above.
§Panics
This method will panic if the provided Id
is not an item in this crate.
If the provided Id
is not a trait, the result is sound but not specified.
It could be any return value or a panic, but not undefined behavior.
Trait Implementations§
Source§impl<'a> Clone for IndexedCrate<'a>
impl<'a> Clone for IndexedCrate<'a>
Source§fn clone(&self) -> IndexedCrate<'a>
fn clone(&self) -> IndexedCrate<'a>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreAuto Trait Implementations§
impl<'a> Freeze for IndexedCrate<'a>
impl<'a> RefUnwindSafe for IndexedCrate<'a>
impl<'a> Send for IndexedCrate<'a>
impl<'a> Sync for IndexedCrate<'a>
impl<'a> Unpin for IndexedCrate<'a>
impl<'a> UnwindSafe for IndexedCrate<'a>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more