diff options
| author | Roman Smrž <roman.smrz@seznam.cz> | 2026-09-04 19:25:09 +0200 |
|---|---|---|
| committer | Roman Smrž <roman.smrz@seznam.cz> | 2026-09-05 21:41:39 +0200 |
| commit | a9439b66ad8f7a8f4ba079a47ecfe1e76c2abc4b (patch) | |
| tree | 7ef225d63462349b8f5708cdceecc9010734e60a /src/Parser | |
| parent | c2c89cf5308ea5c490a4fe150cffc72ed09c4c1c (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')
| -rw-r--r-- | src/Parser/Expr.hs | 1 | ||||
| -rw-r--r-- | src/Parser/Shell.hs | 8 |
2 files changed, 8 insertions, 1 deletions
diff --git a/src/Parser/Expr.hs b/src/Parser/Expr.hs index 89fa208..2d0b770 100644 --- a/src/Parser/Expr.hs +++ b/src/Parser/Expr.hs @@ -14,6 +14,7 @@ module Parser.Expr ( variable, constructor, + expressionExpansion, stringExpansion, functionArguments, 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 |