packages feed

haskell-tools-rewrite 0.4.1.3 → 0.5.0.0

raw patch · 16 files changed

+50/−50 lines, 16 filesdep ~haskell-tools-astdep ~haskell-tools-prettyprintdep ~haskell-tools-rewritePVP ok

version bump matches the API change (PVP)

Dependency ranges changed: haskell-tools-ast, haskell-tools-prettyprint, haskell-tools-rewrite

API changes (from Hackage documentation)

- Language.Haskell.Tools.AST.Gen.Decls: mkNoInlinePragma :: Maybe (ConlikeAnnot dom) -> Maybe (PhaseControl dom) -> Name dom -> TopLevelPragma dom
+ Language.Haskell.Tools.AST.Gen.Decls: mkNoInlinePragma :: Name dom -> TopLevelPragma dom
- Language.Haskell.Tools.AST.Gen.Modules: mkModuleHead :: ModuleName dom -> Maybe (ExportSpecs dom) -> Maybe (ModulePragma dom) -> ModuleHead dom
+ Language.Haskell.Tools.AST.Gen.Modules: mkModuleHead :: ModuleName dom -> Maybe (ModulePragma dom) -> Maybe (ExportSpecs dom) -> ModuleHead dom

Files

Language/Haskell/Tools/AST/Gen/Binds.hs view
@@ -72,17 +72,17 @@ -- | Creates a left-associative fixity declaration (@ infixl 5 +, - @).
 mkInfixL :: Int -> Operator dom -> FixitySignature dom
 mkInfixL prec op = mkAnn (child <> " " <> child <> " " <> child) 
-                     $ UFixitySignature (mkAnn "infixl" AssocLeft) (mkAnn (fromString (show prec)) (Precedence prec)) (mkAnnList (separatedBy ", " list) [op])
+                     $ UFixitySignature (mkAnn "infixl" AssocLeft) (mkAnnMaybe opt $ Just $ mkAnn (fromString (show prec)) (Precedence prec)) (mkAnnList (separatedBy ", " list) [op])
 
 -- | Creates a right-associative fixity declaration (@ infixr 5 +, - @).
 mkInfixR :: Int -> Operator dom -> FixitySignature dom
 mkInfixR prec op = mkAnn (child <> " " <> child <> " " <> child) 
-                     $ UFixitySignature (mkAnn "infixr" AssocRight) (mkAnn (fromString (show prec)) (Precedence prec)) (mkAnnList (separatedBy ", " list) [op])
+                     $ UFixitySignature (mkAnn "infixr" AssocRight) (mkAnnMaybe opt $ Just $ mkAnn (fromString (show prec)) (Precedence prec)) (mkAnnList (separatedBy ", " list) [op])
 
 -- | Creates a non-associative fixity declaration (@ infix 5 +, - @).
 mkInfix :: Int -> Operator dom -> FixitySignature dom
 mkInfix prec op = mkAnn (child <> " " <> child <> " " <> child) 
-                    $ UFixitySignature (mkAnn "infix" AssocNone) (mkAnn (fromString (show prec)) (Precedence prec)) (mkAnnList (separatedBy ", " list) [op])
+                    $ UFixitySignature (mkAnn "infix" AssocNone) (mkAnnMaybe opt $ Just $ mkAnn (fromString (show prec)) (Precedence prec)) (mkAnnList (separatedBy ", " list) [op])
 
 -- | Creates an unguarded right-hand-side (@ = 3 @)
 mkUnguardedRhs :: Expr dom -> Rhs dom
Language/Haskell/Tools/AST/Gen/Decls.hs view
@@ -424,20 +424,19 @@ -- | A pragma that marks a function for inlining to the compiler (@ {-\# INLINE thenUs \#-} @)
 mkInlinePragma :: Maybe (ConlikeAnnot dom) -> Maybe (PhaseControl dom) -> Name dom -> TopLevelPragma dom
 mkInlinePragma conlike phase name 
-  = mkAnn ("{-# INLINE " <> child <> child <> child <> " #-}") 
-      $ UInlinePragma (mkAnnMaybe (followedBy " " opt) conlike) (mkAnnMaybe (followedBy " " opt) phase) name
+  = mkAnn ("{-# INLINE " <> child <> child <> child <> " #-}") $ UInlinePragmaDecl
+      $ mkAnn child $ UInlinePragma (mkAnnMaybe (followedBy " " opt) conlike) (mkAnnMaybe (followedBy " " opt) phase) name
 
 -- | A pragma that forbids a function from being inlined by the compiler (@ {-\# NOINLINE f \#-} @)
-mkNoInlinePragma :: Maybe (ConlikeAnnot dom) -> Maybe (PhaseControl dom) -> Name dom -> TopLevelPragma dom
-mkNoInlinePragma conlike phase name 
-  = mkAnn ("{-# NOINLINE " <> child <> child <> child <> " #-}") 
-     $ UNoInlinePragma (mkAnnMaybe (followedBy " " opt) conlike) (mkAnnMaybe (followedBy " " opt) phase) name
+mkNoInlinePragma :: Name dom -> TopLevelPragma dom
+mkNoInlinePragma name = mkAnn ("{-# NOINLINE " <> child <> " #-}") $ UInlinePragmaDecl
+      $ mkAnn child $ UNoInlinePragma name
 
 -- | A pragma that marks a function that it may be inlined by the compiler (@ {-\# INLINABLE thenUs \#-} @)
 mkInlinablePragma :: Maybe (PhaseControl dom) -> Name dom -> TopLevelPragma dom
 mkInlinablePragma phase name
-  = mkAnn ("{-# INLINEABLE " <> child <> child <> " #-}") 
-     $ UInlinablePragma (mkAnnMaybe (followedBy " " opt) phase) name
+  = mkAnn ("{-# INLINEABLE " <> child <> child <> " #-}") $ UInlinePragmaDecl
+      $ mkAnn child $ UInlinablePragma (mkAnnMaybe (followedBy " " opt) phase) name
 
 -- | A pragma for maintaining line numbers in generated sources (@ {-\# LINE 123 "somefile" \#-} @)
 mkLinePragma :: Int -> Maybe (StringNode dom) -> TopLevelPragma dom
Language/Haskell/Tools/AST/Gen/Exprs.hs view
@@ -91,11 +91,11 @@ 
 -- | Create a left operator section: @(1+)@
 mkLeftSection :: Expr dom -> Operator dom -> Expr dom
-mkLeftSection lhs op = mkAnn ("(" <> child <> child <> ")") $ ULeftSection lhs op
+mkLeftSection lhs op = mkAnn ("(" <> child <> " " <> child <> ")") $ ULeftSection lhs op
 
 -- | Create a right operator section: @(+1)@
 mkRightSection :: Operator dom -> Expr dom -> Expr dom
-mkRightSection op rhs = mkAnn ("(" <> child <> child <> ")") $ URightSection op rhs
+mkRightSection op rhs = mkAnn ("(" <> child <> " " <> child <> ")") $ URightSection op rhs
 
 -- | Create a record value construction: @Point { x = 3, y = -2 }@
 mkRecCon :: Name dom -> [FieldUpdate dom] -> Expr dom
Language/Haskell/Tools/AST/Gen/Kinds.hs view
@@ -5,9 +5,9 @@            #-}
 module Language.Haskell.Tools.AST.Gen.Kinds where
 
-import Data.String (IsString(..), String(..))
+import Data.String (IsString(..), String)
 import Language.Haskell.Tools.AST (UPromoted(..), UKind(..), UKindConstraint(..))
-import Language.Haskell.Tools.AST.ElementTypes (Name(..), Kind(..), KindConstraint(..))
+import Language.Haskell.Tools.AST.ElementTypes (Name, Kind, KindConstraint)
 import Language.Haskell.Tools.AST.Gen.Utils (mkAnn, mkAnnList)
 import Language.Haskell.Tools.Transform
 
Language/Haskell/Tools/AST/Gen/Literals.hs view
@@ -5,9 +5,9 @@            #-}
 module Language.Haskell.Tools.AST.Gen.Literals where
 
-import Data.String (IsString(..), String(..))
+import Data.String (IsString(..), String)
 import Language.Haskell.Tools.AST (ULiteral(..))
-import Language.Haskell.Tools.AST.ElementTypes (Literal(..))
+import Language.Haskell.Tools.AST.ElementTypes (Literal)
 import Language.Haskell.Tools.AST.Gen.Utils (mkAnn)
 
 -- | Character literal: @'c'@
Language/Haskell/Tools/AST/Gen/Modules.hs view
@@ -6,7 +6,7 @@            #-}
 module Language.Haskell.Tools.AST.Gen.Modules where
 
-import Data.String (IsString(..), String(..))
+import Data.String (IsString(..), String)
 import Language.Haskell.Tools.AST
 import Language.Haskell.Tools.AST.ElementTypes
 import Language.Haskell.Tools.AST.Gen.Names (mkStringNode)
@@ -22,9 +22,9 @@                 (mkAnnList (after "\n" $ indented list) imps) (mkAnnList (after "\n" $ indented list) decls)
                
 -- | Module declaration with name and (optional) exports
-mkModuleHead :: ModuleName dom -> Maybe (ExportSpecs dom) -> Maybe (ModulePragma dom) -> ModuleHead dom
-mkModuleHead n es pr = mkAnn ("module " <> child <> child <> child <> " where") 
-                         $ UModuleHead n (mkAnnMaybe opt es) (mkAnnMaybe (after "\n" opt) pr)
+mkModuleHead :: ModuleName dom -> Maybe (ModulePragma dom) -> Maybe (ExportSpecs dom) -> ModuleHead dom
+mkModuleHead n pr es = mkAnn ("module " <> child <> child <> child <> " where") 
+                         $ UModuleHead n (mkAnnMaybe (after "\n" opt) pr) (mkAnnMaybe opt es)
 
 -- | A list of export specifications surrounded by parentheses
 mkExportSpecs :: [ExportSpec dom] -> ExportSpecs dom
Language/Haskell/Tools/AST/Gen/Names.hs view
@@ -5,7 +5,7 @@            #-}
 module Language.Haskell.Tools.AST.Gen.Names where
 
-import Data.String (IsString(..), String(..))
+import Data.String (IsString(..), String)
 import Language.Haskell.Tools.AST
 import Language.Haskell.Tools.AST.ElementTypes
 import Language.Haskell.Tools.AST.Gen.Utils (emptyList, mkAnn, mkAnnList)
Language/Haskell/Tools/AST/Gen/TH.hs view
@@ -4,7 +4,7 @@            #-}
 module Language.Haskell.Tools.AST.Gen.TH where
 
-import Data.String (IsString(..), String(..))
+import Data.String (IsString(..), String)
 import Language.Haskell.Tools.AST
 import Language.Haskell.Tools.AST.ElementTypes
 import Language.Haskell.Tools.AST.Gen.Utils (mkAnn, mkAnnList)
Language/Haskell/Tools/AST/Gen/Types.hs view
@@ -6,14 +6,14 @@            #-}
 module Language.Haskell.Tools.AST.Gen.Types where
 
-import Data.String (IsString(..), String(..))
+import Data.String (IsString(..), String)
 import Language.Haskell.Tools.AST
 import Language.Haskell.Tools.AST.ElementTypes
 import Language.Haskell.Tools.AST.Gen.Kinds (mkKindConstraint)
 import Language.Haskell.Tools.AST.Gen.Names (mkUnqualName')
 import Language.Haskell.Tools.AST.Gen.Utils
 import Language.Haskell.Tools.Transform
-import qualified Name as GHC (Name(..))
+import qualified Name as GHC (Name)
 
 -- * Generation of types
 
Language/Haskell/Tools/AST/Gen/Utils.hs view
@@ -5,7 +5,7 @@ module Language.Haskell.Tools.AST.Gen.Utils where
 
 import Language.Haskell.Tools.AST
-import Language.Haskell.Tools.AST.ElementTypes (AnnMaybe(..), AnnList(..))
+import Language.Haskell.Tools.AST.ElementTypes (AnnMaybe, AnnList)
 import Language.Haskell.Tools.Transform (child, opt, list)
 
 fromTemplate :: src -> NodeInfo sema src
Language/Haskell/Tools/AST/Match/Binds.hs view
@@ -45,17 +45,19 @@ pattern TypeSignature :: NameList dom -> Type dom -> TypeSignature dom
 pattern TypeSignature n t <- Ann _ (UTypeSignature n t)
 
+-- TODO: match precedence with maybe
+
 -- | A left-associative fixity declaration (@ infixl 5 +, - @).
-pattern InfixL :: Int -> OperatorList dom -> FixitySignature dom
-pattern InfixL prec op <- Ann _ (UFixitySignature (Ann _ AssocLeft) (Ann _ (Precedence prec)) op)
+pattern InfixL :: OperatorList dom -> FixitySignature dom
+pattern InfixL op <- Ann _ (UFixitySignature (Ann _ AssocLeft) _ op)
 
 -- | A right-associative fixity declaration (@ infixr 5 +, - @).
-pattern InfixR :: Int -> OperatorList dom -> FixitySignature dom
-pattern InfixR prec op <- Ann _ (UFixitySignature (Ann _ AssocRight) (Ann _ (Precedence prec)) op)
+pattern InfixR :: OperatorList dom -> FixitySignature dom
+pattern InfixR op <- Ann _ (UFixitySignature (Ann _ AssocRight) _ op)
 
 -- | A non-associative fixity declaration (@ infix 5 +, - @).
-pattern Infix :: Int -> OperatorList dom -> FixitySignature dom
-pattern Infix prec op <- Ann _ (UFixitySignature (Ann _ AssocNone) (Ann _ (Precedence prec)) op)
+pattern Infix :: OperatorList dom -> FixitySignature dom
+pattern Infix op <- Ann _ (UFixitySignature (Ann _ AssocNone) _ op)
 
 -- | An unguarded right-hand-side (@ = 3 @)
 pattern UnguardedRhs :: Expr dom -> Rhs dom
Language/Haskell/Tools/AST/Match/Decls.hs view
@@ -383,15 +383,15 @@ 
 -- | A pragma that marks a function for inlining to the compiler (@ {-\# INLINE thenUs \#-} @)
 pattern InlinePragma :: MaybeConlikeAnnot dom -> MaybePhaseControl dom -> Name dom -> TopLevelPragma dom
-pattern InlinePragma conlike phase name <- Ann _ (UInlinePragma conlike phase name)
+pattern InlinePragma conlike phase name <- Ann _ (UInlinePragmaDecl (Ann _ (UInlinePragma conlike phase name)))
 
 -- | A pragma that forbids a function from being inlined by the compiler (@ {-\# NOINLINE f \#-} @)
-pattern NoInlinePragma :: MaybeConlikeAnnot dom -> MaybePhaseControl dom -> Name dom -> TopLevelPragma dom
-pattern NoInlinePragma conlike phase name <- Ann _ (UNoInlinePragma conlike phase name)
+pattern NoInlinePragma :: Name dom -> TopLevelPragma dom
+pattern NoInlinePragma name <- Ann _ (UInlinePragmaDecl (Ann _ (UNoInlinePragma name)))
 
 -- | A pragma that marks a function that it may be inlined by the compiler (@ {-\# INLINABLE thenUs \#-} @)
 pattern InlinablePragma :: MaybePhaseControl dom -> Name dom -> TopLevelPragma dom
-pattern InlinablePragma phase name <- Ann _ (UInlinablePragma phase name)
+pattern InlinablePragma phase name <- Ann _ (UInlinePragmaDecl (Ann _ (UInlinablePragma phase name)))
 
 -- | A pragma for maintaining line numbers in generated sources (@ {-\# LINE 123 \"somefile\" \#-} @)
 pattern LinePragma :: Int -> MaybeStringNode dom -> TopLevelPragma dom
Language/Haskell/Tools/AST/Match/Literals.hs view
@@ -3,7 +3,7 @@ module Language.Haskell.Tools.AST.Match.Literals where
 
 import Language.Haskell.Tools.AST (ULiteral(..), Ann(..))
-import Language.Haskell.Tools.AST.ElementTypes (Literal(..))
+import Language.Haskell.Tools.AST.ElementTypes (Literal)
 
 -- | Character literal: @'c'@
 pattern CharLit :: Char -> Literal dom
Language/Haskell/Tools/AST/Match/Modules.hs view
@@ -12,9 +12,8 @@ pattern Module filePrags head imps decls  <- Ann _ (UModule filePrags head imps decls )
 
 -- | Module declaration with name and (optional) exports
-pattern ModuleHead :: ModuleName dom -> MaybeExportSpecs dom 
-                  -> MaybeModulePragma dom -> ModuleHead dom
-pattern ModuleHead n es pr <- Ann _ (UModuleHead n es pr)
+pattern ModuleHead :: ModuleName dom -> MaybeModulePragma dom -> MaybeExportSpecs dom -> ModuleHead dom
+pattern ModuleHead n pr es <- Ann _ (UModuleHead n pr es)
 
 -- | A list of export specifications surrounded by parentheses
 pattern ExportSpecs :: ExportSpecList dom -> ExportSpecs dom
haskell-tools-rewrite.cabal view
@@ -1,5 +1,5 @@ name:                haskell-tools-rewrite
-version:             0.4.1.3
+version:             0.5.0.0
 synopsis:            Facilities for generating new parts of the Haskell-Tools AST
 description:         Contains utility functions to generate parts of the Haskell-Tools AST. Generates these elements to be compatible with the source annotations that are already present on the AST. The package is divided into modules based on which language elements can the given module generate. This packages should be used during the transformations to generate parts of the new AST.
 homepage:            https://github.com/haskell-tools/haskell-tools
@@ -45,8 +45,8 @@                      , containers                >= 0.5  && < 0.6
                      , references                >= 0.3  && < 0.4
                      , ghc                       >= 8.0  && < 8.1
-                     , haskell-tools-ast         >= 0.4  && < 0.5
-                     , haskell-tools-prettyprint >= 0.4  && < 0.5
+                     , haskell-tools-ast         >= 0.5  && < 0.6
+                     , haskell-tools-prettyprint >= 0.5  && < 0.6
   default-language:    Haskell2010
 
 test-suite haskell-tools-rewrite-tests
@@ -59,7 +59,7 @@                      , tasty-hunit               >= 0.9 && < 0.10
                      , directory                 >= 1.2 && < 1.4
                      , filepath                  >= 1.4 && < 2.0
-                     , haskell-tools-ast         >= 0.4 && < 0.5
-                     , haskell-tools-prettyprint >= 0.4 && < 0.5
-                     , haskell-tools-rewrite     >= 0.4 && < 0.5
+                     , haskell-tools-ast         >= 0.5 && < 0.6
+                     , haskell-tools-prettyprint >= 0.5 && < 0.6
+                     , haskell-tools-rewrite     >= 0.5 && < 0.6
   default-language:    Haskell2010
test/Main.hs view
@@ -33,7 +33,7 @@ 
 testExprs 
   = [ ("infix", "a + 3", mkInfixApp (mkVar (mkName "a")) (mkUnqualOp "+") (mkLit $ mkIntLit 3)) 
-    , ("section", "(\"xx\"++)", mkLeftSection (mkLit (mkStringLit "xx")) (mkUnqualOp "++"))
+    , ("section", "(\"xx\" ++)", mkLeftSection (mkLit (mkStringLit "xx")) (mkUnqualOp "++"))
     , ("tuple", "(1, [2, 3])", mkTuple [ mkLit (mkIntLit 1), mkList [ mkLit (mkIntLit 2), mkLit (mkIntLit 3) ] ])
     , ("record constructor", "P { x = 1 }", mkRecCon (mkName "P") [ mkFieldUpdate (mkName "x") (mkLit $ mkIntLit 1) ])
     , ("if", "if f a then x else y"
@@ -124,12 +124,12 @@ testModules
   = [ ("empty module", "", G.mkModule [] Nothing [] [])
     , ("exports", "module Test(x, A(a), B(..)) where"
-      , G.mkModule [] (Just $ mkModuleHead (G.mkModuleName "Test") 
-          (Just $ mkExportSpecs 
+      , G.mkModule [] (Just $ mkModuleHead (G.mkModuleName "Test") Nothing 
+          (Just $ mkExportSpecs
                     [ mkExportSpec $ mkIESpec (mkName "x") Nothing
                     , mkExportSpec $ mkIESpec (mkName "A") (Just $ mkSubList [mkName "a"])
                     , mkExportSpec $ mkIESpec (mkName "B") (Just mkSubAll)
-                    ]) Nothing) [] [])
+                    ])) [] [])
     , ("imports",  "\nimport qualified A\n"
                   ++ "import B as BB(x)\n"
                   ++ "import B hiding (x)"