diff options
-rw-r--r-- | crates/ra_analysis/src/imp.rs | 8 | ||||
-rw-r--r-- | crates/ra_analysis/src/input.rs | 3 | ||||
-rw-r--r-- | crates/ra_lsp_server/src/main_loop/mod.rs | 32 | ||||
-rw-r--r-- | crates/ra_lsp_server/src/path_map.rs | 4 | ||||
-rw-r--r-- | editors/code/package-lock.json | 62 | ||||
-rw-r--r-- | editors/code/package.json | 1 |
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 { | |||
33 | pub trait FileResolver: fmt::Debug + Send + Sync + 'static { | 33 | pub 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 | ||
38 | salsa::query_group! { | 41 | salsa::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 | ||
84 | fn normalize(path: &Path) -> PathBuf { | 88 | fn 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": { |