aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_lsp_server/src/path_map.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_lsp_server/src/path_map.rs')
-rw-r--r--crates/ra_lsp_server/src/path_map.rs13
1 files changed, 8 insertions, 5 deletions
diff --git a/crates/ra_lsp_server/src/path_map.rs b/crates/ra_lsp_server/src/path_map.rs
index d32829382..b3d1dc3db 100644
--- a/crates/ra_lsp_server/src/path_map.rs
+++ b/crates/ra_lsp_server/src/path_map.rs
@@ -22,15 +22,18 @@ impl PathMap {
22 pub fn new() -> PathMap { 22 pub fn new() -> PathMap {
23 Default::default() 23 Default::default()
24 } 24 }
25 pub fn get_or_insert(&mut self, path: PathBuf, root: Root) -> FileId { 25 pub fn get_or_insert(&mut self, path: PathBuf, root: Root) -> (bool, FileId) {
26 self.path2id 26 let mut inserted = false;
27 let file_id = self.path2id
27 .get(path.as_path()) 28 .get(path.as_path())
28 .map(|&id| id) 29 .map(|&id| id)
29 .unwrap_or_else(|| { 30 .unwrap_or_else(|| {
31 inserted = true;
30 let id = self.new_file_id(); 32 let id = self.new_file_id();
31 self.insert(path, id, root); 33 self.insert(path, id, root);
32 id 34 id
33 }) 35 });
36 (inserted, file_id)
34 } 37 }
35 pub fn get_id(&self, path: &Path) -> Option<FileId> { 38 pub fn get_id(&self, path: &Path) -> Option<FileId> {
36 self.path2id.get(path).map(|&id| id) 39 self.path2id.get(path).map(|&id| id)
@@ -105,8 +108,8 @@ mod test {
105 #[test] 108 #[test]
106 fn test_resolve() { 109 fn test_resolve() {
107 let mut m = PathMap::new(); 110 let mut m = PathMap::new();
108 let id1 = m.get_or_insert(PathBuf::from("/foo"), Root::Workspace); 111 let (_, id1) = m.get_or_insert(PathBuf::from("/foo"), Root::Workspace);
109 let id2 = m.get_or_insert(PathBuf::from("/foo/bar.rs"), Root::Workspace); 112 let (_, id2) = m.get_or_insert(PathBuf::from("/foo/bar.rs"), Root::Workspace);
110 assert_eq!(m.resolve(id1, &RelativePath::new("bar.rs")), Some(id2),) 113 assert_eq!(m.resolve(id1, &RelativePath::new("bar.rs")), Some(id2),)
111 } 114 }
112} 115}