Safe Haskell | None |
---|---|
Language | GHC2021 |
Development.IDE.Core.Rules
Description
A Shake implementation of the compiler service, built using the Shaker abstraction layer for in-memory use.
Synopsis
- data IdeState
- data GetParsedModule = GetParsedModule
- newtype TransitiveDependencies = TransitiveDependencies {}
- newtype Priority = Priority Double
- data GhcSessionIO = GhcSessionIO
- data GetClientSettings = GetClientSettings
- priorityTypeCheck :: Priority
- priorityGenerateCore :: Priority
- priorityFilesOfInterest :: Priority
- runAction :: String -> IdeState -> Action a -> IO a
- toIdeResult :: Either [FileDiagnostic] v -> IdeResult v
- defineNoFile :: IdeRule k v => Recorder (WithPriority Log) -> (k -> Action v) -> Rules ()
- defineEarlyCutOffNoFile :: IdeRule k v => Recorder (WithPriority Log) -> (k -> Action (ByteString, v)) -> Rules ()
- mainRule :: Recorder (WithPriority Log) -> RulesConfig -> Rules ()
- data RulesConfig = RulesConfig {}
- getParsedModule :: NormalizedFilePath -> Action (Maybe ParsedModule)
- getParsedModuleWithComments :: NormalizedFilePath -> Action (Maybe ParsedModule)
- getClientConfigAction :: Action Config
- usePropertyAction :: forall (s :: Symbol) (k :: PropertyKey) (t :: PropertyType) (r :: [PropertyKey]). HasProperty s k t r => KeyNameProxy s -> PluginId -> Properties r -> Action (ToHsType t)
- getHieFile :: NormalizedFilePath -> Action (Maybe HieFile)
- newtype CompiledLinkables = CompiledLinkables {}
- getParsedModuleRule :: Recorder (WithPriority Log) -> Rules ()
- getParsedModuleWithCommentsRule :: Recorder (WithPriority Log) -> Rules ()
- getLocatedImportsRule :: Recorder (WithPriority Log) -> Rules ()
- reportImportCyclesRule :: Recorder (WithPriority Log) -> Rules ()
- typeCheckRule :: Recorder (WithPriority Log) -> Rules ()
- getDocMapRule :: Recorder (WithPriority Log) -> Rules ()
- loadGhcSession :: Recorder (WithPriority Log) -> GhcSessionDepsConfig -> Rules ()
- getModIfaceFromDiskRule :: Recorder (WithPriority Log) -> Rules ()
- getModIfaceRule :: Recorder (WithPriority Log) -> Rules ()
- getModSummaryRule :: LspT Config IO () -> Recorder (WithPriority Log) -> Rules ()
- getModuleGraphRule :: Recorder (WithPriority Log) -> Rules ()
- knownFilesRule :: Recorder (WithPriority Log) -> Rules ()
- getClientSettingsRule :: Recorder (WithPriority Log) -> Rules ()
- getHieAstsRule :: Recorder (WithPriority Log) -> Rules ()
- getBindingsRule :: Recorder (WithPriority Log) -> Rules ()
- needsCompilationRule :: NormalizedFilePath -> Action (IdeResultNoDiagnosticsEarlyCutoff (Maybe LinkableType))
- computeLinkableTypeForDynFlags :: DynFlags -> LinkableType
- generateCoreRule :: Recorder (WithPriority Log) -> Rules ()
- getImportMapRule :: Recorder (WithPriority Log) -> Rules ()
- regenerateHiFile :: HscEnvEq -> NormalizedFilePath -> ModSummary -> Maybe LinkableType -> Action ([FileDiagnostic], Maybe HiFileResult)
- ghcSessionDepsDefinition :: Bool -> GhcSessionDepsConfig -> HscEnvEq -> NormalizedFilePath -> Action (Maybe HscEnvEq)
- getParsedModuleDefinition :: HscEnv -> IdeOptions -> NormalizedFilePath -> ModSummary -> IO ([FileDiagnostic], Maybe ParsedModule)
- typeCheckRuleDefinition :: HscEnv -> ParsedModule -> Action (IdeResult TcModuleResult)
- getRebuildCount :: Action Int
- getSourceFileSource :: NormalizedFilePath -> Action ByteString
- currentLinkables :: Action (ModuleEnv UTCTime)
- newtype GhcSessionDepsConfig = GhcSessionDepsConfig {}
- data Log
- newtype DisplayTHWarning = DisplayTHWarning (IO ())
Types
A Shake database plus persistent store. Can be thought of as storing
mappings from (FilePath, k)
to RuleResult k
.
Instances
MonadReader (ReactorChan, IdeState) (ServerM c) # | |
Defined in Development.IDE.LSP.Server Methods ask :: ServerM c (ReactorChan, IdeState) # local :: ((ReactorChan, IdeState) -> (ReactorChan, IdeState)) -> ServerM c a -> ServerM c a # reader :: ((ReactorChan, IdeState) -> a) -> ServerM c a # |
data GetParsedModule #
Constructors
GetParsedModule |
Instances
Generic GetParsedModule # | |||||
Defined in Development.IDE.Core.RuleTypes Associated Types
Methods from :: GetParsedModule -> Rep GetParsedModule x # to :: Rep GetParsedModule x -> GetParsedModule # | |||||
Show GetParsedModule # | |||||
Defined in Development.IDE.Core.RuleTypes Methods showsPrec :: Int -> GetParsedModule -> ShowS # show :: GetParsedModule -> String # showList :: [GetParsedModule] -> ShowS # | |||||
NFData GetParsedModule # | |||||
Defined in Development.IDE.Core.RuleTypes Methods rnf :: GetParsedModule -> () # | |||||
Eq GetParsedModule # | |||||
Defined in Development.IDE.Core.RuleTypes Methods (==) :: GetParsedModule -> GetParsedModule -> Bool # (/=) :: GetParsedModule -> GetParsedModule -> Bool # | |||||
Hashable GetParsedModule # | |||||
Defined in Development.IDE.Core.RuleTypes | |||||
type Rep GetParsedModule # | |||||
type RuleResult GetParsedModule # | The parse tree for the file using GetFileContents | ||||
Defined in Development.IDE.Core.RuleTypes |
newtype TransitiveDependencies #
Constructors
TransitiveDependencies | |
Fields
|
Instances
data GhcSessionIO #
Constructors
GhcSessionIO |
Instances
Generic GhcSessionIO # | |||||
Defined in Development.IDE.Core.RuleTypes Associated Types
| |||||
Show GhcSessionIO # | |||||
Defined in Development.IDE.Core.RuleTypes Methods showsPrec :: Int -> GhcSessionIO -> ShowS # show :: GhcSessionIO -> String # showList :: [GhcSessionIO] -> ShowS # | |||||
NFData GhcSessionIO # | |||||
Defined in Development.IDE.Core.RuleTypes Methods rnf :: GhcSessionIO -> () # | |||||
Eq GhcSessionIO # | |||||
Defined in Development.IDE.Core.RuleTypes | |||||
Hashable GhcSessionIO # | |||||
Defined in Development.IDE.Core.RuleTypes | |||||
type Rep GhcSessionIO # | |||||
type RuleResult GhcSessionIO # | |||||
Defined in Development.IDE.Core.RuleTypes |
data GetClientSettings #
Get the client config stored in the ide state
Constructors
GetClientSettings |
Instances
Generic GetClientSettings # | |||||
Defined in Development.IDE.Core.RuleTypes Associated Types
Methods from :: GetClientSettings -> Rep GetClientSettings x # to :: Rep GetClientSettings x -> GetClientSettings # | |||||
Show GetClientSettings # | |||||
Defined in Development.IDE.Core.RuleTypes Methods showsPrec :: Int -> GetClientSettings -> ShowS # show :: GetClientSettings -> String # showList :: [GetClientSettings] -> ShowS # | |||||
NFData GetClientSettings # | |||||
Defined in Development.IDE.Core.RuleTypes Methods rnf :: GetClientSettings -> () # | |||||
Eq GetClientSettings # | |||||
Defined in Development.IDE.Core.RuleTypes Methods (==) :: GetClientSettings -> GetClientSettings -> Bool # (/=) :: GetClientSettings -> GetClientSettings -> Bool # | |||||
Hashable GetClientSettings # | |||||
Defined in Development.IDE.Core.RuleTypes | |||||
type Rep GetClientSettings # | |||||
type RuleResult GetClientSettings # | |||||
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 () #
defineEarlyCutOffNoFile :: IdeRule k v => Recorder (WithPriority Log) -> (k -> Action (ByteString, v)) -> Rules () #
mainRule :: Recorder (WithPriority Log) -> RulesConfig -> Rules () #
A rule that wires per-file rules together
data RulesConfig #
Constructors
RulesConfig | |
Fields
|
Instances
Default RulesConfig # | |
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) #
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
Constructors
CompiledLinkables | |
Fields |
Instances
IsIdeGlobal CompiledLinkables # | |
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.
getLocatedImportsRule :: Recorder (WithPriority Log) -> Rules () #
reportImportCyclesRule :: Recorder (WithPriority Log) -> Rules () #
typeCheckRule :: Recorder (WithPriority Log) -> Rules () #
Typechecks a module.
getDocMapRule :: Recorder (WithPriority Log) -> Rules () #
loadGhcSession :: Recorder (WithPriority Log) -> GhcSessionDepsConfig -> Rules () #
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.
getModIfaceRule :: Recorder (WithPriority Log) -> Rules () #
getModSummaryRule :: LspT Config IO () -> Recorder (WithPriority Log) -> Rules () #
getModuleGraphRule :: Recorder (WithPriority Log) -> Rules () #
knownFilesRule :: Recorder (WithPriority Log) -> Rules () #
getClientSettingsRule :: Recorder (WithPriority Log) -> Rules () #
getHieAstsRule :: Recorder (WithPriority Log) -> Rules () #
getBindingsRule :: Recorder (WithPriority Log) -> Rules () #
needsCompilationRule :: NormalizedFilePath -> Action (IdeResultNoDiagnosticsEarlyCutoff (Maybe LinkableType)) #
computeLinkableTypeForDynFlags :: DynFlags -> LinkableType #
How should we compile this module? (assuming we do in fact need to compile it). Depends on whether it uses unboxed tuples or sums
generateCoreRule :: Recorder (WithPriority Log) -> Rules () #
getImportMapRule :: Recorder (WithPriority Log) -> Rules () #
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
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.
getParsedModuleDefinition :: HscEnv -> IdeOptions -> NormalizedFilePath -> ModSummary -> IO ([FileDiagnostic], Maybe ParsedModule) #
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 | |
Fields |
Instances
Default GhcSessionDepsConfig # | |
Defined in Development.IDE.Core.Rules Methods |
newtype DisplayTHWarning #
Constructors
DisplayTHWarning (IO ()) |
Instances
IsIdeGlobal DisplayTHWarning # | |
Defined in Development.IDE.Core.Rules |