pub enum HirFileId {
FileId(EditionedFileId),
MacroFile(MacroCallId),
}Variants§
FileId(EditionedFileId)
MacroFile(MacroCallId)
Implementations§
Source§impl HirFileId
impl HirFileId
pub fn macro_file(self) -> Option<MacroCallId>
pub fn is_macro(self) -> bool
pub fn file_id(self) -> Option<EditionedFileId>
pub fn syntax_context( self, db: &dyn SourceDatabase, edition: Edition, ) -> SyntaxContext
pub fn edition(self, db: &dyn SourceDatabase) -> Edition
pub fn original_file(self, db: &dyn SourceDatabase) -> EditionedFileId
pub fn original_file_respecting_includes( self, db: &dyn SourceDatabase, ) -> EditionedFileId
pub fn original_call_node( self, db: &dyn SourceDatabase, ) -> Option<InRealFile<SyntaxNode>>
pub fn call_node(self, db: &dyn SourceDatabase) -> Option<InFile<SyntaxNode>>
pub fn as_builtin_derive_attr_node( &self, db: &dyn SourceDatabase, ) -> Option<InFile<Attr>>
Sourcepub fn parse_or_expand(self, db: &dyn SourceDatabase) -> SyntaxNode
pub fn parse_or_expand(self, db: &dyn SourceDatabase) -> SyntaxNode
Main public API – parses a hir file, not caring whether it’s a real file or a macro expansion.
pub(crate) fn parse_with_map( self, db: &dyn SourceDatabase, ) -> (Parse<SyntaxNode>, SpanMap<'_>)
Sourcepub fn macro_expansion_depth(self, db: &dyn SourceDatabase) -> u32
pub fn macro_expansion_depth(self, db: &dyn SourceDatabase) -> u32
How many macro expansions separate this file from the real file it originates from.
Expander and DefCollector seed their expansion depth counters from this. Both otherwise
start at zero for every body and every block, so a macro expanding to an item that invokes
the macro again advances neither counter past one and never reaches the recursion limit.
Written recursively rather than as a loop so that salsa memoizes each file’s depth. Callers ask for this once per body, and the bodies of one expansion chain sit at depths 1..n, so a loop would walk 1 + 2 + … + n steps for that chain. Reusing the parent’s memoized depth makes each file O(1) once computed, and the chain linear.
Source§impl HirFileId
impl HirFileId
pub fn ast_id_map<'db>(self, db: &'db dyn SourceDatabase) -> &'db AstIdMap
Trait Implementations§
impl Copy for HirFileId
impl Eq for HirFileId
Source§impl FileIdToSyntax for HirFileId
impl FileIdToSyntax for HirFileId
fn file_syntax(self, db: &dyn SourceDatabase) -> SyntaxNode
Source§impl From<EditionedFileId> for HirFileId
impl From<EditionedFileId> for HirFileId
Source§fn from(file_id: EditionedFileId) -> Self
fn from(file_id: EditionedFileId) -> Self
Source§impl From<MacroCallId> for HirFileId
impl From<MacroCallId> for HirFileId
Source§fn from(file_id: MacroCallId) -> Self
fn from(file_id: MacroCallId) -> Self
Source§impl PartialEq<EditionedFileId> for HirFileId
impl PartialEq<EditionedFileId> for HirFileId
Source§impl PartialEq<HirFileId> for EditionedFileId
impl PartialEq<HirFileId> for EditionedFileId
Source§impl SalsaStructInDb for HirFileId
impl SalsaStructInDb for HirFileId
Source§const LEAF_TYPE_IDS: &'static [ConstTypeId]
const LEAF_TYPE_IDS: &'static [ConstTypeId]
type MemoIngredientMap = MemoIngredientIndices
Source§fn lookup_ingredient_index(__zalsa: &Zalsa) -> IngredientIndices
fn lookup_ingredient_index(__zalsa: &Zalsa) -> IngredientIndices
Source§fn entries(zalsa: &Zalsa) -> impl Iterator<Item = DatabaseKeyIndex> + '_
fn entries(zalsa: &Zalsa) -> impl Iterator<Item = DatabaseKeyIndex> + '_
Source§fn cast(id: Id, type_id: TypeId) -> Option<Self>
fn cast(id: Id, type_id: TypeId) -> Option<Self>
Source§unsafe fn memo_table(
zalsa: &Zalsa,
id: Id,
current_revision: Revision,
) -> MemoTableWithTypes<'_>
unsafe fn memo_table( zalsa: &Zalsa, id: Id, current_revision: Revision, ) -> MemoTableWithTypes<'_>
id. Read moreimpl StructuralPartialEq for HirFileId
Auto Trait Implementations§
impl Freeze for HirFileId
impl RefUnwindSafe for HirFileId
impl Send for HirFileId
impl Sync for HirFileId
impl Unpin for HirFileId
impl UnsafeUnpin for HirFileId
impl UnwindSafe for HirFileId
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,
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
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