ghcide-2.7.0.0: The core of an IDE

Safe Haskell | None
Language | GHC2021

Development.IDE.GHC.Util

Contents

- GHC wrappers
- General utilities

Description

General utility functions, mostly focused around GHC operations.

Synopsis

- modifyDynFlags :: GhcMonad m => (DynFlags -> DynFlags) -> m ()
- evalGhcEnv :: HscEnv -> Ghc b -> IO b
- printRdrName :: RdrName -> String
- printName :: Name -> String
- data ParseResult a :: TYPE ('SumRep '['TupleRep '[LiftedRep, LiftedRep], LiftedRep]) where
  - pattern PFailed :: PState -> ParseResult a
  - pattern POk :: PState -> a -> ParseResult a
- runParser :: DynFlags -> String -> P a -> ParseResult a
- lookupPackageConfig :: Unit -> HscEnv -> Maybe UnitInfo
- textToStringBuffer :: Text -> StringBuffer
- bytestringToStringBuffer :: ByteString -> StringBuffer
- stringBufferToByteString :: StringBuffer -> ByteString
- moduleImportPath :: NormalizedFilePath -> ModuleName -> Maybe FilePath
- cgGutsToCoreModule :: SafeHaskellMode -> CgGuts -> ModDetails -> CoreModule
- fingerprintToBS :: Fingerprint -> ByteString
- fingerprintFromByteString :: ByteString -> IO Fingerprint
- fingerprintFromStringBuffer :: StringBuffer -> IO Fingerprint
- fingerprintFromPut :: Put -> IO Fingerprint
- readFileUtf8 :: FilePath -> IO Text
- hDuplicateTo' :: Handle -> Handle -> IO ()
- setHieDir :: FilePath -> DynFlags -> DynFlags
- dontWriteHieFiles :: DynFlags -> DynFlags
- disableWarningsAsErrors :: DynFlags -> DynFlags
- printOutputable :: Outputable a => a -> Text
- getExtensions :: ParsedModule -> [Extension]

# Documentation

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

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 #

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

printRdrName :: RdrName -> String #

Pretty print a `RdrName` wrapping operators in parens

printName :: Name -> String #

Pretty print a `Name` wrapping operators in parens

data ParseResult a :: TYPE ('SumRep '['TupleRep '[LiftedRep, LiftedRep], LiftedRep]) where #

The result of running a parser.

Bundled Patterns

pattern PFailed :: PState -> ParseResult a | The parser has consumed a (possibly empty) prefix of the input and failed. The carried parsing state can be used to resume parsing. It is the state right before failure, including the fatal parse error. `getPsMessages` and `getPsErrorMessages` must return a non-empty bag of errors.
pattern POk :: PState -> a -> ParseResult a | The parser has consumed a (possibly empty) prefix of the input and produced a result. Use `getPsMessages` to check for accumulated warnings and non-fatal errors. The carried parsing state can be used to resume parsing.

runParser :: DynFlags -> String -> P a -> ParseResult a #

lookupPackageConfig :: Unit -> HscEnv -> Maybe UnitInfo #

Given a `Unit` try and find the associated `PackageConfig` in the environment.

textToStringBuffer :: Text -> StringBuffer #

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

bytestringToStringBuffer :: ByteString -> StringBuffer #

stringBufferToByteString :: StringBuffer -> ByteString #

moduleImportPath :: NormalizedFilePath -> ModuleName -> Maybe FilePath #

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.

cgGutsToCoreModule :: SafeHaskellMode -> CgGuts -> ModDetails -> CoreModule #

Convert from a `CgGuts` to a `CoreModule`.

fingerprintToBS :: Fingerprint -> ByteString #

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

fingerprintFromByteString :: ByteString -> IO Fingerprint #

fingerprintFromStringBuffer :: StringBuffer -> IO Fingerprint #

Take the `Fingerprint` of a `StringBuffer`.

fingerprintFromPut :: Put -> IO Fingerprint #

# General utilities

readFileUtf8 :: FilePath -> IO Text #

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

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

A slightly modified version of `hDuplicateTo` from GHC. Importantly, it avoids the bug listed in https://gitlab.haskell.org/ghc/ghc/merge_requests/2318.

setHieDir :: FilePath -> DynFlags -> DynFlags #

dontWriteHieFiles :: DynFlags -> DynFlags #

disableWarningsAsErrors :: DynFlags -> DynFlags #

printOutputable :: Outputable a => a -> Text #

Print a GHC value in `defaultUserStyle` without unique symbols. It uses `showSDocUnsafe` with `unsafeGlobalDynFlags` internally.

This is the most common print utility. It will do something additionally compared to what the `Outputable` instance does.

1. print with a user-friendly style: `a_a4ME` as `a`.
2. unescape escape sequences of printable unicode characters within a pair of double quotes

getExtensions :: ParsedModule -> [Extension] #