trustfall_rustdoc_adapter

Struct IndexedCrate

source
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::Traits 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>

source

pub fn new(crate_: &'a Crate) -> Self

source

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.

source

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>

source§

fn clone(&self) -> IndexedCrate<'a>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'a> Debug for IndexedCrate<'a>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto 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> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<V> AsVertex<V> for V
where V: Debug + Clone,

source§

fn as_vertex(&self) -> Option<&V>

Dereference this value into a &V, if the value happens to contain a V. Read more
source§

fn into_vertex(self) -> Option<V>

Consume self and produce the contained V, if one was indeed present. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CloneToUninit for T
where T: Clone,

source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
source§

impl<T> ToOwned for T
where T: Clone,

source§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.