Add js import codegen

This commit is contained in:
Eugene Rossokha
2023-12-19 23:57:15 +02:00
parent 58c5c80ee2
commit 912815bac3
+36 -2
View File
@@ -13,7 +13,10 @@ pub trait Emit<W: Write> {
}
pub enum Statement {
Import,
Import {
names: Vec<String>,
from: String,
},
Declaration {
is_exported: bool,
is_const: bool,
@@ -179,7 +182,16 @@ impl<W: Write> Emit<W> for Statement {
}
write!(w, "{}", "}").map_err(EmitError::WriterError)
}
_ => todo!("Tehe"),
Statement::Import { names, from } => {
write!(w, "import {}", "{").map_err(EmitError::WriterError)?;
for (i, name) in names.iter().enumerate() {
write!(w, "{}", name).map_err(EmitError::WriterError)?;
if i + 1 != names.len() {
write!(w, ", ").map_err(EmitError::WriterError)?;
}
}
write!(w, "{} from {};", "}", from).map_err(EmitError::WriterError)
}
}
}
}
@@ -636,3 +648,25 @@ fn if_emit() {
if_.emit(&mut res).unwrap();
assert_eq!(res, "if (true) {null} else {undefined}")
}
#[test]
fn empty_import_emit() {
let import = Statement::Import {
names: Vec::new(),
from: "x".to_owned(),
};
let mut res = String::new();
import.emit(&mut res).unwrap();
assert_eq!(res, "import {} from x;")
}
#[test]
fn import_emit() {
let import = Statement::Import {
names: vec!["x".to_owned(), "y".to_owned()],
from: "z".to_owned(),
};
let mut res = String::new();
import.emit(&mut res).unwrap();
assert_eq!(res, "import {x, y} from z;")
}