ghcide-0.1.0: The core of an IDE

Safe HaskellNone




General utility functions, mostly focused around GHC operations.


HcsEnv and environment

data HscEnvEq Source #

An HscEnv with equality. Two values are considered equal if they are created with the same call to newHscEnvEq.

Eq HscEnvEq Source # 
Instance details

Defined in Development.IDE.GHC.Util

Show HscEnvEq Source # 
Instance details

Defined in Development.IDE.GHC.Util

NFData HscEnvEq Source # 
Instance details

Defined in Development.IDE.GHC.Util


rnf :: HscEnvEq -> () #

hscEnv :: HscEnvEq -> HscEnv Source #

Unwrap an HsEnvEq.

modifyDynFlags :: GhcMonad m => (DynFlags -> DynFlags) -> m () Source #

Used to modify dyn flags in preference to calling setSessionDynFlags, since that function also reloads packages (which is very slow).

fakeDynFlags :: DynFlags Source #

A DynFlags value where most things are undefined. It's sufficient to call pretty printing, but not much else.

runGhcEnv :: HscEnv -> Ghc a -> IO a Source #

Run a Ghc monad value using an existing HscEnv. Sets up and tears down all the required pieces, but designed to be more efficient than a standard runGhc.

GHC wrappers

prettyPrint :: Outputable a => a -> String Source #

Pretty print a GHC value using fakeDynFlags.

lookupPackageConfig :: UnitId -> HscEnv -> Maybe PackageConfig Source #

Given a UnitId try and find the associated PackageConfig in the environment.

moduleImportPath :: NormalizedFilePath -> ParsedModule -> Maybe FilePath Source #

Given a module location, and its parse tree, figure out what is the include directory implied by it. For example, given the file /usr/Test/Foo/Bar.hs with the module name Foo.Bar the directory /usr/Test should be on the include path to find sibling modules.

fingerprintToBS :: Fingerprint -> ByteString Source #

Convert a Fingerprint to a ByteString by copying the byte across. Will produce an 8 byte unreadable ByteString.

General utilities

textToStringBuffer :: Text -> StringBuffer Source #

Convert from the text package to the GHC StringBuffer. Currently implemented somewhat inefficiently (if it ever comes up in a profile).

readFileUtf8 :: FilePath -> IO Text Source #

Read a UTF8 file, with lenient decoding, so it will never raise a decoding error.

hDuplicateTo' :: Handle -> Handle -> IO () Source #

A slightly modified version of hDuplicateTo from GHC. Importantly, it avoids the bug listed in