ghc-lib-parser-ex 8.8.4.0 → 8.8.5.0
raw patch · 4 files changed
+122/−16 lines, 4 filesdep +ghc-bootPVP ok
version bump matches the API change (PVP)
Dependencies added: ghc-boot
API changes (from Hackage documentation)
+ Language.Haskell.GhclibParserEx.DynFlags: impliedGFlags :: [(GeneralFlag, TurnOnFlag, GeneralFlag)]
+ Language.Haskell.GhclibParserEx.DynFlags: impliedOffGFlags :: [(GeneralFlag, TurnOnFlag, GeneralFlag)]
+ Language.Haskell.GhclibParserEx.DynFlags: impliedXFlags :: [(Extension, TurnOnFlag, Extension)]
+ Language.Haskell.GhclibParserEx.DynFlags: turnOff :: TurnOnFlag
+ Language.Haskell.GhclibParserEx.DynFlags: turnOn :: TurnOnFlag
+ Language.Haskell.GhclibParserEx.DynFlags: type TurnOnFlag = Bool
Files
- ChangeLog.md +3/−0
- ghc-lib-parser-ex.cabal +3/−2
- src/Language/Haskell/GhclibParserEx/Dump.hs +17/−13
- src/Language/Haskell/GhclibParserEx/DynFlags.hs +99/−1
ChangeLog.md view
@@ -2,6 +2,9 @@ ## Unreleased changes +## 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).+ ## 8.8.4.0 released 2020-02-01 - New modules: - `Language.Haskell.GhclibparserEx.GHC.Hs.Expr`
ghc-lib-parser-ex.cabal view
@@ -1,6 +1,6 @@ cabal-version: >= 1.18 name: ghc-lib-parser-ex-version: 8.8.4.0+version: 8.8.5.0 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@@ -48,7 +48,8 @@ if !flag(ghc-lib) && impl(ghc >= 8.8.0) && impl(ghc < 8.9.0) build-depends: ghc == 8.8.*,- ghc-boot-th+ ghc-boot-th,+ ghc-boot else build-depends: ghc-lib-parser
src/Language/Haskell/GhclibParserEx/Dump.hs view
@@ -1,19 +1,6 @@ -- Copyright (c) 2020, Shayne Fletcher. All rights reserved. -- SPDX-License-Identifier: BSD-3-Clause. {--Currently 'showAstData' is only available in ghc-lib. I intend to-move it to ghc-lib-parser. Then, we'll be able to get at it with-something like,-- #if defined (GHCLIB_API_811) || defined (GHCLIB_API_810)- import GHC.Hs.Dump- #else- import HsDumpAst- #endif--The implementation is reproduced here until that time.--}-{- (c) The University of Glasgow 2006 (c) The GRASP/AQUA Project, Glasgow University, 1992-1998 -}@@ -28,6 +15,21 @@ , BlankSrcSpan(..), ) where +#if !defined(MIN_VERSION_ghc_lib_parser)+-- Using native ghc.+# if defined (GHCLIB_API_811) || defined (GHCLIB_API_810)+import GHC.Hs.Dump+# else+import HsDumpAst+# endif+#else+-- Using ghc-lib-parser. Recent versions will include+-- GHC.Hs.Dump (it got moved in from ghc-lib on 2020-02-05).+# if defined (GHCLIB_API_811) || defined (GHCLIB_API_810)+import GHC.Hs.Dump+# else+-- For simplicity, just assume it's missing from 8.8 ghc-lib-parser+-- builds and reproduce the implementation. import Prelude as X hiding ((<>)) import Data.Data hiding (Fixity)@@ -233,3 +235,5 @@ -> (forall d1 d2. (Data d1, Data d2) => c (t d1 d2)) -> c a ext2 def ext = maybe def id (dataCast2 ext)+# endif+#endif
src/Language/Haskell/GhclibParserEx/DynFlags.hs view
@@ -1,17 +1,115 @@ -- Copyright (c) 2020, Shayne Fletcher. All rights reserved. -- SPDX-License-Identifier: BSD-3-Clause. +{-# LANGUAGE CPP #-}+#include "ghclib_api.h"+ module Language.Haskell.GhclibParserEx.DynFlags(- parsePragmasIntoDynFlags+ -- Copied from DynFlags (see+ -- https://gitlab.haskell.org/ghc/ghc/merge_requests/2654).+ TurnOnFlag, turnOn, turnOff, impliedGFlags, impliedOffGFlags, impliedXFlags+ --+ , parsePragmasIntoDynFlags ) where import DynFlags+import qualified GHC.LanguageExtensions as LangExt import Panic import HeaderInfo import StringBuffer import HscTypes import GHC.LanguageExtensions.Type import Data.List++-- Copied from 'ghc/compiler/main/DynFlags.hs'.++type TurnOnFlag = Bool -- True <=> we are turning the flag on+ -- False <=> we are turning the flag off+turnOn :: TurnOnFlag; turnOn = True+turnOff :: TurnOnFlag; turnOff = False++-- General flags that are switched on/off when other general flags are switched+-- on+impliedGFlags :: [(GeneralFlag, TurnOnFlag, GeneralFlag)]+impliedGFlags = [(Opt_DeferTypeErrors, turnOn, Opt_DeferTypedHoles)+ ,(Opt_DeferTypeErrors, turnOn, Opt_DeferOutOfScopeVariables)+ ,(Opt_Strictness, turnOn, Opt_WorkerWrapper)+ ,(Opt_UnclutterValidHoleFits, turnOff, Opt_ShowTypeAppOfHoleFits)+ ,(Opt_UnclutterValidHoleFits, turnOff, Opt_ShowTypeAppVarsOfHoleFits)+ ,(Opt_UnclutterValidHoleFits, turnOff, Opt_ShowDocsOfHoleFits)+ ,(Opt_ShowTypeAppVarsOfHoleFits, turnOff, Opt_ShowTypeAppOfHoleFits)+ ,(Opt_UnclutterValidHoleFits, turnOff, Opt_ShowProvOfHoleFits)]++-- General flags that are switched on/off when other general flags are switched+-- off+impliedOffGFlags :: [(GeneralFlag, TurnOnFlag, GeneralFlag)]+impliedOffGFlags = [(Opt_Strictness, turnOff, Opt_WorkerWrapper)]++impliedXFlags :: [(LangExt.Extension, TurnOnFlag, LangExt.Extension)]+impliedXFlags+-- See Note [Updating flag description in the User's Guide]+ = [ (LangExt.RankNTypes, turnOn, LangExt.ExplicitForAll)+ , (LangExt.QuantifiedConstraints, turnOn, LangExt.ExplicitForAll)+ , (LangExt.ScopedTypeVariables, turnOn, LangExt.ExplicitForAll)+ , (LangExt.LiberalTypeSynonyms, turnOn, LangExt.ExplicitForAll)+ , (LangExt.ExistentialQuantification, turnOn, LangExt.ExplicitForAll)+ , (LangExt.FlexibleInstances, turnOn, LangExt.TypeSynonymInstances)+ , (LangExt.FunctionalDependencies, turnOn, LangExt.MultiParamTypeClasses)+ , (LangExt.MultiParamTypeClasses, turnOn, LangExt.ConstrainedClassMethods) -- c.f. #7854+ , (LangExt.TypeFamilyDependencies, turnOn, LangExt.TypeFamilies)++ , (LangExt.RebindableSyntax, turnOff, LangExt.ImplicitPrelude) -- NB: turn off!++ , (LangExt.DerivingVia, turnOn, LangExt.DerivingStrategies)++ , (LangExt.GADTs, turnOn, LangExt.GADTSyntax)+ , (LangExt.GADTs, turnOn, LangExt.MonoLocalBinds)+ , (LangExt.TypeFamilies, turnOn, LangExt.MonoLocalBinds)++ , (LangExt.TypeFamilies, turnOn, LangExt.KindSignatures) -- Type families use kind signatures+ , (LangExt.PolyKinds, turnOn, LangExt.KindSignatures) -- Ditto polymorphic kinds++ -- TypeInType is now just a synonym for a couple of other extensions.+ , (LangExt.TypeInType, turnOn, LangExt.DataKinds)+ , (LangExt.TypeInType, turnOn, LangExt.PolyKinds)+ , (LangExt.TypeInType, turnOn, LangExt.KindSignatures)++#if defined(GHCLIB_API_811) || defined(GHCLIB_API_810)+ -- Standalone kind signatures are a replacement for CUSKs.+ , (LangExt.StandaloneKindSignatures, turnOff, LangExt.CUSKs)+#endif++ -- AutoDeriveTypeable is not very useful without DeriveDataTypeable+ , (LangExt.AutoDeriveTypeable, turnOn, LangExt.DeriveDataTypeable)++ -- We turn this on so that we can export associated type+ -- type synonyms in subordinates (e.g. MyClass(type AssocType))+ , (LangExt.TypeFamilies, turnOn, LangExt.ExplicitNamespaces)+ , (LangExt.TypeOperators, turnOn, LangExt.ExplicitNamespaces)++ , (LangExt.ImpredicativeTypes, turnOn, LangExt.RankNTypes)++ -- Record wild-cards implies field disambiguation+ -- Otherwise if you write (C {..}) you may well get+ -- stuff like " 'a' not in scope ", which is a bit silly+ -- if the compiler has just filled in field 'a' of constructor 'C'+ , (LangExt.RecordWildCards, turnOn, LangExt.DisambiguateRecordFields)++ , (LangExt.ParallelArrays, turnOn, LangExt.ParallelListComp)++ , (LangExt.JavaScriptFFI, turnOn, LangExt.InterruptibleFFI)++ , (LangExt.DeriveTraversable, turnOn, LangExt.DeriveFunctor)+ , (LangExt.DeriveTraversable, turnOn, LangExt.DeriveFoldable)++ -- Duplicate record fields require field disambiguation+ , (LangExt.DuplicateRecordFields, turnOn, LangExt.DisambiguateRecordFields)++ , (LangExt.TemplateHaskell, turnOn, LangExt.TemplateHaskellQuotes)+ , (LangExt.Strict, turnOn, LangExt.StrictData)+ ]++-- parsePragmasIntoDynFlags :: DynFlags -> ([Extension], [Extension])