Skip to content

Bug in parser for named Haddock chunks since GHC 8.0.1-rc1

Steps to reproduce:

-- Foo.hs
module Foo where

-- $bar some
-- named chunk
-- Extract.hs

module Extract where
import Prelude hiding (mod)
import Data.Generics
import DynFlags
import FastString
import GHC
import GHC.Paths

extractDocStrings :: IO [String]
extractDocStrings = do
  extract . pm_parsed_source <$> do
    runGhc (Just libdir) $ do
      _ <- getSessionDynFlags >>= setSessionDynFlags . setHaddockMode
      guessTarget "Foo.hs" Nothing >>= setTargets . return
      [mod] <- depanal [] False
      parseModule mod
  where
    setHaddockMode :: DynFlags -> DynFlags
    setHaddockMode dynflags = (gopt_set dynflags Opt_Haddock)

    extract :: ParsedSource -> [String]
    extract m = [unpackFS s | HsDocString s <- everything (++) ([] `mkQ` return) m]

Expected result: extractDocStrings returns " some\n named chunk"

Actual result: it returns " some" instead

Edited by Ben Gamari
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information