diff options
author | Roman Smrž <roman.smrz@seznam.cz> | 2025-10-02 20:52:34 +0200 |
---|---|---|
committer | Roman Smrž <roman.smrz@seznam.cz> | 2025-10-02 21:21:14 +0200 |
commit | 612e329ff8fab4b50fbe6d21f39842ced351eb57 (patch) | |
tree | 7d2ab37d886fa0d4a242e69e9a03a3a3cc6da4b5 /src/Parser | |
parent | c993c83b90a63dd7d6e6cabccaf5ea9c19b54786 (diff) |
Shell: custom data type for command arguments
Diffstat (limited to 'src/Parser')
-rw-r--r-- | src/Parser/Shell.hs | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/Parser/Shell.hs b/src/Parser/Shell.hs index 9dbd4e8..ffc8cf1 100644 --- a/src/Parser/Shell.hs +++ b/src/Parser/Shell.hs @@ -20,8 +20,8 @@ import Parser.Expr import Script.Expr import Script.Shell -parseArgument :: TestParser (Expr Text) -parseArgument = lexeme $ fmap (App AnnNone (Pure T.concat) <$> foldr (liftA2 (:)) (Pure [])) $ some $ choice +parseTextArgument :: TestParser (Expr Text) +parseTextArgument = lexeme $ fmap (App AnnNone (Pure T.concat) <$> foldr (liftA2 (:)) (Pure [])) $ some $ choice [ doubleQuotedString , singleQuotedString , standaloneEscapedChar @@ -71,13 +71,18 @@ parseArgument = lexeme $ fmap (App AnnNone (Pure T.concat) <$> foldr (liftA2 (:) [ char ' ' >> return " " ] -parseArguments :: TestParser (Expr [ Text ]) +parseArgument :: TestParser (Expr ShellArgument) +parseArgument = choice + [ fmap ShellArgument <$> parseTextArgument + ] + +parseArguments :: TestParser (Expr [ ShellArgument ]) parseArguments = foldr (liftA2 (:)) (Pure []) <$> many parseArgument parseCommand :: TestParser (Expr ShellCommand) parseCommand = label "shell statement" $ do line <- getSourceLine - command <- parseArgument + command <- parseTextArgument args <- parseArguments return $ ShellCommand <$> command |