ghc-lib-parser-ex 8.8.5.1 → 8.8.5.2
raw patch · 4 files changed
+38/−3 lines, 4 filesdep +containersPVP: minor bump suggested
API additions: PVP suggests at least a minor version bump
Dependencies added: containers
API changes (from Hackage documentation)
+ Language.Haskell.GhclibParserEx.DynFlags: extensionImplications :: [(Extension, ([Extension], [Extension]))]
+ Language.Haskell.GhclibParserEx.DynFlags: readExtension :: String -> Maybe Extension
Files
- ChangeLog.md +6/−0
- ghc-lib-parser-ex.cabal +3/−2
- src/Language/Haskell/GhclibParserEx/DynFlags.hs +20/−1
- test/Test.hs +9/−0
ChangeLog.md view
@@ -2,6 +2,12 @@ ## Unreleased changes +## 8.8.5.2 released 2020-02-16+- New `DynFlags` functions `readExtension, `extensionImplications`.++## 8.8.5.1 released 2020-02-09+- Expression predicate tests.+ ## 8.8.5.0 released 2020-02-07 - Expose `impliedGFlags` and friends from `DynFlags` (https://github.com/shayne-fletcher/ghc-lib-parser-ex/issues/19).
ghc-lib-parser-ex.cabal view
@@ -1,6 +1,6 @@ cabal-version: >= 1.18 name: ghc-lib-parser-ex-version: 8.8.5.1+version: 8.8.5.2 description: Please see the README on GitHub at <https://github.com/shayne-fletcher/ghc-lib-parser-ex#readme> homepage: https://github.com/shayne-fletcher/ghc-lib-parser-ex#readme bug-reports: https://github.com/shayne-fletcher/ghc-lib-parser-ex/issues@@ -44,7 +44,8 @@ build-depends: base >=4.7 && <5, uniplate >= 1.5,- bytestring >= 0.10.8.2+ bytestring >= 0.10.8.2,+ containers >= 0.6.0.1 if !flag(ghc-lib) && impl(ghc >= 8.8.0) && impl(ghc < 8.9.0) build-depends: ghc == 8.8.*,
src/Language/Haskell/GhclibParserEx/DynFlags.hs view
@@ -5,9 +5,11 @@ #include "ghclib_api.h" module Language.Haskell.GhclibParserEx.DynFlags(+ readExtension+ , extensionImplications -- Copied from DynFlags (see -- https://gitlab.haskell.org/ghc/ghc/merge_requests/2654).- TurnOnFlag, turnOn, turnOff, impliedGFlags, impliedOffGFlags, impliedXFlags+ , TurnOnFlag, turnOn, turnOff, impliedGFlags, impliedOffGFlags, impliedXFlags -- , parsePragmasIntoDynFlags ) where@@ -20,6 +22,23 @@ import HscTypes import GHC.LanguageExtensions.Type import Data.List+import Data.Maybe+import qualified Data.Map as Map++-- | Parse a GHC extension.+readExtension :: String -> Maybe Extension+readExtension = (`Map.lookup` exts)+ where exts = Map.fromList [(show x, x) | x <- [minBound .. maxBound]]++-- | Implicitly enabled/disabled extensions.+extensionImplications :: [(Extension, ([Extension], [Extension]))]+extensionImplications = map f $ Map.toList implicationsMap+ where+ f (e, ps) = (fromJust (readExtension e), ps)+ implicationsMap :: Map.Map String ([Extension], [Extension])+ implicationsMap = Map.fromListWith (<>)+ [(show a, ([c | b], [c | not b]))+ | (a, flag, c) <- impliedXFlags, let b = flag == turnOn] -- Copied from 'ghc/compiler/main/DynFlags.hs'.
test/Test.hs view
@@ -50,6 +50,7 @@ , fixityTests , extendInstancesTests , expressionPredicateTests+ , dynFlagsTests ] makeFile :: FilePath -> String -> IO FilePath@@ -253,3 +254,11 @@ test s = exprTest s flags flags = foldl' xopt_set (defaultDynFlags fakeSettings fakeLlvmConfig) [ TemplateHaskell, QuasiQuotes, TypeApplications, LambdaCase ]++dynFlagsTests :: TestTree+dynFlagsTests = testGroup "DynFlags tests"+ [ testCase "extensionImplications" $ do+ Just (_, (es, ds)) <- return $ find (\(e, _) -> e == DeriveTraversable) extensionImplications+ assertBool "no extensions disabled" (null ds)+ assertBool "two extensions enabled" $ DeriveFunctor `elem` es && DeriveFoldable `elem` es+ ]