Skip to content

Commit

Permalink
internal: flatten/deduplicate base_db::EditionedFileId
Browse files Browse the repository at this point in the history
  • Loading branch information
davidbarsky committed Mar 5, 2025
1 parent 926d757 commit 57353c7
Show file tree
Hide file tree
Showing 35 changed files with 54 additions and 86 deletions.
18 changes: 14 additions & 4 deletions crates/base-db/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -157,10 +157,21 @@ impl Files {

#[salsa::interned(no_lifetime)]
pub struct EditionedFileId {
pub file_id: vfs::FileId,
pub editioned_file_id: span::EditionedFileId,
}

impl EditionedFileId {
pub fn file_id(&self, db: &dyn salsa::Database) -> vfs::FileId {
let id = self.editioned_file_id(db);
id.file_id()
}

fn unpack(&self, db: &dyn salsa::Database) -> (vfs::FileId, span::Edition) {
let id = self.editioned_file_id(db);
(id.file_id(), id.edition())
}
}

#[salsa::input]
pub struct FileText {
pub text: Arc<str>,
Expand Down Expand Up @@ -267,9 +278,8 @@ fn toolchain_channel(db: &dyn RootQueryDb, krate: CrateId) -> Option<ReleaseChan

fn parse(db: &dyn RootQueryDb, file_id: EditionedFileId) -> Parse<ast::SourceFile> {
let _p = tracing::info_span!("parse", ?file_id).entered();
let (text, editioned_file_id) =
(db.file_text(file_id.file_id(db)).text(db), file_id.editioned_file_id(db));
let (_, edition) = editioned_file_id.unpack();
let (file_id, edition) = file_id.unpack(db.as_dyn_database());
let text = db.file_text(file_id).text(db);
ast::SourceFile::parse(&text, edition)
}

Expand Down
4 changes: 2 additions & 2 deletions crates/hir-def/src/expr_store/scope.rs
Original file line number Diff line number Diff line change
Expand Up @@ -363,7 +363,7 @@ mod tests {

let (file_id, _) = editioned_file_id.unpack();
let editioned_file_id_wrapper =
base_db::EditionedFileId::new(db.as_dyn_database(), file_id, editioned_file_id);
base_db::EditionedFileId::new(db.as_dyn_database(), editioned_file_id);

let file_syntax = db.parse(editioned_file_id_wrapper).syntax_node();
let marker: ast::PathExpr = find_node_at_offset(&file_syntax, offset).unwrap();
Expand Down Expand Up @@ -521,7 +521,7 @@ fn foo() {

let (file_id, _) = editioned_file_id.unpack();
let file_id_wrapper =
base_db::EditionedFileId::new(db.as_dyn_database(), file_id, editioned_file_id);
base_db::EditionedFileId::new(db.as_dyn_database(), editioned_file_id);

let file = db.parse(file_id_wrapper).ok().unwrap();
let expected_name = find_node_at_offset::<ast::Name>(file.syntax(), expected_offset.into())
Expand Down
7 changes: 3 additions & 4 deletions crates/hir-def/src/macro_expansion_tests/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -67,11 +67,10 @@ fn check_errors(#[rust_analyzer::rust_fixture] ra_fixture: &str, expect: Expect)

let editioned_file_id =
ast_id.file_id.file_id().expect("unable to get FileId; this is a bug");
let (file_id, _) = editioned_file_id.unpack();
let editioned_file_id_wrapper =
base_db::EditionedFileId::new(db.as_dyn_database(), file_id, editioned_file_id);
let editioned_file_id =
base_db::EditionedFileId::new(db.as_dyn_database(), editioned_file_id);

let ast = db.parse(editioned_file_id_wrapper).syntax_node();
let ast = db.parse(editioned_file_id).syntax_node();
let ast_id_map = db.ast_id_map(ast_id.file_id);
let node = ast_id_map.get_erased(ast_id.value).to_node(&ast);
Some((node.text_range(), errors))
Expand Down
3 changes: 1 addition & 2 deletions crates/hir-def/src/nameres.rs
Original file line number Diff line number Diff line change
Expand Up @@ -297,8 +297,7 @@ impl ModuleOrigin {
match self {
&ModuleOrigin::File { definition: editioned_file_id, .. }
| &ModuleOrigin::CrateRoot { definition: editioned_file_id } => {
let (file_id, _) = editioned_file_id.unpack();
let definition = base_db::EditionedFileId::new(db, file_id, editioned_file_id);
let definition = base_db::EditionedFileId::new(db, editioned_file_id);

let sf = db.parse(definition).tree();
InFile::new(editioned_file_id.into(), ModuleSource::SourceFile(sf))
Expand Down
3 changes: 1 addition & 2 deletions crates/hir-def/src/test_db.rs
Original file line number Diff line number Diff line change
Expand Up @@ -270,9 +270,8 @@ impl TestDB {
let source_map = db.body_with_source_map(def_with_body).1;
let scopes = db.expr_scopes(def_with_body);

let (file_id, _) = position.file_id.unpack();
let editioned_file_id_wrapper =
base_db::EditionedFileId::new(db.as_dyn_database(), file_id, position.file_id);
base_db::EditionedFileId::new(db.as_dyn_database(), position.file_id);

let root = db.parse(editioned_file_id_wrapper);
let scope_iter = algo::ancestors_at_offset(&root.syntax_node(), position.offset)
Expand Down
8 changes: 3 additions & 5 deletions crates/hir-expand/src/builtin/fn_macro.rs
Original file line number Diff line number Diff line change
Expand Up @@ -728,11 +728,9 @@ fn include_expand(
tt: &tt::TopSubtree,
span: Span,
) -> ExpandResult<tt::TopSubtree> {
let (file_id, editioned_file_id) = match include_input_to_file_id(db, arg_id, tt) {
let (file_id_wrapper, editioned_file_id) = match include_input_to_file_id(db, arg_id, tt) {
Ok(editioned_file_id) => {
let (file_id, _) = editioned_file_id.unpack();
let file_id = base_db::EditionedFileId::new(db, file_id, editioned_file_id);
(file_id, editioned_file_id)
(base_db::EditionedFileId::new(db, editioned_file_id), editioned_file_id)
}
Err(e) => {
return ExpandResult::new(
Expand All @@ -744,7 +742,7 @@ fn include_expand(
let span_map = db.real_span_map(editioned_file_id);
// FIXME: Parse errors
ExpandResult::ok(syntax_node_to_token_tree(
&db.parse(file_id).syntax_node(),
&db.parse(file_id_wrapper).syntax_node(),
SpanMap::RealSpanMap(span_map),
span,
syntax_bridge::DocCommentDesugarMode::ProcMacro,
Expand Down
6 changes: 2 additions & 4 deletions crates/hir-expand/src/db.rs
Original file line number Diff line number Diff line change
Expand Up @@ -369,8 +369,7 @@ fn ast_id_map(db: &dyn ExpandDatabase, file_id: span::HirFileId) -> triomphe::Ar
fn parse_or_expand(db: &dyn ExpandDatabase, file_id: HirFileId) -> SyntaxNode {
match file_id.repr() {
HirFileIdRepr::FileId(editioned_file_id) => {
let (file_id, _) = editioned_file_id.unpack();
let file_id = base_db::EditionedFileId::new(db, file_id, editioned_file_id);
let file_id = base_db::EditionedFileId::new(db, editioned_file_id);
db.parse(file_id).syntax_node()
}

Expand Down Expand Up @@ -432,8 +431,7 @@ pub(crate) fn parse_with_map(
) -> (Parse<SyntaxNode>, SpanMap) {
match file_id.repr() {
HirFileIdRepr::FileId(editioned_file_id) => {
let (file_id, _) = editioned_file_id.unpack();
let file_id = base_db::EditionedFileId::new(db, file_id, editioned_file_id);
let file_id = base_db::EditionedFileId::new(db, editioned_file_id);

(
db.parse(file_id).to_syntax(),
Expand Down
9 changes: 3 additions & 6 deletions crates/hir-expand/src/files.rs
Original file line number Diff line number Diff line change
Expand Up @@ -159,8 +159,7 @@ trait FileIdToSyntax: Copy {

impl FileIdToSyntax for EditionedFileId {
fn file_syntax(self, db: &dyn db::ExpandDatabase) -> SyntaxNode {
let (file_id, _) = self.unpack();
let file_id = base_db::EditionedFileId::new(db, file_id, self);
let file_id = base_db::EditionedFileId::new(db, self);

db.parse(file_id).syntax_node()
}
Expand Down Expand Up @@ -293,8 +292,7 @@ impl<SN: Borrow<SyntaxNode>> InFile<SN> {
self.value.borrow().text_range(),
)?;

let (file_id, _) = editioned_file_id.unpack();
let file_id = base_db::EditionedFileId::new(db, file_id, editioned_file_id);
let file_id = base_db::EditionedFileId::new(db, editioned_file_id);

let kind = self.kind();
let value = db
Expand Down Expand Up @@ -473,8 +471,7 @@ impl<N: AstNode> InFile<N> {
self.value.syntax().text_range(),
)?;

let (file_id, _) = editioned_file_id.unpack();
let file_id = base_db::EditionedFileId::new(db, file_id, editioned_file_id);
let file_id = base_db::EditionedFileId::new(db, editioned_file_id);

// FIXME: This heuristic is brittle and with the right macro may select completely unrelated nodes?
let anc = db.parse(file_id).syntax_node().covering_element(range);
Expand Down
3 changes: 1 addition & 2 deletions crates/hir-expand/src/span_map.rs
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,7 @@ pub(crate) fn real_span_map(
let mut pairs = vec![(syntax::TextSize::new(0), span::ROOT_ERASED_FILE_AST_ID)];
let ast_id_map = db.ast_id_map(editioned_file_id.into());

let (file_id, _) = editioned_file_id.unpack();
let file_id = base_db::EditionedFileId::new(db, file_id, editioned_file_id);
let file_id = base_db::EditionedFileId::new(db, editioned_file_id);

let tree = db.parse(file_id).tree();
// This is an incrementality layer. Basically we can't use absolute ranges for our spans as that
Expand Down
9 changes: 3 additions & 6 deletions crates/hir/src/semantics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -326,8 +326,7 @@ impl<'db> SemanticsImpl<'db> {
.attach_first_edition(file_id)
.unwrap_or_else(|| EditionedFileId::current_edition(file_id));

let (file_id, _) = editioned_file_id.unpack();
let file_id = base_db::EditionedFileId::new(self.db, file_id, editioned_file_id);
let file_id = base_db::EditionedFileId::new(self.db, editioned_file_id);

let tree = self.db.parse(file_id).tree();
self.cache(tree.syntax().clone(), editioned_file_id.into());
Expand Down Expand Up @@ -1876,8 +1875,7 @@ fn macro_call_to_macro_id(
Either::Left(it) => {
let node = match it.file_id.repr() {
HirFileIdRepr::FileId(editioned_file_id) => {
let (file_id, _) = editioned_file_id.unpack();
let file_id = base_db::EditionedFileId::new(db, file_id, editioned_file_id);
let file_id = base_db::EditionedFileId::new(db, editioned_file_id);

it.to_ptr(db).to_node(&db.parse(file_id).syntax_node())
}
Expand All @@ -1891,8 +1889,7 @@ fn macro_call_to_macro_id(
Either::Right(it) => {
let node = match it.file_id.repr() {
HirFileIdRepr::FileId(editioned_file_id) => {
let (file_id, _) = editioned_file_id.unpack();
let file_id = base_db::EditionedFileId::new(db, file_id, editioned_file_id);
let file_id = base_db::EditionedFileId::new(db, editioned_file_id);

it.to_ptr(db).to_node(&db.parse(file_id).syntax_node())
}
Expand Down
2 changes: 0 additions & 2 deletions crates/ide-assists/src/assist_context.rs
Original file line number Diff line number Diff line change
Expand Up @@ -65,10 +65,8 @@ impl<'a> AssistContext<'a> {
config: &'a AssistConfig,
frange: FileRange,
) -> AssistContext<'a> {
let (file_id, _) = frange.file_id.unpack();
let editioned_file_id = ide_db::base_db::EditionedFileId::new(
sema.db.as_dyn_database(),
file_id,
frange.file_id,
);

Expand Down
2 changes: 0 additions & 2 deletions crates/ide-assists/src/handlers/add_missing_match_arms.rs
Original file line number Diff line number Diff line change
Expand Up @@ -257,10 +257,8 @@ pub(crate) fn add_missing_match_arms(acc: &mut Assists, ctx: &AssistContext<'_>)
// Just replace the element that the original range came from
let old_place = {
// Find the original element
let file_id = arm_list_range.file_id.file_id();
let editioned_file_id = ide_db::base_db::EditionedFileId::new(
ctx.sema.db.as_dyn_database(),
file_id,
arm_list_range.file_id,
);

Expand Down
2 changes: 0 additions & 2 deletions crates/ide-assists/src/handlers/extract_module.rs
Original file line number Diff line number Diff line change
Expand Up @@ -334,7 +334,6 @@ impl Module {
for (file_id, refs) in node_def.usages(&ctx.sema).all() {
let editioned_file_id = ide_db::base_db::EditionedFileId::new(
ctx.sema.db.as_dyn_database(),
file_id.file_id(),
file_id,
);

Expand Down Expand Up @@ -467,7 +466,6 @@ impl Module {

let editioned_file_id = ide_db::base_db::EditionedFileId::new(
ctx.sema.db.as_dyn_database(),
file_id.file_id(),
file_id,
);

Expand Down
1 change: 0 additions & 1 deletion crates/ide-assists/src/handlers/generate_function.rs
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,6 @@ fn get_adt_source(

let editioned_file_id = ide_db::base_db::EditionedFileId::new(
ctx.sema.db.as_dyn_database(),
range.file_id.file_id(),
range.file_id,
);

Expand Down
1 change: 0 additions & 1 deletion crates/ide-assists/src/handlers/remove_unused_param.rs
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,6 @@ fn process_usages(
) {
let editioned_file_id_wrapper = ide_db::base_db::EditionedFileId::new(
ctx.sema.db.as_dyn_database(),
file_id.file_id(),
file_id,
);

Expand Down
5 changes: 2 additions & 3 deletions crates/ide-completion/src/context.rs
Original file line number Diff line number Diff line change
Expand Up @@ -709,7 +709,6 @@ impl<'a> CompletionContext<'a> {
let editioned_file_id = sema.attach_first_edition(file_id)?;
let editioned_file_id_wrapper = ide_db::base_db::EditionedFileId::new(
sema.db.as_dyn_database(),
file_id,
editioned_file_id,
);

Expand All @@ -719,9 +718,9 @@ impl<'a> CompletionContext<'a> {
// to determine context, though the original_file will be used for
// actual completion.
let file_with_fake_ident = {
let (file_id, edition) = editioned_file_id.unpack();
let (_, edition) = editioned_file_id.unpack();
let file_id_wrapper =
base_db::EditionedFileId::new(db.as_dyn_database(), file_id, editioned_file_id);
base_db::EditionedFileId::new(db.as_dyn_database(), editioned_file_id);

let parse = db.parse(file_id_wrapper);
parse.reparse(TextRange::empty(offset), COMPLETION_MARKER, edition).tree()
Expand Down
5 changes: 2 additions & 3 deletions crates/ide-completion/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -277,13 +277,12 @@ pub fn resolve_completion_edits(
let sema = hir::Semantics::new(db);

let editioned_file_id = sema.attach_first_edition(file_id)?;
let editioned_file_id_wrapper = ide_db::base_db::EditionedFileId::new(
let editioned_file_id = ide_db::base_db::EditionedFileId::new(
db.as_dyn_database(),
editioned_file_id.file_id(),
editioned_file_id,
);

let original_file = sema.parse(editioned_file_id_wrapper);
let original_file = sema.parse(editioned_file_id);
let original_token =
syntax::AstNode::syntax(&original_file).token_at_offset(offset).left_biased()?;
let position_for_import = &original_token.parent()?;
Expand Down
4 changes: 2 additions & 2 deletions crates/ide-db/src/imports/insert_use/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1253,14 +1253,14 @@ fn check_with_config(
let (db, file_id, range_or_offset) = RootDatabase::with_range_or_offset(ra_fixture_before);

let file_id =
crate::base_db::EditionedFileId::new(db.as_dyn_database(), file_id.file_id(), file_id);
crate::base_db::EditionedFileId::new(db.as_dyn_database(), file_id);

(db, file_id, Some(range_or_offset))
} else {
let (db, file_id) = RootDatabase::with_single_file(ra_fixture_before);

let file_id =
crate::base_db::EditionedFileId::new(db.as_dyn_database(), file_id.file_id(), file_id);
crate::base_db::EditionedFileId::new(db.as_dyn_database(), file_id);

(db, file_id, None)
};
Expand Down
10 changes: 5 additions & 5 deletions crates/ide-db/src/search.rs
Original file line number Diff line number Diff line change
Expand Up @@ -653,7 +653,7 @@ impl<'a> FindUsages<'a> {
FindUsages::scope_files(db, &current_to_process_search_scope)
{
let file_id =
crate::base_db::EditionedFileId::new(db, file_id.file_id(), file_id);
crate::base_db::EditionedFileId::new(db, file_id);

let tree = LazyCell::new(move || sema.parse(file_id).syntax().clone());

Expand Down Expand Up @@ -815,7 +815,7 @@ impl<'a> FindUsages<'a> {
) {
for (file_text, file_id, search_range) in files {
let file_id_wrapper =
crate::base_db::EditionedFileId::new(this.sema.db, file_id.file_id(), file_id);
crate::base_db::EditionedFileId::new(this.sema.db, file_id);

let tree = LazyCell::new(move || this.sema.parse(file_id_wrapper).syntax().clone());

Expand Down Expand Up @@ -957,7 +957,7 @@ impl<'a> FindUsages<'a> {
self.include_self_kw_refs.as_ref().map(|ty| (ty, Finder::new("Self")));
for (text, file_id, search_range) in Self::scope_files(sema.db, &search_scope) {
let file_id_wrapper =
crate::base_db::EditionedFileId::new(sema.db, file_id.file_id(), file_id);
crate::base_db::EditionedFileId::new(sema.db,file_id);

let tree = LazyCell::new(move || sema.parse(file_id_wrapper).syntax().clone());

Expand Down Expand Up @@ -1015,7 +1015,7 @@ impl<'a> FindUsages<'a> {
self.sema.db.unwind_if_revision_cancelled();

let file_id_wrapper =
crate::base_db::EditionedFileId::new(sema.db, file_id.file_id(), file_id);
crate::base_db::EditionedFileId::new(sema.db, file_id);
let tree = LazyCell::new(move || sema.parse(file_id_wrapper).syntax().clone());

for offset in Self::match_indices(&text, finder, search_range) {
Expand Down Expand Up @@ -1070,7 +1070,7 @@ impl<'a> FindUsages<'a> {
search_range.unwrap_or_else(|| TextRange::up_to(TextSize::of(&*text)));

let file_id =
crate::base_db::EditionedFileId::new(sema.db, file_id.file_id(), file_id);
crate::base_db::EditionedFileId::new(sema.db, file_id);

let tree = LazyCell::new(|| sema.parse(file_id).syntax().clone());
let finder = &Finder::new("self");
Expand Down
2 changes: 1 addition & 1 deletion crates/ide-db/src/syntax_helpers/suggest_name.rs
Original file line number Diff line number Diff line change
Expand Up @@ -460,7 +460,7 @@ mod tests {
let sema = Semantics::new(&db);

let file_id =
crate::base_db::EditionedFileId::new(sema.db, frange.file_id.file_id(), frange.file_id);
crate::base_db::EditionedFileId::new(sema.db, frange.file_id);
let source_file = sema.parse(file_id);

let element = source_file.syntax().covering_element(frange.range);
Expand Down
2 changes: 0 additions & 2 deletions crates/ide-db/src/traits.rs
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,6 @@ mod tests {

let editioned_file_id = crate::base_db::EditionedFileId::new(
sema.db.as_dyn_database(),
position.file_id.file_id(),
position.file_id,
);

Expand All @@ -163,7 +162,6 @@ mod tests {

let editioned_file_id = crate::base_db::EditionedFileId::new(
sema.db.as_dyn_database(),
position.file_id.file_id(),
position.file_id,
);

Expand Down
4 changes: 2 additions & 2 deletions crates/ide-diagnostics/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -323,7 +323,7 @@ pub fn syntax_diagnostics(
let (file_id, _) = editioned_file_id.unpack();

let editioned_file_id_wrapper =
ide_db::base_db::EditionedFileId::new(db.as_dyn_database(), file_id, editioned_file_id);
ide_db::base_db::EditionedFileId::new(db.as_dyn_database(), editioned_file_id);

// [#3434] Only take first 128 errors to prevent slowing down editor/ide, the number 128 is chosen arbitrarily.
db.parse_errors(editioned_file_id_wrapper)
Expand Down Expand Up @@ -357,7 +357,7 @@ pub fn semantic_diagnostics(

let (file_id, edition) = editioned_file_id.unpack();
let editioned_file_id_wrapper =
ide_db::base_db::EditionedFileId::new(db.as_dyn_database(), file_id, editioned_file_id);
ide_db::base_db::EditionedFileId::new(db.as_dyn_database(), editioned_file_id);

let mut res = Vec::new();

Expand Down
Loading

0 comments on commit 57353c7

Please sign in to comment.