@@ -9,6 +9,7 @@ module Test.DocTest.Helpers where
99
1010import GHC.Stack (HasCallStack )
1111
12+ import Data.Maybe (maybeToList )
1213import System.Directory
1314 ( canonicalizePath , doesFileExist )
1415import System.FilePath ((</>) , isDrive , takeDirectory )
@@ -24,12 +25,13 @@ import qualified Data.Set as Set
2425-- Cabal
2526import Distribution.ModuleName (ModuleName )
2627import Distribution.Simple
27- ( Extension (DisableExtension , EnableExtension , UnknownExtension ) )
28+ ( Extension (DisableExtension , EnableExtension , UnknownExtension ), Language ( .. ) )
2829import Distribution.Types.UnqualComponentName ( unUnqualComponentName )
2930import 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
3436import Distribution.Compiler (CompilerFlavor (GHC ))
3537import 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.
7680mergeLibraries :: [Library ] -> Library
7781mergeLibraries 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.
8591libraryToGhciArgs :: 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
0 commit comments