Safe Haskell | None |
---|
- sameOccurrence :: Located t -> Located t -> Bool
- loadModuleGraphGhc :: Maybe FilePath -> RefactGhc ()
- getModuleGhc :: FilePath -> RefactGhc ()
- parseSourceFileGhc :: FilePath -> RefactGhc ()
- getModuleDetails :: ModSummary -> RefactGhc ()
- runRefacSession :: RefactSettings -> Cradle -> RefactGhc [ApplyRefacResult] -> IO [FilePath]
- applyRefac :: RefactGhc a -> RefacSource -> RefactGhc (ApplyRefacResult, a)
- refactDone :: [ApplyRefacResult] -> Bool
- type ApplyRefacResult = ((FilePath, Bool), ([PosToken], RenamedSource))
- data RefacSource
- update :: Update t t1 => t -> t -> t1 -> RefactGhc t1
- fileNameToModName :: FilePath -> RefactGhc ModuleName
- fileNameFromModSummary :: ModSummary -> FilePath
- getModuleName :: ParsedSource -> Maybe (ModuleName, String)
- clientModsAndFiles :: GhcMonad m => ModuleName -> m [ModSummary]
- serverModsAndFiles :: GhcMonad m => ModuleName -> m [ModSummary]
- getCurrentModuleGraph :: RefactGhc ModuleGraph
- sortCurrentModuleGraph :: RefactGhc [SCC ModSummary]
- pwd :: IO FilePath
Documentation
sameOccurrence :: Located t -> Located t -> BoolSource
Return True if syntax phrases t1 and t2 refer to the same one.
Managing the GHC / project environment
loadModuleGraphGhc :: Maybe FilePath -> RefactGhc ()Source
Load a module graph into the GHC session, starting from main
getModuleGhc :: FilePath -> RefactGhc ()Source
Once the module graph has been loaded, load the given module into the RefactGhc monad TODO: relax the equality test, if the file is loaded via cabal it may have a full filesystem path.
parseSourceFileGhc :: FilePath -> RefactGhc ()Source
Parse a single source file into a GHC session
getModuleDetails :: ModSummary -> RefactGhc ()Source
In the existing GHC session, put the requested TypeCheckedModule into the RefactGhc monad
The bits that do the work
:: RefactSettings | |
-> Cradle | Identifies the surrounding project |
-> RefactGhc [ApplyRefacResult] | The computation doing the
refactoring. Normally created
via |
-> IO [FilePath] |
Manage a whole refactor session. Initialise the monad, load the whole project if required, and then apply the individual refactorings, and write out the resulting files.
It is intended that this forms the umbrella function, in which applyRefac is called
:: RefactGhc a | The refactoring |
-> RefacSource | where to get the module and toks |
-> RefactGhc (ApplyRefacResult, a) |
Apply a refactoring (or part of a refactoring) to a single module
refactDone :: [ApplyRefacResult] -> BoolSource
Returns True if any of the results has its modified flag set
type ApplyRefacResult = ((FilePath, Bool), ([PosToken], RenamedSource))Source
The result of a refactoring is the file, a flag as to whether it was modified, the updated token stream, and the updated AST
:: Update t t1 | |
=> t | The syntax phrase to be updated. |
-> t | The new syntax phrase. |
-> t1 | The contex where the old syntax phrase occurs. |
-> RefactGhc t1 | The result. |
Update the occurrence of one syntax phrase in a given scope by another syntax phrase of the same type
fileNameToModName :: FilePath -> RefactGhc ModuleNameSource
From file name to module name.
getModuleName :: ParsedSource -> Maybe (ModuleName, String)Source
Extract the module name from the parsed source, if there is one
clientModsAndFiles :: GhcMonad m => ModuleName -> m [ModSummary]Source
Return the client modules and file names. The client modules of module, say m, are those modules which directly or indirectly import module m.
serverModsAndFiles :: GhcMonad m => ModuleName -> m [ModSummary]Source
Return the server module and file names. The server modules of module, say m, are those modules which are directly or indirectly imported by module m. This can only be called in a live GHC session
getCurrentModuleGraph :: RefactGhc ModuleGraphSource
Get the current module graph, provided we are in a live GHC session