Skip to content

Commit 8ffd6cf

Browse files
Merge pull request #86 from martijnbastiaan/fix85
Account for `default-language` sections in Cabal files
2 parents 3ecb087 + cf722fe commit 8ffd6cf

File tree

11 files changed

+110
-7
lines changed

11 files changed

+110
-7
lines changed

.github/workflows/ci.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ jobs:
6262
strategy:
6363
matrix:
6464
os: ["macOS-latest", "windows-latest", "ubuntu-22.04"]
65-
ghc: ["9.8.1", "9.6.3", "9.4.7", "9.2.8", "9.0.2", "8.10.7", "8.8.4", "8.6.5", "8.4.4"]
65+
ghc: ["9.10.1", "9.8.1", "9.6.3", "9.4.7", "9.2.8", "9.0.2", "8.10.7", "8.8.4", "8.6.5", "8.4.4"]
6666
exclude:
6767
# Windows gets stuck while running the testsuite, but this is not a
6868
# doctest-parallel failure
@@ -85,9 +85,9 @@ jobs:
8585

8686
# Uncomment if testing with an unreleased GHC. Make sure to edit the
8787
# "Setup Haskell (head)" step too.
88-
include:
89-
- os: ubuntu-22.04
90-
ghc: head
88+
# include:
89+
# - os: ubuntu-22.04
90+
# ghc: head
9191
fail-fast: false
9292
steps:
9393
- name: Checkout

CHANGES.markdown

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
# 0.4
2+
* Account for `default-language` sections in Cabal files ([#85](https://github.com/martijnbastiaan/doctest-parallel/issues/85))
3+
14
# 0.3.1.1
25
* Add support for GHC 9.10
36

cabal.project

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,6 @@ source-repository-package
1212

1313
allow-newer:
1414
unordered-containers:template-haskell
15+
16+
package doctest-parallel
17+
ghc-options: +RTS -qn4 -A128M -RTS -j4

doctest-parallel.cabal

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@ test-suite spectests
186186
MainSpec
187187
OptionsSpec
188188
ParseSpec
189+
ProjectsSpec
189190
PropertySpec
190191
Runner.ExampleSpec
191192
RunnerSpec

src/Test/DocTest/Helpers.hs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ module Test.DocTest.Helpers where
99

1010
import GHC.Stack (HasCallStack)
1111

12+
import Data.Maybe (maybeToList)
1213
import System.Directory
1314
( canonicalizePath, doesFileExist )
1415
import System.FilePath ((</>), isDrive, takeDirectory)
@@ -24,12 +25,13 @@ import qualified Data.Set as Set
2425
-- Cabal
2526
import Distribution.ModuleName (ModuleName)
2627
import Distribution.Simple
27-
( Extension (DisableExtension, EnableExtension, UnknownExtension) )
28+
( Extension (DisableExtension, EnableExtension, UnknownExtension), Language (..) )
2829
import Distribution.Types.UnqualComponentName ( unUnqualComponentName )
2930
import Distribution.PackageDescription
3031
( GenericPackageDescription (condLibrary)
3132
, exposedModules, libBuildInfo, hsSourceDirs, defaultExtensions, package
32-
, packageDescription, condSubLibraries, includeDirs, autogenModules, ConfVar(..) )
33+
, packageDescription, condSubLibraries, includeDirs, autogenModules, ConfVar(..)
34+
, defaultLanguage )
3335

3436
import Distribution.Compiler (CompilerFlavor(GHC))
3537
import Distribution.Pretty (prettyShow)
@@ -69,26 +71,35 @@ data Library = Library
6971
-- ^ Exposed modules
7072
, libDefaultExtensions :: [Extension]
7173
-- ^ Extensions enabled by default
74+
, libDefaultLanguages :: [Language]
75+
-- ^ Language version(s) to enable
7276
}
7377
deriving (Show)
7478

7579
-- | Merge multiple libraries into one, by concatenating all their fields.
7680
mergeLibraries :: [Library] -> Library
7781
mergeLibraries libs = Library
82+
-- XXX: Why do we merge libraries? Shouldn't we always aim to parse ONE library?
7883
{ libSourceDirectories = concatMap libSourceDirectories libs
7984
, libCSourceDirectories = concatMap libCSourceDirectories libs
8085
, libModules = concatMap libModules libs
8186
, libDefaultExtensions = concatMap libDefaultExtensions libs
87+
, libDefaultLanguages = concatMap libDefaultLanguages libs
8288
}
8389

8490
-- | Convert a "Library" to arguments suitable to be passed to GHCi.
8591
libraryToGhciArgs :: Library -> ([String], [String], [String])
86-
libraryToGhciArgs Library{..} = (hsSrcArgs <> cSrcArgs, modArgs, extArgs)
92+
libraryToGhciArgs Library{..} = (hsSrcArgs <> cSrcArgs, modArgs, extArgs <> langArgs)
8793
where
8894
hsSrcArgs = map ("-i" <>) libSourceDirectories
8995
cSrcArgs = map ("-I" <>) libCSourceDirectories
9096
modArgs = map prettyShow libModules
9197
extArgs = map showExt libDefaultExtensions
98+
langArgs = map showLanguage libDefaultLanguages
99+
100+
showLanguage = \case
101+
UnknownLanguage ul -> "-X" <> ul
102+
l -> "-X" <> show l
92103

93104
showExt = \case
94105
EnableExtension ext -> "-X" <> show ext
@@ -230,6 +241,7 @@ extractSpecificCabalLibrary maybeLibName pkgPath = do
230241
, libCSourceDirectories = map (root </>) cSourceDirs
231242
, libModules = exposedModules lib `rmList` autogenModules buildInfo
232243
, libDefaultExtensions = defaultExtensions buildInfo
244+
, libDefaultLanguages = maybeToList (defaultLanguage buildInfo)
233245
}
234246
where
235247
buildInfo = libBuildInfo lib

test/ProjectsSpec.hs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
{-# LANGUAGE MultiWayIf #-}
2+
3+
module ProjectsSpec (main, spec) where
4+
5+
import Test.Hspec
6+
import System.Environment (getEnvironment)
7+
import System.Process (readCreateProcess, proc)
8+
9+
import qualified Data.Map as Map
10+
11+
main :: IO ()
12+
main = hspec spec
13+
14+
spec :: Spec
15+
spec = do
16+
env <- Map.fromList <$> runIO getEnvironment
17+
18+
let
19+
-- Only test with cabal
20+
cDescribe =
21+
if
22+
| "STACK_EXE" `Map.member` env -> xdescribe
23+
| "NIX_BUILD_TOP" `Map.member` env -> xdescribe
24+
| otherwise -> describe
25+
26+
cDescribe "T85-default-language" $ do
27+
it "cabal run doctests" $ do
28+
_ <- readCreateProcess (proc "cabal" ["run", "-v0", "--", "doctests", "--quiet"]) ""
29+
pure ()

test/Spec.hs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import qualified LocationSpec
99
import qualified MainSpec
1010
import qualified OptionsSpec
1111
import qualified ParseSpec
12+
import qualified ProjectsSpec
1213
import qualified PropertySpec
1314
import qualified RunnerSpec
1415
import qualified RunSpec
@@ -26,6 +27,7 @@ spec = do
2627
describe "MainSpec" MainSpec.spec
2728
describe "OptionsSpec" OptionsSpec.spec
2829
describe "ParseSpec" ParseSpec.spec
30+
describe "ProjectsSpec" ProjectsSpec.spec
2931
describe "PropertySpec" PropertySpec.spec
3032
describe "RunnerSpec" RunnerSpec.spec
3133
describe "RunSpec" RunSpec.spec
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
cabal-version: 3.0
2+
name: T85-default-language
3+
version: 0.1.0.0
4+
license: BSD-3-Clause
5+
author: Martijn Bastiaan
6+
maintainer: martijn@hmbastiaan.nl
7+
build-type: Simple
8+
extra-doc-files: CHANGELOG.md
9+
10+
common warnings
11+
ghc-options: -Wall
12+
13+
library
14+
import: warnings
15+
exposed-modules: MyLib
16+
build-depends: base ^>=4.17.2.1
17+
hs-source-dirs: src
18+
default-language: Haskell2010
19+
20+
test-suite doctests
21+
type: exitcode-stdio-1.0
22+
hs-source-dirs: test
23+
main-is: doctests.hs
24+
ghc-options: -threaded
25+
build-depends: base, T85-default-language, doctest-parallel >= 0.1
26+
default-language: Haskell2010
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
write-ghc-environment-files: always
2+
3+
packages:
4+
.
5+
../../..
6+
7+
tests: true
8+
9+
package doctest-parallel
10+
ghc-options: +RTS -qn4 -A128M -RTS -j4
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
module MyLib (someFunc) where
2+
3+
data (Show a) => ShowProxy a = Prox a
4+
deriving (Show)
5+
6+
showViaProxy :: (Show a) => a -> IO ()
7+
showViaProxy a = putStrLn $ show $ Prox a
8+
9+
someFunc :: IO ()
10+
someFunc = showViaProxy "hello world!"

0 commit comments

Comments
 (0)