Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/base-db/src/lib.rs')
-rw-r--r--crates/base-db/src/lib.rs28
1 files changed, 24 insertions, 4 deletions
diff --git a/crates/base-db/src/lib.rs b/crates/base-db/src/lib.rs
index 15ce934dc9..55010a0349 100644
--- a/crates/base-db/src/lib.rs
+++ b/crates/base-db/src/lib.rs
@@ -20,6 +20,7 @@ use rustc_hash::{FxHashSet, FxHasher};
pub use salsa::{self};
use salsa::{Durability, Setter};
pub use semver::{BuildMetadata, Prerelease, Version, VersionReq};
+use span::Edition;
use syntax::{Parse, SyntaxError, ast};
use triomphe::Arc;
pub use vfs::{AnchoredPath, AnchoredPathBuf, FileId, VfsPath, file_set::FileSet};
@@ -151,21 +152,39 @@ impl Files {
}
}
-#[salsa::interned(no_lifetime)]
+#[salsa::interned(no_lifetime, constructor=from_span)]
pub struct EditionedFileId {
pub editioned_file_id: span::EditionedFileId,
}
impl EditionedFileId {
- pub fn file_id(&self, db: &dyn salsa::Database) -> vfs::FileId {
+ // Salsa already uses the name `new`...
+ #[inline]
+ pub fn new(db: &dyn salsa::Database, file_id: FileId, edition: Edition) -> Self {
+ EditionedFileId::from_span(db, span::EditionedFileId::new(file_id, edition))
+ }
+
+ #[inline]
+ pub fn current_edition(db: &dyn salsa::Database, file_id: FileId) -> Self {
+ EditionedFileId::new(db, file_id, Edition::CURRENT)
+ }
+
+ #[inline]
+ 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) {
+ #[inline]
+ pub fn unpack(self, db: &dyn salsa::Database) -> (vfs::FileId, span::Edition) {
let id = self.editioned_file_id(db);
(id.file_id(), id.edition())
}
+
+ #[inline]
+ pub fn edition(self, db: &dyn SourceDatabase) -> Edition {
+ self.editioned_file_id(db).edition()
+ }
}
#[salsa::input]
@@ -189,7 +208,7 @@ pub struct SourceRootInput {
#[query_group::query_group]
pub trait RootQueryDb: SourceDatabase + salsa::Database {
/// Parses the file into the syntax tree.
- #[salsa::invoke_actual(parse)]
+ #[salsa::invoke(parse)]
#[salsa::lru(128)]
fn parse(&self, file_id: EditionedFileId) -> Parse<ast::SourceFile>;
@@ -201,6 +220,7 @@ pub trait RootQueryDb: SourceDatabase + salsa::Database {
fn toolchain_channel(&self, krate: Crate) -> Option<ReleaseChannel>;
/// Crates whose root file is in `id`.
+ #[salsa::invoke_interned(source_root_crates)]
fn source_root_crates(&self, id: SourceRootId) -> Arc<[Crate]>;
#[salsa::transparent]