Move input to top-level

This commit is contained in:
Aleksey Kladov 2018-10-25 17:52:50 +03:00
parent 5ef3fda5e1
commit d190019571
9 changed files with 67 additions and 62 deletions

View file

@ -6,7 +6,8 @@ use ra_syntax::{
use crate::{
FileId, Cancelable,
db::{self, SyntaxDatabase, input::FilesDatabase},
input::FilesDatabase,
db::{self, SyntaxDatabase},
descriptors::module::{ModulesDatabase, ModuleTree, ModuleId},
};

View file

@ -1,5 +1,3 @@
pub(crate) mod input;
use std::{
sync::Arc,
};
@ -51,13 +49,13 @@ impl Clone for RootDatabase {
salsa::database_storage! {
pub(crate) struct RootDatabaseStorage for RootDatabase {
impl input::FilesDatabase {
fn file_text() for input::FileTextQuery;
fn file_source_root() for input::FileSourceRootQuery;
fn source_root() for input::SourceRootQuery;
fn libraries() for input::LibrarieseQuery;
fn library_symbols() for input::LibrarySymbolsQuery;
fn crate_graph() for input::CrateGraphQuery;
impl crate::input::FilesDatabase {
fn file_text() for crate::input::FileTextQuery;
fn file_source_root() for crate::input::FileSourceRootQuery;
fn source_root() for crate::input::SourceRootQuery;
fn libraries() for crate::input::LibrarieseQuery;
fn library_symbols() for crate::input::LibrarySymbolsQuery;
fn crate_graph() for crate::input::CrateGraphQuery;
}
impl SyntaxDatabase {
fn file_syntax() for FileSyntaxQuery;
@ -72,7 +70,7 @@ salsa::database_storage! {
}
salsa::query_group! {
pub(crate) trait SyntaxDatabase: input::FilesDatabase {
pub(crate) trait SyntaxDatabase: crate::input::FilesDatabase {
fn file_syntax(file_id: FileId) -> File {
type FileSyntaxQuery;
}

View file

@ -8,8 +8,8 @@ use ra_syntax::{
};
use crate::{
FileId, Cancelable, FileResolverImp,
db::{self, input::{SourceRoot, SourceRootId}},
FileId, Cancelable, FileResolverImp, db,
input::{SourceRoot, SourceRootId},
};
use super::{

View file

@ -7,7 +7,8 @@ use ra_syntax::{ast::{self, NameOwner, AstNode}, SmolStr, SyntaxNode};
use crate::{
FileId, Cancelable,
db::{SyntaxDatabase, input::SourceRootId},
db::SyntaxDatabase,
input::SourceRootId,
};
salsa::query_group! {

View file

@ -18,8 +18,9 @@ use crate::{
AnalysisChange,
db::{
self, SyntaxDatabase,
input::{SourceRootId, FilesDatabase, SourceRoot, WORKSPACE}
},
input::{SourceRootId, FilesDatabase, SourceRoot, WORKSPACE},
descriptors::module::{ModulesDatabase, ModuleTree, Problem},
descriptors::{FnDescriptor},
CrateGraph, CrateId, Diagnostic, FileId, FileResolver, FileSystemEdit, Position,
@ -102,7 +103,7 @@ impl AnalysisHostImpl {
for (file_id, text) in change.files_changed {
self.db
.query(db::input::FileTextQuery)
.query(crate::input::FileTextQuery)
.set(file_id, Arc::new(text))
}
if !(change.files_added.is_empty() && change.files_removed.is_empty()) {
@ -111,22 +112,22 @@ impl AnalysisHostImpl {
let mut source_root = SourceRoot::clone(&self.db.source_root(WORKSPACE));
for (file_id, text) in change.files_added {
self.db
.query(db::input::FileTextQuery)
.query(crate::input::FileTextQuery)
.set(file_id, Arc::new(text));
self.db
.query(db::input::FileSourceRootQuery)
.set(file_id, db::input::WORKSPACE);
.query(crate::input::FileSourceRootQuery)
.set(file_id, crate::input::WORKSPACE);
source_root.files.insert(file_id);
}
for file_id in change.files_removed {
self.db
.query(db::input::FileTextQuery)
.query(crate::input::FileTextQuery)
.set(file_id, Arc::new(String::new()));
source_root.files.remove(&file_id);
}
source_root.file_resolver = file_resolver;
self.db
.query(db::input::SourceRootQuery)
.query(crate::input::SourceRootQuery)
.set(WORKSPACE, Arc::new(source_root))
}
if !change.libraries_added.is_empty() {
@ -138,10 +139,10 @@ impl AnalysisHostImpl {
for (file_id, text) in library.files {
files.insert(file_id);
self.db
.query(db::input::FileSourceRootQuery)
.query(crate::input::FileSourceRootQuery)
.set_constant(file_id, source_root_id);
self.db
.query(db::input::FileTextQuery)
.query(crate::input::FileTextQuery)
.set_constant(file_id, Arc::new(text));
}
let source_root = SourceRoot {
@ -149,18 +150,18 @@ impl AnalysisHostImpl {
file_resolver: library.file_resolver,
};
self.db
.query(db::input::SourceRootQuery)
.query(crate::input::SourceRootQuery)
.set(source_root_id, Arc::new(source_root));
self.db
.query(db::input::LibrarySymbolsQuery)
.query(crate::input::LibrarySymbolsQuery)
.set(source_root_id, Arc::new(library.symbol_index));
}
self.db
.query(db::input::LibrarieseQuery)
.query(crate::input::LibrarieseQuery)
.set((), Arc::new(libraries));
}
if let Some(crate_graph) = change.crate_graph {
self.db.query(db::input::CrateGraphQuery)
self.db.query(crate::input::CrateGraphQuery)
.set((), Arc::new(crate_graph))
}
}

View file

@ -1,11 +1,42 @@
use std::{
sync::Arc,
fmt,
};
use salsa;
use rustc_hash::FxHashSet;
use relative_path::RelativePath;
use rustc_hash::FxHashMap;
use crate::{FileId, FileResolverImp, CrateGraph, symbol_index::SymbolIndex};
use crate::{symbol_index::SymbolIndex, FileResolverImp};
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct FileId(pub u32);
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct CrateId(pub u32);
#[derive(Debug, Clone, Default, PartialEq, Eq)]
pub struct CrateGraph {
pub(crate) crate_roots: FxHashMap<CrateId, FileId>,
}
impl CrateGraph {
pub fn new() -> CrateGraph {
CrateGraph::default()
}
pub fn add_crate_root(&mut self, file_id: FileId) -> CrateId{
let crate_id = CrateId(self.crate_roots.len() as u32);
let prev = self.crate_roots.insert(crate_id, file_id);
assert!(prev.is_none());
crate_id
}
}
pub trait FileResolver: fmt::Debug + Send + Sync + 'static {
fn file_stem(&self, file_id: FileId) -> String;
fn resolve(&self, file_id: FileId, path: &RelativePath) -> Option<FileId>;
}
salsa::query_group! {
pub(crate) trait FilesDatabase: salsa::Database {

View file

@ -6,6 +6,7 @@ extern crate relative_path;
extern crate rustc_hash;
extern crate salsa;
mod input;
mod db;
mod descriptors;
mod imp;
@ -17,9 +18,8 @@ use std::{
sync::Arc,
};
use rustc_hash::FxHashMap;
use ra_syntax::{AtomEdit, File, TextRange, TextUnit};
use relative_path::{RelativePath, RelativePathBuf};
use relative_path::RelativePathBuf;
use rayon::prelude::*;
use crate::{
@ -29,6 +29,7 @@ use crate::{
pub use crate::{
descriptors::FnDescriptor,
input::{FileId, FileResolver, CrateGraph, CrateId}
};
pub use ra_editor::{
CompletionItem, FileSymbol, Fold, FoldKind, HighlightedRange, LineIndex, Runnable,
@ -49,34 +50,6 @@ impl std::fmt::Display for Canceled {
impl std::error::Error for Canceled {
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct FileId(pub u32);
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct CrateId(pub u32);
#[derive(Debug, Clone, Default, PartialEq, Eq)]
pub struct CrateGraph {
crate_roots: FxHashMap<CrateId, FileId>,
}
impl CrateGraph {
pub fn new() -> CrateGraph {
CrateGraph::default()
}
pub fn add_crate_root(&mut self, file_id: FileId) -> CrateId{
let crate_id = CrateId(self.crate_roots.len() as u32);
let prev = self.crate_roots.insert(crate_id, file_id);
assert!(prev.is_none());
crate_id
}
}
pub trait FileResolver: fmt::Debug + Send + Sync + 'static {
fn file_stem(&self, file_id: FileId) -> String;
fn resolve(&self, file_id: FileId, path: &RelativePath) -> Option<FileId>;
}
#[derive(Default)]
pub struct AnalysisChange {
files_added: Vec<(FileId, String)>,