use std::sync::Arc; use ra_syntax::{SyntaxNode, TreeArc, SourceFile}; use ra_db::{SourceRootId, LocationIntener, SyntaxDatabase, salsa}; use crate::{ DefLoc, DefId, MacroCallLoc, MacroCallId, Name, HirFileId, SourceFileItems, SourceItemId, Crate, query_definitions, FnSignature, FnScopes, macros::MacroExpansion, module_tree::{ModuleId, ModuleTree}, nameres::{ItemMap, lower::InputModuleItems}, ty::{InferenceResult, Ty, method_resolution::CrateImplBlocks}, adt::{StructData, EnumData, EnumVariantData}, impl_block::ModuleImplBlocks, }; #[salsa::query_group] pub trait HirDatabase: SyntaxDatabase + AsRef> + AsRef> { #[salsa::invoke(HirFileId::hir_source_file)] fn hir_source_file(&self, file_id: HirFileId) -> TreeArc; #[salsa::invoke(crate::macros::expand_macro_invocation)] fn expand_macro_invocation(&self, invoc: MacroCallId) -> Option>; #[salsa::invoke(query_definitions::fn_scopes)] fn fn_scopes(&self, def_id: DefId) -> Arc; #[salsa::invoke(crate::adt::StructData::struct_data_query)] fn struct_data(&self, def_id: DefId) -> Arc; #[salsa::invoke(crate::adt::EnumData::enum_data_query)] fn enum_data(&self, def_id: DefId) -> Arc; #[salsa::invoke(crate::adt::EnumVariantData::enum_variant_data_query)] fn enum_variant_data(&self, def_id: DefId) -> Arc; #[salsa::invoke(crate::ty::infer)] fn infer(&self, def_id: DefId) -> Arc; #[salsa::invoke(crate::ty::type_for_def)] fn type_for_def(&self, def_id: DefId) -> Ty; #[salsa::invoke(crate::ty::type_for_field)] fn type_for_field(&self, def_id: DefId, field: Name) -> Option; #[salsa::invoke(query_definitions::file_items)] fn file_items(&self, file_id: HirFileId) -> Arc; #[salsa::invoke(query_definitions::file_item)] fn file_item(&self, source_item_id: SourceItemId) -> TreeArc; #[salsa::invoke(crate::module_tree::Submodule::submodules_query)] fn submodules(&self, source: SourceItemId) -> Arc>; #[salsa::invoke(crate::nameres::lower::InputModuleItems::input_module_items_query)] fn input_module_items( &self, source_root_id: SourceRootId, module_id: ModuleId, ) -> Arc; #[salsa::invoke(query_definitions::item_map)] fn item_map(&self, source_root_id: SourceRootId) -> Arc; #[salsa::invoke(crate::module_tree::ModuleTree::module_tree_query)] fn module_tree(&self, source_root_id: SourceRootId) -> Arc; #[salsa::invoke(crate::impl_block::impls_in_module)] fn impls_in_module( &self, source_root_id: SourceRootId, module_id: ModuleId, ) -> Arc; #[salsa::invoke(crate::ty::method_resolution::CrateImplBlocks::impls_in_crate_query)] fn impls_in_crate(&self, krate: Crate) -> Arc; #[salsa::invoke(crate::expr::body_hir)] fn body_hir(&self, def_id: DefId) -> Arc; #[salsa::invoke(crate::expr::body_syntax_mapping)] fn body_syntax_mapping(&self, def_id: DefId) -> Arc; #[salsa::invoke(crate::FnSignature::fn_signature_query)] fn fn_signature(&self, def_id: DefId) -> Arc; }