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]

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]

Implementation for the macro case.

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]

Lowers syntactic macro call to a token tree representation.

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]

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]

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]

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]

Firewall query that returns the error from the macro_expand query.

fn hygiene_frame(&self, key0: HirFileId) -> Arc<HygieneFrame>[src]

Implementors