ghcide-0.4.0: The core of an IDE

Safe HaskellNone
LanguageHaskell2010

Development.IDE.GHC.Util

Contents

Description

General utility functions, mostly focused around GHC operations.

Synopsis

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.

Instances
Eq HscEnvEq Source # 
Instance details

Defined in Development.IDE.GHC.Util

Show HscEnvEq Source # 
Instance details

Defined in Development.IDE.GHC.Util

Hashable HscEnvEq Source # 
Instance details

Defined in Development.IDE.GHC.Util

Methods

hashWithSalt :: Int -> HscEnvEq -> Int #

hash :: HscEnvEq -> Int #

Binary HscEnvEq Source # 
Instance details

Defined in Development.IDE.GHC.Util

Methods

put :: HscEnvEq -> Put #

get :: Get HscEnvEq #

putList :: [HscEnvEq] -> Put #

NFData HscEnvEq Source # 
Instance details

Defined in Development.IDE.GHC.Util

Methods

rnf :: HscEnvEq -> () #

hscEnvWithImportPaths :: HscEnvEq -> HscEnv Source #

Unwrap the HscEnv with the original import paths. Used only for locating imports

envImportPaths :: HscEnvEq -> Maybe [String] Source #

If Just, import dirs originally configured in this env If Nothing, the env import dirs are unaltered

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).

evalGhcEnv :: HscEnv -> Ghc b -> IO b 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.

runGhcEnv :: HscEnv -> Ghc a -> IO (HscEnv, 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.

deps :: HscEnvEq -> [(InstalledUnitId, DynFlags)] Source #

In memory components for this HscEnv This is only used at the moment for the import dirs in the DynFlags

GHC wrappers

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

Pretty print a GHC value using 'unsafeGlobalDynFlags '.

printRdrName :: RdrName -> String Source #

Pretty print a RdrName wrapping operators in parens

printName :: Name -> String Source #

Pretty print a Name wrapping operators in parens

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

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

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).

moduleImportPath :: NormalizedFilePath -> ModuleName -> 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

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 https://gitlab.haskell.org/ghc/ghc/merge_requests/2318.