use crate::diagnostics::Span;
use std::collections::HashMap;
use std::path::PathBuf;
#[derive(Debug, Default, Clone)]
pub struct SpanMap {
file: PathBuf,
inner: HashMap<String, (u32, u32, u32, u32)>,
}
impl SpanMap {
pub fn new(file: PathBuf) -> Self {
Self {
file,
inner: HashMap::new(),
}
}
pub fn insert(
&mut self,
path: impl Into<String>,
line: u32,
col: u32,
end_line: u32,
end_col: u32,
) {
self.inner
.insert(path.into(), (line, col, end_line, end_col));
}
pub fn lookup(&self, path: &str) -> Option<Span> {
self.inner
.get(path)
.map(|&(line, col, end_line, end_col)| Span {
file: self.file.clone(),
line,
col,
end_line,
end_col,
})
}
pub fn is_empty(&self) -> bool {
self.inner.is_empty()
}
pub fn len(&self) -> usize {
self.inner.len()
}
}