Trait ra_ap_hir_expand::db::AstDatabase [−][src]
pub trait AstDatabase: Database + HasQueryGroup<AstDatabaseStorage> + SourceDatabase { fn ast_id_map(&self, key0: HirFileId) -> Arc<AstIdMap>; fn parse_or_expand(&self, key0: HirFileId) -> Option<SyntaxNode>; fn parse_macro_expansion(
&self,
key0: MacroFile
) -> ExpandResult<Option<(Parse<SyntaxNode>, Arc<TokenMap>)>>; fn intern_macro(&self, key0: MacroCallLoc) -> MacroCallId; fn lookup_intern_macro(&self, key0: MacroCallId) -> MacroCallLoc; fn macro_arg(&self, key0: MacroCallId) -> Option<Arc<(Subtree, TokenMap)>>; fn macro_arg_text(&self, key0: MacroCallId) -> Option<GreenNode>; fn macro_def(&self, key0: MacroDefId) -> Option<Arc<TokenExpander>>; fn macro_expand(
&self,
key0: MacroCallId
) -> ExpandResult<Option<Arc<Subtree>>>; fn expand_proc_macro(
&self,
key0: MacroCallId
) -> Result<Subtree, ExpandError>; fn macro_expand_error(&self, key0: MacroCallId) -> Option<ExpandError>; fn hygiene_frame(&self, key0: HirFileId) -> Arc<HygieneFrame>; }
Required methods
fn ast_id_map(&self, key0: HirFileId) -> Arc<AstIdMap>
[src]
fn parse_or_expand(&self, key0: HirFileId) -> Option<SyntaxNode>
[src]
fn parse_or_expand(&self, key0: HirFileId) -> Option<SyntaxNode>
[src]Main public API – parsis a hir file, not caring whether it’s a real file or a macro expansion.
fn parse_macro_expansion(
&self,
key0: MacroFile
) -> ExpandResult<Option<(Parse<SyntaxNode>, Arc<TokenMap>)>>
[src]
fn parse_macro_expansion(
&self,
key0: MacroFile
) -> ExpandResult<Option<(Parse<SyntaxNode>, Arc<TokenMap>)>>
[src]Implementation for the macro case.
fn intern_macro(&self, key0: MacroCallLoc) -> MacroCallId
[src]
fn intern_macro(&self, key0: MacroCallLoc) -> MacroCallId
[src]Macro ids. That’s probably the tricksiest bit in rust-analyzer, and the reason why we use salsa at all.
We encode macro definitions into ids of macro calls, this what allows us to be incremental.
fn lookup_intern_macro(&self, key0: MacroCallId) -> MacroCallLoc
[src]
fn macro_arg(&self, key0: MacroCallId) -> Option<Arc<(Subtree, TokenMap)>>
[src]
fn macro_arg(&self, key0: MacroCallId) -> Option<Arc<(Subtree, TokenMap)>>
[src]Lowers syntactic macro call to a token tree representation.
fn macro_arg_text(&self, key0: MacroCallId) -> Option<GreenNode>
[src]
fn macro_arg_text(&self, key0: MacroCallId) -> Option<GreenNode>
[src]Extracts syntax node, corresponding to a macro call. That’s a firewall query, only typing in the macro call itself changes the returned subtree.
fn macro_def(&self, key0: MacroDefId) -> Option<Arc<TokenExpander>>
[src]
fn macro_def(&self, key0: MacroDefId) -> Option<Arc<TokenExpander>>
[src]Gets the expander for this macro. This compiles declarative macros, and just fetches procedural ones.
fn macro_expand(&self, key0: MacroCallId) -> ExpandResult<Option<Arc<Subtree>>>
[src]
fn macro_expand(&self, key0: MacroCallId) -> ExpandResult<Option<Arc<Subtree>>>
[src]Expand macro call to a token tree. This query is LRUed (we keep 128 or so results in memory)
fn expand_proc_macro(&self, key0: MacroCallId) -> Result<Subtree, ExpandError>
[src]
fn expand_proc_macro(&self, key0: MacroCallId) -> Result<Subtree, ExpandError>
[src]Special case of the previous query for procedural macros. We can’t LRU proc macros, since they are not deterministic in general, and non-determinism breaks salsa in a very, very, very bad way. @edwin0cheng heroically debugged this once!
fn macro_expand_error(&self, key0: MacroCallId) -> Option<ExpandError>
[src]
fn macro_expand_error(&self, key0: MacroCallId) -> Option<ExpandError>
[src]Firewall query that returns the error from the macro_expand
query.
fn hygiene_frame(&self, key0: HirFileId) -> Arc<HygieneFrame>
[src]
Implementors
impl<DB> AstDatabase for DB where
DB: SourceDatabase,
DB: Database,
DB: HasQueryGroup<AstDatabaseStorage>,
[src]
impl<DB> AstDatabase for DB where
DB: SourceDatabase,
DB: Database,
DB: HasQueryGroup<AstDatabaseStorage>,
[src]fn ast_id_map(&self, key0: HirFileId) -> Arc<AstIdMap>
[src]
fn parse_or_expand(&self, key0: HirFileId) -> Option<SyntaxNode>
[src]
fn parse_macro_expansion(
&self,
key0: MacroFile
) -> ExpandResult<Option<(Parse<SyntaxNode>, Arc<TokenMap>)>>
[src]
&self,
key0: MacroFile
) -> ExpandResult<Option<(Parse<SyntaxNode>, Arc<TokenMap>)>>