From 612e329ff8fab4b50fbe6d21f39842ced351eb57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Thu, 2 Oct 2025 20:52:34 +0200 Subject: Shell: custom data type for command arguments --- src/Parser/Shell.hs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'src/Parser') 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 -- cgit v1.2.3