mod parent_module;
mod rename;
+#[cfg(test)]
+mod marks;
+
use std::{fmt, sync::Arc};
use ra_syntax::{SourceFile, TreeArc, TextRange, TextUnit};
use ra_text_edit::TextEdit;
use ra_db::{
- SyntaxDatabase, FilesDatabase, BaseDatabase,
+ SourceDatabase, CheckCanceled,
salsa::{self, ParallelDatabase},
};
use rayon::prelude::*;
pub fn apply_change(&mut self, change: AnalysisChange) {
self.db.apply_change(change)
}
+
+ pub fn maybe_collect_garbage(&mut self) {
+ self.db.maybe_collect_garbage();
+ }
+
+ pub fn collect_garbage(&mut self) {
+ self.db.collect_garbage();
+ }
}
/// Analysis is a snapshot of a world state at a moment in time. It is the main
/// Gets the syntax tree of the file.
pub fn parse(&self, file_id: FileId) -> TreeArc<SourceFile> {
- self.db.source_file(file_id).clone()
+ self.db.parse(file_id).clone()
}
/// Gets the file's `LineIndex`: data structure to convert between absolute
/// Returns position of the mathcing brace (all types of braces are
/// supported).
pub fn matching_brace(&self, position: FilePosition) -> Option<TextUnit> {
- let file = self.db.source_file(position.file_id);
+ let file = self.db.parse(position.file_id);
ra_ide_api_light::matching_brace(&file, position.offset)
}
/// Returns a syntax tree represented as `String`, for debug purposes.
// FIXME: use a better name here.
pub fn syntax_tree(&self, file_id: FileId) -> String {
- let file = self.db.source_file(file_id);
+ let file = self.db.parse(file_id);
ra_ide_api_light::syntax_tree(&file)
}
/// Returns an edit to remove all newlines in the range, cleaning up minor
/// stuff like trailing commas.
pub fn join_lines(&self, frange: FileRange) -> SourceChange {
- let file = self.db.source_file(frange.file_id);
+ let file = self.db.parse(frange.file_id);
SourceChange::from_local_edit(
frange.file_id,
ra_ide_api_light::join_lines(&file, frange.range),
/// Returns an edit which should be applied when opening a new line, fixing
/// up minor stuff like continuing the comment.
pub fn on_enter(&self, position: FilePosition) -> Option<SourceChange> {
- let file = self.db.source_file(position.file_id);
+ let file = self.db.parse(position.file_id);
let edit = ra_ide_api_light::on_enter(&file, position.offset)?;
Some(SourceChange::from_local_edit(position.file_id, edit))
}
/// this works when adding `let =`.
// FIXME: use a snippet completion instead of this hack here.
pub fn on_eq_typed(&self, position: FilePosition) -> Option<SourceChange> {
- let file = self.db.source_file(position.file_id);
+ let file = self.db.parse(position.file_id);
let edit = ra_ide_api_light::on_eq_typed(&file, position.offset)?;
Some(SourceChange::from_local_edit(position.file_id, edit))
}
/// Returns an edit which should be applied when a dot ('.') is typed on a blank line, indenting the line appropriately.
pub fn on_dot_typed(&self, position: FilePosition) -> Option<SourceChange> {
- let file = self.db.source_file(position.file_id);
+ let file = self.db.parse(position.file_id);
let edit = ra_ide_api_light::on_dot_typed(&file, position.offset)?;
Some(SourceChange::from_local_edit(position.file_id, edit))
}
/// Returns a tree representation of symbols in the file. Useful to draw a
/// file outline.
pub fn file_structure(&self, file_id: FileId) -> Vec<StructureNode> {
- let file = self.db.source_file(file_id);
+ let file = self.db.parse(file_id);
ra_ide_api_light::file_structure(&file)
}
/// Returns the set of folding ranges.
pub fn folding_ranges(&self, file_id: FileId) -> Vec<Fold> {
- let file = self.db.source_file(file_id);
+ let file = self.db.parse(file_id);
ra_ide_api_light::folding_ranges(&file)
}