From a85d0d6fcedb703c65f2dd2f86cfe5695b2395ce Mon Sep 17 00:00:00 2001 From: Roland Kovacs <zen3ger@gmail.com> Date: Sun, 13 Jan 2019 15:43:57 +0100 Subject: [PATCH] Remove comma from method syntax --- src/lib/parser/shell_expand/mod.rs | 2 +- src/lib/parser/shell_expand/words/mod.rs | 14 ++++++++++++-- src/lib/parser/shell_expand/words/tests.rs | 2 +- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/lib/parser/shell_expand/mod.rs b/src/lib/parser/shell_expand/mod.rs index 2104d20d..71bdab10 100644 --- a/src/lib/parser/shell_expand/mod.rs +++ b/src/lib/parser/shell_expand/mod.rs @@ -904,7 +904,7 @@ mod test { fn inline_expression() { let cases = vec![ (array!["5"], "$len([0 1 2 3 4])"), - (array!["FxOxO"], "$join(@chars(FOO), 'x')"), + (array!["FxOxO"], "$join(@chars('FOO') 'x')"), ]; for (expected, input) in cases { assert_eq!(expected, expand_string(input, &VariableExpander, false)); diff --git a/src/lib/parser/shell_expand/words/mod.rs b/src/lib/parser/shell_expand/words/mod.rs index 79d6cfc8..88f974cf 100644 --- a/src/lib/parser/shell_expand/words/mod.rs +++ b/src/lib/parser/shell_expand/words/mod.rs @@ -359,7 +359,12 @@ impl<'a, E: Expander + 'a> WordIterator<'a, E> { let mut depth = 0; while let Some(character) = iterator.next() { match character { - b',' if depth == 0 => { + b'\'' => self.flags ^= Flags::SQUOTE, + b'"' => self.flags ^= Flags::DQUOTE, + b'[' if !self.flags.intersects(Flags::SQUOTE | Flags::DQUOTE) => depth += 1, + b']' if !self.flags.intersects(Flags::SQUOTE | Flags::DQUOTE) => depth -= 1, + b' ' if depth == 0 + && !self.flags.intersects(Flags::SQUOTE | Flags::DQUOTE) => { let variable = &self.data[start..self.read]; self.read += 1; start = self.read; @@ -486,7 +491,12 @@ impl<'a, E: Expander + 'a> WordIterator<'a, E> { let mut depth = 0; while let Some(character) = iterator.next() { match character { - b',' if depth == 0 => { + b'\'' => self.flags ^= Flags::SQUOTE, + b'"' => self.flags ^= Flags::DQUOTE, + b'[' if !self.flags.intersects(Flags::SQUOTE | Flags::DQUOTE) => depth += 1, + b']' if !self.flags.intersects(Flags::SQUOTE | Flags::DQUOTE) => depth -= 1, + b' ' if depth == 0 + && !self.flags.intersects(Flags::SQUOTE | Flags::DQUOTE) => { let variable = &self.data[start..self.read]; self.read += 1; start = self.read; diff --git a/src/lib/parser/shell_expand/words/tests.rs b/src/lib/parser/shell_expand/words/tests.rs index 1c74638c..723958e3 100644 --- a/src/lib/parser/shell_expand/words/tests.rs +++ b/src/lib/parser/shell_expand/words/tests.rs @@ -17,7 +17,7 @@ fn compare(input: &str, expected: Vec<WordToken>) { #[test] fn string_method() { - let input = "$join(array, 'pattern') $join(array, 'pattern')"; + let input = "$join(array 'pattern') $join(array 'pattern')"; let expected = vec![ WordToken::StringMethod(StringMethod { method: "join", -- GitLab