dpscript/dpscript/ast/node/
import.rs1use crate::{util::Spanned, AddSpan};
2use miette::SourceSpan;
3use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
6pub struct Import {
7 pub base: Vec<Spanned<String>>,
9 pub imports: Vec<ImportNode>,
10 pub span: SourceSpan,
11}
12
13#[derive(Debug, Clone, Serialize, Deserialize)]
14pub enum ImportNode {
15 Object(Spanned<String>),
16 Module(Import),
17}
18
19impl Import {
20 pub fn module(&self) -> String {
22 self.base
23 .iter()
24 .map(|(v, _)| v.clone())
25 .collect::<Vec<_>>()
26 .join("/")
27 }
28
29 pub fn module_span(&self) -> SourceSpan {
30 let parts = self.base.clone();
31 let Some((_, mut span)) = parts.first() else {
32 panic!("Achievement Unlocked: How did we get here?")
33 };
34
35 for (_, item) in parts {
36 span = span.add(item);
37 }
38
39 span
40 }
41}