mirror of
https://github.com/rust-lang/rust-analyzer
synced 2025-01-14 14:13:58 +00:00
Merge #664
664: rename FilesDatabase -> SourceDatabase r=matklad a=matklad Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
This commit is contained in:
commit
ac757e114e
17 changed files with 45 additions and 56 deletions
|
@ -20,7 +20,7 @@ pub use crate::{
|
||||||
loc2id::LocationIntener,
|
loc2id::LocationIntener,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub trait BaseDatabase: salsa::Database + panic::RefUnwindSafe {
|
pub trait CheckCanceled: salsa::Database + panic::RefUnwindSafe {
|
||||||
/// Aborts current query if there are pending changes.
|
/// Aborts current query if there are pending changes.
|
||||||
///
|
///
|
||||||
/// rust-analyzer needs to be able to answer semantic questions about the
|
/// rust-analyzer needs to be able to answer semantic questions about the
|
||||||
|
@ -63,11 +63,15 @@ pub struct FileRange {
|
||||||
pub range: TextRange,
|
pub range: TextRange,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[salsa::query_group(FilesDatabaseStorage)]
|
/// Database which stores all significant input facts: source code and project
|
||||||
pub trait FilesDatabase: salsa::Database {
|
/// model. Everything else in rust-analyzer is derived from these queries.
|
||||||
|
#[salsa::query_group(SourceDatabaseStorage)]
|
||||||
|
pub trait SourceDatabase: salsa::Database + CheckCanceled {
|
||||||
/// Text of the file.
|
/// Text of the file.
|
||||||
#[salsa::input]
|
#[salsa::input]
|
||||||
fn file_text(&self, file_id: FileId) -> Arc<String>;
|
fn file_text(&self, file_id: FileId) -> Arc<String>;
|
||||||
|
// Parses the file into the syntax tree.
|
||||||
|
fn source_file(&self, file_id: FileId) -> TreeArc<SourceFile>;
|
||||||
/// Path to a file, relative to the root of its source root.
|
/// Path to a file, relative to the root of its source root.
|
||||||
#[salsa::input]
|
#[salsa::input]
|
||||||
fn file_relative_path(&self, file_id: FileId) -> RelativePathBuf;
|
fn file_relative_path(&self, file_id: FileId) -> RelativePathBuf;
|
||||||
|
@ -78,20 +82,12 @@ pub trait FilesDatabase: salsa::Database {
|
||||||
#[salsa::input]
|
#[salsa::input]
|
||||||
fn source_root(&self, id: SourceRootId) -> Arc<SourceRoot>;
|
fn source_root(&self, id: SourceRootId) -> Arc<SourceRoot>;
|
||||||
fn source_root_crates(&self, id: SourceRootId) -> Arc<Vec<CrateId>>;
|
fn source_root_crates(&self, id: SourceRootId) -> Arc<Vec<CrateId>>;
|
||||||
/// The set of "local" (that is, from the current workspace) roots.
|
|
||||||
/// Files in local roots are assumed to change frequently.
|
|
||||||
#[salsa::input]
|
|
||||||
fn local_roots(&self) -> Arc<Vec<SourceRootId>>;
|
|
||||||
/// The set of roots for crates.io libraries.
|
|
||||||
/// Files in libraries are assumed to never change.
|
|
||||||
#[salsa::input]
|
|
||||||
fn library_roots(&self) -> Arc<Vec<SourceRootId>>;
|
|
||||||
/// The crate graph.
|
/// The crate graph.
|
||||||
#[salsa::input]
|
#[salsa::input]
|
||||||
fn crate_graph(&self) -> Arc<CrateGraph>;
|
fn crate_graph(&self) -> Arc<CrateGraph>;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn source_root_crates(db: &impl FilesDatabase, id: SourceRootId) -> Arc<Vec<CrateId>> {
|
fn source_root_crates(db: &impl SourceDatabase, id: SourceRootId) -> Arc<Vec<CrateId>> {
|
||||||
let root = db.source_root(id);
|
let root = db.source_root(id);
|
||||||
let graph = db.crate_graph();
|
let graph = db.crate_graph();
|
||||||
let res = root
|
let res = root
|
||||||
|
@ -102,12 +98,7 @@ fn source_root_crates(db: &impl FilesDatabase, id: SourceRootId) -> Arc<Vec<Crat
|
||||||
Arc::new(res)
|
Arc::new(res)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[salsa::query_group(SyntaxDatabaseStorage)]
|
fn source_file(db: &impl SourceDatabase, file_id: FileId) -> TreeArc<SourceFile> {
|
||||||
pub trait SyntaxDatabase: FilesDatabase + BaseDatabase {
|
|
||||||
fn source_file(&self, file_id: FileId) -> TreeArc<SourceFile>;
|
|
||||||
}
|
|
||||||
|
|
||||||
fn source_file(db: &impl SyntaxDatabase, file_id: FileId) -> TreeArc<SourceFile> {
|
|
||||||
let text = db.file_text(file_id);
|
let text = db.file_text(file_id);
|
||||||
SourceFile::parse(&*text)
|
SourceFile::parse(&*text)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
use ra_syntax::{SyntaxNode, TreeArc, SourceFile};
|
use ra_syntax::{SyntaxNode, TreeArc, SourceFile};
|
||||||
use ra_db::{SyntaxDatabase, CrateId, salsa};
|
use ra_db::{SourceDatabase, CrateId, salsa};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
MacroCallId, HirFileId,
|
MacroCallId, HirFileId,
|
||||||
|
@ -19,7 +19,7 @@ use crate::{
|
||||||
};
|
};
|
||||||
|
|
||||||
#[salsa::query_group(HirDatabaseStorage)]
|
#[salsa::query_group(HirDatabaseStorage)]
|
||||||
pub trait HirDatabase: SyntaxDatabase + AsRef<HirInterner> {
|
pub trait HirDatabase: SourceDatabase + AsRef<HirInterner> {
|
||||||
#[salsa::invoke(HirFileId::hir_source_file)]
|
#[salsa::invoke(HirFileId::hir_source_file)]
|
||||||
fn hir_source_file(&self, file_id: HirFileId) -> TreeArc<SourceFile>;
|
fn hir_source_file(&self, file_id: HirFileId) -> TreeArc<SourceFile>;
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ use std::{sync::Arc, panic};
|
||||||
|
|
||||||
use parking_lot::Mutex;
|
use parking_lot::Mutex;
|
||||||
use ra_db::{
|
use ra_db::{
|
||||||
BaseDatabase, FilePosition, FileId, CrateGraph, SourceRoot, SourceRootId, FilesDatabase, salsa,
|
CheckCanceled, FilePosition, FileId, CrateGraph, SourceRoot, SourceRootId, SourceDatabase, salsa,
|
||||||
};
|
};
|
||||||
use relative_path::RelativePathBuf;
|
use relative_path::RelativePathBuf;
|
||||||
use test_utils::{parse_fixture, CURSOR_MARKER, extract_offset};
|
use test_utils::{parse_fixture, CURSOR_MARKER, extract_offset};
|
||||||
|
@ -11,11 +11,7 @@ use crate::{db, HirInterner};
|
||||||
|
|
||||||
pub const WORKSPACE: SourceRootId = SourceRootId(0);
|
pub const WORKSPACE: SourceRootId = SourceRootId(0);
|
||||||
|
|
||||||
#[salsa::database(
|
#[salsa::database(ra_db::SourceDatabaseStorage, db::HirDatabaseStorage)]
|
||||||
ra_db::FilesDatabaseStorage,
|
|
||||||
ra_db::SyntaxDatabaseStorage,
|
|
||||||
db::HirDatabaseStorage
|
|
||||||
)]
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub(crate) struct MockDatabase {
|
pub(crate) struct MockDatabase {
|
||||||
events: Mutex<Option<Vec<salsa::Event<MockDatabase>>>>,
|
events: Mutex<Option<Vec<salsa::Event<MockDatabase>>>>,
|
||||||
|
@ -144,8 +140,6 @@ impl Default for MockDatabase {
|
||||||
file_counter: 0,
|
file_counter: 0,
|
||||||
};
|
};
|
||||||
db.set_crate_graph(Default::default());
|
db.set_crate_graph(Default::default());
|
||||||
db.set_local_roots(Default::default());
|
|
||||||
db.set_library_roots(Default::default());
|
|
||||||
db
|
db
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -161,7 +155,7 @@ impl salsa::ParallelDatabase for MockDatabase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl BaseDatabase for MockDatabase {}
|
impl CheckCanceled for MockDatabase {}
|
||||||
|
|
||||||
impl AsRef<HirInterner> for MockDatabase {
|
impl AsRef<HirInterner> for MockDatabase {
|
||||||
fn as_ref(&self) -> &HirInterner {
|
fn as_ref(&self) -> &HirInterner {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
use ra_db::{CrateGraph, SourceRootId, FilesDatabase};
|
use ra_db::{CrateGraph, SourceRootId, SourceDatabase};
|
||||||
use relative_path::RelativePath;
|
use relative_path::RelativePath;
|
||||||
use test_utils::{assert_eq_text, covers};
|
use test_utils::{assert_eq_text, covers};
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::fmt::Write;
|
use std::fmt::Write;
|
||||||
|
|
||||||
use ra_db::{SyntaxDatabase, salsa::Database};
|
use ra_db::{SourceDatabase, salsa::Database};
|
||||||
use ra_syntax::ast::{self, AstNode};
|
use ra_syntax::ast::{self, AstNode};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use ra_db::SyntaxDatabase;
|
use ra_db::SourceDatabase;
|
||||||
use ra_syntax::{
|
use ra_syntax::{
|
||||||
AstNode, SyntaxNode, TextUnit, TextRange,
|
AstNode, SyntaxNode, TextUnit, TextRange,
|
||||||
SyntaxKind::FN_DEF,
|
SyntaxKind::FN_DEF,
|
||||||
|
|
|
@ -9,7 +9,7 @@ mod complete_path;
|
||||||
mod complete_scope;
|
mod complete_scope;
|
||||||
mod complete_postfix;
|
mod complete_postfix;
|
||||||
|
|
||||||
use ra_db::SyntaxDatabase;
|
use ra_db::SourceDatabase;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
db,
|
db,
|
||||||
|
|
|
@ -1,15 +1,14 @@
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
use ra_db::{
|
use ra_db::{
|
||||||
BaseDatabase, FileId, Canceled,
|
CheckCanceled, FileId, Canceled, SourceDatabase,
|
||||||
salsa::{self, Database},
|
salsa,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::{symbol_index, LineIndex};
|
use crate::{LineIndex, symbol_index::{self, SymbolsDatabase}};
|
||||||
|
|
||||||
#[salsa::database(
|
#[salsa::database(
|
||||||
ra_db::FilesDatabaseStorage,
|
ra_db::SourceDatabaseStorage,
|
||||||
ra_db::SyntaxDatabaseStorage,
|
|
||||||
LineIndexDatabaseStorage,
|
LineIndexDatabaseStorage,
|
||||||
symbol_index::SymbolsDatabaseStorage,
|
symbol_index::SymbolsDatabaseStorage,
|
||||||
hir::db::HirDatabaseStorage
|
hir::db::HirDatabaseStorage
|
||||||
|
@ -35,12 +34,9 @@ impl Default for RootDatabase {
|
||||||
runtime: salsa::Runtime::default(),
|
runtime: salsa::Runtime::default(),
|
||||||
interner: Default::default(),
|
interner: Default::default(),
|
||||||
};
|
};
|
||||||
db.query_mut(ra_db::CrateGraphQuery)
|
db.set_crate_graph(Default::default());
|
||||||
.set((), Default::default());
|
db.set_local_roots(Default::default());
|
||||||
db.query_mut(ra_db::LocalRootsQuery)
|
db.set_library_roots(Default::default());
|
||||||
.set((), Default::default());
|
|
||||||
db.query_mut(ra_db::LibraryRootsQuery)
|
|
||||||
.set((), Default::default());
|
|
||||||
db
|
db
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -54,7 +50,7 @@ impl salsa::ParallelDatabase for RootDatabase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl BaseDatabase for RootDatabase {}
|
impl CheckCanceled for RootDatabase {}
|
||||||
|
|
||||||
impl AsRef<hir::HirInterner> for RootDatabase {
|
impl AsRef<hir::HirInterner> for RootDatabase {
|
||||||
fn as_ref(&self) -> &hir::HirInterner {
|
fn as_ref(&self) -> &hir::HirInterner {
|
||||||
|
@ -63,11 +59,11 @@ impl AsRef<hir::HirInterner> for RootDatabase {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[salsa::query_group(LineIndexDatabaseStorage)]
|
#[salsa::query_group(LineIndexDatabaseStorage)]
|
||||||
pub(crate) trait LineIndexDatabase: ra_db::FilesDatabase + BaseDatabase {
|
pub(crate) trait LineIndexDatabase: ra_db::SourceDatabase + CheckCanceled {
|
||||||
fn line_index(&self, file_id: FileId) -> Arc<LineIndex>;
|
fn line_index(&self, file_id: FileId) -> Arc<LineIndex>;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn line_index(db: &impl ra_db::FilesDatabase, file_id: FileId) -> Arc<LineIndex> {
|
fn line_index(db: &impl ra_db::SourceDatabase, file_id: FileId) -> Arc<LineIndex> {
|
||||||
let text = db.file_text(file_id);
|
let text = db.file_text(file_id);
|
||||||
Arc::new(LineIndex::new(&*text))
|
Arc::new(LineIndex::new(&*text))
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use ra_db::SyntaxDatabase;
|
use ra_db::SourceDatabase;
|
||||||
use ra_syntax::{
|
use ra_syntax::{
|
||||||
SyntaxNode, AstNode, SourceFile,
|
SyntaxNode, AstNode, SourceFile,
|
||||||
ast, algo::find_covering_node,
|
ast, algo::find_covering_node,
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use ra_db::{FileId, SyntaxDatabase};
|
use ra_db::{FileId, SourceDatabase};
|
||||||
use ra_syntax::{
|
use ra_syntax::{
|
||||||
AstNode, ast,
|
AstNode, ast,
|
||||||
algo::find_node_at_offset,
|
algo::find_node_at_offset,
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use ra_db::{SyntaxDatabase};
|
use ra_db::SourceDatabase;
|
||||||
use ra_syntax::{
|
use ra_syntax::{
|
||||||
AstNode, SyntaxNode, TreeArc, ast,
|
AstNode, SyntaxNode, TreeArc, ast,
|
||||||
algo::{find_covering_node, find_node_at_offset, find_leaf_at_offset, visit::{visitor, Visitor}},
|
algo::{find_covering_node, find_node_at_offset, find_leaf_at_offset, visit::{visitor, Visitor}},
|
||||||
|
|
|
@ -4,7 +4,7 @@ use hir::{
|
||||||
self, Problem, source_binder
|
self, Problem, source_binder
|
||||||
};
|
};
|
||||||
use ra_db::{
|
use ra_db::{
|
||||||
FilesDatabase, SourceRoot, SourceRootId, SyntaxDatabase,
|
SourceDatabase, SourceRoot, SourceRootId,
|
||||||
salsa::{Database, SweepStrategy},
|
salsa::{Database, SweepStrategy},
|
||||||
};
|
};
|
||||||
use ra_ide_api_light::{self, assists, LocalEdit, Severity};
|
use ra_ide_api_light::{self, assists, LocalEdit, Severity};
|
||||||
|
|
|
@ -34,7 +34,7 @@ use std::{fmt, sync::Arc};
|
||||||
use ra_syntax::{SourceFile, TreeArc, TextRange, TextUnit};
|
use ra_syntax::{SourceFile, TreeArc, TextRange, TextUnit};
|
||||||
use ra_text_edit::TextEdit;
|
use ra_text_edit::TextEdit;
|
||||||
use ra_db::{
|
use ra_db::{
|
||||||
SyntaxDatabase, FilesDatabase, BaseDatabase,
|
SourceDatabase, CheckCanceled,
|
||||||
salsa::{self, ParallelDatabase},
|
salsa::{self, ParallelDatabase},
|
||||||
};
|
};
|
||||||
use rayon::prelude::*;
|
use rayon::prelude::*;
|
||||||
|
|
|
@ -17,7 +17,7 @@ use crate::{
|
||||||
SourceChange,
|
SourceChange,
|
||||||
SourceFileEdit,
|
SourceFileEdit,
|
||||||
};
|
};
|
||||||
use ra_db::{FilesDatabase, SyntaxDatabase};
|
use ra_db::SourceDatabase;
|
||||||
use relative_path::RelativePath;
|
use relative_path::RelativePath;
|
||||||
|
|
||||||
pub(crate) fn rename(
|
pub(crate) fn rename(
|
||||||
|
|
|
@ -3,7 +3,7 @@ use ra_syntax::{
|
||||||
TextRange, SyntaxNode,
|
TextRange, SyntaxNode,
|
||||||
ast::{self, AstNode, NameOwner, ModuleItemOwner},
|
ast::{self, AstNode, NameOwner, ModuleItemOwner},
|
||||||
};
|
};
|
||||||
use ra_db::SyntaxDatabase;
|
use ra_db::SourceDatabase;
|
||||||
|
|
||||||
use crate::{db::RootDatabase, FileId};
|
use crate::{db::RootDatabase, FileId};
|
||||||
|
|
||||||
|
|
|
@ -34,7 +34,7 @@ use ra_syntax::{
|
||||||
ast::{self, NameOwner},
|
ast::{self, NameOwner},
|
||||||
};
|
};
|
||||||
use ra_db::{
|
use ra_db::{
|
||||||
SourceRootId, FilesDatabase,
|
SourceRootId, SourceDatabase,
|
||||||
salsa::{self, ParallelDatabase},
|
salsa::{self, ParallelDatabase},
|
||||||
};
|
};
|
||||||
use rayon::prelude::*;
|
use rayon::prelude::*;
|
||||||
|
@ -49,6 +49,14 @@ pub(crate) trait SymbolsDatabase: hir::db::HirDatabase {
|
||||||
fn file_symbols(&self, file_id: FileId) -> Arc<SymbolIndex>;
|
fn file_symbols(&self, file_id: FileId) -> Arc<SymbolIndex>;
|
||||||
#[salsa::input]
|
#[salsa::input]
|
||||||
fn library_symbols(&self, id: SourceRootId) -> Arc<SymbolIndex>;
|
fn library_symbols(&self, id: SourceRootId) -> Arc<SymbolIndex>;
|
||||||
|
/// The set of "local" (that is, from the current workspace) roots.
|
||||||
|
/// Files in local roots are assumed to change frequently.
|
||||||
|
#[salsa::input]
|
||||||
|
fn local_roots(&self) -> Arc<Vec<SourceRootId>>;
|
||||||
|
/// The set of roots for crates.io libraries.
|
||||||
|
/// Files in libraries are assumed to never change.
|
||||||
|
#[salsa::input]
|
||||||
|
fn library_roots(&self) -> Arc<Vec<SourceRootId>>;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn file_symbols(db: &impl SymbolsDatabase, file_id: FileId) -> Arc<SymbolIndex> {
|
fn file_symbols(db: &impl SymbolsDatabase, file_id: FileId) -> Arc<SymbolIndex> {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
use ra_syntax::{ast, AstNode,};
|
use ra_syntax::{ast, AstNode,};
|
||||||
use ra_db::SyntaxDatabase;
|
use ra_db::SourceDatabase;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
FileId, HighlightedRange,
|
FileId, HighlightedRange,
|
||||||
|
|
Loading…
Reference in a new issue