-- | Utility methods for generating parts of the AST for refactorings {-# LANGUAGE MonoLocalBinds #-} module Language.Haskell.Tools.Rewrite.Create.Utils where import Language.Haskell.Tools.AST import Language.Haskell.Tools.PrettyPrint.Prepare (child, opt, list) import Language.Haskell.Tools.Rewrite.ElementTypes (AnnMaybe, AnnList) fromTemplate :: src -> NodeInfo sema src fromTemplate = NodeInfo (error "The newly generated AST fragments have no semantic info, but a refactoring tries to use that information.") emptyList :: AnnList e emptyList = AnnListG (fromTemplate list) [] justVal :: Ann e IdDom SrcTemplateStage -> AnnMaybe e justVal e = AnnMaybeG (fromTemplate opt) (Just e) noth :: AnnMaybe e noth = AnnMaybeG (fromTemplate opt) Nothing mkAnn :: SpanInfo SrcTemplateStage -> e IdDom SrcTemplateStage -> Ann e IdDom SrcTemplateStage mkAnn temp = Ann (fromTemplate temp) -- | Annotation for a simple wrapper AST node wrapperAnn :: e IdDom SrcTemplateStage -> Ann e IdDom SrcTemplateStage wrapperAnn = mkAnn child -- | Transforms the list of elements to an AnnListG with the given source template. mkAnnList :: ListInfo SrcTemplateStage -> [Ann e IdDom SrcTemplateStage] -> AnnList e mkAnnList temp = AnnListG (fromTemplate temp) -- | Transforms the Maybe element to an AnnMaybeG with the given source template. mkAnnMaybe :: OptionalInfo SrcTemplateStage -> Maybe (Ann e IdDom SrcTemplateStage) -> AnnMaybe e mkAnnMaybe temp = AnnMaybeG (fromTemplate temp)