ghcide-2.9.0.0: The core of an IDE
Safe HaskellNone
LanguageGHC2021

Development.IDE.Core.Rules

Description

A Shake implementation of the compiler service, built using the Shaker abstraction layer for in-memory use.

Synopsis

Types

data IdeState #

A Shake database plus persistent store. Can be thought of as storing mappings from (FilePath, k) to RuleResult k.

Instances

Instances details
MonadReader (ReactorChan, IdeState) (ServerM c) # 
Instance details

Defined in Development.IDE.LSP.Server

data GetParsedModule #

Constructors

GetParsedModule 

Instances

Instances details
NFData GetParsedModule # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Methods

rnf :: GetParsedModule -> () #

Generic GetParsedModule # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Associated Types

type Rep GetParsedModule 
Instance details

Defined in Development.IDE.Core.RuleTypes

type Rep GetParsedModule = D1 ('MetaData "GetParsedModule" "Development.IDE.Core.RuleTypes" "ghcide-2.9.0.0-1G3u1vh8JKWDpMQ8kfXrG1" 'False) (C1 ('MetaCons "GetParsedModule" 'PrefixI 'False) (U1 :: Type -> Type))
Show GetParsedModule # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Eq GetParsedModule # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Hashable GetParsedModule # 
Instance details

Defined in Development.IDE.Core.RuleTypes

type Rep GetParsedModule # 
Instance details

Defined in Development.IDE.Core.RuleTypes

type Rep GetParsedModule = D1 ('MetaData "GetParsedModule" "Development.IDE.Core.RuleTypes" "ghcide-2.9.0.0-1G3u1vh8JKWDpMQ8kfXrG1" 'False) (C1 ('MetaCons "GetParsedModule" 'PrefixI 'False) (U1 :: Type -> Type))
type RuleResult GetParsedModule #

The parse tree for the file using GetFileContents

Instance details

Defined in Development.IDE.Core.RuleTypes

newtype TransitiveDependencies #

Constructors

TransitiveDependencies 

Fields

Instances

Instances details
NFData TransitiveDependencies # 
Instance details

Defined in Development.IDE.Import.DependencyInformation

Methods

rnf :: TransitiveDependencies -> () #

Generic TransitiveDependencies # 
Instance details

Defined in Development.IDE.Import.DependencyInformation

Associated Types

type Rep TransitiveDependencies 
Instance details

Defined in Development.IDE.Import.DependencyInformation

type Rep TransitiveDependencies = D1 ('MetaData "TransitiveDependencies" "Development.IDE.Import.DependencyInformation" "ghcide-2.9.0.0-1G3u1vh8JKWDpMQ8kfXrG1" 'True) (C1 ('MetaCons "TransitiveDependencies" 'PrefixI 'True) (S1 ('MetaSel ('Just "transitiveModuleDeps") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [NormalizedFilePath])))
Show TransitiveDependencies # 
Instance details

Defined in Development.IDE.Import.DependencyInformation

Eq TransitiveDependencies # 
Instance details

Defined in Development.IDE.Import.DependencyInformation

type Rep TransitiveDependencies # 
Instance details

Defined in Development.IDE.Import.DependencyInformation

type Rep TransitiveDependencies = D1 ('MetaData "TransitiveDependencies" "Development.IDE.Import.DependencyInformation" "ghcide-2.9.0.0-1G3u1vh8JKWDpMQ8kfXrG1" 'True) (C1 ('MetaCons "TransitiveDependencies" 'PrefixI 'True) (S1 ('MetaSel ('Just "transitiveModuleDeps") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [NormalizedFilePath])))

data GhcSessionIO #

Constructors

GhcSessionIO 

Instances

Instances details
NFData GhcSessionIO # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Methods

rnf :: GhcSessionIO -> () #

Generic GhcSessionIO # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Associated Types

type Rep GhcSessionIO 
Instance details

Defined in Development.IDE.Core.RuleTypes

type Rep GhcSessionIO = D1 ('MetaData "GhcSessionIO" "Development.IDE.Core.RuleTypes" "ghcide-2.9.0.0-1G3u1vh8JKWDpMQ8kfXrG1" 'False) (C1 ('MetaCons "GhcSessionIO" 'PrefixI 'False) (U1 :: Type -> Type))
Show GhcSessionIO # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Eq GhcSessionIO # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Hashable GhcSessionIO # 
Instance details

Defined in Development.IDE.Core.RuleTypes

type Rep GhcSessionIO # 
Instance details

Defined in Development.IDE.Core.RuleTypes

type Rep GhcSessionIO = D1 ('MetaData "GhcSessionIO" "Development.IDE.Core.RuleTypes" "ghcide-2.9.0.0-1G3u1vh8JKWDpMQ8kfXrG1" 'False) (C1 ('MetaCons "GhcSessionIO" 'PrefixI 'False) (U1 :: Type -> Type))
type RuleResult GhcSessionIO # 
Instance details

Defined in Development.IDE.Core.RuleTypes

data GetClientSettings #

Get the client config stored in the ide state

Constructors

GetClientSettings 

Instances

Instances details
NFData GetClientSettings # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Methods

rnf :: GetClientSettings -> () #

Generic GetClientSettings # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Associated Types

type Rep GetClientSettings 
Instance details

Defined in Development.IDE.Core.RuleTypes

type Rep GetClientSettings = D1 ('MetaData "GetClientSettings" "Development.IDE.Core.RuleTypes" "ghcide-2.9.0.0-1G3u1vh8JKWDpMQ8kfXrG1" 'False) (C1 ('MetaCons "GetClientSettings" 'PrefixI 'False) (U1 :: Type -> Type))
Show GetClientSettings # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Eq GetClientSettings # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Hashable GetClientSettings # 
Instance details

Defined in Development.IDE.Core.RuleTypes

type Rep GetClientSettings # 
Instance details

Defined in Development.IDE.Core.RuleTypes

type Rep GetClientSettings = D1 ('MetaData "GetClientSettings" "Development.IDE.Core.RuleTypes" "ghcide-2.9.0.0-1G3u1vh8JKWDpMQ8kfXrG1" 'False) (C1 ('MetaCons "GetClientSettings" 'PrefixI 'False) (U1 :: Type -> Type))
type RuleResult GetClientSettings # 
Instance details

Defined in Development.IDE.Core.RuleTypes

Functions

toIdeResult :: Either [FileDiagnostic] v -> IdeResult v #

This is useful for rules to convert rules that can only produce errors or a result into the more general IdeResult type that supports producing warnings while also producing a result.

defineNoFile :: IdeRule k v => Recorder (WithPriority Log) -> (k -> Action v) -> Rules () #

mainRule :: Recorder (WithPriority Log) -> RulesConfig -> Rules () #

A rule that wires per-file rules together

data RulesConfig #

Constructors

RulesConfig 

Fields

  • fullModuleGraph :: Bool

    Share the computation for the entire module graph We usually compute the full module graph for the project and share it for all files. However, in large projects it might not be desirable to wait for computing the entire module graph before starting to typecheck a particular file. Disabling this drastically decreases sharing and is likely to increase memory usage if you have multiple files open Disabling this also disables checking for import cycles

  • enableTemplateHaskell :: Bool

    Disable TH for improved performance in large codebases

  • templateHaskellWarning :: LspT Config IO ()

    Warning to show when TH is not supported by the current HLS binary

Instances

Instances details
Default RulesConfig # 
Instance details

Defined in Development.IDE.Core.Rules

Methods

def :: RulesConfig #

getParsedModule :: NormalizedFilePath -> Action (Maybe ParsedModule) #

Parse the contents of a haskell file.

getParsedModuleWithComments :: NormalizedFilePath -> Action (Maybe ParsedModule) #

Parse the contents of a haskell file, ensuring comments are preserved in annotations

getClientConfigAction :: Action Config #

Returns the client configuration, creating a build dependency. You should always use this function when accessing client configuration from build rules.

usePropertyAction :: forall (s :: Symbol) (k :: PropertyKey) (t :: PropertyType) (r :: [PropertyKey]). HasProperty s k t r => KeyNameProxy s -> PluginId -> Properties r -> Action (ToHsType t) #

usePropertyByPathAction :: forall (props :: [PropertyKey]) (path :: NonEmptyList Symbol) (t :: PropertyType). HasPropertyByPath props path t => KeyNamePath path -> PluginId -> Properties props -> Action (ToHsType t) #

getHieFile :: NormalizedFilePath -> Action (Maybe HieFile) #

Get HieFile for haskell file on NormalizedFilePath

Rules

newtype CompiledLinkables #

Tracks which linkables are current, so we don't need to unload them

Instances

Instances details
IsIdeGlobal CompiledLinkables # 
Instance details

Defined in Development.IDE.Core.Rules

getParsedModuleRule :: Recorder (WithPriority Log) -> Rules () #

WARNING: We currently parse the module both with and without Opt_Haddock, and return the one with Haddocks if it -- succeeds. However, this may not work for hlint or any client code that might need the parsed source with all annotations, including comments. For that use case you might want to use getParsedModuleWithCommentsRule See https://github.com/haskell/ghcide/pull/350#discussion_r370878197 and https://github.com/mpickering/ghcide/pull/22#issuecomment-625070490 GHC wiki about: https://gitlab.haskell.org/ghc/ghc/-/wikis/api-annotations

getParsedModuleWithCommentsRule :: Recorder (WithPriority Log) -> Rules () #

This rule provides a ParsedModule preserving all annotations, including keywords, punctuation and comments. So it is suitable for use cases where you need a perfect edit.

typeCheckRule :: Recorder (WithPriority Log) -> Rules () #

Typechecks a module.

getModIfaceFromDiskRule :: Recorder (WithPriority Log) -> Rules () #

Load a iface from disk, or generate it if there isn't one or it is out of date This rule also ensures that the `.hie` and `.o` (if needed) files are written out.

regenerateHiFile :: HscEnvEq -> NormalizedFilePath -> ModSummary -> Maybe LinkableType -> Action ([FileDiagnostic], Maybe HiFileResult) #

Also generates and indexes the `.hie` file, along with the `.o` file if needed Invariant maintained is that if the `.hi` file was successfully written, then the `.hie` and `.o` file (if needed) were also successfully written

ghcSessionDepsDefinition #

Arguments

:: Bool

full mod summary

-> GhcSessionDepsConfig 
-> HscEnvEq 
-> NormalizedFilePath 
-> Action (Maybe HscEnvEq) 

Note [GhcSessionDeps] ~~~~~~~~~~~~~~~~~~~~~ For a file Foo, GhcSessionDeps "Foo.hs" results in an HscEnv which includes 1. HomeModInfo's (in the HUG/HPT) for all modules in the transitive closure of Foo, **NOT** including Foo itself. 2. ModSummary's (in the ModuleGraph) for all modules in the transitive closure of Foo, including Foo itself. 3. ModLocation's (in the FinderCache) all modules in the transitive closure of Foo, including Foo itself.

currentLinkables :: Action (ModuleEnv UTCTime) #

Get all the linkables stored in the graph, i.e. the ones we *do not* need to unload. Doesn't actually contain the code, since we don't need it to unload

newtype GhcSessionDepsConfig #

Constructors

GhcSessionDepsConfig 

Instances

Instances details
Default GhcSessionDepsConfig # 
Instance details

Defined in Development.IDE.Core.Rules

newtype DisplayTHWarning #

Constructors

DisplayTHWarning (IO ()) 

Instances

Instances details
IsIdeGlobal DisplayTHWarning # 
Instance details

Defined in Development.IDE.Core.Rules