packages feed

ghc-exactprint 1.3.0 → 1.4.0

raw patch · 7 files changed

+86/−102 lines, 7 filesdep +data-defaultPVP ok

version bump matches the API change (PVP)

Dependencies added: data-default

API changes (from Hackage documentation)

- Language.Haskell.GHC.ExactPrint.Orphans: instance GHC.Base.Monoid GHC.Hs.AnnsModule
- Language.Haskell.GHC.ExactPrint.Orphans: instance GHC.Base.Monoid GHC.Hs.Binds.AnnSig
- Language.Haskell.GHC.ExactPrint.Orphans: instance GHC.Base.Monoid GHC.Hs.Decls.HsRuleAnn
- Language.Haskell.GHC.ExactPrint.Orphans: instance GHC.Base.Monoid GHC.Hs.Expr.AnnExplicitSum
- Language.Haskell.GHC.ExactPrint.Orphans: instance GHC.Base.Monoid GHC.Hs.Expr.AnnFieldLabel
- Language.Haskell.GHC.ExactPrint.Orphans: instance GHC.Base.Monoid GHC.Hs.Expr.AnnProjection
- Language.Haskell.GHC.ExactPrint.Orphans: instance GHC.Base.Monoid GHC.Hs.Expr.AnnsIf
- Language.Haskell.GHC.ExactPrint.Orphans: instance GHC.Base.Monoid GHC.Hs.Expr.AnnsLet
- Language.Haskell.GHC.ExactPrint.Orphans: instance GHC.Base.Monoid GHC.Hs.Expr.EpAnnHsCase
- Language.Haskell.GHC.ExactPrint.Orphans: instance GHC.Base.Monoid GHC.Hs.Expr.EpAnnUnboundVar
- Language.Haskell.GHC.ExactPrint.Orphans: instance GHC.Base.Monoid GHC.Hs.Expr.GrhsAnn
- Language.Haskell.GHC.ExactPrint.Orphans: instance GHC.Base.Monoid GHC.Hs.ImpExp.EpAnnImportDecl
- Language.Haskell.GHC.ExactPrint.Orphans: instance GHC.Base.Monoid GHC.Hs.Pat.EpAnnSumPat
- Language.Haskell.GHC.ExactPrint.Orphans: instance GHC.Base.Monoid GHC.Parser.Annotation.AddEpAnn
- Language.Haskell.GHC.ExactPrint.Orphans: instance GHC.Base.Monoid GHC.Parser.Annotation.AnnContext
- Language.Haskell.GHC.ExactPrint.Orphans: instance GHC.Base.Monoid GHC.Parser.Annotation.AnnParen
- Language.Haskell.GHC.ExactPrint.Orphans: instance GHC.Base.Monoid GHC.Parser.Annotation.AnnPragma
- Language.Haskell.GHC.ExactPrint.Orphans: instance GHC.Base.Monoid GHC.Parser.Annotation.EpaLocation
- Language.Haskell.GHC.ExactPrint.Orphans: instance GHC.Base.Monoid GHC.Parser.Annotation.NoEpAnns
- Language.Haskell.GHC.ExactPrint.Orphans: instance GHC.Base.Monoid GHC.Parser.Annotation.TrailingAnn
- Language.Haskell.GHC.ExactPrint.Orphans: instance GHC.Base.Semigroup GHC.Hs.AnnsModule
- Language.Haskell.GHC.ExactPrint.Orphans: instance GHC.Base.Semigroup GHC.Hs.Binds.AnnSig
- Language.Haskell.GHC.ExactPrint.Orphans: instance GHC.Base.Semigroup GHC.Hs.Decls.HsRuleAnn
- Language.Haskell.GHC.ExactPrint.Orphans: instance GHC.Base.Semigroup GHC.Hs.Expr.AnnExplicitSum
- Language.Haskell.GHC.ExactPrint.Orphans: instance GHC.Base.Semigroup GHC.Hs.Expr.AnnFieldLabel
- Language.Haskell.GHC.ExactPrint.Orphans: instance GHC.Base.Semigroup GHC.Hs.Expr.AnnProjection
- Language.Haskell.GHC.ExactPrint.Orphans: instance GHC.Base.Semigroup GHC.Hs.Expr.AnnsIf
- Language.Haskell.GHC.ExactPrint.Orphans: instance GHC.Base.Semigroup GHC.Hs.Expr.AnnsLet
- Language.Haskell.GHC.ExactPrint.Orphans: instance GHC.Base.Semigroup GHC.Hs.Expr.EpAnnHsCase
- Language.Haskell.GHC.ExactPrint.Orphans: instance GHC.Base.Semigroup GHC.Hs.Expr.EpAnnUnboundVar
- Language.Haskell.GHC.ExactPrint.Orphans: instance GHC.Base.Semigroup GHC.Hs.Expr.GrhsAnn
- Language.Haskell.GHC.ExactPrint.Orphans: instance GHC.Base.Semigroup GHC.Hs.Pat.EpAnnSumPat
- Language.Haskell.GHC.ExactPrint.Orphans: instance GHC.Base.Semigroup GHC.Parser.Annotation.AddEpAnn
- Language.Haskell.GHC.ExactPrint.Orphans: instance GHC.Base.Semigroup GHC.Parser.Annotation.AnnContext
- Language.Haskell.GHC.ExactPrint.Orphans: instance GHC.Base.Semigroup GHC.Parser.Annotation.AnnParen
- Language.Haskell.GHC.ExactPrint.Orphans: instance GHC.Base.Semigroup GHC.Parser.Annotation.AnnPragma
- Language.Haskell.GHC.ExactPrint.Orphans: instance GHC.Base.Semigroup GHC.Parser.Annotation.EpaLocation
- Language.Haskell.GHC.ExactPrint.Orphans: instance GHC.Base.Semigroup GHC.Parser.Annotation.NoEpAnns
- Language.Haskell.GHC.ExactPrint.Orphans: instance GHC.Base.Semigroup GHC.Parser.Annotation.TrailingAnn
+ Language.Haskell.GHC.ExactPrint.Orphans: instance Data.Default.Class.Default GHC.Hs.AnnsModule
+ Language.Haskell.GHC.ExactPrint.Orphans: instance Data.Default.Class.Default GHC.Hs.Binds.AnnSig
+ Language.Haskell.GHC.ExactPrint.Orphans: instance Data.Default.Class.Default GHC.Hs.Decls.HsRuleAnn
+ Language.Haskell.GHC.ExactPrint.Orphans: instance Data.Default.Class.Default GHC.Hs.Expr.AnnExplicitSum
+ Language.Haskell.GHC.ExactPrint.Orphans: instance Data.Default.Class.Default GHC.Hs.Expr.AnnFieldLabel
+ Language.Haskell.GHC.ExactPrint.Orphans: instance Data.Default.Class.Default GHC.Hs.Expr.AnnProjection
+ Language.Haskell.GHC.ExactPrint.Orphans: instance Data.Default.Class.Default GHC.Hs.Expr.AnnsIf
+ Language.Haskell.GHC.ExactPrint.Orphans: instance Data.Default.Class.Default GHC.Hs.Expr.AnnsLet
+ Language.Haskell.GHC.ExactPrint.Orphans: instance Data.Default.Class.Default GHC.Hs.Expr.EpAnnHsCase
+ Language.Haskell.GHC.ExactPrint.Orphans: instance Data.Default.Class.Default GHC.Hs.Expr.EpAnnUnboundVar
+ Language.Haskell.GHC.ExactPrint.Orphans: instance Data.Default.Class.Default GHC.Hs.Expr.GrhsAnn
+ Language.Haskell.GHC.ExactPrint.Orphans: instance Data.Default.Class.Default GHC.Hs.ImpExp.EpAnnImportDecl
+ Language.Haskell.GHC.ExactPrint.Orphans: instance Data.Default.Class.Default GHC.Hs.Pat.EpAnnSumPat
+ Language.Haskell.GHC.ExactPrint.Orphans: instance Data.Default.Class.Default GHC.Parser.Annotation.AddEpAnn
+ Language.Haskell.GHC.ExactPrint.Orphans: instance Data.Default.Class.Default GHC.Parser.Annotation.AnnContext
+ Language.Haskell.GHC.ExactPrint.Orphans: instance Data.Default.Class.Default GHC.Parser.Annotation.AnnKeywordId
+ Language.Haskell.GHC.ExactPrint.Orphans: instance Data.Default.Class.Default GHC.Parser.Annotation.AnnList
+ Language.Haskell.GHC.ExactPrint.Orphans: instance Data.Default.Class.Default GHC.Parser.Annotation.AnnListItem
+ Language.Haskell.GHC.ExactPrint.Orphans: instance Data.Default.Class.Default GHC.Parser.Annotation.AnnParen
+ Language.Haskell.GHC.ExactPrint.Orphans: instance Data.Default.Class.Default GHC.Parser.Annotation.AnnPragma
+ Language.Haskell.GHC.ExactPrint.Orphans: instance Data.Default.Class.Default GHC.Parser.Annotation.EpaLocation
+ Language.Haskell.GHC.ExactPrint.Orphans: instance Data.Default.Class.Default GHC.Parser.Annotation.NameAnn
+ Language.Haskell.GHC.ExactPrint.Orphans: instance Data.Default.Class.Default GHC.Parser.Annotation.NoEpAnns
+ Language.Haskell.GHC.ExactPrint.Orphans: instance Data.Default.Class.Default GHC.Parser.Annotation.TrailingAnn
- Language.Haskell.GHC.ExactPrint.Transform: captureLineSpacing :: Monoid t => [LocatedAn t e] -> [LocatedAn t e]
+ Language.Haskell.GHC.ExactPrint.Transform: captureLineSpacing :: Default t => [LocatedAn t e] -> [LocatedAn t e]
- Language.Haskell.GHC.ExactPrint.Transform: setEntryDP :: Monoid t => LocatedAn t a -> DeltaPos -> LocatedAn t a
+ Language.Haskell.GHC.ExactPrint.Transform: setEntryDP :: Default t => LocatedAn t a -> DeltaPos -> LocatedAn t a
- Language.Haskell.GHC.ExactPrint.Utils: setAnchorAn :: Monoid an => LocatedAn an a -> Anchor -> EpAnnComments -> LocatedAn an a
+ Language.Haskell.GHC.ExactPrint.Utils: setAnchorAn :: Default an => LocatedAn an a -> Anchor -> EpAnnComments -> LocatedAn an a
- Language.Haskell.GHC.ExactPrint.Utils: setAnchorEpa :: Monoid an => EpAnn an -> Anchor -> EpAnnComments -> EpAnn an
+ Language.Haskell.GHC.ExactPrint.Utils: setAnchorEpa :: Default an => EpAnn an -> Anchor -> EpAnnComments -> EpAnn an

Files

ChangeLog view
@@ -1,3 +1,7 @@+2022-01-03 v1.4+	* Fix handling of AnnContext (@pepeiborra)+	* Fix crashy bogus instances (@pepeiborra)+	* Remove head.hackage overlay from cabal project file 2021-11-23 v1.3 	* Update for GHC 9.2.1 as released 	* Introduce makeDeltaAst command to convert all EpaSpan's to equivalent EpaDelta versions
ghc-exactprint.cabal view
@@ -1,5 +1,5 @@ name:                ghc-exactprint-version:             1.3.0+version:             1.4.0 synopsis:            ExactPrint for GHC description:         Using the API Annotations available from GHC 9.2.1, this                      library provides a means to round trip any code that can@@ -74,6 +74,7 @@                      , bytestring >= 0.10.6                      , containers >= 0.5                      , ordered-containers+                     , data-default                      , directory >= 1.2                      , filepath  >= 1.4                      , ghc       >= 7.10.2@@ -111,6 +112,7 @@                      , bytestring                      , containers >= 0.5                      , ordered-containers+                     , data-default                      , Diff                      , directory >= 1.2                      , filepath  >= 1.4
src/Language/Haskell/GHC/ExactPrint/ExactPrint.hs view
@@ -6,6 +6,7 @@ {-# LANGUAGE NamedFieldPuns       #-} {-# LANGUAGE RankNTypes           #-} {-# LANGUAGE StandaloneDeriving   #-}+{-# LANGUAGE TupleSections        #-} {-# LANGUAGE TypeFamilies         #-} {-# LANGUAGE TypeSynonymInstances #-} {-# LANGUAGE ViewPatterns         #-}@@ -3094,7 +3095,7 @@ exactDo _  _             _     = panic "pprDo" -- PatGuard, ParStmtCxt  exactMdo :: (Monad m, Monoid w)-  => EpAnn AnnList -> Maybe ModuleName -> AnnKeywordId -> EP w m (EpAnn AnnList) +  => EpAnn AnnList -> Maybe ModuleName -> AnnKeywordId -> EP w m (EpAnn AnnList) exactMdo an Nothing            kw = markEpAnnL   an lal_rest kw exactMdo an (Just module_name) kw = markEpAnnLMS an lal_rest kw (Just n)     where@@ -4142,11 +4143,11 @@     a' <- markAnnotated a     -- mapM_ (markKwA AnnCloseP) (sort closes)     mapM_ (markKwA AnnCloseP) closes-    case ma of-      Just (UnicodeSyntax, r) -> markKwA AnnDarrowU r >> pure ()-      Just (NormalSyntax,  r) -> markKwA AnnDarrow  r >> pure ()-      Nothing -> pure ()-    return (L (SrcSpanAnn (EpAnn anc (AnnContext ma opens closes) cs) l) a')+    ma' <- case ma of+      Just (UnicodeSyntax, r) -> Just . (UnicodeSyntax,) <$> markKwA AnnDarrowU r+      Just (NormalSyntax,  r) -> Just . (NormalSyntax,) <$> markKwA AnnDarrow  r+      Nothing -> pure Nothing+    return (L (SrcSpanAnn (EpAnn anc (AnnContext ma' opens closes) cs) l) a')  -- --------------------------------------------------------------------- 
src/Language/Haskell/GHC/ExactPrint/Orphans.hs view
@@ -2,107 +2,82 @@  module Language.Haskell.GHC.ExactPrint.Orphans where +import Data.Default import GHC hiding (EpaComment)  -- ------------------------------------------------------------------------ Orphan Monoid instances. See https://gitlab.haskell.org/ghc/ghc/-/issues/20372+-- Orphan Default instances. See https://gitlab.haskell.org/ghc/ghc/-/issues/20372 -instance Semigroup AnnPragma where-  (<>) = error "unimplemented"-instance Monoid AnnPragma where-  mempty = error "meaningless"+instance Default NameAnn where+  def = mempty +instance Default AnnList where+  def = mempty++instance Default AnnListItem where+  def = mempty++instance Default AnnPragma where+  def = AnnPragma def  def def+ instance Semigroup EpAnnImportDecl where   (<>) = error "unimplemented"-instance Monoid EpAnnImportDecl where-  mempty = error "meaningless"+instance Default EpAnnImportDecl where+  def = EpAnnImportDecl def  Nothing  Nothing  Nothing  Nothing  Nothing -instance Semigroup HsRuleAnn where-  (<>) = error "unimplemented"-instance Monoid HsRuleAnn where-  mempty = error "meaningless"+instance Default HsRuleAnn where+  def = HsRuleAnn Nothing Nothing def -instance Semigroup AnnSig where-  (<>) = error "unimplemented"-instance Monoid AnnSig where-  mempty = error "meaningless"+instance Default AnnSig where+  def = AnnSig def  def -instance Semigroup GrhsAnn where-  (<>) = error "unimplemented"-instance Monoid GrhsAnn where-  mempty = error "meaningless"+instance Default GrhsAnn where+  def = GrhsAnn Nothing  def -instance Semigroup EpAnnUnboundVar where-  (<>) = error "unimplemented"-instance Monoid EpAnnUnboundVar where-  mempty = error "meaningless"+instance Default EpAnnUnboundVar where+  def = EpAnnUnboundVar def  def -instance Semigroup NoEpAnns where-  (<>) = error "unimplemented"-instance Monoid NoEpAnns where-  mempty = error "meaningless"+instance Default NoEpAnns where+  def = NoEpAnns -instance Semigroup AnnParen where-  (<>) = error "unimplemented"-instance Monoid AnnParen where-  mempty = error "meaningless"+instance Default AnnParen where+  def = AnnParen AnnParens def  def -instance Semigroup AnnExplicitSum where-  (<>) = error "unimplemented"-instance Monoid AnnExplicitSum where-  mempty = error "meaningless"+instance Default AnnExplicitSum where+  def = AnnExplicitSum def  def  def  def -instance Semigroup EpAnnHsCase where-  (<>) = error "unimplemented"-instance Monoid EpAnnHsCase where-  mempty = error "meaningless"+instance Default EpAnnHsCase where+  def = EpAnnHsCase def def def -instance Semigroup AnnsIf where-  (<>) = error "unimplemented"-instance Monoid AnnsIf where-  mempty = error "meaningless"+instance Default AnnsIf where+  def = AnnsIf def def def def def -instance Semigroup AnnsLet where-  (<>) = error "unimplemented"-instance Monoid AnnsLet where-  mempty = error "meaningless"+instance Default AnnsLet where+  def = AnnsLet def def -instance Semigroup AnnProjection where-  (<>) = error "unimplemented"-instance Monoid AnnProjection where-  mempty = error "meaningless"+instance Default AnnProjection where+  def = AnnProjection def def -instance Semigroup AnnFieldLabel where-  (<>) = error "unimplemented"-instance Monoid AnnFieldLabel where-  mempty = error "meaningless"+instance Default AnnFieldLabel where+  def = AnnFieldLabel Nothing -instance Semigroup EpaLocation where-  (<>) = error "unimplemented"-instance Monoid EpaLocation where-  mempty = error "meaningless"+instance Default EpaLocation where+  def = EpaDelta (SameLine 0) [] -instance Semigroup AddEpAnn where-  (<>) = error "unimplemented"-instance Monoid AddEpAnn where-  mempty = error "meaningless"+instance Default AddEpAnn where+  def = AddEpAnn def def -instance Semigroup TrailingAnn where-  (<>) = error "unimplemented"-instance Monoid TrailingAnn where-  mempty = error "meaningless"+instance Default AnnKeywordId where+  def = Annlarrowtail  {- gotta pick one -} -instance Semigroup AnnContext where-  (<>) = error "unimplemented"-instance Monoid AnnContext where-  mempty = AnnContext Nothing [] []+instance Default TrailingAnn where+  def = AddLollyAnnU {-gotta pick one -} def -instance Semigroup EpAnnSumPat where-  (<>) = error "unimplemented"-instance Monoid EpAnnSumPat where-  mempty = error "meaningless"+instance Default AnnContext where+  def = AnnContext Nothing [] [] -instance Semigroup AnnsModule where-  (<>) = error "unimplemented"-instance Monoid AnnsModule where-  mempty = error "meaningless"+instance Default EpAnnSumPat where+  def = EpAnnSumPat def  def  def++instance Default AnnsModule where+  def = AnnsModule [] mempty
src/Language/Haskell/GHC/ExactPrint/Transform.hs view
@@ -103,6 +103,7 @@  import Data.Functor.Identity import Control.Monad.State+import Data.Default  ------------------------------------------------------------------------------ -- Transformation of source elements@@ -191,7 +192,7 @@       ms' = captureLineSpacing ms captureMatchLineSpacing d = d -captureLineSpacing :: Monoid t+captureLineSpacing :: Default t                    => [LocatedAn t e] -> [LocatedAn t e] captureLineSpacing [] = [] captureLineSpacing [d] = [d]@@ -284,10 +285,10 @@  -- |Set the true entry 'DeltaPos' from the annotation for a given AST -- element. This is the 'DeltaPos' ignoring any comments.-setEntryDP :: (Monoid t) => LocatedAn t a -> DeltaPos -> LocatedAn t a+setEntryDP :: Default t => LocatedAn t a -> DeltaPos -> LocatedAn t a setEntryDP (L (SrcSpanAnn EpAnnNotUsed l) a) dp   = L (SrcSpanAnn-           (EpAnn (Anchor (realSrcSpan l) (MovedAnchor dp)) mempty emptyComments)+           (EpAnn (Anchor (realSrcSpan l) (MovedAnchor dp)) def emptyComments)            l) a setEntryDP (L (SrcSpanAnn (EpAnn (Anchor r _) an (EpaComments [])) l) a) dp   = L (SrcSpanAnn@@ -1361,7 +1362,7 @@                       `extM` (locatedAnnImpl @AnnContext)  -- LocatedC                       ) -    locatedAnnImpl :: forall an. (Monoid an)+    locatedAnnImpl :: forall an. (Default an)       => SrcAnn an -> Delta (SrcAnn an)     locatedAnnImpl (SrcSpanAnn (EpAnn anc@(Anchor loc _op) an cs) l) = do       -- error "locatedAnnImpl:EpAnn"@@ -1386,7 +1387,7 @@       let cs' = case ma of             Nothing -> mkComments ("EpAnnNotUsed:from anc:Nothing") (spanAsAnchor l)             Just anc' -> mkComments ("EpAnnNotUsed:from anc:" ++ showGhc anc') anc'-      return (SrcSpanAnn (EpAnn anchor' mempty cs') l)+      return (SrcSpanAnn (EpAnn anchor' def cs') l)  -- | Monadic variation on everywhere', so Apply a monadic -- transformation everywhere in top-down manner
src/Language/Haskell/GHC/ExactPrint/Utils.hs view
@@ -40,6 +40,7 @@  import Debug.Trace import Language.Haskell.GHC.ExactPrint.Types+import Data.Default  -- --------------------------------------------------------------------- @@ -324,16 +325,16 @@  -- --------------------------------------------------------------------- -setAnchorAn :: (Monoid an) => LocatedAn an a -> Anchor -> EpAnnComments -> LocatedAn an a+setAnchorAn :: (Default an) => LocatedAn an a -> Anchor -> EpAnnComments -> LocatedAn an a setAnchorAn (L (SrcSpanAnn EpAnnNotUsed l)    a) anc cs-  = (L (SrcSpanAnn (EpAnn anc mempty cs) l) a)+  = (L (SrcSpanAnn (EpAnn anc def cs) l) a)      `debug` ("setAnchorAn: anc=" ++ showAst anc) setAnchorAn (L (SrcSpanAnn (EpAnn _ an _) l) a) anc cs   = (L (SrcSpanAnn (EpAnn anc an cs) l) a)      `debug` ("setAnchorAn: anc=" ++ showAst anc) -setAnchorEpa :: (Monoid an) => EpAnn an -> Anchor -> EpAnnComments -> EpAnn an-setAnchorEpa EpAnnNotUsed   anc cs = EpAnn anc mempty cs+setAnchorEpa :: (Default an) => EpAnn an -> Anchor -> EpAnnComments -> EpAnn an+setAnchorEpa EpAnnNotUsed   anc cs = EpAnn anc def cs setAnchorEpa (EpAnn _ an _) anc cs = EpAnn anc an     cs  setAnchorEpaL :: EpAnn AnnList -> Anchor -> EpAnnComments -> EpAnn AnnList
tests/Test.hs view
@@ -132,15 +132,15 @@   roundTripMakeDeltaTests <- findTestsMD libdir   -- prettyRoundTripTests <- findPrettyTests libdir   return $ TestList [-                    --   internalTests,-                    --   roundTripTests-                    -- ,+                      internalTests,+                      roundTripTests+                    ,                       (transformTests libdir)                     , (failingTests libdir)-                    -- ,-                    --   roundTripBalanceCommentsTests-                    -- ,-                    --   roundTripMakeDeltaTests+                    ,+                      roundTripBalanceCommentsTests+                    ,+                      roundTripMakeDeltaTests                     ]  -- Tests that are no longer needed