hack around nested libraries

This commit is contained in:
Aleksey Kladov 2018-11-27 00:12:43 +03:00
parent 8a572043e7
commit 6b1f30ade9
4 changed files with 44 additions and 3 deletions

View file

@ -168,9 +168,35 @@ fn main_loop_inner(
let workspaces = vec![ws];
feedback(internal_mode, "workspace loaded", msg_sender);
for ws in workspaces.iter() {
for pkg in ws.packages().filter(|pkg| !pkg.is_member(ws)) {
debug!("sending root, {}", pkg.root(ws).to_path_buf().display());
fs_worker.send(pkg.root(ws).to_path_buf());
// Add each library as constant input. If library is
// within the workspace, don't treat it as a library.
//
// HACK: If source roots are nested, pick the outer one.
let mut roots = ws
.packages()
.filter(|pkg| !pkg.is_member(ws))
.filter_map(|pkg| {
let root = pkg.root(ws).to_path_buf();
if root.starts_with(&ws_root) {
None
} else {
Some(root)
}
})
.collect::<Vec<_>>();
roots.sort_by_key(|it| it.as_os_str().len());
let unique = roots
.iter()
.enumerate()
.filter(|&(idx, long)| {
!roots[..idx].iter().any(|short| long.starts_with(short))
})
.map(|(_idx, root)| root);
for root in unique {
debug!("sending root, {}", root.display());
fs_worker.send(root.to_owned());
}
}
state.set_workspaces(workspaces);

View file

@ -79,6 +79,10 @@ impl FileResolver for PathMap {
let path = normalize(&path);
self.get_id(&path)
}
fn debug_path(&self, file_id: FileId) -> Option<PathBuf> {
Some(self.get_path(file_id).to_owned())
}
}
fn normalize(path: &Path) -> PathBuf {