mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-28 21:05:02 +00:00
Gc syntax trees after every modification
This commit is contained in:
parent
d05790b947
commit
e7aa17b560
2 changed files with 17 additions and 8 deletions
|
@ -10,7 +10,7 @@ use ra_syntax::{
|
||||||
SyntaxKind::*,
|
SyntaxKind::*,
|
||||||
SyntaxNodeRef, TextRange, TextUnit,
|
SyntaxNodeRef, TextRange, TextUnit,
|
||||||
};
|
};
|
||||||
use ra_db::{FilesDatabase, SourceRoot, SourceRootId, WORKSPACE, SyntaxDatabase, SourceFileQuery};
|
use ra_db::{FilesDatabase, SourceRoot, SourceRootId, WORKSPACE, SyntaxDatabase};
|
||||||
use rayon::prelude::*;
|
use rayon::prelude::*;
|
||||||
use rustc_hash::FxHashSet;
|
use rustc_hash::FxHashSet;
|
||||||
use salsa::{Database, ParallelDatabase};
|
use salsa::{Database, ParallelDatabase};
|
||||||
|
@ -43,6 +43,7 @@ impl AnalysisHostImpl {
|
||||||
}
|
}
|
||||||
pub fn apply_change(&mut self, change: AnalysisChange) {
|
pub fn apply_change(&mut self, change: AnalysisChange) {
|
||||||
log::info!("apply_change {:?}", change);
|
log::info!("apply_change {:?}", change);
|
||||||
|
self.gc_syntax_trees();
|
||||||
|
|
||||||
for (file_id, text) in change.files_changed {
|
for (file_id, text) in change.files_changed {
|
||||||
self.db
|
self.db
|
||||||
|
@ -115,6 +116,21 @@ impl AnalysisHostImpl {
|
||||||
.set((), Arc::new(crate_graph))
|
.set((), Arc::new(crate_graph))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn gc_syntax_trees(&mut self) {
|
||||||
|
self.db
|
||||||
|
.query(ra_db::SourceFileQuery)
|
||||||
|
.sweep(salsa::SweepStrategy::default().discard_values());
|
||||||
|
self.db
|
||||||
|
.query(hir::db::FnSyntaxQuery)
|
||||||
|
.sweep(salsa::SweepStrategy::default().discard_values());
|
||||||
|
self.db
|
||||||
|
.query(hir::db::SourceFileItemsQuery)
|
||||||
|
.sweep(salsa::SweepStrategy::default().discard_values());
|
||||||
|
self.db
|
||||||
|
.query(hir::db::FileItemQuery)
|
||||||
|
.sweep(salsa::SweepStrategy::default().discard_values());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) struct AnalysisImpl {
|
pub(crate) struct AnalysisImpl {
|
||||||
|
@ -160,9 +176,6 @@ impl AnalysisImpl {
|
||||||
.filter_map(|it| it.ok())
|
.filter_map(|it| it.ok())
|
||||||
.collect()
|
.collect()
|
||||||
};
|
};
|
||||||
self.db
|
|
||||||
.query(SourceFileQuery)
|
|
||||||
.sweep(salsa::SweepStrategy::default().discard_values());
|
|
||||||
Ok(query.search(&buf))
|
Ok(query.search(&buf))
|
||||||
}
|
}
|
||||||
/// This returns `Vec` because a module may be included from several places. We
|
/// This returns `Vec` because a module may be included from several places. We
|
||||||
|
|
|
@ -27,20 +27,16 @@ pub trait HirDatabase: SyntaxDatabase
|
||||||
}
|
}
|
||||||
fn fn_syntax(fn_id: FnId) -> FnDefNode {
|
fn fn_syntax(fn_id: FnId) -> FnDefNode {
|
||||||
type FnSyntaxQuery;
|
type FnSyntaxQuery;
|
||||||
// Don't retain syntax trees in memory
|
|
||||||
storage dependencies;
|
|
||||||
use fn query_definitions::fn_syntax;
|
use fn query_definitions::fn_syntax;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn file_items(file_id: FileId) -> Arc<SourceFileItems> {
|
fn file_items(file_id: FileId) -> Arc<SourceFileItems> {
|
||||||
type SourceFileItemsQuery;
|
type SourceFileItemsQuery;
|
||||||
storage dependencies;
|
|
||||||
use fn query_definitions::file_items;
|
use fn query_definitions::file_items;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn file_item(source_item_id: SourceItemId) -> SyntaxNode {
|
fn file_item(source_item_id: SourceItemId) -> SyntaxNode {
|
||||||
type FileItemQuery;
|
type FileItemQuery;
|
||||||
storage dependencies;
|
|
||||||
use fn query_definitions::file_item;
|
use fn query_definitions::file_item;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue