From cb6205c09da9fd6fc0bd9f88106f5e9bd3f471aa Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 18 Dec 2018 17:22:48 +0300 Subject: use relpaths for module resolve --- crates/ra_db/src/input.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'crates/ra_db/src') diff --git a/crates/ra_db/src/input.rs b/crates/ra_db/src/input.rs index ac144b991..b09014dc6 100644 --- a/crates/ra_db/src/input.rs +++ b/crates/ra_db/src/input.rs @@ -1,6 +1,7 @@ use std::sync::Arc; use rustc_hash::{FxHashSet, FxHashMap}; +use relative_path::RelativePathBuf; use ra_syntax::SmolStr; use salsa; @@ -85,10 +86,23 @@ salsa::query_group! { type FileTextQuery; storage input; } + /// Path to a file, relative to the root of its source root. + fn file_relative_path(file_id: FileId) -> RelativePathBuf { + type FileRelativePathQuery; + storage input; + } fn file_source_root(file_id: FileId) -> SourceRootId { type FileSourceRootQuery; storage input; } + fn source_root_files(id: SourceRootId) -> Arc> { + type SourceRootFilesQuery; + storage input; + } + fn source_root_file_by_path(id: SourceRootId, path: RelativePathBuf) -> Option { + type SourceRootFilesByPathQuery; + storage input; + } fn source_root(id: SourceRootId) -> Arc { type SourceRootQuery; storage input; -- cgit v1.2.3 From dea1a69e1cb0af7d6917d351a811ef205b7dfef9 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 18 Dec 2018 17:23:49 +0300 Subject: remove relpath from input --- crates/ra_db/src/input.rs | 3 --- crates/ra_db/src/mock.rs | 10 ++-------- 2 files changed, 2 insertions(+), 11 deletions(-) (limited to 'crates/ra_db/src') diff --git a/crates/ra_db/src/input.rs b/crates/ra_db/src/input.rs index b09014dc6..9edaf36cf 100644 --- a/crates/ra_db/src/input.rs +++ b/crates/ra_db/src/input.rs @@ -5,8 +5,6 @@ use relative_path::RelativePathBuf; use ra_syntax::SmolStr; use salsa; -use crate::file_resolver::FileResolverImp; - #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct FileId(pub u32); @@ -123,7 +121,6 @@ pub struct SourceRootId(pub u32); #[derive(Default, Clone, Debug, PartialEq, Eq)] pub struct SourceRoot { - pub file_resolver: FileResolverImp, pub files: FxHashSet, } diff --git a/crates/ra_db/src/mock.rs b/crates/ra_db/src/mock.rs index 2f7551597..14d9e79b5 100644 --- a/crates/ra_db/src/mock.rs +++ b/crates/ra_db/src/mock.rs @@ -1,9 +1,7 @@ -use std::sync::Arc; - use rustc_hash::FxHashSet; use relative_path::{RelativePath, RelativePathBuf}; -use crate::{FileId, FileResolver, SourceRoot, FileResolverImp}; +use crate::{FileId, FileResolver, SourceRoot}; #[derive(Default, Debug, Clone)] pub struct FileMap(Vec<(FileId, RelativePathBuf)>); @@ -17,11 +15,7 @@ impl FileMap { pub fn into_source_root(self) -> SourceRoot { let files = self.files(); - let file_resolver = FileResolverImp::new(Arc::new(self)); - SourceRoot { - file_resolver, - files, - } + SourceRoot { files } } pub fn files(&self) -> FxHashSet { -- cgit v1.2.3 From b6ce7a6d344fa673addcd299cbb19b050625e04d Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Wed, 19 Dec 2018 10:26:24 +0300 Subject: make it compile --- crates/ra_db/src/input.rs | 2 +- crates/ra_db/src/lib.rs | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) (limited to 'crates/ra_db/src') diff --git a/crates/ra_db/src/input.rs b/crates/ra_db/src/input.rs index 9edaf36cf..65b674da9 100644 --- a/crates/ra_db/src/input.rs +++ b/crates/ra_db/src/input.rs @@ -98,7 +98,7 @@ salsa::query_group! { storage input; } fn source_root_file_by_path(id: SourceRootId, path: RelativePathBuf) -> Option { - type SourceRootFilesByPathQuery; + type SourceRootFileByPathQuery; storage input; } fn source_root(id: SourceRootId) -> Arc { diff --git a/crates/ra_db/src/lib.rs b/crates/ra_db/src/lib.rs index 53805aada..783b7a799 100644 --- a/crates/ra_db/src/lib.rs +++ b/crates/ra_db/src/lib.rs @@ -28,6 +28,7 @@ pub use crate::{ input::{ FilesDatabase, FileId, CrateId, SourceRoot, SourceRootId, CrateGraph, WORKSPACE, FileTextQuery, FileSourceRootQuery, SourceRootQuery, LibrariesQuery, CrateGraphQuery, + FileRelativePathQuery, SourceRootFilesQuery, SourceRootFileByPathQuery, }, loc2id::{LocationIntener, NumericId}, }; -- cgit v1.2.3 From 85290bc1342560d5560f0b2151cff1c0c6dac155 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Wed, 19 Dec 2018 12:20:54 +0300 Subject: switch analysis to vfs --- crates/ra_db/src/input.rs | 22 +++++++--------------- crates/ra_db/src/lib.rs | 2 +- crates/ra_db/src/mock.rs | 7 +------ 3 files changed, 9 insertions(+), 22 deletions(-) (limited to 'crates/ra_db/src') diff --git a/crates/ra_db/src/input.rs b/crates/ra_db/src/input.rs index 65b674da9..51daa8e86 100644 --- a/crates/ra_db/src/input.rs +++ b/crates/ra_db/src/input.rs @@ -1,10 +1,15 @@ use std::sync::Arc; -use rustc_hash::{FxHashSet, FxHashMap}; +use rustc_hash::{FxHashMap}; use relative_path::RelativePathBuf; use ra_syntax::SmolStr; use salsa; +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)] +pub struct SourceRootId(pub u32); + +pub const WORKSPACE: SourceRootId = SourceRootId(0); + #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct FileId(pub u32); @@ -93,14 +98,6 @@ salsa::query_group! { type FileSourceRootQuery; storage input; } - fn source_root_files(id: SourceRootId) -> Arc> { - type SourceRootFilesQuery; - storage input; - } - fn source_root_file_by_path(id: SourceRootId, path: RelativePathBuf) -> Option { - type SourceRootFileByPathQuery; - storage input; - } fn source_root(id: SourceRootId) -> Arc { type SourceRootQuery; storage input; @@ -116,12 +113,7 @@ salsa::query_group! { } } -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)] -pub struct SourceRootId(pub u32); - #[derive(Default, Clone, Debug, PartialEq, Eq)] pub struct SourceRoot { - pub files: FxHashSet, + pub files: FxHashMap, } - -pub const WORKSPACE: SourceRootId = SourceRootId(0); diff --git a/crates/ra_db/src/lib.rs b/crates/ra_db/src/lib.rs index 783b7a799..d1db281e6 100644 --- a/crates/ra_db/src/lib.rs +++ b/crates/ra_db/src/lib.rs @@ -28,7 +28,7 @@ pub use crate::{ input::{ FilesDatabase, FileId, CrateId, SourceRoot, SourceRootId, CrateGraph, WORKSPACE, FileTextQuery, FileSourceRootQuery, SourceRootQuery, LibrariesQuery, CrateGraphQuery, - FileRelativePathQuery, SourceRootFilesQuery, SourceRootFileByPathQuery, + FileRelativePathQuery }, loc2id::{LocationIntener, NumericId}, }; diff --git a/crates/ra_db/src/mock.rs b/crates/ra_db/src/mock.rs index 14d9e79b5..efe987bdd 100644 --- a/crates/ra_db/src/mock.rs +++ b/crates/ra_db/src/mock.rs @@ -1,7 +1,7 @@ use rustc_hash::FxHashSet; use relative_path::{RelativePath, RelativePathBuf}; -use crate::{FileId, FileResolver, SourceRoot}; +use crate::{FileId, FileResolver}; #[derive(Default, Debug, Clone)] pub struct FileMap(Vec<(FileId, RelativePathBuf)>); @@ -13,11 +13,6 @@ impl FileMap { file_id } - pub fn into_source_root(self) -> SourceRoot { - let files = self.files(); - SourceRoot { files } - } - pub fn files(&self) -> FxHashSet { self.iter().map(|(id, _)| id).collect() } -- cgit v1.2.3 From 18aac1df45ca39d01d80a56e3afab7299de160f8 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Wed, 19 Dec 2018 12:26:51 +0300 Subject: kill file resolver --- crates/ra_db/src/file_resolver.rs | 76 --------------------------------------- crates/ra_db/src/lib.rs | 2 -- crates/ra_db/src/mock.rs | 17 +-------- 3 files changed, 1 insertion(+), 94 deletions(-) delete mode 100644 crates/ra_db/src/file_resolver.rs (limited to 'crates/ra_db/src') diff --git a/crates/ra_db/src/file_resolver.rs b/crates/ra_db/src/file_resolver.rs deleted file mode 100644 index f849ac752..000000000 --- a/crates/ra_db/src/file_resolver.rs +++ /dev/null @@ -1,76 +0,0 @@ -use std::{ - sync::Arc, - hash::{Hash, Hasher}, - fmt, -}; - -use relative_path::RelativePath; - -use crate::input::FileId; - -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; - fn debug_path(&self, _1file_id: FileId) -> Option { - None - } -} - -#[derive(Clone, Debug)] -pub struct FileResolverImp { - inner: Arc, -} - -impl PartialEq for FileResolverImp { - fn eq(&self, other: &FileResolverImp) -> bool { - self.inner() == other.inner() - } -} - -impl Eq for FileResolverImp {} - -impl Hash for FileResolverImp { - fn hash(&self, hasher: &mut H) { - self.inner().hash(hasher); - } -} - -impl FileResolverImp { - pub fn new(inner: Arc) -> FileResolverImp { - FileResolverImp { inner } - } - pub fn file_stem(&self, file_id: FileId) -> String { - self.inner.file_stem(file_id) - } - pub fn resolve(&self, file_id: FileId, path: &RelativePath) -> Option { - self.inner.resolve(file_id, path) - } - pub fn debug_path(&self, file_id: FileId) -> Option { - self.inner.debug_path(file_id) - } - fn inner(&self) -> *const FileResolver { - &*self.inner - } -} - -impl Default for FileResolverImp { - fn default() -> FileResolverImp { - #[derive(Debug)] - struct DummyResolver; - impl FileResolver for DummyResolver { - fn file_stem(&self, _file_: FileId) -> String { - panic!("file resolver not set") - } - fn resolve( - &self, - _file_id: FileId, - _path: &::relative_path::RelativePath, - ) -> Option { - panic!("file resolver not set") - } - } - FileResolverImp { - inner: Arc::new(DummyResolver), - } - } -} diff --git a/crates/ra_db/src/lib.rs b/crates/ra_db/src/lib.rs index d1db281e6..eeb305b1b 100644 --- a/crates/ra_db/src/lib.rs +++ b/crates/ra_db/src/lib.rs @@ -1,6 +1,5 @@ //! ra_db defines basic database traits. Concrete DB is defined by ra_analysis. mod syntax_ptr; -mod file_resolver; mod input; mod loc2id; pub mod mock; @@ -24,7 +23,6 @@ impl std::error::Error for Canceled {} pub use crate::{ syntax_ptr::LocalSyntaxPtr, - file_resolver::{FileResolver, FileResolverImp}, input::{ FilesDatabase, FileId, CrateId, SourceRoot, SourceRootId, CrateGraph, WORKSPACE, FileTextQuery, FileSourceRootQuery, SourceRootQuery, LibrariesQuery, CrateGraphQuery, diff --git a/crates/ra_db/src/mock.rs b/crates/ra_db/src/mock.rs index efe987bdd..5e185062b 100644 --- a/crates/ra_db/src/mock.rs +++ b/crates/ra_db/src/mock.rs @@ -1,7 +1,7 @@ use rustc_hash::FxHashSet; use relative_path::{RelativePath, RelativePathBuf}; -use crate::{FileId, FileResolver}; +use crate::{FileId}; #[derive(Default, Debug, Clone)] pub struct FileMap(Vec<(FileId, RelativePathBuf)>); @@ -27,19 +27,4 @@ impl FileMap { .iter() .map(|(id, path)| (*id, path.as_relative_path())) } - - fn path(&self, id: FileId) -> &RelativePath { - self.iter().find(|&(it, _)| it == id).unwrap().1 - } -} - -impl FileResolver for FileMap { - fn file_stem(&self, id: FileId) -> String { - self.path(id).file_stem().unwrap().to_string() - } - fn resolve(&self, id: FileId, rel: &RelativePath) -> Option { - let path = self.path(id).join(rel).normalize(); - let id = self.iter().find(|&(_, p)| path == p)?.0; - Some(id) - } } -- cgit v1.2.3 From e6465e7e2a7e136edd652d5f4c93b961dd652cbc Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Wed, 19 Dec 2018 16:13:16 +0300 Subject: index all local crates --- crates/ra_db/src/input.rs | 10 ++++++---- crates/ra_db/src/lib.rs | 4 ++-- 2 files changed, 8 insertions(+), 6 deletions(-) (limited to 'crates/ra_db/src') diff --git a/crates/ra_db/src/input.rs b/crates/ra_db/src/input.rs index 51daa8e86..cccf37cc2 100644 --- a/crates/ra_db/src/input.rs +++ b/crates/ra_db/src/input.rs @@ -8,8 +8,6 @@ use salsa; #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)] pub struct SourceRootId(pub u32); -pub const WORKSPACE: SourceRootId = SourceRootId(0); - #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct FileId(pub u32); @@ -102,8 +100,12 @@ salsa::query_group! { type SourceRootQuery; storage input; } - fn libraries() -> Arc> { - type LibrariesQuery; + fn local_roots() -> Arc> { + type LocalRootsQuery; + storage input; + } + fn library_roots() -> Arc> { + type LibraryRootsQuery; storage input; } fn crate_graph() -> Arc { diff --git a/crates/ra_db/src/lib.rs b/crates/ra_db/src/lib.rs index eeb305b1b..65fa3cbfa 100644 --- a/crates/ra_db/src/lib.rs +++ b/crates/ra_db/src/lib.rs @@ -24,8 +24,8 @@ impl std::error::Error for Canceled {} pub use crate::{ syntax_ptr::LocalSyntaxPtr, input::{ - FilesDatabase, FileId, CrateId, SourceRoot, SourceRootId, CrateGraph, WORKSPACE, - FileTextQuery, FileSourceRootQuery, SourceRootQuery, LibrariesQuery, CrateGraphQuery, + FilesDatabase, FileId, CrateId, SourceRoot, SourceRootId, CrateGraph, + FileTextQuery, FileSourceRootQuery, SourceRootQuery, LocalRootsQuery, LibraryRootsQuery, CrateGraphQuery, FileRelativePathQuery }, loc2id::{LocationIntener, NumericId}, -- cgit v1.2.3