diff options
author | Aleksey Kladov <[email protected]> | 2019-08-06 12:34:28 +0100 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2019-08-06 13:28:31 +0100 |
commit | deea8f52d9803bb8a93d5dbd935970a20f07a51e (patch) | |
tree | 989408695c8c7347d4c9e907cf3f8feff7f2a982 /crates/ra_lsp_server/src/world.rs | |
parent | 058c2daba1b81804d9f803e57c72f5702c124d9e (diff) |
allow to exclude certain files and directories
Diffstat (limited to 'crates/ra_lsp_server/src/world.rs')
-rw-r--r-- | crates/ra_lsp_server/src/world.rs | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/crates/ra_lsp_server/src/world.rs b/crates/ra_lsp_server/src/world.rs index a8aafe5cb..9990ef62e 100644 --- a/crates/ra_lsp_server/src/world.rs +++ b/crates/ra_lsp_server/src/world.rs | |||
@@ -10,7 +10,7 @@ use ra_ide_api::{ | |||
10 | Analysis, AnalysisChange, AnalysisHost, CrateGraph, FileId, LibraryData, SourceRootId, | 10 | Analysis, AnalysisChange, AnalysisHost, CrateGraph, FileId, LibraryData, SourceRootId, |
11 | }; | 11 | }; |
12 | use ra_vfs::{RootEntry, Vfs, VfsChange, VfsFile, VfsRoot}; | 12 | use ra_vfs::{RootEntry, Vfs, VfsChange, VfsFile, VfsRoot}; |
13 | use ra_vfs_glob::RustPackageFilterBuilder; | 13 | use ra_vfs_glob::{Glob, RustPackageFilterBuilder}; |
14 | use relative_path::RelativePathBuf; | 14 | use relative_path::RelativePathBuf; |
15 | 15 | ||
16 | use crate::{ | 16 | use crate::{ |
@@ -56,25 +56,27 @@ impl WorldState { | |||
56 | folder_roots: Vec<PathBuf>, | 56 | folder_roots: Vec<PathBuf>, |
57 | workspaces: Vec<ProjectWorkspace>, | 57 | workspaces: Vec<ProjectWorkspace>, |
58 | lru_capacity: Option<usize>, | 58 | lru_capacity: Option<usize>, |
59 | exclude_globs: &[Glob], | ||
59 | options: Options, | 60 | options: Options, |
60 | ) -> WorldState { | 61 | ) -> WorldState { |
61 | let mut change = AnalysisChange::new(); | 62 | let mut change = AnalysisChange::new(); |
62 | 63 | ||
63 | let mut roots = Vec::new(); | 64 | let mut roots = Vec::new(); |
64 | roots.extend(folder_roots.iter().map(|path| { | 65 | roots.extend(folder_roots.iter().map(|path| { |
65 | RootEntry::new( | 66 | let mut filter = RustPackageFilterBuilder::default().set_member(true); |
66 | path.clone(), | 67 | for glob in exclude_globs.iter() { |
67 | RustPackageFilterBuilder::default().set_member(true).into_vfs_filter(), | 68 | filter = filter.exclude(glob.clone()); |
68 | ) | 69 | } |
70 | RootEntry::new(path.clone(), filter.into_vfs_filter()) | ||
69 | })); | 71 | })); |
70 | for ws in workspaces.iter() { | 72 | for ws in workspaces.iter() { |
71 | roots.extend(ws.to_roots().into_iter().map(|pkg_root| { | 73 | roots.extend(ws.to_roots().into_iter().map(|pkg_root| { |
72 | RootEntry::new( | 74 | let mut filter = |
73 | pkg_root.path().clone(), | 75 | RustPackageFilterBuilder::default().set_member(pkg_root.is_member()); |
74 | RustPackageFilterBuilder::default() | 76 | for glob in exclude_globs.iter() { |
75 | .set_member(pkg_root.is_member()) | 77 | filter = filter.exclude(glob.clone()); |
76 | .into_vfs_filter(), | 78 | } |
77 | ) | 79 | RootEntry::new(pkg_root.path().clone(), filter.into_vfs_filter()) |
78 | })); | 80 | })); |
79 | } | 81 | } |
80 | 82 | ||