mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-27 12:29:21 +00:00
Merge commit 'aa9bc86125
' into sync-from-ra
This commit is contained in:
parent
1570299af4
commit
c48062fe2a
598 changed files with 57696 additions and 17615 deletions
|
@ -13,7 +13,6 @@ pub mod famous_defs;
|
|||
pub mod helpers;
|
||||
pub mod items_locator;
|
||||
pub mod label;
|
||||
pub mod line_index;
|
||||
pub mod path_transform;
|
||||
pub mod rename;
|
||||
pub mod rust_doc;
|
||||
|
@ -43,21 +42,20 @@ pub mod syntax_helpers {
|
|||
pub use parser::LexedStr;
|
||||
}
|
||||
|
||||
use std::{fmt, mem::ManuallyDrop, sync::Arc};
|
||||
use std::{fmt, mem::ManuallyDrop};
|
||||
|
||||
use base_db::{
|
||||
salsa::{self, Durability},
|
||||
AnchoredPath, CrateId, FileId, FileLoader, FileLoaderDelegate, SourceDatabase, Upcast,
|
||||
};
|
||||
use hir::{
|
||||
db::{DefDatabase, ExpandDatabase, HirDatabase},
|
||||
symbols::FileSymbolKind,
|
||||
};
|
||||
use stdx::hash::NoHashHashSet;
|
||||
use hir::db::{DefDatabase, ExpandDatabase, HirDatabase};
|
||||
use triomphe::Arc;
|
||||
|
||||
use crate::{line_index::LineIndex, symbol_index::SymbolsDatabase};
|
||||
pub use rustc_hash::{FxHashMap, FxHashSet, FxHasher};
|
||||
|
||||
pub use ::line_index;
|
||||
|
||||
/// `base_db` is normally also needed in places where `ide_db` is used, so this re-export is for convenience.
|
||||
pub use base_db;
|
||||
|
||||
|
@ -114,13 +112,13 @@ impl Upcast<dyn HirDatabase> for RootDatabase {
|
|||
}
|
||||
|
||||
impl FileLoader for RootDatabase {
|
||||
fn file_text(&self, file_id: FileId) -> Arc<String> {
|
||||
fn file_text(&self, file_id: FileId) -> Arc<str> {
|
||||
FileLoaderDelegate(self).file_text(file_id)
|
||||
}
|
||||
fn resolve_path(&self, path: AnchoredPath<'_>) -> Option<FileId> {
|
||||
FileLoaderDelegate(self).resolve_path(path)
|
||||
}
|
||||
fn relevant_crates(&self, file_id: FileId) -> Arc<NoHashHashSet<CrateId>> {
|
||||
fn relevant_crates(&self, file_id: FileId) -> Arc<FxHashSet<CrateId>> {
|
||||
FileLoaderDelegate(self).relevant_crates(file_id)
|
||||
}
|
||||
}
|
||||
|
@ -137,18 +135,186 @@ impl RootDatabase {
|
|||
pub fn new(lru_capacity: Option<usize>) -> RootDatabase {
|
||||
let mut db = RootDatabase { storage: ManuallyDrop::new(salsa::Storage::default()) };
|
||||
db.set_crate_graph_with_durability(Default::default(), Durability::HIGH);
|
||||
db.set_proc_macros_with_durability(Default::default(), Durability::HIGH);
|
||||
db.set_local_roots_with_durability(Default::default(), Durability::HIGH);
|
||||
db.set_library_roots_with_durability(Default::default(), Durability::HIGH);
|
||||
db.set_enable_proc_attr_macros(false);
|
||||
db.update_lru_capacity(lru_capacity);
|
||||
db.set_expand_proc_attr_macros_with_durability(false, Durability::HIGH);
|
||||
db.update_parse_query_lru_capacity(lru_capacity);
|
||||
db
|
||||
}
|
||||
|
||||
pub fn update_lru_capacity(&mut self, lru_capacity: Option<usize>) {
|
||||
let lru_capacity = lru_capacity.unwrap_or(base_db::DEFAULT_LRU_CAP);
|
||||
pub fn enable_proc_attr_macros(&mut self) {
|
||||
self.set_expand_proc_attr_macros_with_durability(true, Durability::HIGH);
|
||||
}
|
||||
|
||||
pub fn update_parse_query_lru_capacity(&mut self, lru_capacity: Option<usize>) {
|
||||
let lru_capacity = lru_capacity.unwrap_or(base_db::DEFAULT_PARSE_LRU_CAP);
|
||||
base_db::ParseQuery.in_db_mut(self).set_lru_capacity(lru_capacity);
|
||||
hir::db::ParseMacroExpansionQuery.in_db_mut(self).set_lru_capacity(lru_capacity);
|
||||
hir::db::MacroExpandQuery.in_db_mut(self).set_lru_capacity(lru_capacity);
|
||||
// macro expansions are usually rather small, so we can afford to keep more of them alive
|
||||
hir::db::ParseMacroExpansionQuery.in_db_mut(self).set_lru_capacity(4 * lru_capacity);
|
||||
hir::db::MacroExpandQuery.in_db_mut(self).set_lru_capacity(4 * lru_capacity);
|
||||
}
|
||||
|
||||
pub fn update_lru_capacities(&mut self, lru_capacities: &FxHashMap<Box<str>, usize>) {
|
||||
use hir::db as hir_db;
|
||||
|
||||
base_db::ParseQuery.in_db_mut(self).set_lru_capacity(
|
||||
lru_capacities
|
||||
.get(stringify!(ParseQuery))
|
||||
.copied()
|
||||
.unwrap_or(base_db::DEFAULT_PARSE_LRU_CAP),
|
||||
);
|
||||
hir_db::ParseMacroExpansionQuery.in_db_mut(self).set_lru_capacity(
|
||||
lru_capacities
|
||||
.get(stringify!(ParseMacroExpansionQuery))
|
||||
.copied()
|
||||
.unwrap_or(4 * base_db::DEFAULT_PARSE_LRU_CAP),
|
||||
);
|
||||
hir_db::MacroExpandQuery.in_db_mut(self).set_lru_capacity(
|
||||
lru_capacities
|
||||
.get(stringify!(MacroExpandQuery))
|
||||
.copied()
|
||||
.unwrap_or(4 * base_db::DEFAULT_PARSE_LRU_CAP),
|
||||
);
|
||||
|
||||
macro_rules! update_lru_capacity_per_query {
|
||||
($( $module:ident :: $query:ident )*) => {$(
|
||||
if let Some(&cap) = lru_capacities.get(stringify!($query)) {
|
||||
$module::$query.in_db_mut(self).set_lru_capacity(cap);
|
||||
}
|
||||
)*}
|
||||
}
|
||||
update_lru_capacity_per_query![
|
||||
// SourceDatabase
|
||||
// base_db::ParseQuery
|
||||
// base_db::CrateGraphQuery
|
||||
// base_db::ProcMacrosQuery
|
||||
|
||||
// SourceDatabaseExt
|
||||
// base_db::FileTextQuery
|
||||
// base_db::FileSourceRootQuery
|
||||
// base_db::SourceRootQuery
|
||||
base_db::SourceRootCratesQuery
|
||||
|
||||
// ExpandDatabase
|
||||
hir_db::AstIdMapQuery
|
||||
// hir_db::ParseMacroExpansionQuery
|
||||
// hir_db::InternMacroCallQuery
|
||||
hir_db::MacroArgTextQuery
|
||||
hir_db::MacroDefQuery
|
||||
// hir_db::MacroExpandQuery
|
||||
hir_db::ExpandProcMacroQuery
|
||||
hir_db::HygieneFrameQuery
|
||||
hir_db::ParseMacroExpansionErrorQuery
|
||||
|
||||
// DefDatabase
|
||||
hir_db::FileItemTreeQuery
|
||||
hir_db::CrateDefMapQueryQuery
|
||||
hir_db::BlockDefMapQuery
|
||||
hir_db::StructDataQuery
|
||||
hir_db::StructDataWithDiagnosticsQuery
|
||||
hir_db::UnionDataQuery
|
||||
hir_db::UnionDataWithDiagnosticsQuery
|
||||
hir_db::EnumDataQuery
|
||||
hir_db::EnumDataWithDiagnosticsQuery
|
||||
hir_db::ImplDataQuery
|
||||
hir_db::ImplDataWithDiagnosticsQuery
|
||||
hir_db::TraitDataQuery
|
||||
hir_db::TraitDataWithDiagnosticsQuery
|
||||
hir_db::TraitAliasDataQuery
|
||||
hir_db::TypeAliasDataQuery
|
||||
hir_db::FunctionDataQuery
|
||||
hir_db::ConstDataQuery
|
||||
hir_db::StaticDataQuery
|
||||
hir_db::Macro2DataQuery
|
||||
hir_db::MacroRulesDataQuery
|
||||
hir_db::ProcMacroDataQuery
|
||||
hir_db::BodyWithSourceMapQuery
|
||||
hir_db::BodyQuery
|
||||
hir_db::ExprScopesQuery
|
||||
hir_db::GenericParamsQuery
|
||||
hir_db::VariantsAttrsQuery
|
||||
hir_db::FieldsAttrsQuery
|
||||
hir_db::VariantsAttrsSourceMapQuery
|
||||
hir_db::FieldsAttrsSourceMapQuery
|
||||
hir_db::AttrsQuery
|
||||
hir_db::CrateLangItemsQuery
|
||||
hir_db::LangItemQuery
|
||||
hir_db::ImportMapQuery
|
||||
hir_db::FieldVisibilitiesQuery
|
||||
hir_db::FunctionVisibilityQuery
|
||||
hir_db::ConstVisibilityQuery
|
||||
hir_db::CrateSupportsNoStdQuery
|
||||
|
||||
// HirDatabase
|
||||
hir_db::InferQueryQuery
|
||||
hir_db::MirBodyQuery
|
||||
hir_db::BorrowckQuery
|
||||
hir_db::TyQuery
|
||||
hir_db::ValueTyQuery
|
||||
hir_db::ImplSelfTyQuery
|
||||
hir_db::ConstParamTyQuery
|
||||
hir_db::ConstEvalQuery
|
||||
hir_db::ConstEvalDiscriminantQuery
|
||||
hir_db::ImplTraitQuery
|
||||
hir_db::FieldTypesQuery
|
||||
hir_db::LayoutOfAdtQuery
|
||||
hir_db::TargetDataLayoutQuery
|
||||
hir_db::CallableItemSignatureQuery
|
||||
hir_db::ReturnTypeImplTraitsQuery
|
||||
hir_db::GenericPredicatesForParamQuery
|
||||
hir_db::GenericPredicatesQuery
|
||||
hir_db::TraitEnvironmentQuery
|
||||
hir_db::GenericDefaultsQuery
|
||||
hir_db::InherentImplsInCrateQuery
|
||||
hir_db::InherentImplsInBlockQuery
|
||||
hir_db::IncoherentInherentImplCratesQuery
|
||||
hir_db::TraitImplsInCrateQuery
|
||||
hir_db::TraitImplsInBlockQuery
|
||||
hir_db::TraitImplsInDepsQuery
|
||||
// hir_db::InternCallableDefQuery
|
||||
// hir_db::InternLifetimeParamIdQuery
|
||||
// hir_db::InternImplTraitIdQuery
|
||||
// hir_db::InternTypeOrConstParamIdQuery
|
||||
// hir_db::InternClosureQuery
|
||||
// hir_db::InternGeneratorQuery
|
||||
hir_db::AssociatedTyDataQuery
|
||||
hir_db::TraitDatumQuery
|
||||
hir_db::StructDatumQuery
|
||||
hir_db::ImplDatumQuery
|
||||
hir_db::FnDefDatumQuery
|
||||
hir_db::FnDefVarianceQuery
|
||||
hir_db::AdtVarianceQuery
|
||||
hir_db::AssociatedTyValueQuery
|
||||
hir_db::TraitSolveQueryQuery
|
||||
hir_db::ProgramClausesForChalkEnvQuery
|
||||
|
||||
// SymbolsDatabase
|
||||
symbol_index::ModuleSymbolsQuery
|
||||
symbol_index::LibrarySymbolsQuery
|
||||
// symbol_index::LocalRootsQuery
|
||||
// symbol_index::LibraryRootsQuery
|
||||
|
||||
// LineIndexDatabase
|
||||
crate::LineIndexQuery
|
||||
|
||||
// InternDatabase
|
||||
// hir_db::InternFunctionQuery
|
||||
// hir_db::InternStructQuery
|
||||
// hir_db::InternUnionQuery
|
||||
// hir_db::InternEnumQuery
|
||||
// hir_db::InternConstQuery
|
||||
// hir_db::InternStaticQuery
|
||||
// hir_db::InternTraitQuery
|
||||
// hir_db::InternTraitAliasQuery
|
||||
// hir_db::InternTypeAliasQuery
|
||||
// hir_db::InternImplQuery
|
||||
// hir_db::InternExternBlockQuery
|
||||
// hir_db::InternBlockQuery
|
||||
// hir_db::InternMacro2Query
|
||||
// hir_db::InternProcMacroQuery
|
||||
// hir_db::InternMacroRulesQuery
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -211,20 +377,22 @@ impl From<hir::MacroKind> for SymbolKind {
|
|||
}
|
||||
}
|
||||
|
||||
impl From<FileSymbolKind> for SymbolKind {
|
||||
fn from(it: FileSymbolKind) -> Self {
|
||||
impl From<hir::ModuleDefId> for SymbolKind {
|
||||
fn from(it: hir::ModuleDefId) -> Self {
|
||||
match it {
|
||||
FileSymbolKind::Const => SymbolKind::Const,
|
||||
FileSymbolKind::Enum => SymbolKind::Enum,
|
||||
FileSymbolKind::Function => SymbolKind::Function,
|
||||
FileSymbolKind::Macro => SymbolKind::Macro,
|
||||
FileSymbolKind::Module => SymbolKind::Module,
|
||||
FileSymbolKind::Static => SymbolKind::Static,
|
||||
FileSymbolKind::Struct => SymbolKind::Struct,
|
||||
FileSymbolKind::Trait => SymbolKind::Trait,
|
||||
FileSymbolKind::TraitAlias => SymbolKind::TraitAlias,
|
||||
FileSymbolKind::TypeAlias => SymbolKind::TypeAlias,
|
||||
FileSymbolKind::Union => SymbolKind::Union,
|
||||
hir::ModuleDefId::ConstId(..) => SymbolKind::Const,
|
||||
hir::ModuleDefId::EnumVariantId(..) => SymbolKind::Variant,
|
||||
hir::ModuleDefId::FunctionId(..) => SymbolKind::Function,
|
||||
hir::ModuleDefId::MacroId(..) => SymbolKind::Macro,
|
||||
hir::ModuleDefId::ModuleId(..) => SymbolKind::Module,
|
||||
hir::ModuleDefId::StaticId(..) => SymbolKind::Static,
|
||||
hir::ModuleDefId::AdtId(hir::AdtId::StructId(..)) => SymbolKind::Struct,
|
||||
hir::ModuleDefId::AdtId(hir::AdtId::EnumId(..)) => SymbolKind::Enum,
|
||||
hir::ModuleDefId::AdtId(hir::AdtId::UnionId(..)) => SymbolKind::Union,
|
||||
hir::ModuleDefId::TraitId(..) => SymbolKind::Trait,
|
||||
hir::ModuleDefId::TraitAliasId(..) => SymbolKind::TraitAlias,
|
||||
hir::ModuleDefId::TypeAliasId(..) => SymbolKind::TypeAlias,
|
||||
hir::ModuleDefId::BuiltinType(..) => SymbolKind::TypeAlias,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -247,4 +415,5 @@ impl SnippetCap {
|
|||
#[cfg(test)]
|
||||
mod tests {
|
||||
mod sourcegen_lints;
|
||||
mod line_index;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue