diff options
| author | Roman Smrž <roman.smrz@seznam.cz> | 2026-09-05 09:57:31 +0200 |
|---|---|---|
| committer | Roman Smrž <roman.smrz@seznam.cz> | 2026-09-06 20:23:58 +0200 |
| commit | 9f66b6432fd8025f115289e6b2a9db1579385634 (patch) | |
| tree | 6b1006f063887faf391283d0dc620110076f9fe3 /src/Parser/Shell.hs | |
| parent | a8f93733a9d2df0859d585a11bdd39762f3c37a8 (diff) | |
Fix parsing of shell argument starting with variable expansion
Diffstat (limited to 'src/Parser/Shell.hs')
| -rw-r--r-- | src/Parser/Shell.hs | 16 |
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 |