From cd2e1323ef62574f0879e789457248c68ee46326 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Sat, 11 Apr 2026 17:52:30 +0200 Subject: Parse tags in test preamble --- src/Parser.hs | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'src/Parser.hs') diff --git a/src/Parser.hs b/src/Parser.hs index d3b8f73..bb8288e 100644 --- a/src/Parser.hs +++ b/src/Parser.hs @@ -43,12 +43,34 @@ parseTestDefinition = label "test definition" $ toplevel ToplevelTest $ do modify $ \s -> s { testContext = SomeExpr $ varExpr SourceLineBuiltin rootNetworkVar } - block (\name steps -> return $ Test name $ Scope <$> mconcat steps) header testStep + href <- L.indentLevel + testName <- header + osymbol ":" <* eol <* scn + + ref <- L.indentGuard scn GT href + testTags <- preamble ref + testSteps <- fmap Scope <$> testBlock ref + return Test {..} + where header = do wsymbol "test" lexeme $ TL.toStrict <$> takeWhileP (Just "test name") (/=':') + preamble :: Pos -> TestParser [ Expr Tag ] + preamble ref = fmap catMaybes $ many $ do + void $ L.indentGuard scn EQ ref + off <- stateOffset <$> getParserState + name <- try $ identifier <* osymbol ":" + case name of + "tag" -> do + Just <$> typedExpr <* eol <* scn + _ -> do + registerParseError $ FancyError off $ S.singleton $ ErrorFail $ + "unexpected test metadata ‘" <> T.unpack name <> "’" + takeWhileP Nothing (/= '\n') *> eol *> scn *> return Nothing + + parseDefinition :: Pos -> TestParser ( VarName, SomeExpr ) parseDefinition href = label "symbol definition" $ do def@( name, expr ) <- localState $ do -- cgit v1.2.3