diff options
author | Nadrieril | 2019-03-24 21:05:01 +0100 |
---|---|---|
committer | Nadrieril | 2019-03-24 21:05:01 +0100 |
commit | d0978c35d88811462de5c448a24770f73b321e70 (patch) | |
tree | 670eaefdf8489eac4a0cf9f48a702366f42ae4b6 /dhall/build.rs | |
parent | a6f61ec4843f4ec91eb9651b79c8b843fb995b46 (diff) |
Parse multiline strings correctly
Closes #24
Diffstat (limited to '')
-rw-r--r-- | dhall/build.rs | 36 |
1 files changed, 21 insertions, 15 deletions
diff --git a/dhall/build.rs b/dhall/build.rs index c8ad6ad..cc62a97 100644 --- a/dhall/build.rs +++ b/dhall/build.rs @@ -1,23 +1,28 @@ use std::env; use std::ffi::OsString; -use std::fs::{self, File}; +use std::fs::File; use std::io::Write; use std::path::Path; +use walkdir::WalkDir; fn dhall_files_in_dir<'a>(dir: &'a Path) -> impl Iterator<Item = String> + 'a { - fs::read_dir(dir).unwrap().filter_map(move |path| { - let path = path.unwrap().path(); - let path = path.strip_prefix(dir).unwrap(); - if path.extension() != Some(&OsString::from("dhall")) { - return None; - } - let path = path.to_string_lossy(); - let path = path[..path.len() - 6].to_owned(); - Some(path) - }) + WalkDir::new(dir) + .into_iter() + .filter_map(|e| e.ok()) + .filter_map(move |path| { + let path = path.path(); + let path = path.strip_prefix(dir).unwrap(); + if path.extension() != Some(&OsString::from("dhall")) { + return None; + } + let path = path.to_string_lossy(); + let path = path[..path.len() - 6].to_owned(); + Some(path) + }) } fn main() -> std::io::Result<()> { + println!("cargo:rerun-if-changed=../dhall-lang/.git"); let out_dir = env::var("OUT_DIR").unwrap(); let tests_dir = Path::new("../dhall-lang/tests/"); @@ -25,17 +30,18 @@ fn main() -> std::io::Result<()> { let mut file = File::create(parser_tests_path)?; for path in dhall_files_in_dir(&tests_dir.join("parser/success/")) { - let name = &path[..path.len() - 1]; + let path = &path[..path.len() - 1]; + let name = path.replace("/", "_"); // Skip this test; parser is way too slow indebug mode if name == "largeExpression" { continue; } - writeln!(file, r#"make_spec_test!(ParserSuccess, spec_parser_success_{0}, "{0}");"#, name)?; + writeln!(file, r#"make_spec_test!(ParserSuccess, spec_parser_success_{}, "{}");"#, name, path)?; } for path in dhall_files_in_dir(&tests_dir.join("parser/failure/")) { - let name = &path; - writeln!(file, r#"make_spec_test!(ParserFailure, spec_parser_failure_{0}, "{0}");"#, name)?; + let name = path.replace("/", "_"); + writeln!(file, r#"make_spec_test!(ParserFailure, spec_parser_failure_{}, "{}");"#, name, path)?; } Ok(()) |