source_map/
source_id.rs

1use crate::FileSystem;
2use std::{fmt, path::PathBuf};
3
4/// A identifier for a [crate::Source]
5#[derive(PartialEq, Eq, Clone, Copy, Hash)]
6#[cfg_attr(feature = "serde-serialize", derive(serde::Serialize))]
7#[cfg_attr(target_family = "wasm", derive(tsify::Tsify))]
8pub struct SourceId(pub(crate) u16);
9
10impl fmt::Debug for SourceId {
11    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
12        f.write_fmt(format_args!("SourceId({})", self.0))
13    }
14}
15
16impl SourceId {
17    /// Returns a [SourceId] handle that references a file and its content
18    pub fn new(filesystem: &mut impl FileSystem, path: PathBuf, content: String) -> Self {
19        filesystem.new_source_id(path, content)
20    }
21}
22
23#[cfg(feature = "self-rust-tokenize")]
24pub const SPAN_TOKEN_IDENT: &str = "CURRENT_SOURCE_ID";
25
26#[cfg(feature = "self-rust-tokenize")]
27impl self_rust_tokenize::SelfRustTokenize for SourceId {
28    fn append_to_token_stream(
29        &self,
30        token_stream: &mut self_rust_tokenize::proc_macro2::TokenStream,
31    ) {
32        let current_source_id_reference = self_rust_tokenize::proc_macro2::Ident::new(
33            SPAN_TOKEN_IDENT,
34            self_rust_tokenize::proc_macro2::Span::call_site(),
35        );
36        self_rust_tokenize::TokenStreamExt::append(token_stream, current_source_id_reference);
37    }
38}