diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2137e4dd..1001ab6f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -31,7 +31,6 @@ jobs: - uses: baptiste0928/cargo-install@v2 with: crate: txtpp - features: cli - run: task themes:ci client:ci --output group - run: task build:client --output group - uses: actions/upload-artifact@v3 diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index b707003c..361c66ce 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -24,7 +24,6 @@ jobs: - uses: baptiste0928/cargo-install@v2 with: crate: txtpp - features: cli - run: task themes:ci client:ci docs:ci --output group - run: task themes:check client:check docs:check --output group diff --git a/Cargo.lock b/Cargo.lock index d25d4705..e91f75fe 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -379,6 +379,10 @@ dependencies = [ "wasm-bindgen-futures", ] +[[package]] +name = "compiler-wasm-build" +version = "0.0.0" + [[package]] name = "crc32fast" version = "1.3.2" diff --git a/Cargo.toml b/Cargo.toml index 1012b52a..4d68e085 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,6 +4,7 @@ members = [ "compiler-core/", "compiler-macros/", "compiler-wasm/", + "compiler-wasm/build/", "web-server/", ] diff --git a/Taskfile.yml b/Taskfile.yml index aac77de2..89b907fe 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -88,7 +88,7 @@ tasks: - task: client:build build:wasm: - dir: ./compiler-wasm + dir: ./compiler-wasm/build deps: - core:grammar cmds: diff --git a/compiler-core/src/lang/preset/parse.rs b/compiler-core/src/lang/preset/parse.rs index 01d5c77c..8c439404 100644 --- a/compiler-core/src/lang/preset/parse.rs +++ b/compiler-core/src/lang/preset/parse.rs @@ -29,9 +29,15 @@ fn from_pt(pt: &pt::Preset) -> PresetInst { } let mut args = vec![]; if let Some(pt_args) = &pt.m_args { - args.push(parse_arg(&pt_args.m_first)); + match &pt_args.m_first { + Some(arg) => args.push(parse_arg(arg)), + None => args.push("".to_string()), + } for pt_arg in &pt_args.m_rest { - args.push(parse_arg(&pt_arg.m_arg)); + match &pt_arg.m_arg { + Some(arg) => args.push(parse_arg(arg)), + None => args.push("".to_string()), + } } } @@ -113,9 +119,7 @@ mod test { } #[test] - fn test_empty_args_not_allowed() { - assert_eq!(PresetInst::try_parse("hello<>"), None); - assert_eq!(PresetInst::try_parse("_hello::world<>"), None); + fn test_incomplete_args_not_allowed() { assert_eq!(PresetInst::try_parse("_hello::world>"), None); assert_eq!(PresetInst::try_parse("_hello::world<"), None); } @@ -172,4 +176,36 @@ mod test { assert_eq!(PresetInst::try_parse("hello "), None); assert_eq!(PresetInst::try_parse("helloa"), None); } + + #[test] + fn test_empty_arg() { + assert_eq!( + PresetInst::try_parse("hello::world<>").unwrap(), + PresetInst { + name: "hello::world".to_string(), + args: vec!["".to_string()], + } + ); + assert_eq!( + PresetInst::try_parse("hello::world<,,>").unwrap(), + PresetInst { + name: "hello::world".to_string(), + args: vec!["".to_string(), "".to_string(), "".to_string()], + } + ); + assert_eq!( + PresetInst::try_parse("hello::world").unwrap(), + PresetInst { + name: "hello::world".to_string(), + args: vec!["a".to_string(), "".to_string(), "a".to_string()], + } + ); + assert_eq!( + PresetInst::try_parse("hello::world<,a,>").unwrap(), + PresetInst { + name: "hello::world".to_string(), + args: vec!["".to_string(), "a".to_string(), "".to_string()], + } + ); + } } diff --git a/compiler-core/src/lang/preset/preset.grammar b/compiler-core/src/lang/preset/preset.grammar index 88244152..29e3da01 100644 --- a/compiler-core/src/lang/preset/preset.grammar +++ b/compiler-core/src/lang/preset/preset.grammar @@ -23,15 +23,14 @@ rule SubNamespace( rule Args( _: token Symbol"<", - first: ArgText, + first: optional ArgText, rest: optional ArgListTail+, - trailing_comma: optional token Symbol",", _: token Symbol">" ); rule ArgListTail( _: token Symbol",", - arg: ArgText + arg: optional ArgText ); rule ArgText(blocks: ArgBlock+); diff --git a/compiler-wasm/Cargo.toml b/compiler-wasm/Cargo.toml index 6ab8ded9..44318ba0 100644 --- a/compiler-wasm/Cargo.toml +++ b/compiler-wasm/Cargo.toml @@ -3,7 +3,6 @@ name = "compiler-wasm" version = "0.0.0" description = "WASM interface of the compiler" edition = "2021" -default-run = "buildwasm" [dependencies] compiler-core = { path = "../compiler-core", features = ["wasm"], default-features = false } @@ -21,7 +20,3 @@ tsify = { version = "0.4.5", default-features = false, features = ["js"] } name = "celercwasm" path = "src/lib.rs" crate-type = ["cdylib", "lib"] - -[[bin]] -name = "buildwasm" -path = "src/build.rs" diff --git a/compiler-wasm/Taskfile.yml b/compiler-wasm/Taskfile.yml index 6212beed..eca38106 100644 --- a/compiler-wasm/Taskfile.yml +++ b/compiler-wasm/Taskfile.yml @@ -3,10 +3,12 @@ version: '3' tasks: dev: desc: Start wasm builds in watch mode + dir: build cmds: - - cargo watch -x run + - cargo watch -x run {{.CLI_ARGS}} build: desc: Build debug wasm module + dir: build cmds: - - cargo run + - cargo run {{.CLI_ARGS}} diff --git a/compiler-wasm/build/Cargo.toml b/compiler-wasm/build/Cargo.toml new file mode 100644 index 00000000..cf02ddc4 --- /dev/null +++ b/compiler-wasm/build/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "compiler-wasm-build" +version = "0.0.0" +description = "Build script for the wasm package" +edition = "2021" +default-run = "buildwasm" + +[dependencies] + +[[bin]] +name = "buildwasm" +path = "src/build.rs" diff --git a/compiler-wasm/src/build.rs b/compiler-wasm/build/src/build.rs similarity index 89% rename from compiler-wasm/src/build.rs rename to compiler-wasm/build/src/build.rs index 7b118732..76189d45 100644 --- a/compiler-wasm/src/build.rs +++ b/compiler-wasm/build/src/build.rs @@ -5,6 +5,7 @@ use std::io::{self, Write}; use std::path::Path; use std::process::Command; +/// Output directory relative to the wasm package (not current dir) const OUTPUT_DIR: &str = "../web-client/src/low/celerc"; pub fn main() { @@ -49,6 +50,7 @@ fn wasm_pack_build() -> io::Result<()> { fn build_wasm_pack_command() -> Command { let mut command = Command::new("wasm-pack"); command.args(["build", "--out-dir", OUTPUT_DIR, "--dev"]); + command.current_dir(".."); command } @@ -56,12 +58,13 @@ fn build_wasm_pack_command() -> Command { fn build_wasm_pack_command() -> Command { let mut command = Command::new("wasm-pack"); command.args(&["build", "--out-dir", OUTPUT_DIR, "--release"]); + command.current_dir(".."); command } fn override_typescript_definitions() -> io::Result<()> { println!("generating typescript definitions"); - let path = Path::new(OUTPUT_DIR).join("celercwasm.d.ts"); + let path = Path::new("..").join(OUTPUT_DIR).join("celercwasm.d.ts"); let d_ts = fs::read_to_string(&path)?; // https://github.com/madonoharu/tsify/issues/37 @@ -76,7 +79,7 @@ fn add_console_log() -> io::Result<()> { // open file for appending let mut file = fs::OpenOptions::new() .append(true) - .open(Path::new(OUTPUT_DIR).join("celercwasm.js"))?; + .open(Path::new("..").join(OUTPUT_DIR).join("celercwasm.js"))?; // write to file writeln!(