summaryrefslogtreecommitdiff
path: root/src/Parser/Shell.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Parser/Shell.hs')
-rw-r--r--src/Parser/Shell.hs8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/Parser/Shell.hs b/src/Parser/Shell.hs
index 0f34fee..89595e8 100644
--- a/src/Parser/Shell.hs
+++ b/src/Parser/Shell.hs
@@ -3,6 +3,7 @@ module Parser.Shell (
shellScript,
) where
+import Control.Applicative (liftA2)
import Control.Monad
import Data.Char
@@ -22,6 +23,7 @@ import Script.Shell
parseArgument :: TestParser (Expr Text)
parseArgument = lexeme $ fmap (App AnnNone (Pure T.concat) <$> foldr (liftA2 (:)) (Pure [])) $ some $ choice
[ doubleQuotedString
+ , singleQuotedString
, escapedChar
, stringExpansion
, unquotedString
@@ -44,6 +46,10 @@ parseArgument = lexeme $ fmap (App AnnNone (Pure T.concat) <$> foldr (liftA2 (:)
]
App AnnNone (Pure T.concat) . foldr (liftA2 (:)) (Pure []) <$> inner
+ singleQuotedString :: TestParser (Expr Text)
+ singleQuotedString = do
+ Pure . TL.toStrict <$> (char '\'' *> takeWhileP Nothing (/= '\'') <* char '\'')
+
escapedChar :: TestParser (Expr Text)
escapedChar = do
void $ char '\\'
@@ -61,11 +67,13 @@ parseArguments = foldr (liftA2 (:)) (Pure []) <$> many parseArgument
shellStatement :: TestParser (Expr [ ShellStatement ])
shellStatement = label "shell statement" $ do
+ line <- getSourceLine
command <- parseArgument
args <- parseArguments
return $ fmap (: []) $ ShellStatement
<$> command
<*> args
+ <*> pure line
shellScript :: TestParser (Expr ShellScript)
shellScript = do