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/Expr.hs | |
| parent | a8f93733a9d2df0859d585a11bdd39762f3c37a8 (diff) | |
Fix parsing of shell argument starting with variable expansion
Diffstat (limited to 'src/Parser/Expr.hs')
| -rw-r--r-- | src/Parser/Expr.hs | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/Parser/Expr.hs b/src/Parser/Expr.hs index 2d0b770..b2c6b84 100644 --- a/src/Parser/Expr.hs +++ b/src/Parser/Expr.hs @@ -14,6 +14,7 @@ module Parser.Expr ( variable, constructor, + someExpansion, expansionTypeCheck, expressionExpansion, stringExpansion, @@ -110,10 +111,8 @@ someExpansion = do , between (char '{') (char '}') (someExpr FunctionTerm) ] -expressionExpansion :: forall a. ExprType a => Text -> TestParser (Expr a) -expressionExpansion tname = do - off <- stateOffset <$> getParserState - SomeExpr e <- someExpansion +expansionTypeCheck :: forall a. ExprType a => Int -> Text -> SomeExpr -> TestParser (Expr a) +expansionTypeCheck off tname (SomeExpr e) = do let err = do registerParseError $ FancyError off $ S.singleton $ ErrorFail $ T.unpack $ T.concat [ tname, T.pack " expansion not defined for '", textExprType e, T.pack "'" ] @@ -121,6 +120,11 @@ expressionExpansion tname = do maybe err (return . (<$> e)) $ listToMaybe $ catMaybes [ cast (id :: a -> a), exprExpansionConvTo, exprExpansionConvFrom ] +expressionExpansion :: forall a. ExprType a => Text -> TestParser (Expr a) +expressionExpansion tname = do + off <- stateOffset <$> getParserState + expansionTypeCheck off tname =<< someExpansion + stringExpansion :: TestParser (Expr Text) stringExpansion = expressionExpansion "string" |