Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/span/src/lib.rs')
-rw-r--r--crates/span/src/lib.rs135
1 files changed, 42 insertions, 93 deletions
diff --git a/crates/span/src/lib.rs b/crates/span/src/lib.rs
index 8dc9573503..7abdacee2b 100644
--- a/crates/span/src/lib.rs
+++ b/crates/span/src/lib.rs
@@ -1,19 +1,19 @@
//! File and span related types.
use std::fmt::{self, Write};
-#[cfg(feature = "ra-salsa")]
-use ra_salsa::InternId;
-
mod ast_id;
mod hygiene;
mod map;
pub use self::{
ast_id::{AstIdMap, AstIdNode, ErasedFileAstId, FileAstId},
- hygiene::{SyntaxContextData, SyntaxContextId, Transparency},
+ hygiene::{SyntaxContext, Transparency},
map::{RealSpanMap, SpanMap},
};
+// Remove this
+pub use self::hygiene::{SyntaxContext as SyntaxContextId, SyntaxContextUnderlyingData};
+
pub use syntax::Edition;
pub use text_size::{TextRange, TextSize};
pub use vfs::FileId;
@@ -202,11 +202,23 @@ impl EditionedFileId {
/// `MacroCallId`.
// FIXME: Give this a better fitting name
#[derive(Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
-pub struct HirFileId(u32);
+pub struct HirFileId(salsa::Id);
+
+impl salsa::plumbing::AsId for HirFileId {
+ fn as_id(&self) -> salsa::Id {
+ self.0
+ }
+}
+
+impl salsa::plumbing::FromId for HirFileId {
+ fn from_id(id: salsa::Id) -> Self {
+ HirFileId(id)
+ }
+}
impl From<HirFileId> for u32 {
fn from(value: HirFileId) -> Self {
- value.0
+ value.0.as_u32()
}
}
@@ -262,18 +274,20 @@ pub struct MacroFileId {
/// `MacroCallId` identifies a particular macro invocation, like
/// `println!("Hello, {}", world)`.
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
-pub struct MacroCallId(InternId);
+pub struct MacroCallId(salsa::Id);
-#[cfg(feature = "ra-salsa")]
-impl ra_salsa::InternKey for MacroCallId {
- fn from_intern_id(v: ra_salsa::InternId) -> Self {
- MacroCallId(v)
- }
- fn as_intern_id(&self) -> ra_salsa::InternId {
+impl salsa::plumbing::AsId for MacroCallId {
+ fn as_id(&self) -> salsa::Id {
self.0
}
}
+impl salsa::plumbing::FromId for MacroCallId {
+ fn from_id(id: salsa::Id) -> Self {
+ MacroCallId(id)
+ }
+}
+
impl MacroCallId {
pub const MAX_ID: u32 = 0x7fff_ffff;
@@ -307,16 +321,16 @@ impl From<EditionedFileId> for HirFileId {
#[allow(clippy::let_unit_value)]
fn from(id: EditionedFileId) -> Self {
assert!(id.as_u32() <= Self::MAX_HIR_FILE_ID, "FileId index {} is too large", id.as_u32());
- HirFileId(id.as_u32())
+ HirFileId(salsa::Id::from_u32(id.0))
}
}
impl From<MacroFileId> for HirFileId {
#[allow(clippy::let_unit_value)]
fn from(MacroFileId { macro_call_id: MacroCallId(id) }: MacroFileId) -> Self {
- let id = id.as_u32();
+ let id: u32 = id.as_u32();
assert!(id <= Self::MAX_HIR_FILE_ID, "MacroCallId index {id} is too large");
- HirFileId(id | Self::MACRO_FILE_TAG_MASK)
+ HirFileId(salsa::Id::from_u32(id | Self::MACRO_FILE_TAG_MASK))
}
}
@@ -326,33 +340,37 @@ impl HirFileId {
#[inline]
pub fn is_macro(self) -> bool {
- self.0 & Self::MACRO_FILE_TAG_MASK != 0
+ self.0.as_u32() & Self::MACRO_FILE_TAG_MASK != 0
}
#[inline]
pub fn macro_file(self) -> Option<MacroFileId> {
- match self.0 & Self::MACRO_FILE_TAG_MASK {
+ match self.0.as_u32() & Self::MACRO_FILE_TAG_MASK {
0 => None,
_ => Some(MacroFileId {
- macro_call_id: MacroCallId(InternId::from(self.0 ^ Self::MACRO_FILE_TAG_MASK)),
+ macro_call_id: MacroCallId(salsa::Id::from_u32(
+ self.0.as_u32() ^ Self::MACRO_FILE_TAG_MASK,
+ )),
}),
}
}
#[inline]
pub fn file_id(self) -> Option<EditionedFileId> {
- match self.0 & Self::MACRO_FILE_TAG_MASK {
- 0 => Some(EditionedFileId(self.0)),
+ match self.0.as_u32() & Self::MACRO_FILE_TAG_MASK {
+ 0 => Some(EditionedFileId(self.0.as_u32())),
_ => None,
}
}
#[inline]
pub fn repr(self) -> HirFileIdRepr {
- match self.0 & Self::MACRO_FILE_TAG_MASK {
- 0 => HirFileIdRepr::FileId(EditionedFileId(self.0)),
+ match self.0.as_u32() & Self::MACRO_FILE_TAG_MASK {
+ 0 => HirFileIdRepr::FileId(EditionedFileId(self.0.as_u32())),
_ => HirFileIdRepr::MacroFile(MacroFileId {
- macro_call_id: MacroCallId(InternId::from(self.0 ^ Self::MACRO_FILE_TAG_MASK)),
+ macro_call_id: MacroCallId(salsa::Id::from_u32(
+ self.0.as_u32() ^ Self::MACRO_FILE_TAG_MASK,
+ )),
}),
}
}
@@ -369,72 +387,3 @@ impl std::fmt::Debug for TokenId {
self.0.fmt(f)
}
}
-
-#[cfg(not(feature = "ra-salsa"))]
-mod intern_id_proxy {
- use std::fmt;
- use std::num::NonZeroU32;
-
- #[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
- pub(super) struct InternId {
- value: NonZeroU32,
- }
-
- impl InternId {
- pub(super) const MAX: u32 = 0xFFFF_FF00;
-
- pub(super) const unsafe fn new_unchecked(value: u32) -> Self {
- debug_assert!(value < InternId::MAX);
- let value = unsafe { NonZeroU32::new_unchecked(value + 1) };
- InternId { value }
- }
-
- pub(super) fn as_u32(self) -> u32 {
- self.value.get() - 1
- }
-
- pub(super) fn as_usize(self) -> usize {
- self.as_u32() as usize
- }
- }
-
- impl From<InternId> for u32 {
- fn from(raw: InternId) -> u32 {
- raw.as_u32()
- }
- }
-
- impl From<InternId> for usize {
- fn from(raw: InternId) -> usize {
- raw.as_usize()
- }
- }
-
- impl From<u32> for InternId {
- fn from(id: u32) -> InternId {
- assert!(id < InternId::MAX);
- unsafe { InternId::new_unchecked(id) }
- }
- }
-
- impl From<usize> for InternId {
- fn from(id: usize) -> InternId {
- assert!(id < (InternId::MAX as usize));
- unsafe { InternId::new_unchecked(id as u32) }
- }
- }
-
- impl fmt::Debug for InternId {
- fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
- self.as_usize().fmt(f)
- }
- }
-
- impl fmt::Display for InternId {
- fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
- self.as_usize().fmt(f)
- }
- }
-}
-#[cfg(not(feature = "ra-salsa"))]
-use intern_id_proxy::InternId;