Add js import codegen
This commit is contained in:
+36
-2
@@ -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;")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user