aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_analysis
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2018-10-25 15:40:24 +0100
committerAleksey Kladov <[email protected]>2018-10-25 15:40:24 +0100
commite0eb33605a917d2e7289debe0c915e75286b834f (patch)
treeea35a9250c22fdc201daad5ae971a214f1c23e70 /crates/ra_analysis
parent75d9cbd7c22b09a0bc2731731228c95ae60573c3 (diff)
Encapsulate CrateGraph a bit
Diffstat (limited to 'crates/ra_analysis')
-rw-r--r--crates/ra_analysis/Cargo.toml2
-rw-r--r--crates/ra_analysis/src/lib.rs18
-rw-r--r--crates/ra_analysis/tests/tests.rs13
3 files changed, 21 insertions, 12 deletions
diff --git a/crates/ra_analysis/Cargo.toml b/crates/ra_analysis/Cargo.toml
index 5d7915fa5..ff56a3c34 100644
--- a/crates/ra_analysis/Cargo.toml
+++ b/crates/ra_analysis/Cargo.toml
@@ -11,7 +11,7 @@ rayon = "1.0.2"
11fst = "0.3.1" 11fst = "0.3.1"
12ra_syntax = { path = "../ra_syntax" } 12ra_syntax = { path = "../ra_syntax" }
13ra_editor = { path = "../ra_editor" } 13ra_editor = { path = "../ra_editor" }
14salsa = "0.6.2" 14salsa = "0.6.1"
15rustc-hash = "1.0" 15rustc-hash = "1.0"
16 16
17[dev-dependencies] 17[dev-dependencies]
diff --git a/crates/ra_analysis/src/lib.rs b/crates/ra_analysis/src/lib.rs
index 703938cf9..af7894cd0 100644
--- a/crates/ra_analysis/src/lib.rs
+++ b/crates/ra_analysis/src/lib.rs
@@ -15,9 +15,9 @@ mod completion;
15use std::{ 15use std::{
16 fmt, 16 fmt,
17 sync::Arc, 17 sync::Arc,
18 collections::BTreeMap,
19}; 18};
20 19
20use rustc_hash::FxHashMap;
21use ra_syntax::{AtomEdit, File, TextRange, TextUnit}; 21use ra_syntax::{AtomEdit, File, TextRange, TextUnit};
22use relative_path::{RelativePath, RelativePathBuf}; 22use relative_path::{RelativePath, RelativePathBuf};
23use rayon::prelude::*; 23use rayon::prelude::*;
@@ -55,9 +55,21 @@ pub struct FileId(pub u32);
55#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] 55#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
56pub struct CrateId(pub u32); 56pub struct CrateId(pub u32);
57 57
58#[derive(Debug, Clone, Default, PartialEq, Eq, Hash)] 58#[derive(Debug, Clone, Default, PartialEq, Eq)]
59pub struct CrateGraph { 59pub struct CrateGraph {
60 pub crate_roots: BTreeMap<CrateId, FileId>, 60 crate_roots: FxHashMap<CrateId, FileId>,
61}
62
63impl CrateGraph {
64 pub fn new() -> CrateGraph {
65 CrateGraph::default()
66 }
67 pub fn add_crate_root(&mut self, file_id: FileId) -> CrateId{
68 let crate_id = CrateId(self.crate_roots.len() as u32);
69 let prev = self.crate_roots.insert(crate_id, file_id);
70 assert!(prev.is_none());
71 crate_id
72 }
61} 73}
62 74
63pub trait FileResolver: fmt::Debug + Send + Sync + 'static { 75pub trait FileResolver: fmt::Debug + Send + Sync + 'static {
diff --git a/crates/ra_analysis/tests/tests.rs b/crates/ra_analysis/tests/tests.rs
index 198d6a263..806e1fb34 100644
--- a/crates/ra_analysis/tests/tests.rs
+++ b/crates/ra_analysis/tests/tests.rs
@@ -7,7 +7,6 @@ extern crate test_utils;
7 7
8use std::{ 8use std::{
9 sync::Arc, 9 sync::Arc,
10 collections::BTreeMap,
11}; 10};
12 11
13use ra_syntax::TextRange; 12use ra_syntax::TextRange;
@@ -130,19 +129,17 @@ fn test_resolve_crate_root() {
130 let snap = host.analysis(); 129 let snap = host.analysis();
131 assert!(snap.crate_for(FileId(2)).unwrap().is_empty()); 130 assert!(snap.crate_for(FileId(2)).unwrap().is_empty());
132 131
133 let crate_graph = CrateGraph { 132 let crate_graph = {
134 crate_roots: { 133 let mut g = CrateGraph::new();
135 let mut m = BTreeMap::default(); 134 g.add_crate_root(FileId(1));
136 m.insert(CrateId(1), FileId(1)); 135 g
137 m
138 },
139 }; 136 };
140 let mut change = AnalysisChange::new(); 137 let mut change = AnalysisChange::new();
141 change.set_crate_graph(crate_graph); 138 change.set_crate_graph(crate_graph);
142 host.apply_change(change); 139 host.apply_change(change);
143 let snap = host.analysis(); 140 let snap = host.analysis();
144 141
145 assert_eq!(snap.crate_for(FileId(2)).unwrap(), vec![CrateId(1)],); 142 assert_eq!(snap.crate_for(FileId(2)).unwrap(), vec![CrateId(0)],);
146} 143}
147 144
148#[test] 145#[test]