From a8f93733a9d2df0859d585a11bdd39762f3c37a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Sat, 5 Sep 2026 08:47:43 +0200 Subject: Expression expansion for shell command --- src/Parser/Shell.hs | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) (limited to 'src/Parser') diff --git a/src/Parser/Shell.hs b/src/Parser/Shell.hs index a09eb43..8c8ef46 100644 --- a/src/Parser/Shell.hs +++ b/src/Parser/Shell.hs @@ -107,12 +107,25 @@ parseArguments = do parseCommand :: TestParser (Expr ShellCommand) parseCommand = label "shell statement" $ do line <- getSourceLine - command <- parseTextArgument - args <- parseArguments - return $ ShellCommand - <$> command - <*> args - <*> pure line + choice + [ do + args <- expressionExpansion "shell command" <* sc + args' <- parseArguments + return $ commandFromArgLists line <$> args <*> args' + , do + command <- parseTextArgument + args <- parseArguments + return $ ShellCommand + <$> command + <*> args + <*> pure line + ] + + where + commandFromArgLists line (ShellArguments (ShellArgument cmd : args)) (ShellArguments args') = + ShellCommand cmd (ShellArguments (args ++ args')) line + commandFromArgLists line (ShellArguments args) (ShellArguments args') = + ShellCommand "" (ShellArguments (args ++ args')) line parsePipeline :: Maybe (Expr ShellPipeline) -> TestParser (Expr ShellPipeline) parsePipeline mbupper = do -- cgit v1.2.3