Skip to content

Commit 35568cf

Browse files
committed
Index files in parallel
1 parent 943fc5e commit 35568cf

File tree

1 file changed

+13
-9
lines changed

1 file changed

+13
-9
lines changed

crates/ra_analysis/src/imp.rs

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ use ra_syntax::{
1010
SyntaxKind::*,
1111
SyntaxNodeRef, TextRange, TextUnit,
1212
};
13+
use rayon::prelude::*;
1314
use relative_path::RelativePath;
1415
use rustc_hash::FxHashSet;
1516
use salsa::{ParallelDatabase, Database};
@@ -23,6 +24,7 @@ use crate::{
2324
input::{SourceRootId, FilesDatabase, SourceRoot, WORKSPACE},
2425
descriptors::module::{ModulesDatabase, ModuleTree, Problem},
2526
descriptors::{FnDescriptor},
27+
symbol_index::SymbolIndex,
2628
CrateGraph, CrateId, Diagnostic, FileId, FileResolver, FileSystemEdit, Position,
2729
Query, SourceChange, SourceFileEdit, Cancelable,
2830
};
@@ -180,16 +182,18 @@ impl AnalysisImpl {
180182
self.db.file_lines(file_id)
181183
}
182184
pub fn world_symbols(&self, query: Query) -> Cancelable<Vec<(FileId, FileSymbol)>> {
183-
let mut buf = Vec::new();
184-
if query.libs {
185-
for &lib_id in self.db.libraries().iter() {
186-
buf.push(self.db.library_symbols(lib_id));
187-
}
185+
let buf: Vec<Arc<SymbolIndex>> = if query.libs {
186+
self.db.libraries().iter()
187+
.map(|&lib_id| self.db.library_symbols(lib_id))
188+
.collect()
188189
} else {
189-
for &file_id in self.db.source_root(WORKSPACE).files.iter() {
190-
buf.push(self.db.file_symbols(file_id)?);
191-
}
192-
}
190+
let files = &self.db.source_root(WORKSPACE).files;
191+
let db = self.db.clone();
192+
files.par_iter()
193+
.map_with(db, |db, &file_id| db.file_symbols(file_id))
194+
.filter_map(|it| it.ok())
195+
.collect()
196+
};
193197
Ok(query.search(&buf))
194198
}
195199
fn module_tree(&self, file_id: FileId) -> Cancelable<Arc<ModuleTree>> {

0 commit comments

Comments
 (0)