summaryrefslogtreecommitdiff
path: root/src/Parser/Shell.hs
diff options
context:
space:
mode:
authorRoman Smrž <roman.smrz@seznam.cz>2026-09-04 19:25:09 +0200
committerRoman Smrž <roman.smrz@seznam.cz>2026-09-05 21:41:39 +0200
commita9439b66ad8f7a8f4ba079a47ecfe1e76c2abc4b (patch)
tree7ef225d63462349b8f5708cdceecc9010734e60a /src/Parser/Shell.hs
parentc2c89cf5308ea5c490a4fe150cffc72ed09c4c1c (diff)
Expression expansion for shell arguments
Changelog: Lists can now be dollar-expanded in the shell interpreter to provide list of shell command arguments.
Diffstat (limited to 'src/Parser/Shell.hs')
-rw-r--r--src/Parser/Shell.hs8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/Parser/Shell.hs b/src/Parser/Shell.hs
index 45f00b9..a09eb43 100644
--- a/src/Parser/Shell.hs
+++ b/src/Parser/Shell.hs
@@ -92,11 +92,17 @@ parseRedirection = choice
parseArgument :: TestParser (Expr ShellArgument)
parseArgument = choice
[ parseRedirection
+ , expressionExpansion "shell argument" <* sc
, fmap ShellArgument <$> parseTextArgument
]
parseArguments :: TestParser (Expr ShellArguments)
-parseArguments = (ShellArguments <$>) . foldr (liftA2 (:)) (Pure []) <$> many parseArgument
+parseArguments = do
+ arglists <- many $ choice
+ [ expressionExpansion "shell arguments" <* sc
+ , fmap (ShellArguments . (: [])) <$> parseArgument
+ ]
+ return $ fmap mconcat $ foldr (liftA2 (:)) (Pure []) $ arglists
parseCommand :: TestParser (Expr ShellCommand)
parseCommand = label "shell statement" $ do