From 9f66b6432fd8025f115289e6b2a9db1579385634 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Sat, 5 Sep 2026 09:57:31 +0200 Subject: Fix parsing of shell argument starting with variable expansion --- src/Parser/Expr.hs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'src/Parser/Expr.hs') 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" -- cgit v1.2.3