summaryrefslogtreecommitdiff
path: root/src/Parser/Shell.hs
diff options
context:
space:
mode:
authorRoman Smrž <roman.smrz@seznam.cz>2026-09-05 09:57:31 +0200
committerRoman Smrž <roman.smrz@seznam.cz>2026-09-06 20:23:58 +0200
commit9f66b6432fd8025f115289e6b2a9db1579385634 (patch)
tree6b1006f063887faf391283d0dc620110076f9fe3 /src/Parser/Shell.hs
parenta8f93733a9d2df0859d585a11bdd39762f3c37a8 (diff)
Fix parsing of shell argument starting with variable expansion
Diffstat (limited to 'src/Parser/Shell.hs')
-rw-r--r--src/Parser/Shell.hs16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/Parser/Shell.hs b/src/Parser/Shell.hs
index 8c8ef46..2d6026a 100644
--- a/src/Parser/Shell.hs
+++ b/src/Parser/Shell.hs
@@ -99,10 +99,24 @@ parseArgument = choice
parseArguments :: TestParser (Expr ShellArguments)
parseArguments = do
arglists <- many $ choice
- [ expressionExpansion "shell arguments" <* sc
+ [ do
+ off <- stateOffset <$> getParserState
+ se <- someExpansion
+ choice
+ [ do
+ notFollowedBy space1
+ arg <- expansionTypeCheck off "shell argument" se
+ txt <- parseTextArgument
+ return $ joinArgument <$> arg <*> txt
+ , do
+ expansionTypeCheck off "shell arguments" se <* sc
+ ]
, fmap (ShellArguments . (: [])) <$> parseArgument
]
return $ fmap mconcat $ foldr (liftA2 (:)) (Pure []) $ arglists
+ where
+ joinArgument (ShellArgument x) y = ShellArguments [ ShellArgument (x <> y) ]
+ joinArgument ax y = ShellArguments [ ax, ShellArgument y ]
parseCommand :: TestParser (Expr ShellCommand)
parseCommand = label "shell statement" $ do