diff options
| author | Aleksey Kladov <[email protected]> | 2018-11-28 13:19:01 +0000 |
|---|---|---|
| committer | Aleksey Kladov <[email protected]> | 2018-11-28 13:19:01 +0000 |
| commit | e89700f9678d3797c09f0a397b7b67fe9c6f5e9f (patch) | |
| tree | aedb0bd160c98dff996ad9cdd55d7f96db294b78 /crates/ra_db | |
| parent | 95c0c8f3986c8b3bcf0052d34d3ace09ebb9fa1b (diff) | |
Move hir tests to hit
Diffstat (limited to 'crates/ra_db')
| -rw-r--r-- | crates/ra_db/src/lib.rs | 1 | ||||
| -rw-r--r-- | crates/ra_db/src/mock.rs | 51 |
2 files changed, 52 insertions, 0 deletions
diff --git a/crates/ra_db/src/lib.rs b/crates/ra_db/src/lib.rs index 33cb0e2ec..6a996c7f4 100644 --- a/crates/ra_db/src/lib.rs +++ b/crates/ra_db/src/lib.rs | |||
| @@ -10,6 +10,7 @@ mod syntax_ptr; | |||
| 10 | mod file_resolver; | 10 | mod file_resolver; |
| 11 | mod input; | 11 | mod input; |
| 12 | mod loc2id; | 12 | mod loc2id; |
| 13 | pub mod mock; | ||
| 13 | 14 | ||
| 14 | use std::sync::Arc; | 15 | use std::sync::Arc; |
| 15 | use ra_editor::LineIndex; | 16 | use ra_editor::LineIndex; |
diff --git a/crates/ra_db/src/mock.rs b/crates/ra_db/src/mock.rs new file mode 100644 index 000000000..2840f9655 --- /dev/null +++ b/crates/ra_db/src/mock.rs | |||
| @@ -0,0 +1,51 @@ | |||
| 1 | use std::sync::Arc; | ||
| 2 | |||
| 3 | use rustc_hash::FxHashSet; | ||
| 4 | use relative_path::{RelativePath, RelativePathBuf}; | ||
| 5 | |||
| 6 | use crate::{FileId, FileResolver, SourceRoot, FileResolverImp}; | ||
| 7 | |||
| 8 | #[derive(Default, Debug)] | ||
| 9 | pub struct FileMap(Vec<(FileId, RelativePathBuf)>); | ||
| 10 | |||
| 11 | impl FileMap { | ||
| 12 | pub fn add(&mut self, path: RelativePathBuf) -> FileId { | ||
| 13 | let file_id = FileId((self.0.len() + 1) as u32); | ||
| 14 | self.0.push((file_id, path)); | ||
| 15 | file_id | ||
| 16 | } | ||
| 17 | |||
| 18 | pub fn into_source_root(self) -> SourceRoot { | ||
| 19 | let files = self.files(); | ||
| 20 | let file_resolver = FileResolverImp::new(Arc::new(self)); | ||
| 21 | SourceRoot { | ||
| 22 | file_resolver, | ||
| 23 | files, | ||
| 24 | } | ||
| 25 | } | ||
| 26 | |||
| 27 | pub fn files(&self) -> FxHashSet<FileId> { | ||
| 28 | self.iter().map(|(id, _)| id).collect() | ||
| 29 | } | ||
| 30 | |||
| 31 | fn iter<'a>(&'a self) -> impl Iterator<Item = (FileId, &'a RelativePath)> + 'a { | ||
| 32 | self.0 | ||
| 33 | .iter() | ||
| 34 | .map(|(id, path)| (*id, path.as_relative_path())) | ||
| 35 | } | ||
| 36 | |||
| 37 | fn path(&self, id: FileId) -> &RelativePath { | ||
| 38 | self.iter().find(|&(it, _)| it == id).unwrap().1 | ||
| 39 | } | ||
| 40 | } | ||
| 41 | |||
| 42 | impl FileResolver for FileMap { | ||
| 43 | fn file_stem(&self, id: FileId) -> String { | ||
| 44 | self.path(id).file_stem().unwrap().to_string() | ||
| 45 | } | ||
| 46 | fn resolve(&self, id: FileId, rel: &RelativePath) -> Option<FileId> { | ||
| 47 | let path = self.path(id).join(rel).normalize(); | ||
| 48 | let id = self.iter().find(|&(_, p)| path == p)?.0; | ||
| 49 | Some(id) | ||
| 50 | } | ||
| 51 | } | ||
