From 54073b02290369f71640cd714e83b8ba6557663c Mon Sep 17 00:00:00 2001
From: David Binder <david.binder@uni-tuebingen.de>
Date: Sun, 19 May 2024 02:30:59 +0200
Subject: [PATCH] haddock: Fix parser of @since pragma

The testsuite contained tests for annotations of
the form `@since foo-bar-0.5.0`, but the parser was
written incorrectly.
---
 .../haddock-library/src/Documentation/Haddock/Parser.hs    | 7 ++++---
 .../test/Documentation/Haddock/ParserSpec.hs               | 2 +-
 2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/utils/haddock/haddock-library/src/Documentation/Haddock/Parser.hs b/utils/haddock/haddock-library/src/Documentation/Haddock/Parser.hs
index 0463e26ef0a..cff6bcc99dd 100644
--- a/utils/haddock/haddock-library/src/Documentation/Haddock/Parser.hs
+++ b/utils/haddock/haddock-library/src/Documentation/Haddock/Parser.hs
@@ -28,7 +28,7 @@ import Control.Applicative
 import Control.Arrow (first)
 import Control.Monad
 import Data.Char (chr, isAlpha, isSpace, isUpper)
-import Data.List (elemIndex, intercalate, unfoldr)
+import Data.List (elemIndex, intercalate, unfoldr, intersperse)
 import Data.Maybe (fromMaybe, mapMaybe)
 import Data.Monoid
 import qualified Data.Set as Set
@@ -576,11 +576,12 @@ since = do
   return DocEmpty
   where
     version = do
-      pkg <- Parsec.optionMaybe $ Parsec.try $ package <* Parsec.char '-'
+      pkg <- Parsec.optionMaybe $ Parsec.try $ package
       ver <- decimal `Parsec.sepBy1` "."
       return (MetaSince pkg ver)
 
-    package = Parsec.many1 $ Parsec.alphaNum <|> Parsec.oneOf "_-"
+    package = combine <$> (Parsec.many1 (Parsec.letter <|> Parsec.char '_')) `Parsec.endBy1` (Parsec.char '-')
+    combine = concat . intersperse "-"
 
 -- | Headers inside the comment denoted with @=@ signs, up to 6 levels
 -- deep.
diff --git a/utils/haddock/haddock-library/test/Documentation/Haddock/ParserSpec.hs b/utils/haddock/haddock-library/test/Documentation/Haddock/ParserSpec.hs
index 47ed58802c1..40806b47e9e 100644
--- a/utils/haddock/haddock-library/test/Documentation/Haddock/ParserSpec.hs
+++ b/utils/haddock/haddock-library/test/Documentation/Haddock/ParserSpec.hs
@@ -567,7 +567,7 @@ spec = do
                           , sinceVersion = [0, 5, 0]
                           }
                   }
-            , _doc = DocParagraph "@since foo-bar-0.5.0"
+            , _doc = DocEmpty
             }
 
       context "when given multiple times" $ do
-- 
GitLab