Skip to content
37 changes: 30 additions & 7 deletions src/compiler.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ use crate::translate::module::TranslateModule;
use crate::utils::{pluralize, ParserMetadata, TranslateMetadata};
use crate::rules;
use postprocessor::PostProcessor;
use chrono::prelude::*;
use colored::Colorize;
use heraclitus_compiler::prelude::*;
use itertools::Itertools;
Expand All @@ -20,7 +19,7 @@ use std::fs::File;
use std::io::{ErrorKind, Write};
use std::iter::once;
use std::path::PathBuf;
use std::process::{Command, ExitStatus};
use std::process::{exit, Command, ExitStatus};
use std::time::Instant;

pub mod postprocessor;
Expand Down Expand Up @@ -165,6 +164,34 @@ impl AmberCompiler {
result
}

fn gen_header(&self) -> String {
let header_template = if let Ok(dynamic) = env::var("AMBER_HEADER") {
fs::read_to_string(&dynamic).unwrap_or_else(|_| {
let msg = format!("Couldn't read the dynamic header file from path '{dynamic}'");
Message::new_err_msg(msg).show();
exit(1);
})
} else {
include_str!("header.sh").trim_end().to_string()
};

header_template.replace("{{ version }}", built_info::GIT_VERSION.unwrap_or(built_info::PKG_VERSION))
}

fn gen_footer(&self) -> String {
let footer_template = if let Ok(dynamic) = env::var("AMBER_FOOTER") {
fs::read_to_string(&dynamic).unwrap_or_else(|_| {
let msg = format!("Couldn't read the dynamic footer file from path '{dynamic}'");
Message::new_err_msg(msg).show();
exit(1);
})
} else {
String::new()
};

footer_template.replace("{{ version }}", built_info::GIT_VERSION.unwrap_or(built_info::PKG_VERSION))
}

pub fn translate(&self, block: Block, meta: ParserMetadata) -> Result<String, Message> {
let ast_forest = self.get_sorted_ast_forest(block, &meta);
let mut meta_translate = TranslateMetadata::new(meta, &self.options);
Expand Down Expand Up @@ -207,11 +234,7 @@ impl AmberCompiler {
};
}

let now = Local::now().format("%Y-%m-%d %H:%M:%S").to_string();
let header = include_str!("header.sh")
.replace("{{ version }}", built_info::GIT_VERSION.unwrap_or(built_info::PKG_VERSION))
.replace("{{ date }}", now.as_str());
Ok(format!("{header}{result}"))
Ok(format!("{}\n{}\n{}", self.gen_header(), result, self.gen_footer()))
}

pub fn document(&self, block: Block, meta: ParserMetadata, output: Option<String>) {
Expand Down
1 change: 0 additions & 1 deletion src/header.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
#!/usr/bin/env bash
# Written in [Amber](https://amber-lang.com/)
# version: {{ version }}
# date: {{ date }}
1 change: 0 additions & 1 deletion src/modules/condition/failed.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ impl SyntaxModule<ParserMetadata> for Failed {
match token(meta, "failed") {
Ok(_) => {
let tok = meta.get_current_token();
dbg!(tok.clone());
syntax(meta, &mut *self.block)?;
if self.block.is_empty() {
let message = Message::new_warn_at_token(meta, tok)
Expand Down
1 change: 0 additions & 1 deletion src/tests/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@ pub fn test_amber(code: &str, result: &str, target: TestOutcomeTarget) {
TestOutcomeTarget::Success => match evaluated {
Ok(stdout) => {
let stdout = stdout.trim_end_matches('\n');
dbg!(stdout);
if stdout != SUCCEEDED {
let result = result.trim_end_matches('\n');
assert_eq!(stdout, result)
Expand Down