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,
or does not correspond to a trait in this crate.
§Re-entrancy
This method is re-entrant: calling it may cause additional calls to itself, inquiring about the sealed-ness of a trait’s supertraits.
We rely on rustc to reject supertrait cycles in order to prevent infinite loops. Here’s a supertrait cycle that must be rejected by rustc:
pub trait First: Third {}
pub trait Second: First {}
pub trait Third: Second {}
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§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)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