Skip to content

Commit 150bb4a

Browse files
Merge pull request #19617 from ChayimFriedman2/more-actual
internal: Make `HirFileId`, `EditionedFileId` and macro files Salsa struct
2 parents 6568e8f + c58ddaf commit 150bb4a

File tree

195 files changed

+1471
-1523
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

195 files changed

+1471
-1523
lines changed

crates/base-db/src/input.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@ use intern::Symbol;
1616
use la_arena::{Arena, Idx, RawIdx};
1717
use rustc_hash::{FxHashMap, FxHashSet, FxHasher};
1818
use salsa::{Durability, Setter};
19-
use span::{Edition, EditionedFileId};
19+
use span::Edition;
2020
use triomphe::Arc;
2121
use vfs::{AbsPathBuf, AnchoredPath, FileId, VfsPath, file_set::FileSet};
2222

23-
use crate::{CrateWorkspaceData, RootQueryDb};
23+
use crate::{CrateWorkspaceData, EditionedFileId, RootQueryDb};
2424

2525
pub type ProcMacroPaths = FxHashMap<CrateBuilderId, Result<(String, AbsPathBuf), String>>;
2626

@@ -773,8 +773,8 @@ pub(crate) fn transitive_rev_deps(db: &dyn RootQueryDb, of: Crate) -> FxHashSet<
773773
}
774774

775775
impl BuiltCrateData {
776-
pub fn root_file_id(&self) -> EditionedFileId {
777-
EditionedFileId::new(self.root_file_id, self.edition)
776+
pub fn root_file_id(&self, db: &dyn salsa::Database) -> EditionedFileId {
777+
EditionedFileId::new(db, self.root_file_id, self.edition)
778778
}
779779
}
780780

crates/base-db/src/lib.rs

+24-4
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ use rustc_hash::{FxHashSet, FxHasher};
2020
pub use salsa::{self};
2121
use salsa::{Durability, Setter};
2222
pub use semver::{BuildMetadata, Prerelease, Version, VersionReq};
23+
use span::Edition;
2324
use syntax::{Parse, SyntaxError, ast};
2425
use triomphe::Arc;
2526
pub use vfs::{AnchoredPath, AnchoredPathBuf, FileId, VfsPath, file_set::FileSet};
@@ -151,21 +152,39 @@ impl Files {
151152
}
152153
}
153154

154-
#[salsa::interned(no_lifetime)]
155+
#[salsa::interned(no_lifetime, constructor=from_span)]
155156
pub struct EditionedFileId {
156157
pub editioned_file_id: span::EditionedFileId,
157158
}
158159

159160
impl EditionedFileId {
160-
pub fn file_id(&self, db: &dyn salsa::Database) -> vfs::FileId {
161+
// Salsa already uses the name `new`...
162+
#[inline]
163+
pub fn new(db: &dyn salsa::Database, file_id: FileId, edition: Edition) -> Self {
164+
EditionedFileId::from_span(db, span::EditionedFileId::new(file_id, edition))
165+
}
166+
167+
#[inline]
168+
pub fn current_edition(db: &dyn salsa::Database, file_id: FileId) -> Self {
169+
EditionedFileId::new(db, file_id, Edition::CURRENT)
170+
}
171+
172+
#[inline]
173+
pub fn file_id(self, db: &dyn salsa::Database) -> vfs::FileId {
161174
let id = self.editioned_file_id(db);
162175
id.file_id()
163176
}
164177

165-
fn unpack(&self, db: &dyn salsa::Database) -> (vfs::FileId, span::Edition) {
178+
#[inline]
179+
pub fn unpack(self, db: &dyn salsa::Database) -> (vfs::FileId, span::Edition) {
166180
let id = self.editioned_file_id(db);
167181
(id.file_id(), id.edition())
168182
}
183+
184+
#[inline]
185+
pub fn edition(self, db: &dyn SourceDatabase) -> Edition {
186+
self.editioned_file_id(db).edition()
187+
}
169188
}
170189

171190
#[salsa::input]
@@ -189,7 +208,7 @@ pub struct SourceRootInput {
189208
#[query_group::query_group]
190209
pub trait RootQueryDb: SourceDatabase + salsa::Database {
191210
/// Parses the file into the syntax tree.
192-
#[salsa::invoke_actual(parse)]
211+
#[salsa::invoke(parse)]
193212
#[salsa::lru(128)]
194213
fn parse(&self, file_id: EditionedFileId) -> Parse<ast::SourceFile>;
195214

@@ -201,6 +220,7 @@ pub trait RootQueryDb: SourceDatabase + salsa::Database {
201220
fn toolchain_channel(&self, krate: Crate) -> Option<ReleaseChannel>;
202221

203222
/// Crates whose root file is in `id`.
223+
#[salsa::invoke_interned(source_root_crates)]
204224
fn source_root_crates(&self, id: SourceRootId) -> Arc<[Crate]>;
205225

206226
#[salsa::transparent]

crates/hir-def/src/db.rs

+38-38
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
//! Defines database & queries for name resolution.
22
use base_db::{Crate, RootQueryDb, SourceDatabase};
33
use either::Either;
4-
use hir_expand::{HirFileId, MacroDefId, db::ExpandDatabase};
4+
use hir_expand::{EditionedFileId, HirFileId, MacroCallId, MacroDefId, db::ExpandDatabase};
55
use intern::sym;
66
use la_arena::ArenaMap;
7-
use span::{EditionedFileId, MacroCallId};
87
use syntax::{AstPtr, ast};
98
use thin_vec::ThinVec;
109
use triomphe::Arc;
@@ -109,26 +108,26 @@ pub trait DefDatabase: InternDatabase + ExpandDatabase + SourceDatabase {
109108
#[salsa::invoke(ItemTree::file_item_tree_query)]
110109
fn file_item_tree(&self, file_id: HirFileId) -> Arc<ItemTree>;
111110

112-
#[salsa::invoke_actual(ItemTree::block_item_tree_query)]
111+
#[salsa::invoke(ItemTree::block_item_tree_query)]
113112
fn block_item_tree(&self, block_id: BlockId) -> Arc<ItemTree>;
114113

115-
#[salsa::invoke_actual(DefMap::crate_local_def_map_query)]
114+
#[salsa::invoke(DefMap::crate_local_def_map_query)]
116115
fn crate_local_def_map(&self, krate: Crate) -> (Arc<DefMap>, Arc<LocalDefMap>);
117116

118-
#[salsa::invoke_actual(DefMap::crate_def_map_query)]
117+
#[salsa::invoke(DefMap::crate_def_map_query)]
119118
fn crate_def_map(&self, krate: Crate) -> Arc<DefMap>;
120119

121120
/// Computes the block-level `DefMap`.
122-
#[salsa::invoke_actual(DefMap::block_def_map_query)]
121+
#[salsa::invoke(DefMap::block_def_map_query)]
123122
fn block_def_map(&self, block: BlockId) -> Arc<DefMap>;
124123

125124
/// Turns a MacroId into a MacroDefId, describing the macro's definition post name resolution.
126-
#[salsa::invoke_actual(macro_def)]
125+
#[salsa::invoke(macro_def)]
127126
fn macro_def(&self, m: MacroId) -> MacroDefId;
128127

129128
// region:data
130129

131-
#[salsa::invoke_actual(VariantFields::query)]
130+
#[salsa::invoke(VariantFields::query)]
132131
fn variant_fields_with_source_map(
133132
&self,
134133
id: VariantId,
@@ -139,24 +138,24 @@ pub trait DefDatabase: InternDatabase + ExpandDatabase + SourceDatabase {
139138
self.enum_variants_with_diagnostics(id).0
140139
}
141140

142-
#[salsa::invoke_actual(EnumVariants::enum_variants_query)]
141+
#[salsa::invoke(EnumVariants::enum_variants_query)]
143142
fn enum_variants_with_diagnostics(
144143
&self,
145144
id: EnumId,
146145
) -> (Arc<EnumVariants>, Option<Arc<ThinVec<InactiveEnumVariantCode>>>);
147146

148147
#[salsa::transparent]
149-
#[salsa::invoke_actual(ImplItems::impl_items_query)]
148+
#[salsa::invoke(ImplItems::impl_items_query)]
150149
fn impl_items(&self, e: ImplId) -> Arc<ImplItems>;
151150

152-
#[salsa::invoke_actual(ImplItems::impl_items_with_diagnostics_query)]
151+
#[salsa::invoke(ImplItems::impl_items_with_diagnostics_query)]
153152
fn impl_items_with_diagnostics(&self, e: ImplId) -> (Arc<ImplItems>, DefDiagnostics);
154153

155154
#[salsa::transparent]
156-
#[salsa::invoke_actual(TraitItems::trait_items_query)]
155+
#[salsa::invoke(TraitItems::trait_items_query)]
157156
fn trait_items(&self, e: TraitId) -> Arc<TraitItems>;
158157

159-
#[salsa::invoke_actual(TraitItems::trait_items_with_diagnostics_query)]
158+
#[salsa::invoke(TraitItems::trait_items_with_diagnostics_query)]
160159
fn trait_items_with_diagnostics(&self, tr: TraitId) -> (Arc<TraitItems>, DefDiagnostics);
161160

162161
#[salsa::tracked]
@@ -214,61 +213,61 @@ pub trait DefDatabase: InternDatabase + ExpandDatabase + SourceDatabase {
214213
self.type_alias_signature_with_source_map(e).0
215214
}
216215

217-
#[salsa::invoke_actual(TraitSignature::query)]
216+
#[salsa::invoke(TraitSignature::query)]
218217
fn trait_signature_with_source_map(
219218
&self,
220219
trait_: TraitId,
221220
) -> (Arc<TraitSignature>, Arc<ExpressionStoreSourceMap>);
222221

223-
#[salsa::invoke_actual(ImplSignature::query)]
222+
#[salsa::invoke(ImplSignature::query)]
224223
fn impl_signature_with_source_map(
225224
&self,
226225
impl_: ImplId,
227226
) -> (Arc<ImplSignature>, Arc<ExpressionStoreSourceMap>);
228227

229-
#[salsa::invoke_actual(StructSignature::query)]
228+
#[salsa::invoke(StructSignature::query)]
230229
fn struct_signature_with_source_map(
231230
&self,
232231
struct_: StructId,
233232
) -> (Arc<StructSignature>, Arc<ExpressionStoreSourceMap>);
234233

235-
#[salsa::invoke_actual(UnionSignature::query)]
234+
#[salsa::invoke(UnionSignature::query)]
236235
fn union_signature_with_source_map(
237236
&self,
238237
union_: UnionId,
239238
) -> (Arc<UnionSignature>, Arc<ExpressionStoreSourceMap>);
240239

241-
#[salsa::invoke_actual(EnumSignature::query)]
240+
#[salsa::invoke(EnumSignature::query)]
242241
fn enum_signature_with_source_map(
243242
&self,
244243
e: EnumId,
245244
) -> (Arc<EnumSignature>, Arc<ExpressionStoreSourceMap>);
246245

247-
#[salsa::invoke_actual(ConstSignature::query)]
246+
#[salsa::invoke(ConstSignature::query)]
248247
fn const_signature_with_source_map(
249248
&self,
250249
e: ConstId,
251250
) -> (Arc<ConstSignature>, Arc<ExpressionStoreSourceMap>);
252251

253-
#[salsa::invoke_actual(StaticSignature::query)]
252+
#[salsa::invoke(StaticSignature::query)]
254253
fn static_signature_with_source_map(
255254
&self,
256255
e: StaticId,
257256
) -> (Arc<StaticSignature>, Arc<ExpressionStoreSourceMap>);
258257

259-
#[salsa::invoke_actual(FunctionSignature::query)]
258+
#[salsa::invoke(FunctionSignature::query)]
260259
fn function_signature_with_source_map(
261260
&self,
262261
e: FunctionId,
263262
) -> (Arc<FunctionSignature>, Arc<ExpressionStoreSourceMap>);
264263

265-
#[salsa::invoke_actual(TraitAliasSignature::query)]
264+
#[salsa::invoke(TraitAliasSignature::query)]
266265
fn trait_alias_signature_with_source_map(
267266
&self,
268267
e: TraitAliasId,
269268
) -> (Arc<TraitAliasSignature>, Arc<ExpressionStoreSourceMap>);
270269

271-
#[salsa::invoke_actual(TypeAliasSignature::query)]
270+
#[salsa::invoke(TypeAliasSignature::query)]
272271
fn type_alias_signature_with_source_map(
273272
&self,
274273
e: TypeAliasId,
@@ -283,7 +282,7 @@ pub trait DefDatabase: InternDatabase + ExpandDatabase + SourceDatabase {
283282
#[salsa::invoke(Body::body_query)]
284283
fn body(&self, def: DefWithBodyId) -> Arc<Body>;
285284

286-
#[salsa::invoke_actual(ExprScopes::expr_scopes_query)]
285+
#[salsa::invoke(ExprScopes::expr_scopes_query)]
287286
fn expr_scopes(&self, def: DefWithBodyId) -> Arc<ExprScopes>;
288287

289288
#[salsa::transparent]
@@ -306,17 +305,18 @@ pub trait DefDatabase: InternDatabase + ExpandDatabase + SourceDatabase {
306305

307306
// region:attrs
308307

309-
#[salsa::invoke_actual(Attrs::fields_attrs_query)]
308+
#[salsa::invoke(Attrs::fields_attrs_query)]
310309
fn fields_attrs(&self, def: VariantId) -> Arc<ArenaMap<LocalFieldId, Attrs>>;
311310

312311
// should this really be a query?
313-
#[salsa::invoke_actual(crate::attr::fields_attrs_source_map)]
312+
#[salsa::invoke(crate::attr::fields_attrs_source_map)]
314313
fn fields_attrs_source_map(
315314
&self,
316315
def: VariantId,
317316
) -> Arc<ArenaMap<LocalFieldId, AstPtr<Either<ast::TupleField, ast::RecordField>>>>;
318317

319-
#[salsa::invoke(AttrsWithOwner::attrs_query)]
318+
// FIXME: Make this a non-interned query.
319+
#[salsa::invoke_interned(AttrsWithOwner::attrs_query)]
320320
fn attrs(&self, def: AttrDefId) -> Attrs;
321321

322322
#[salsa::transparent]
@@ -328,39 +328,39 @@ pub trait DefDatabase: InternDatabase + ExpandDatabase + SourceDatabase {
328328
#[salsa::invoke(LangItems::lang_item_query)]
329329
fn lang_item(&self, start_crate: Crate, item: LangItem) -> Option<LangItemTarget>;
330330

331-
#[salsa::invoke_actual(ImportMap::import_map_query)]
331+
#[salsa::invoke(ImportMap::import_map_query)]
332332
fn import_map(&self, krate: Crate) -> Arc<ImportMap>;
333333

334334
// region:visibilities
335335

336-
#[salsa::invoke_actual(visibility::field_visibilities_query)]
336+
#[salsa::invoke(visibility::field_visibilities_query)]
337337
fn field_visibilities(&self, var: VariantId) -> Arc<ArenaMap<LocalFieldId, Visibility>>;
338338

339339
// FIXME: unify function_visibility and const_visibility?
340340

341-
#[salsa::invoke_actual(visibility::function_visibility_query)]
341+
#[salsa::invoke(visibility::function_visibility_query)]
342342
fn function_visibility(&self, def: FunctionId) -> Visibility;
343343

344-
#[salsa::invoke_actual(visibility::const_visibility_query)]
344+
#[salsa::invoke(visibility::const_visibility_query)]
345345
fn const_visibility(&self, def: ConstId) -> Visibility;
346346

347-
#[salsa::invoke_actual(visibility::type_alias_visibility_query)]
347+
#[salsa::invoke(visibility::type_alias_visibility_query)]
348348
fn type_alias_visibility(&self, def: TypeAliasId) -> Visibility;
349349

350350
// endregion:visibilities
351351

352-
#[salsa::invoke_actual(LangItems::crate_lang_items_query)]
352+
#[salsa::invoke(LangItems::crate_lang_items_query)]
353353
fn crate_lang_items(&self, krate: Crate) -> Option<Arc<LangItems>>;
354354

355-
#[salsa::invoke_actual(crate::lang_item::notable_traits_in_deps)]
355+
#[salsa::invoke(crate::lang_item::notable_traits_in_deps)]
356356
fn notable_traits_in_deps(&self, krate: Crate) -> Arc<[Arc<[TraitId]>]>;
357-
#[salsa::invoke_actual(crate::lang_item::crate_notable_traits)]
357+
#[salsa::invoke(crate::lang_item::crate_notable_traits)]
358358
fn crate_notable_traits(&self, krate: Crate) -> Option<Arc<[TraitId]>>;
359359

360-
#[salsa::invoke_actual(crate_supports_no_std)]
360+
#[salsa::invoke(crate_supports_no_std)]
361361
fn crate_supports_no_std(&self, crate_id: Crate) -> bool;
362362

363-
#[salsa::invoke_actual(include_macro_invoc)]
363+
#[salsa::invoke(include_macro_invoc)]
364364
fn include_macro_invoc(&self, crate_id: Crate) -> Arc<[(MacroCallId, EditionedFileId)]>;
365365
}
366366

@@ -382,7 +382,7 @@ fn include_macro_invoc(
382382
}
383383

384384
fn crate_supports_no_std(db: &dyn DefDatabase, crate_id: Crate) -> bool {
385-
let file = crate_id.data(db).root_file_id();
385+
let file = crate_id.data(db).root_file_id(db);
386386
let item_tree = db.file_item_tree(file.into());
387387
let attrs = item_tree.raw_attrs(AttrOwner::TopLevel);
388388
for attr in &**attrs {

crates/hir-def/src/expr_store.rs

+7-7
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@ use std::ops::{Deref, Index};
1313

1414
use cfg::{CfgExpr, CfgOptions};
1515
use either::Either;
16-
use hir_expand::{ExpandError, InFile, mod_path::ModPath, name::Name};
16+
use hir_expand::{ExpandError, InFile, MacroCallId, mod_path::ModPath, name::Name};
1717
use la_arena::{Arena, ArenaMap};
1818
use rustc_hash::FxHashMap;
1919
use smallvec::SmallVec;
20-
use span::{Edition, MacroFileId, SyntaxContext};
20+
use span::{Edition, SyntaxContext};
2121
use syntax::{AstPtr, SyntaxNodePtr, ast};
2222
use triomphe::Arc;
2323
use tt::TextRange;
@@ -138,7 +138,7 @@ pub struct ExpressionStoreSourceMap {
138138

139139
template_map: Option<Box<FormatTemplate>>,
140140

141-
pub expansions: FxHashMap<InFile<MacroCallPtr>, MacroFileId>,
141+
pub expansions: FxHashMap<InFile<MacroCallPtr>, MacroCallId>,
142142

143143
/// Diagnostics accumulated during lowering. These contain `AstPtr`s and so are stored in
144144
/// the source map (since they're just as volatile).
@@ -645,12 +645,12 @@ impl ExpressionStoreSourceMap {
645645
self.expr_map.get(&src).cloned()
646646
}
647647

648-
pub fn node_macro_file(&self, node: InFile<&ast::MacroCall>) -> Option<MacroFileId> {
648+
pub fn node_macro_file(&self, node: InFile<&ast::MacroCall>) -> Option<MacroCallId> {
649649
let src = node.map(AstPtr::new);
650650
self.expansions.get(&src).cloned()
651651
}
652652

653-
pub fn macro_calls(&self) -> impl Iterator<Item = (InFile<MacroCallPtr>, MacroFileId)> + '_ {
653+
pub fn macro_calls(&self) -> impl Iterator<Item = (InFile<MacroCallPtr>, MacroCallId)> + '_ {
654654
self.expansions.iter().map(|(&a, &b)| (a, b))
655655
}
656656

@@ -696,11 +696,11 @@ impl ExpressionStoreSourceMap {
696696
self.expr_map.get(&src).copied()
697697
}
698698

699-
pub fn expansions(&self) -> impl Iterator<Item = (&InFile<MacroCallPtr>, &MacroFileId)> {
699+
pub fn expansions(&self) -> impl Iterator<Item = (&InFile<MacroCallPtr>, &MacroCallId)> {
700700
self.expansions.iter()
701701
}
702702

703-
pub fn expansion(&self, node: InFile<&ast::MacroCall>) -> Option<MacroFileId> {
703+
pub fn expansion(&self, node: InFile<&ast::MacroCall>) -> Option<MacroCallId> {
704704
self.expansions.get(&node.map(AstPtr::new)).copied()
705705
}
706706

0 commit comments

Comments
 (0)