haskell-tools-refactor-0.6.0.0: Refactoring Tool for Haskell

Safe HaskellNone
LanguageHaskell2010

Language.Haskell.Tools.Refactor.RefactorBase

Contents

Description

Basic utilities and types for defining refactorings.

Synopsis

Documentation

type UnnamedModule dom = Ann UModule dom SrcTemplateStage Source #

A type for the input and result of refactoring a module

type ModuleDom dom = (SourceFileKey, UnnamedModule dom) Source #

The name of the module and the AST

data IsBoot Source #

Decides if a module is a .hs-boot file or a normal .hs file

Constructors

NormalHs 
IsHsBoot 

type LocalRefactoring dom = UnnamedModule dom -> LocalRefactor dom (UnnamedModule dom) Source #

A refactoring that only affects one module

type Refactoring dom = ModuleDom dom -> [ModuleDom dom] -> Refactor [RefactorChange dom] Source #

The type of a refactoring

data RefactorChange dom Source #

Change in the project, modification or removal of a module.

runRefactor :: ModuleDom dom -> [ModuleDom dom] -> Refactoring dom -> Ghc (Either String [RefactorChange dom]) Source #

Performs the given refactoring, transforming it into a Ghc action

localRefactoring :: HasModuleInfo dom => LocalRefactoring dom -> Refactoring dom Source #

Wraps a refactoring that only affects one module. Performs the per-module finishing touches.

localRefactoringRes :: HasModuleInfo dom => ((UnnamedModule dom -> UnnamedModule dom) -> a -> a) -> UnnamedModule dom -> LocalRefactor dom a -> Refactor a Source #

Transform the result of the local refactoring

addGeneratedImports :: [Name] -> Ann UModule dom SrcTemplateStage -> Ann UModule dom SrcTemplateStage Source #

Adds the imports that bring names into scope that are needed by the refactoring

newtype LocalRefactorT dom m a Source #

Input and output information for the refactoring

Constructors

LocalRefactorT 

Fields

Instances

MonadTrans (LocalRefactorT dom) Source # 

Methods

lift :: Monad m => m a -> LocalRefactorT dom m a #

RefactorMonad (LocalRefactor dom) Source # 
Monad m => MonadReader (RefactorCtx dom) (LocalRefactorT dom m) Source # 

Methods

ask :: LocalRefactorT dom m (RefactorCtx dom) #

local :: (RefactorCtx dom -> RefactorCtx dom) -> LocalRefactorT dom m a -> LocalRefactorT dom m a #

reader :: (RefactorCtx dom -> a) -> LocalRefactorT dom m a #

Monad m => MonadWriter [Name] (LocalRefactorT dom m) Source # 

Methods

writer :: (a, [Name]) -> LocalRefactorT dom m a #

tell :: [Name] -> LocalRefactorT dom m () #

listen :: LocalRefactorT dom m a -> LocalRefactorT dom m (a, [Name]) #

pass :: LocalRefactorT dom m (a, [Name] -> [Name]) -> LocalRefactorT dom m a #

Monad m => Monad (LocalRefactorT dom m) Source # 

Methods

(>>=) :: LocalRefactorT dom m a -> (a -> LocalRefactorT dom m b) -> LocalRefactorT dom m b #

(>>) :: LocalRefactorT dom m a -> LocalRefactorT dom m b -> LocalRefactorT dom m b #

return :: a -> LocalRefactorT dom m a #

fail :: String -> LocalRefactorT dom m a #

Functor m => Functor (LocalRefactorT dom m) Source # 

Methods

fmap :: (a -> b) -> LocalRefactorT dom m a -> LocalRefactorT dom m b #

(<$) :: a -> LocalRefactorT dom m b -> LocalRefactorT dom m a #

Applicative m => Applicative (LocalRefactorT dom m) Source # 

Methods

pure :: a -> LocalRefactorT dom m a #

(<*>) :: LocalRefactorT dom m (a -> b) -> LocalRefactorT dom m a -> LocalRefactorT dom m b #

(*>) :: LocalRefactorT dom m a -> LocalRefactorT dom m b -> LocalRefactorT dom m b #

(<*) :: LocalRefactorT dom m a -> LocalRefactorT dom m b -> LocalRefactorT dom m a #

MonadIO m => MonadIO (LocalRefactorT dom m) Source # 

Methods

liftIO :: IO a -> LocalRefactorT dom m a #

GhcMonad m => GhcMonad (LocalRefactorT dom m) Source # 
(HasDynFlags m, Monad m) => HasDynFlags (LocalRefactorT dom m) Source # 
ExceptionMonad m => ExceptionMonad (LocalRefactorT dom m) Source # 

Methods

gcatch :: Exception e => LocalRefactorT dom m a -> (e -> LocalRefactorT dom m a) -> LocalRefactorT dom m a #

gmask :: ((LocalRefactorT dom m a -> LocalRefactorT dom m a) -> LocalRefactorT dom m b) -> LocalRefactorT dom m b #

gbracket :: LocalRefactorT dom m a -> (a -> LocalRefactorT dom m b) -> (a -> LocalRefactorT dom m c) -> LocalRefactorT dom m c #

gfinally :: LocalRefactorT dom m a -> LocalRefactorT dom m b -> LocalRefactorT dom m a #

data RefactorCtx dom Source #

The information a refactoring can use

Instances

Monad m => MonadReader (RefactorCtx dom) (LocalRefactorT dom m) Source # 

Methods

ask :: LocalRefactorT dom m (RefactorCtx dom) #

local :: (RefactorCtx dom -> RefactorCtx dom) -> LocalRefactorT dom m a -> LocalRefactorT dom m a #

reader :: (RefactorCtx dom -> a) -> LocalRefactorT dom m a #

class Monad m => RefactorMonad m where Source #

A monad that can be used to refactor

Minimal complete definition

refactError, liftGhc

Methods

refactError :: String -> m a Source #

liftGhc :: Ghc a -> m a Source #

type LocalRefactor dom = LocalRefactorT dom Refactor Source #

The refactoring monad for a given module

type Refactor = ExceptT String Ghc Source #

The refactoring monad for the whole project

referenceName' :: (HasImportInfo dom, HasModuleInfo dom) => ([String] -> Name -> Ann nt dom SrcTemplateStage) -> Name -> LocalRefactor dom (Ann nt dom SrcTemplateStage) Source #

Create a name that references the definition. Generates an import if the definition is not yet imported.

referenceBy :: ([String] -> Name -> Ann nt dom SrcTemplateStage) -> Name -> [Ann UImportDecl dom SrcTemplateStage] -> Ann nt dom SrcTemplateStage Source #

Reference the name by the shortest suitable import

data NameClass Source #

Different classes of definitions that have different kind of names.

Constructors

Variable

Normal value definitions: functions, variables

Ctor

Data constructors

ValueOperator

Functions with operator-like names

DataCtorOperator

Constructors with operator-like names

SynonymOperator

UType definitions with operator-like names

classifyName :: RefactorMonad m => Name -> m NameClass Source #

Get which category does a given name belong to

validModuleName :: String -> Maybe String Source #

Checks if a given name is a valid module name

nameValid :: NameClass -> String -> Maybe String Source #

Check if a given name is valid for a given kind of definition

Orphan instances

Show ErrorMessages Source # 
GhcMonad m => GhcMonad (ExceptT s m) Source # 

Methods

getSession :: ExceptT s m HscEnv #

setSession :: HscEnv -> ExceptT s m () #

GhcMonad m => GhcMonad (StateT s m) Source # 

Methods

getSession :: StateT s m HscEnv #

setSession :: HscEnv -> StateT s m () #

(GhcMonad m, Monoid s) => GhcMonad (WriterT s m) Source # 

Methods

getSession :: WriterT s m HscEnv #

setSession :: HscEnv -> WriterT s m () #

(Monad m, HasDynFlags m) => HasDynFlags (StateT s m) Source # 
ExceptionMonad m => ExceptionMonad (ExceptT s m) Source # 

Methods

gcatch :: Exception e => ExceptT s m a -> (e -> ExceptT s m a) -> ExceptT s m a #

gmask :: ((ExceptT s m a -> ExceptT s m a) -> ExceptT s m b) -> ExceptT s m b #

gbracket :: ExceptT s m a -> (a -> ExceptT s m b) -> (a -> ExceptT s m c) -> ExceptT s m c #

gfinally :: ExceptT s m a -> ExceptT s m b -> ExceptT s m a #

ExceptionMonad m => ExceptionMonad (StateT s m) Source # 

Methods

gcatch :: Exception e => StateT s m a -> (e -> StateT s m a) -> StateT s m a #

gmask :: ((StateT s m a -> StateT s m a) -> StateT s m b) -> StateT s m b #

gbracket :: StateT s m a -> (a -> StateT s m b) -> (a -> StateT s m c) -> StateT s m c #

gfinally :: StateT s m a -> StateT s m b -> StateT s m a #

(ExceptionMonad m, Monoid s) => ExceptionMonad (WriterT s m) Source # 

Methods

gcatch :: Exception e => WriterT s m a -> (e -> WriterT s m a) -> WriterT s m a #

gmask :: ((WriterT s m a -> WriterT s m a) -> WriterT s m b) -> WriterT s m b #

gbracket :: WriterT s m a -> (a -> WriterT s m b) -> (a -> WriterT s m c) -> WriterT s m c #

gfinally :: WriterT s m a -> WriterT s m b -> WriterT s m a #

GhcMonad m => GhcMonad (ReaderT * s m) Source # 

Methods

getSession :: ReaderT * s m HscEnv #

setSession :: HscEnv -> ReaderT * s m () #

ExceptionMonad m => ExceptionMonad (ReaderT * s m) Source # 

Methods

gcatch :: Exception e => ReaderT * s m a -> (e -> ReaderT * s m a) -> ReaderT * s m a #

gmask :: ((ReaderT * s m a -> ReaderT * s m a) -> ReaderT * s m b) -> ReaderT * s m b #

gbracket :: ReaderT * s m a -> (a -> ReaderT * s m b) -> (a -> ReaderT * s m c) -> ReaderT * s m c #

gfinally :: ReaderT * s m a -> ReaderT * s m b -> ReaderT * s m a #