From 19cf30cae545ceed679f5f9938072f619bedc480 Mon Sep 17 00:00:00 2001 From: Jonas Maier Date: Sat, 9 May 2026 11:57:14 +0200 Subject: fix semicolon parsing --- src/parse/mod.rs | 6 ++++++ test-cases/semicolon/script.sh | 2 +- tests/common.rs | 8 +++++++- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/parse/mod.rs b/src/parse/mod.rs index dcb5790..c26e0c0 100644 --- a/src/parse/mod.rs +++ b/src/parse/mod.rs @@ -1532,6 +1532,12 @@ impl Parse for Pipes { if c == b'|' { b.adv(); cmds.push(b.parse()?); + } else if c == b';' { + while b.has() && b.peek() == b';' { + b.adv(); + b.spaces(); + } + return Ok(Pipes { cmds }); } else if space_stats.lf > 0 || is_symbol(c) { return Ok(Pipes { cmds }); } else { diff --git a/test-cases/semicolon/script.sh b/test-cases/semicolon/script.sh index 43a48af..64d83d7 100644 --- a/test-cases/semicolon/script.sh +++ b/test-cases/semicolon/script.sh @@ -1 +1 @@ -echo foo; echo bar +echo -n foo; echo bar diff --git a/tests/common.rs b/tests/common.rs index 210b92a..8541368 100644 --- a/tests/common.rs +++ b/tests/common.rs @@ -15,5 +15,11 @@ pub fn test_case(_name: &str, script: &[u8], expected_output: &[u8]) { let _res = spawned.join_timeout(1000); let mut actual_output = Vec::new(); pr.read_to_end(&mut actual_output).unwrap(); - assert_eq!(expected_output, actual_output); + assert_eq!( + expected_output, + actual_output, + "\nexpected: {}\n actual: {}", + expected_output.escape_ascii(), + actual_output.escape_ascii() + ); } -- cgit v1.2.3