diff --git a/sailfish-compiler/src/compiler.rs b/sailfish-compiler/src/compiler.rs index 1626075..01b4eac 100644 --- a/sailfish-compiler/src/compiler.rs +++ b/sailfish-compiler/src/compiler.rs @@ -9,7 +9,7 @@ use crate::optimizer::Optimizer; use crate::parser::Parser; use crate::resolver::Resolver; use crate::translator::{Translator, TranslatedSource}; -use crate::util::rustfmt_block; +use crate::util::{read_to_string, rustfmt_block}; #[derive(Default)] pub struct Compiler { @@ -28,7 +28,7 @@ impl Compiler { fn translate_file_contents(&self, input: &Path) -> Result { let parser = Parser::new().delimiter(self.config.delimiter); let translator = Translator::new().escape(self.config.escape); - let content = fs::read_to_string(input) + let content = read_to_string(input) .chain_err(|| format!("Failed to open template file: {:?}", input))?; let stream = parser.parse(&*content); diff --git a/sailfish-compiler/src/util.rs b/sailfish-compiler/src/util.rs index 329b66c..b76c24a 100644 --- a/sailfish-compiler/src/util.rs +++ b/sailfish-compiler/src/util.rs @@ -1,6 +1,21 @@ use std::io::{self, Write}; +use std::path::Path; use std::process::{Command, Stdio}; +pub fn read_to_string(path: &Path) -> io::Result { + let mut content = std::fs::read_to_string(path)?; + + // strip break line at file end + if content.ends_with('\n') { + content.truncate(content.len() - 1); + if content.ends_with('\r') { + content.truncate(content.len() - 1); + } + } + + Ok(content) +} + /// Format block expression using `rustfmt` command pub fn rustfmt_block(source: &str) -> io::Result { let mut new_source = String::with_capacity(source.len() + 11);