aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--crates/ra_analysis/src/imp.rs8
-rw-r--r--crates/ra_analysis/src/input.rs3
-rw-r--r--crates/ra_lsp_server/src/main_loop/mod.rs32
-rw-r--r--crates/ra_lsp_server/src/path_map.rs4
-rw-r--r--editors/code/package-lock.json62
-rw-r--r--editors/code/package.json1
6 files changed, 68 insertions, 42 deletions
diff --git a/crates/ra_analysis/src/imp.rs b/crates/ra_analysis/src/imp.rs
index e1493bdaa..ad6b52371 100644
--- a/crates/ra_analysis/src/imp.rs
+++ b/crates/ra_analysis/src/imp.rs
@@ -59,6 +59,9 @@ impl FileResolverImp {
59 pub(crate) fn resolve(&self, file_id: FileId, path: &RelativePath) -> Option<FileId> { 59 pub(crate) fn resolve(&self, file_id: FileId, path: &RelativePath) -> Option<FileId> {
60 self.inner.resolve(file_id, path) 60 self.inner.resolve(file_id, path)
61 } 61 }
62 pub(crate) fn debug_path(&self, file_id: FileId) -> Option<std::path::PathBuf> {
63 self.inner.debug_path(file_id)
64 }
62 fn inner(&self) -> *const FileResolver { 65 fn inner(&self) -> *const FileResolver {
63 &*self.inner 66 &*self.inner
64 } 67 }
@@ -138,6 +141,11 @@ impl AnalysisHostImpl {
138 let mut files = FxHashSet::default(); 141 let mut files = FxHashSet::default();
139 for (file_id, text) in library.files { 142 for (file_id, text) in library.files {
140 files.insert(file_id); 143 files.insert(file_id);
144 log::debug!(
145 "library file: {:?} {:?}",
146 file_id,
147 library.file_resolver.debug_path(file_id)
148 );
141 self.db 149 self.db
142 .query_mut(crate::input::FileSourceRootQuery) 150 .query_mut(crate::input::FileSourceRootQuery)
143 .set_constant(file_id, source_root_id); 151 .set_constant(file_id, source_root_id);
diff --git a/crates/ra_analysis/src/input.rs b/crates/ra_analysis/src/input.rs
index ba8a17fd5..a78b6e397 100644
--- a/crates/ra_analysis/src/input.rs
+++ b/crates/ra_analysis/src/input.rs
@@ -33,6 +33,9 @@ impl CrateGraph {
33pub trait FileResolver: fmt::Debug + Send + Sync + 'static { 33pub trait FileResolver: fmt::Debug + Send + Sync + 'static {
34 fn file_stem(&self, file_id: FileId) -> String; 34 fn file_stem(&self, file_id: FileId) -> String;
35 fn resolve(&self, file_id: FileId, path: &RelativePath) -> Option<FileId>; 35 fn resolve(&self, file_id: FileId, path: &RelativePath) -> Option<FileId>;
36 fn debug_path(&self, _file_id: FileId) -> Option<std::path::PathBuf> {
37 None
38 }
36} 39}
37 40
38salsa::query_group! { 41salsa::query_group! {
diff --git a/crates/ra_lsp_server/src/main_loop/mod.rs b/crates/ra_lsp_server/src/main_loop/mod.rs
index 78d93741a..36f08be2f 100644
--- a/crates/ra_lsp_server/src/main_loop/mod.rs
+++ b/crates/ra_lsp_server/src/main_loop/mod.rs
@@ -168,9 +168,35 @@ fn main_loop_inner(
168 let workspaces = vec![ws]; 168 let workspaces = vec![ws];
169 feedback(internal_mode, "workspace loaded", msg_sender); 169 feedback(internal_mode, "workspace loaded", msg_sender);
170 for ws in workspaces.iter() { 170 for ws in workspaces.iter() {
171 for pkg in ws.packages().filter(|pkg| !pkg.is_member(ws)) { 171 // Add each library as constant input. If library is
172 debug!("sending root, {}", pkg.root(ws).to_path_buf().display()); 172 // within the workspace, don't treat it as a library.
173 fs_worker.send(pkg.root(ws).to_path_buf()); 173 //
174 // HACK: If source roots are nested, pick the outer one.
175
176 let mut roots = ws
177 .packages()
178 .filter(|pkg| !pkg.is_member(ws))
179 .filter_map(|pkg| {
180 let root = pkg.root(ws).to_path_buf();
181 if root.starts_with(&ws_root) {
182 None
183 } else {
184 Some(root)
185 }
186 })
187 .collect::<Vec<_>>();
188 roots.sort_by_key(|it| it.as_os_str().len());
189 let unique = roots
190 .iter()
191 .enumerate()
192 .filter(|&(idx, long)| {
193 !roots[..idx].iter().any(|short| long.starts_with(short))
194 })
195 .map(|(_idx, root)| root);
196
197 for root in unique {
198 debug!("sending root, {}", root.display());
199 fs_worker.send(root.to_owned());
174 } 200 }
175 } 201 }
176 state.set_workspaces(workspaces); 202 state.set_workspaces(workspaces);
diff --git a/crates/ra_lsp_server/src/path_map.rs b/crates/ra_lsp_server/src/path_map.rs
index 87eabf9be..a624043d8 100644
--- a/crates/ra_lsp_server/src/path_map.rs
+++ b/crates/ra_lsp_server/src/path_map.rs
@@ -79,6 +79,10 @@ impl FileResolver for PathMap {
79 let path = normalize(&path); 79 let path = normalize(&path);
80 self.get_id(&path) 80 self.get_id(&path)
81 } 81 }
82
83 fn debug_path(&self, file_id: FileId) -> Option<PathBuf> {
84 Some(self.get_path(file_id).to_owned())
85 }
82} 86}
83 87
84fn normalize(path: &Path) -> PathBuf { 88fn normalize(path: &Path) -> PathBuf {
diff --git a/editors/code/package-lock.json b/editors/code/package-lock.json
index fe304623f..530a6f77d 100644
--- a/editors/code/package-lock.json
+++ b/editors/code/package-lock.json
@@ -527,8 +527,7 @@
527 "duplexer": { 527 "duplexer": {
528 "version": "0.1.1", 528 "version": "0.1.1",
529 "resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", 529 "resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
530 "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", 530 "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E="
531 "dev": true
532 }, 531 },
533 "duplexify": { 532 "duplexify": {
534 "version": "3.6.0", 533 "version": "3.6.0",
@@ -587,18 +586,16 @@
587 "dev": true 586 "dev": true
588 }, 587 },
589 "event-stream": { 588 "event-stream": {
590 "version": "3.3.6", 589 "version": "3.3.4",
591 "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.6.tgz", 590 "resolved": "http://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz",
592 "integrity": "sha512-dGXNg4F/FgVzlApjzItL+7naHutA3fDqbV/zAZqDDlXTjiMnQmZKu+prImWKszeBM5UQeGvAl3u1wBiKeDh61g==", 591 "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=",
593 "dev": true,
594 "requires": { 592 "requires": {
595 "duplexer": "0.1.1", 593 "duplexer": "0.1.1",
596 "flatmap-stream": "0.1.0",
597 "from": "0.1.7", 594 "from": "0.1.7",
598 "map-stream": "0.0.7", 595 "map-stream": "0.1.0",
599 "pause-stream": "0.0.11", 596 "pause-stream": "0.0.11",
600 "split": "1.0.1", 597 "split": "0.3.3",
601 "stream-combiner": "0.2.2", 598 "stream-combiner": "0.0.4",
602 "through": "2.3.8" 599 "through": "2.3.8"
603 } 600 }
604 }, 601 },
@@ -704,12 +701,6 @@
704 "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=", 701 "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=",
705 "dev": true 702 "dev": true
706 }, 703 },
707 "flatmap-stream": {
708 "version": "0.1.0",
709 "resolved": "https://registry.npmjs.org/flatmap-stream/-/flatmap-stream-0.1.0.tgz",
710 "integrity": "sha512-Nlic4ZRYxikqnK5rj3YoxDVKGGtUjcNDUtvQ7XsdGLZmMwdUYnXf10o1zcXtzEZTBgc6GxeRpQxV/Wu3WPIIHA==",
711 "dev": true
712 },
713 "for-in": { 704 "for-in": {
714 "version": "1.0.2", 705 "version": "1.0.2",
715 "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", 706 "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
@@ -745,8 +736,7 @@
745 "from": { 736 "from": {
746 "version": "0.1.7", 737 "version": "0.1.7",
747 "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", 738 "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz",
748 "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", 739 "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4="
749 "dev": true
750 }, 740 },
751 "fs.realpath": { 741 "fs.realpath": {
752 "version": "1.0.0", 742 "version": "1.0.0",
@@ -986,7 +976,7 @@
986 "integrity": "sha512-/9vtSk9eI9DEWCqzGieglPqmx0WUQ9pwPHyHFpKmfxqdgqGJC2l0vFMdYs54hLdDsMDEZFLDL2J4ikjc4hQ5HQ==", 976 "integrity": "sha512-/9vtSk9eI9DEWCqzGieglPqmx0WUQ9pwPHyHFpKmfxqdgqGJC2l0vFMdYs54hLdDsMDEZFLDL2J4ikjc4hQ5HQ==",
987 "dev": true, 977 "dev": true,
988 "requires": { 978 "requires": {
989 "event-stream": "3.3.6", 979 "event-stream": "3.3.4",
990 "node.extend": "1.1.6", 980 "node.extend": "1.1.6",
991 "request": "2.88.0", 981 "request": "2.88.0",
992 "through2": "2.0.3", 982 "through2": "2.0.3",
@@ -1065,7 +1055,7 @@
1065 "integrity": "sha1-wWUyBzLRks5W/ZQnH/oSMjS/KuA=", 1055 "integrity": "sha1-wWUyBzLRks5W/ZQnH/oSMjS/KuA=",
1066 "dev": true, 1056 "dev": true,
1067 "requires": { 1057 "requires": {
1068 "event-stream": "3.3.6", 1058 "event-stream": "3.3.4",
1069 "mkdirp": "0.5.1", 1059 "mkdirp": "0.5.1",
1070 "queue": "3.1.0", 1060 "queue": "3.1.0",
1071 "vinyl-fs": "2.4.4" 1061 "vinyl-fs": "2.4.4"
@@ -1077,7 +1067,7 @@
1077 "integrity": "sha512-0QfbCH2a1k2qkTLWPqTX+QO4qNsHn3kC546YhAP3/n0h+nvtyGITDuDrYBMDZeW4WnFijmkOvBWa5HshTic1tw==", 1067 "integrity": "sha512-0QfbCH2a1k2qkTLWPqTX+QO4qNsHn3kC546YhAP3/n0h+nvtyGITDuDrYBMDZeW4WnFijmkOvBWa5HshTic1tw==",
1078 "dev": true, 1068 "dev": true,
1079 "requires": { 1069 "requires": {
1080 "event-stream": "3.3.6", 1070 "event-stream": "3.3.4",
1081 "streamifier": "0.1.1", 1071 "streamifier": "0.1.1",
1082 "tar": "2.2.1", 1072 "tar": "2.2.1",
1083 "through2": "2.0.3", 1073 "through2": "2.0.3",
@@ -1115,7 +1105,7 @@
1115 "integrity": "sha1-JOQGhdwFtxSZlSRQmeBZAmO+ja0=", 1105 "integrity": "sha1-JOQGhdwFtxSZlSRQmeBZAmO+ja0=",
1116 "dev": true, 1106 "dev": true,
1117 "requires": { 1107 "requires": {
1118 "event-stream": "3.3.6", 1108 "event-stream": "3.3.4",
1119 "queue": "4.5.0", 1109 "queue": "4.5.0",
1120 "through2": "2.0.3", 1110 "through2": "2.0.3",
1121 "vinyl": "2.2.0", 1111 "vinyl": "2.2.0",
@@ -1475,10 +1465,9 @@
1475 "dev": true 1465 "dev": true
1476 }, 1466 },
1477 "map-stream": { 1467 "map-stream": {
1478 "version": "0.0.7", 1468 "version": "0.1.0",
1479 "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", 1469 "resolved": "http://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz",
1480 "integrity": "sha1-ih8HiW2CsQkmvTdEokIACfiJdKg=", 1470 "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ="
1481 "dev": true
1482 }, 1471 },
1483 "markdown-it": { 1472 "markdown-it": {
1484 "version": "8.4.2", 1473 "version": "8.4.2",
@@ -1838,7 +1827,6 @@
1838 "version": "0.0.11", 1827 "version": "0.0.11",
1839 "resolved": "http://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", 1828 "resolved": "http://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz",
1840 "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", 1829 "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=",
1841 "dev": true,
1842 "requires": { 1830 "requires": {
1843 "through": "2.3.8" 1831 "through": "2.3.8"
1844 } 1832 }
@@ -2093,10 +2081,9 @@
2093 } 2081 }
2094 }, 2082 },
2095 "split": { 2083 "split": {
2096 "version": "1.0.1", 2084 "version": "0.3.3",
2097 "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", 2085 "resolved": "http://registry.npmjs.org/split/-/split-0.3.3.tgz",
2098 "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", 2086 "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=",
2099 "dev": true,
2100 "requires": { 2087 "requires": {
2101 "through": "2.3.8" 2088 "through": "2.3.8"
2102 } 2089 }
@@ -2131,13 +2118,11 @@
2131 "dev": true 2118 "dev": true
2132 }, 2119 },
2133 "stream-combiner": { 2120 "stream-combiner": {
2134 "version": "0.2.2", 2121 "version": "0.0.4",
2135 "resolved": "http://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", 2122 "resolved": "http://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz",
2136 "integrity": "sha1-rsjLrBd7Vrb0+kec7YwZEs7lKFg=", 2123 "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=",
2137 "dev": true,
2138 "requires": { 2124 "requires": {
2139 "duplexer": "0.1.1", 2125 "duplexer": "0.1.1"
2140 "through": "2.3.8"
2141 } 2126 }
2142 }, 2127 },
2143 "stream-shift": { 2128 "stream-shift": {
@@ -2221,8 +2206,7 @@
2221 "through": { 2206 "through": {
2222 "version": "2.3.8", 2207 "version": "2.3.8",
2223 "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", 2208 "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz",
2224 "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", 2209 "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
2225 "dev": true
2226 }, 2210 },
2227 "through2": { 2211 "through2": {
2228 "version": "2.0.3", 2212 "version": "2.0.3",
diff --git a/editors/code/package.json b/editors/code/package.json
index ea84a1ccb..f3b049e43 100644
--- a/editors/code/package.json
+++ b/editors/code/package.json
@@ -28,6 +28,7 @@
28 "singleQuote": true 28 "singleQuote": true
29 }, 29 },
30 "dependencies": { 30 "dependencies": {
31 "event-stream": "^3.3.4",
31 "vscode-languageclient": "^5.1.1" 32 "vscode-languageclient": "^5.1.1"
32 }, 33 },
33 "devDependencies": { 34 "devDependencies": {