Safe Haskell | None |
---|---|
Language | GHC2021 |
Ide.Types
Synopsis
- data PluginDescriptor ideState = PluginDescriptor {
- pluginId :: !PluginId
- pluginDescription :: !Text
- pluginPriority :: Natural
- pluginRules :: !(Rules ())
- pluginCommands :: ![PluginCommand ideState]
- pluginHandlers :: PluginHandlers ideState
- pluginConfigDescriptor :: ConfigDescriptor
- pluginNotificationHandlers :: PluginNotificationHandlers ideState
- pluginModifyDynflags :: DynFlagsModifications
- pluginCli :: Maybe (ParserInfo (IdeCommand ideState))
- pluginFileType :: [Text]
- defaultPluginDescriptor :: PluginId -> Text -> PluginDescriptor ideState
- defaultCabalPluginDescriptor :: PluginId -> Text -> PluginDescriptor ideState
- defaultPluginPriority :: Natural
- describePlugin :: PluginDescriptor c -> Doc ann
- newtype IdeCommand state = IdeCommand (state -> IO ())
- data IdeMethod (m :: Method 'ClientToServer 'Request) = PluginRequestMethod m => IdeMethod (SMethod m)
- data IdeNotification (m :: Method 'ClientToServer 'Notification) = PluginNotificationMethod m => IdeNotification (SMethod m)
- data IdePlugins ideState where
- pattern IdePlugins :: [PluginDescriptor ideState] -> IdePlugins ideState
- data DynFlagsModifications = DynFlagsModifications {}
- data Config = Config {}
- data PluginConfig = PluginConfig {
- plcGlobalOn :: !Bool
- plcCallHierarchyOn :: !Bool
- plcCodeActionsOn :: !Bool
- plcCodeLensOn :: !Bool
- plcDiagnosticsOn :: !Bool
- plcHoverOn :: !Bool
- plcSymbolsOn :: !Bool
- plcCompletionOn :: !Bool
- plcRenameOn :: !Bool
- plcSelectionRangeOn :: !Bool
- plcFoldingRangeOn :: !Bool
- plcSemanticTokensOn :: !Bool
- plcConfig :: !Object
- data CheckParents
- data ConfigDescriptor = ConfigDescriptor {}
- defaultConfigDescriptor :: ConfigDescriptor
- configForPlugin :: Config -> PluginDescriptor c -> PluginConfig
- data CustomConfig = CustomConfig (Properties r)
- mkCustomConfig :: forall (r :: [PropertyKey]). Properties r -> CustomConfig
- data FallbackCodeActionParams = FallbackCodeActionParams {
- fallbackWorkspaceEdit :: Maybe WorkspaceEdit
- fallbackCommand :: Maybe Command
- data FormattingType
- = FormatText
- | FormatRange Range
- type FormattingMethod (m :: Method f t) = (HasOptions (MessageParams m) FormattingOptions, HasTextDocument (MessageParams m) TextDocumentIdentifier, MessageResult m ~ ([TextEdit] |? Null))
- type FormattingHandler a = a -> Maybe ProgressToken -> FormattingType -> Text -> NormalizedFilePath -> FormattingOptions -> ExceptT PluginError (LspM Config) ([TextEdit] |? Null)
- mkFormattingHandlers :: FormattingHandler a -> PluginHandlers a
- class HasTracing a where
- traceWithSpan :: SpanInFlight -> a -> IO ()
- data PluginCommand ideState = FromJSON a => PluginCommand {
- commandId :: CommandId
- commandDesc :: Text
- commandFunc :: CommandFunction ideState a
- newtype CommandId = CommandId Text
- type CommandFunction ideState a = ideState -> Maybe ProgressToken -> a -> ExceptT PluginError (LspM Config) (Value |? Null)
- mkLspCommand :: PluginId -> CommandId -> Text -> Maybe [Value] -> Command
- mkLspCmdId :: Text -> PluginId -> CommandId -> Text
- newtype PluginId = PluginId Text
- newtype PluginHandler a (m :: Method 'ClientToServer 'Request) = PluginHandler (PluginId -> a -> MessageParams m -> LspM Config (NonEmpty (Either PluginError (MessageResult m))))
- mkPluginHandler :: forall ideState (m :: Method 'ClientToServer 'Request). PluginRequestMethod m => SClientMethod m -> PluginMethodHandler ideState m -> PluginHandlers ideState
- newtype PluginHandlers a = PluginHandlers (DMap IdeMethod (PluginHandler a))
- class HasTracing (MessageParams m) => PluginMethod (k :: MessageKind) (m :: Method 'ClientToServer k) where
- handlesRequest :: SMethod m -> MessageParams m -> PluginDescriptor c -> Config -> HandleRequestResult
- type PluginMethodHandler a (m :: Method f t) = a -> PluginId -> MessageParams m -> ExceptT PluginError (LspM Config) (MessageResult m)
- newtype PluginNotificationHandler a (m :: Method 'ClientToServer 'Notification) = PluginNotificationHandler (PluginId -> a -> VFS -> MessageParams m -> LspM Config ())
- mkPluginNotificationHandler :: forall (m :: Method 'ClientToServer 'Notification) ideState. PluginNotificationMethod m => SClientMethod m -> PluginNotificationMethodHandler ideState m -> PluginNotificationHandlers ideState
- newtype PluginNotificationHandlers a = PluginNotificationHandlers (DMap IdeNotification (PluginNotificationHandler a))
- class PluginMethod 'Request m => PluginRequestMethod (m :: Method 'ClientToServer 'Request) where
- combineResponses :: SMethod m -> Config -> ClientCapabilities -> MessageParams m -> NonEmpty (MessageResult m) -> MessageResult m
- getProcessID :: IO Int
- getPid :: IO Text
- installSigUsr1Handler :: IO () -> IO ()
- lookupCommandProvider :: IdePlugins ideState -> CommandId -> Maybe PluginId
- type ResolveFunction ideState a (m :: Method 'ClientToServer 'Request) = ideState -> PluginId -> MessageParams m -> Uri -> a -> ExceptT PluginError (LspM Config) (MessageResult m)
- mkResolveHandler :: forall ideState a (m :: Method 'ClientToServer 'Request). (FromJSON a, PluginRequestMethod m, HasData_ (MessageParams m) (Maybe Value)) => SClientMethod m -> ResolveFunction ideState a m -> PluginHandlers ideState
Documentation
data PluginDescriptor ideState #
Constructors
PluginDescriptor | |
Fields
|
defaultPluginDescriptor :: PluginId -> Text -> PluginDescriptor ideState #
Set up a plugin descriptor, initialized with default values.
This plugin descriptor is prepared for haskell
files, such as
.hs
.lhs
.hs-boot
and handlers will be enabled for files with the appropriate file extensions.
defaultCabalPluginDescriptor :: PluginId -> Text -> PluginDescriptor ideState #
Set up a plugin descriptor, initialized with default values.
This plugin descriptor is prepared for .cabal
files and as such,
will only respond / run when .cabal
files are currently in scope.
Handles files with the following extensions:
* .cabal
describePlugin :: PluginDescriptor c -> Doc ann #
newtype IdeCommand state #
Constructors
IdeCommand (state -> IO ()) |
Instances
Show (IdeCommand st) # | |
Defined in Ide.Types Methods showsPrec :: Int -> IdeCommand st -> ShowS # show :: IdeCommand st -> String # showList :: [IdeCommand st] -> ShowS # |
data IdeMethod (m :: Method 'ClientToServer 'Request) #
Methods which have a PluginMethod instance
Constructors
PluginRequestMethod m => IdeMethod (SMethod m) |
data IdeNotification (m :: Method 'ClientToServer 'Notification) #
Methods which have a PluginMethod instance
Constructors
PluginNotificationMethod m => IdeNotification (SMethod m) |
Instances
GCompare IdeNotification # | |
Defined in Ide.Types Methods gcompare :: forall (a :: Method 'ClientToServer 'Notification) (b :: Method 'ClientToServer 'Notification). IdeNotification a -> IdeNotification b -> GOrdering a b # | |
GEq IdeNotification # | |
Defined in Ide.Types Methods geq :: forall (a :: Method 'ClientToServer 'Notification) (b :: Method 'ClientToServer 'Notification). IdeNotification a -> IdeNotification b -> Maybe (a :~: b) # |
data IdePlugins ideState where #
Bundled Patterns
pattern IdePlugins :: [PluginDescriptor ideState] -> IdePlugins ideState | Smart constructor that deduplicates plugins |
Instances
Monoid (IdePlugins a) # | |
Defined in Ide.Types Methods mempty :: IdePlugins a # mappend :: IdePlugins a -> IdePlugins a -> IdePlugins a # mconcat :: [IdePlugins a] -> IdePlugins a # | |
Semigroup (IdePlugins a) # | |
Defined in Ide.Types Methods (<>) :: IdePlugins a -> IdePlugins a -> IdePlugins a # sconcat :: NonEmpty (IdePlugins a) -> IdePlugins a # stimes :: Integral b => b -> IdePlugins a -> IdePlugins a # |
data DynFlagsModifications #
Hooks for modifying the DynFlags
at different times of the compilation
process. Plugins can install a DynFlagsModifications
via
pluginModifyDynflags
in their PluginDescriptor
.
Constructors
DynFlagsModifications | |
Fields
|
Instances
Monoid DynFlagsModifications # | |
Defined in Ide.Types | |
Semigroup DynFlagsModifications # | |
Defined in Ide.Types Methods (<>) :: DynFlagsModifications -> DynFlagsModifications -> DynFlagsModifications # sconcat :: NonEmpty DynFlagsModifications -> DynFlagsModifications # stimes :: Integral b => b -> DynFlagsModifications -> DynFlagsModifications # |
We (initially anyway) mirror the hie configuration, so that existing clients can simply switch executable and not have any nasty surprises. There will initially be surprises relating to config options being ignored though.
Constructors
Config | |
Fields
|
data PluginConfig #
A PluginConfig is a generic configuration for a given HLS plugin. It provides a "big switch" to turn it on or off as a whole, as well as small switches per feature, and a slot for custom config. This provides a regular naming scheme for all plugin config.
Constructors
PluginConfig | |
Fields
|
Instances
ToJSON PluginConfig # | |
Defined in Ide.Types Methods toJSON :: PluginConfig -> Value # toEncoding :: PluginConfig -> Encoding # toJSONList :: [PluginConfig] -> Value # toEncodingList :: [PluginConfig] -> Encoding # omitField :: PluginConfig -> Bool # | |
Show PluginConfig # | |
Defined in Ide.Types Methods showsPrec :: Int -> PluginConfig -> ShowS # show :: PluginConfig -> String # showList :: [PluginConfig] -> ShowS # | |
Default PluginConfig # | |
Defined in Ide.Types Methods def :: PluginConfig # | |
Eq PluginConfig # | |
Defined in Ide.Types |
data CheckParents #
Constructors
NeverCheck | |
CheckOnSave | |
AlwaysCheck |
Instances
data ConfigDescriptor #
Describes the configuration of a plugin. A plugin may be configurable as can be seen below:
{ "plugin-id": { "globalOn": true, "codeActionsOn": true, "codeLensOn": true, "config": { "property1": "foo" } } }
globalOn
, codeActionsOn
, and codeLensOn
etc. are called generic configs
which can be inferred from handlers registered by the plugin.
config
is called custom config, which is defined using Properties
.
Constructors
ConfigDescriptor | |
Fields
|
configForPlugin :: Config -> PluginDescriptor c -> PluginConfig #
Lookup the current config for a plugin
mkCustomConfig :: forall (r :: [PropertyKey]). Properties r -> CustomConfig #
data FallbackCodeActionParams #
Constructors
FallbackCodeActionParams | |
Fields
|
Instances
FromJSON FallbackCodeActionParams # | |||||
Defined in Ide.Types Methods parseJSON :: Value -> Parser FallbackCodeActionParams # parseJSONList :: Value -> Parser [FallbackCodeActionParams] # | |||||
ToJSON FallbackCodeActionParams # | |||||
Defined in Ide.Types Methods toJSON :: FallbackCodeActionParams -> Value # toEncoding :: FallbackCodeActionParams -> Encoding # toJSONList :: [FallbackCodeActionParams] -> Value # | |||||
Generic FallbackCodeActionParams # | |||||
Defined in Ide.Types Associated Types
Methods from :: FallbackCodeActionParams -> Rep FallbackCodeActionParams x # to :: Rep FallbackCodeActionParams x -> FallbackCodeActionParams # | |||||
type Rep FallbackCodeActionParams # | |||||
Defined in Ide.Types type Rep FallbackCodeActionParams = D1 ('MetaData "FallbackCodeActionParams" "Ide.Types" "hls-plugin-api-2.7.0.0-HcTkuXxSLIZG3q65FjVdQM" 'False) (C1 ('MetaCons "FallbackCodeActionParams" 'PrefixI 'True) (S1 ('MetaSel ('Just "fallbackWorkspaceEdit") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe WorkspaceEdit)) :*: S1 ('MetaSel ('Just "fallbackCommand") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Maybe Command)))) |
data FormattingType #
Format the given Text as a whole or only a Range
of it.
Range must be relative to the text to format.
To format the whole document, read the Text from the file and use FormatText
as the FormattingType.
Constructors
FormatText | |
FormatRange Range |
type FormattingMethod (m :: Method f t) = (HasOptions (MessageParams m) FormattingOptions, HasTextDocument (MessageParams m) TextDocumentIdentifier, MessageResult m ~ ([TextEdit] |? Null)) #
type FormattingHandler a = a -> Maybe ProgressToken -> FormattingType -> Text -> NormalizedFilePath -> FormattingOptions -> ExceptT PluginError (LspM Config) ([TextEdit] |? Null) #
mkFormattingHandlers :: FormattingHandler a -> PluginHandlers a #
class HasTracing a where #
Minimal complete definition
Nothing
Methods
traceWithSpan :: SpanInFlight -> a -> IO () #
Instances
HasTracing Value # | |
Defined in Ide.Types Methods traceWithSpan :: SpanInFlight -> Value -> IO () # | |
HasTracing CallHierarchyIncomingCallsParams # | |
Defined in Ide.Types Methods traceWithSpan :: SpanInFlight -> CallHierarchyIncomingCallsParams -> IO () # | |
HasTracing CallHierarchyOutgoingCallsParams # | |
Defined in Ide.Types Methods traceWithSpan :: SpanInFlight -> CallHierarchyOutgoingCallsParams -> IO () # | |
HasTracing CodeAction # | |
Defined in Ide.Types Methods traceWithSpan :: SpanInFlight -> CodeAction -> IO () # | |
HasTracing CodeLens # | |
Defined in Ide.Types Methods traceWithSpan :: SpanInFlight -> CodeLens -> IO () # | |
HasTracing CompletionItem # | |
Defined in Ide.Types Methods traceWithSpan :: SpanInFlight -> CompletionItem -> IO () # | |
HasTracing DidChangeConfigurationParams # | |
Defined in Ide.Types Methods traceWithSpan :: SpanInFlight -> DidChangeConfigurationParams -> IO () # | |
HasTracing DidChangeWatchedFilesParams # | |
Defined in Ide.Types Methods traceWithSpan :: SpanInFlight -> DidChangeWatchedFilesParams -> IO () # | |
HasTracing DidChangeWorkspaceFoldersParams # | |
Defined in Ide.Types Methods traceWithSpan :: SpanInFlight -> DidChangeWorkspaceFoldersParams -> IO () # | |
HasTracing DocumentLink # | |
Defined in Ide.Types Methods traceWithSpan :: SpanInFlight -> DocumentLink -> IO () # | |
HasTracing ExecuteCommandParams # | |
Defined in Ide.Types Methods traceWithSpan :: SpanInFlight -> ExecuteCommandParams -> IO () # | |
HasTracing InitializeParams # | |
Defined in Ide.Types Methods traceWithSpan :: SpanInFlight -> InitializeParams -> IO () # | |
HasTracing InitializedParams # | |
Defined in Ide.Types Methods traceWithSpan :: SpanInFlight -> InitializedParams -> IO () # | |
HasTracing InlayHint # | |
Defined in Ide.Types Methods traceWithSpan :: SpanInFlight -> InlayHint -> IO () # | |
HasTracing WorkspaceSymbol # | |
Defined in Ide.Types Methods traceWithSpan :: SpanInFlight -> WorkspaceSymbol -> IO () # | |
HasTracing WorkspaceSymbolParams # | |
Defined in Ide.Types Methods traceWithSpan :: SpanInFlight -> WorkspaceSymbolParams -> IO () # | |
(HasTextDocument a doc, HasUri doc Uri) => HasTracing a # | |
Defined in Ide.Types Methods traceWithSpan :: SpanInFlight -> a -> IO () # |
data PluginCommand ideState #
Constructors
FromJSON a => PluginCommand | |
Fields
|
Instances
IsString CommandId # | |
Defined in Ide.Types Methods fromString :: String -> CommandId # | |
Read CommandId # | |
Show CommandId # | |
Eq CommandId # | |
Ord CommandId # | |
type CommandFunction ideState a = ideState -> Maybe ProgressToken -> a -> ExceptT PluginError (LspM Config) (Value |? Null) #
newtype PluginHandler a (m :: Method 'ClientToServer 'Request) #
Combine handlers for the
Constructors
PluginHandler (PluginId -> a -> MessageParams m -> LspM Config (NonEmpty (Either PluginError (MessageResult m)))) |
mkPluginHandler :: forall ideState (m :: Method 'ClientToServer 'Request). PluginRequestMethod m => SClientMethod m -> PluginMethodHandler ideState m -> PluginHandlers ideState #
Make a handler for plugins. For how resolve works with this see Note [Resolve in PluginHandlers]
newtype PluginHandlers a #
Constructors
PluginHandlers (DMap IdeMethod (PluginHandler a)) |
Instances
Monoid (PluginHandlers a) # | |
Defined in Ide.Types Methods mempty :: PluginHandlers a # mappend :: PluginHandlers a -> PluginHandlers a -> PluginHandlers a # mconcat :: [PluginHandlers a] -> PluginHandlers a # | |
Semigroup (PluginHandlers a) # | |
Defined in Ide.Types Methods (<>) :: PluginHandlers a -> PluginHandlers a -> PluginHandlers a # sconcat :: NonEmpty (PluginHandlers a) -> PluginHandlers a # stimes :: Integral b => b -> PluginHandlers a -> PluginHandlers a # |
class HasTracing (MessageParams m) => PluginMethod (k :: MessageKind) (m :: Method 'ClientToServer k) where #
Methods that can be handled by plugins.
ExtraParams
captures any extra data the IDE passes to the handlers for this method
Only methods for which we know how to combine responses can be instances of PluginMethod
Minimal complete definition
Nothing
Methods
Arguments
:: SMethod m | Method type. |
-> MessageParams m | Whether a plugin is enabled might depend on the message parameters
e.g. |
-> PluginDescriptor c | Contains meta information such as PluginId and which file types this plugin is able to handle. |
-> Config | Generic config description, expected to contain |
-> HandleRequestResult | Is this plugin enabled and allowed to respond to the given request with the given parameters? |
Parse the configuration to check if this plugin is globally enabled, and if the feature which handles this method is enabled. Perform sanity checks on the message to see whether the plugin handles this message in particular. This class is only used to determine whether a plugin can handle a specific request. Commands and rules do not use this logic to determine whether or not they are run.
A common reason why a plugin won't handle a request even though it is enabled: * The plugin cannot handle requests associated with the specific URI * Since the implementation of cabal plugins HLS knows plugins specific to Haskell and specific to Cabal file descriptions * The resolve request is not routed to that specific plugin. Each resolve request needs to be routed to only one plugin.
Strictly speaking, we are conflating two concepts here: * Dynamically enabled (e.g. on a per-message basis) * Statically enabled (e.g. by configuration in the lsp-client) * Strictly speaking, this might also change dynamically
But there is no use to split it up into two different methods for now.
default handlesRequest :: (HasTextDocument (MessageParams m) doc, HasUri doc Uri) => SMethod m -> MessageParams m -> PluginDescriptor c -> Config -> HandleRequestResult #
Instances
PluginMethod 'Notification 'Method_Initialized # | |
Defined in Ide.Types Methods handlesRequest :: SMethod 'Method_Initialized -> MessageParams 'Method_Initialized -> PluginDescriptor c -> Config -> HandleRequestResult # | |
PluginMethod 'Notification 'Method_TextDocumentDidChange # | |
Defined in Ide.Types Methods handlesRequest :: SMethod 'Method_TextDocumentDidChange -> MessageParams 'Method_TextDocumentDidChange -> PluginDescriptor c -> Config -> HandleRequestResult # | |
PluginMethod 'Notification 'Method_TextDocumentDidClose # | |
Defined in Ide.Types Methods handlesRequest :: SMethod 'Method_TextDocumentDidClose -> MessageParams 'Method_TextDocumentDidClose -> PluginDescriptor c -> Config -> HandleRequestResult # | |
PluginMethod 'Notification 'Method_TextDocumentDidOpen # | |
Defined in Ide.Types Methods handlesRequest :: SMethod 'Method_TextDocumentDidOpen -> MessageParams 'Method_TextDocumentDidOpen -> PluginDescriptor c -> Config -> HandleRequestResult # | |
PluginMethod 'Notification 'Method_TextDocumentDidSave # | |
Defined in Ide.Types Methods handlesRequest :: SMethod 'Method_TextDocumentDidSave -> MessageParams 'Method_TextDocumentDidSave -> PluginDescriptor c -> Config -> HandleRequestResult # | |
PluginMethod 'Notification 'Method_WorkspaceDidChangeConfiguration # | |
Defined in Ide.Types Methods handlesRequest :: SMethod 'Method_WorkspaceDidChangeConfiguration -> MessageParams 'Method_WorkspaceDidChangeConfiguration -> PluginDescriptor c -> Config -> HandleRequestResult # | |
PluginMethod 'Notification 'Method_WorkspaceDidChangeWatchedFiles # | |
Defined in Ide.Types Methods handlesRequest :: SMethod 'Method_WorkspaceDidChangeWatchedFiles -> MessageParams 'Method_WorkspaceDidChangeWatchedFiles -> PluginDescriptor c -> Config -> HandleRequestResult # | |
PluginMethod 'Notification 'Method_WorkspaceDidChangeWorkspaceFolders # | |
Defined in Ide.Types Methods handlesRequest :: SMethod 'Method_WorkspaceDidChangeWorkspaceFolders -> MessageParams 'Method_WorkspaceDidChangeWorkspaceFolders -> PluginDescriptor c -> Config -> HandleRequestResult # | |
PluginMethod 'Request 'Method_CallHierarchyIncomingCalls # | |
Defined in Ide.Types Methods handlesRequest :: SMethod 'Method_CallHierarchyIncomingCalls -> MessageParams 'Method_CallHierarchyIncomingCalls -> PluginDescriptor c -> Config -> HandleRequestResult # | |
PluginMethod 'Request 'Method_CallHierarchyOutgoingCalls # | |
Defined in Ide.Types Methods handlesRequest :: SMethod 'Method_CallHierarchyOutgoingCalls -> MessageParams 'Method_CallHierarchyOutgoingCalls -> PluginDescriptor c -> Config -> HandleRequestResult # | |
PluginMethod 'Request 'Method_CodeActionResolve # | |
Defined in Ide.Types Methods handlesRequest :: SMethod 'Method_CodeActionResolve -> MessageParams 'Method_CodeActionResolve -> PluginDescriptor c -> Config -> HandleRequestResult # | |
PluginMethod 'Request 'Method_CodeLensResolve # | |
Defined in Ide.Types Methods handlesRequest :: SMethod 'Method_CodeLensResolve -> MessageParams 'Method_CodeLensResolve -> PluginDescriptor c -> Config -> HandleRequestResult # | |
PluginMethod 'Request 'Method_CompletionItemResolve # | |
Defined in Ide.Types Methods handlesRequest :: SMethod 'Method_CompletionItemResolve -> MessageParams 'Method_CompletionItemResolve -> PluginDescriptor c -> Config -> HandleRequestResult # | |
PluginMethod 'Request 'Method_TextDocumentCodeAction # | |
Defined in Ide.Types Methods handlesRequest :: SMethod 'Method_TextDocumentCodeAction -> MessageParams 'Method_TextDocumentCodeAction -> PluginDescriptor c -> Config -> HandleRequestResult # | |
PluginMethod 'Request 'Method_TextDocumentCodeLens # | |
Defined in Ide.Types Methods handlesRequest :: SMethod 'Method_TextDocumentCodeLens -> MessageParams 'Method_TextDocumentCodeLens -> PluginDescriptor c -> Config -> HandleRequestResult # | |
PluginMethod 'Request 'Method_TextDocumentCompletion # | |
Defined in Ide.Types Methods handlesRequest :: SMethod 'Method_TextDocumentCompletion -> MessageParams 'Method_TextDocumentCompletion -> PluginDescriptor c -> Config -> HandleRequestResult # | |
PluginMethod 'Request 'Method_TextDocumentDefinition # | |
Defined in Ide.Types Methods handlesRequest :: SMethod 'Method_TextDocumentDefinition -> MessageParams 'Method_TextDocumentDefinition -> PluginDescriptor c -> Config -> HandleRequestResult # | |
PluginMethod 'Request 'Method_TextDocumentDocumentHighlight # | |
Defined in Ide.Types Methods handlesRequest :: SMethod 'Method_TextDocumentDocumentHighlight -> MessageParams 'Method_TextDocumentDocumentHighlight -> PluginDescriptor c -> Config -> HandleRequestResult # | |
PluginMethod 'Request 'Method_TextDocumentDocumentSymbol # | |
Defined in Ide.Types Methods handlesRequest :: SMethod 'Method_TextDocumentDocumentSymbol -> MessageParams 'Method_TextDocumentDocumentSymbol -> PluginDescriptor c -> Config -> HandleRequestResult # | |
PluginMethod 'Request 'Method_TextDocumentFoldingRange # | |
Defined in Ide.Types Methods handlesRequest :: SMethod 'Method_TextDocumentFoldingRange -> MessageParams 'Method_TextDocumentFoldingRange -> PluginDescriptor c -> Config -> HandleRequestResult # | |
PluginMethod 'Request 'Method_TextDocumentFormatting # | |
Defined in Ide.Types Methods handlesRequest :: SMethod 'Method_TextDocumentFormatting -> MessageParams 'Method_TextDocumentFormatting -> PluginDescriptor c -> Config -> HandleRequestResult # | |
PluginMethod 'Request 'Method_TextDocumentHover # | |
Defined in Ide.Types Methods handlesRequest :: SMethod 'Method_TextDocumentHover -> MessageParams 'Method_TextDocumentHover -> PluginDescriptor c -> Config -> HandleRequestResult # | |
PluginMethod 'Request 'Method_TextDocumentPrepareCallHierarchy # | |
Defined in Ide.Types Methods handlesRequest :: SMethod 'Method_TextDocumentPrepareCallHierarchy -> MessageParams 'Method_TextDocumentPrepareCallHierarchy -> PluginDescriptor c -> Config -> HandleRequestResult # | |
PluginMethod 'Request 'Method_TextDocumentRangeFormatting # | |
Defined in Ide.Types Methods handlesRequest :: SMethod 'Method_TextDocumentRangeFormatting -> MessageParams 'Method_TextDocumentRangeFormatting -> PluginDescriptor c -> Config -> HandleRequestResult # | |
PluginMethod 'Request 'Method_TextDocumentReferences # | |
Defined in Ide.Types Methods handlesRequest :: SMethod 'Method_TextDocumentReferences -> MessageParams 'Method_TextDocumentReferences -> PluginDescriptor c -> Config -> HandleRequestResult # | |
PluginMethod 'Request 'Method_TextDocumentRename # | |
Defined in Ide.Types Methods handlesRequest :: SMethod 'Method_TextDocumentRename -> MessageParams 'Method_TextDocumentRename -> PluginDescriptor c -> Config -> HandleRequestResult # | |
PluginMethod 'Request 'Method_TextDocumentSelectionRange # | |
Defined in Ide.Types Methods handlesRequest :: SMethod 'Method_TextDocumentSelectionRange -> MessageParams 'Method_TextDocumentSelectionRange -> PluginDescriptor c -> Config -> HandleRequestResult # | |
PluginMethod 'Request 'Method_TextDocumentSemanticTokensFull # | |
Defined in Ide.Types Methods handlesRequest :: SMethod 'Method_TextDocumentSemanticTokensFull -> MessageParams 'Method_TextDocumentSemanticTokensFull -> PluginDescriptor c -> Config -> HandleRequestResult # | |
PluginMethod 'Request 'Method_TextDocumentSemanticTokensFullDelta # | |
Defined in Ide.Types Methods handlesRequest :: SMethod 'Method_TextDocumentSemanticTokensFullDelta -> MessageParams 'Method_TextDocumentSemanticTokensFullDelta -> PluginDescriptor c -> Config -> HandleRequestResult # | |
PluginMethod 'Request 'Method_TextDocumentTypeDefinition # | |
Defined in Ide.Types Methods handlesRequest :: SMethod 'Method_TextDocumentTypeDefinition -> MessageParams 'Method_TextDocumentTypeDefinition -> PluginDescriptor c -> Config -> HandleRequestResult # | |
PluginMethod 'Request 'Method_WorkspaceExecuteCommand # | |
Defined in Ide.Types Methods handlesRequest :: SMethod 'Method_WorkspaceExecuteCommand -> MessageParams 'Method_WorkspaceExecuteCommand -> PluginDescriptor c -> Config -> HandleRequestResult # | |
PluginMethod 'Request 'Method_WorkspaceSymbol # | |
Defined in Ide.Types Methods handlesRequest :: SMethod 'Method_WorkspaceSymbol -> MessageParams 'Method_WorkspaceSymbol -> PluginDescriptor c -> Config -> HandleRequestResult # | |
PluginMethod 'Request ('Method_CustomMethod m :: Method 'ClientToServer 'Request) # | |
Defined in Ide.Types Methods handlesRequest :: SMethod ('Method_CustomMethod m :: Method 'ClientToServer 'Request) -> MessageParams ('Method_CustomMethod m :: Method 'ClientToServer 'Request) -> PluginDescriptor c -> Config -> HandleRequestResult # |
type PluginMethodHandler a (m :: Method f t) = a -> PluginId -> MessageParams m -> ExceptT PluginError (LspM Config) (MessageResult m) #
newtype PluginNotificationHandler a (m :: Method 'ClientToServer 'Notification) #
Constructors
PluginNotificationHandler (PluginId -> a -> VFS -> MessageParams m -> LspM Config ()) |
mkPluginNotificationHandler :: forall (m :: Method 'ClientToServer 'Notification) ideState. PluginNotificationMethod m => SClientMethod m -> PluginNotificationMethodHandler ideState m -> PluginNotificationHandlers ideState #
Make a handler for plugins with no extra data
newtype PluginNotificationHandlers a #
Constructors
PluginNotificationHandlers (DMap IdeNotification (PluginNotificationHandler a)) |
Instances
Monoid (PluginNotificationHandlers a) # | |
Defined in Ide.Types Methods mempty :: PluginNotificationHandlers a # mappend :: PluginNotificationHandlers a -> PluginNotificationHandlers a -> PluginNotificationHandlers a # mconcat :: [PluginNotificationHandlers a] -> PluginNotificationHandlers a # | |
Semigroup (PluginNotificationHandlers a) # | |
Defined in Ide.Types Methods (<>) :: PluginNotificationHandlers a -> PluginNotificationHandlers a -> PluginNotificationHandlers a # sconcat :: NonEmpty (PluginNotificationHandlers a) -> PluginNotificationHandlers a # stimes :: Integral b => b -> PluginNotificationHandlers a -> PluginNotificationHandlers a # |
class PluginMethod 'Request m => PluginRequestMethod (m :: Method 'ClientToServer 'Request) where #
Minimal complete definition
Nothing
Methods
Arguments
:: SMethod m | |
-> Config | IDE Configuration |
-> ClientCapabilities | |
-> MessageParams m | |
-> NonEmpty (MessageResult m) | |
-> MessageResult m |
How to combine responses from different plugins.
For example, for Hover requests, we might have multiple producers of Hover information. We do not want to decide which one to display to the user but instead allow to define how to merge two hover request responses into one glorious hover box.
However, as sometimes only one handler of a request can realistically exist (such as TextDocumentFormatting), it is safe to just unconditionally report back one arbitrary result (arbitrary since it should only be one anyway).
default combineResponses :: Semigroup (MessageResult m) => SMethod m -> Config -> ClientCapabilities -> MessageParams m -> NonEmpty (MessageResult m) -> MessageResult m #
Instances
PluginRequestMethod 'Method_CallHierarchyIncomingCalls # | |
Defined in Ide.Types Methods combineResponses :: SMethod 'Method_CallHierarchyIncomingCalls -> Config -> ClientCapabilities -> MessageParams 'Method_CallHierarchyIncomingCalls -> NonEmpty (MessageResult 'Method_CallHierarchyIncomingCalls) -> MessageResult 'Method_CallHierarchyIncomingCalls # | |
PluginRequestMethod 'Method_CallHierarchyOutgoingCalls # | |
Defined in Ide.Types Methods combineResponses :: SMethod 'Method_CallHierarchyOutgoingCalls -> Config -> ClientCapabilities -> MessageParams 'Method_CallHierarchyOutgoingCalls -> NonEmpty (MessageResult 'Method_CallHierarchyOutgoingCalls) -> MessageResult 'Method_CallHierarchyOutgoingCalls # | |
PluginRequestMethod 'Method_CodeActionResolve # | |
Defined in Ide.Types Methods combineResponses :: SMethod 'Method_CodeActionResolve -> Config -> ClientCapabilities -> MessageParams 'Method_CodeActionResolve -> NonEmpty (MessageResult 'Method_CodeActionResolve) -> MessageResult 'Method_CodeActionResolve # | |
PluginRequestMethod 'Method_CodeLensResolve # | |
Defined in Ide.Types Methods combineResponses :: SMethod 'Method_CodeLensResolve -> Config -> ClientCapabilities -> MessageParams 'Method_CodeLensResolve -> NonEmpty (MessageResult 'Method_CodeLensResolve) -> MessageResult 'Method_CodeLensResolve # | |
PluginRequestMethod 'Method_CompletionItemResolve # | |
Defined in Ide.Types Methods combineResponses :: SMethod 'Method_CompletionItemResolve -> Config -> ClientCapabilities -> MessageParams 'Method_CompletionItemResolve -> NonEmpty (MessageResult 'Method_CompletionItemResolve) -> MessageResult 'Method_CompletionItemResolve # | |
PluginRequestMethod 'Method_TextDocumentCodeAction # | |
Defined in Ide.Types Methods combineResponses :: SMethod 'Method_TextDocumentCodeAction -> Config -> ClientCapabilities -> MessageParams 'Method_TextDocumentCodeAction -> NonEmpty (MessageResult 'Method_TextDocumentCodeAction) -> MessageResult 'Method_TextDocumentCodeAction # | |
PluginRequestMethod 'Method_TextDocumentCodeLens # | |
Defined in Ide.Types Methods combineResponses :: SMethod 'Method_TextDocumentCodeLens -> Config -> ClientCapabilities -> MessageParams 'Method_TextDocumentCodeLens -> NonEmpty (MessageResult 'Method_TextDocumentCodeLens) -> MessageResult 'Method_TextDocumentCodeLens # | |
PluginRequestMethod 'Method_TextDocumentCompletion # | |
Defined in Ide.Types Methods combineResponses :: SMethod 'Method_TextDocumentCompletion -> Config -> ClientCapabilities -> MessageParams 'Method_TextDocumentCompletion -> NonEmpty (MessageResult 'Method_TextDocumentCompletion) -> MessageResult 'Method_TextDocumentCompletion # | |
PluginRequestMethod 'Method_TextDocumentDefinition # | |
Defined in Ide.Types Methods combineResponses :: SMethod 'Method_TextDocumentDefinition -> Config -> ClientCapabilities -> MessageParams 'Method_TextDocumentDefinition -> NonEmpty (MessageResult 'Method_TextDocumentDefinition) -> MessageResult 'Method_TextDocumentDefinition # | |
PluginRequestMethod 'Method_TextDocumentDocumentHighlight # | |
Defined in Ide.Types Methods combineResponses :: SMethod 'Method_TextDocumentDocumentHighlight -> Config -> ClientCapabilities -> MessageParams 'Method_TextDocumentDocumentHighlight -> NonEmpty (MessageResult 'Method_TextDocumentDocumentHighlight) -> MessageResult 'Method_TextDocumentDocumentHighlight # | |
PluginRequestMethod 'Method_TextDocumentDocumentSymbol # | |
Defined in Ide.Types Methods combineResponses :: SMethod 'Method_TextDocumentDocumentSymbol -> Config -> ClientCapabilities -> MessageParams 'Method_TextDocumentDocumentSymbol -> NonEmpty (MessageResult 'Method_TextDocumentDocumentSymbol) -> MessageResult 'Method_TextDocumentDocumentSymbol # | |
PluginRequestMethod 'Method_TextDocumentFoldingRange # | |
Defined in Ide.Types Methods combineResponses :: SMethod 'Method_TextDocumentFoldingRange -> Config -> ClientCapabilities -> MessageParams 'Method_TextDocumentFoldingRange -> NonEmpty (MessageResult 'Method_TextDocumentFoldingRange) -> MessageResult 'Method_TextDocumentFoldingRange # | |
PluginRequestMethod 'Method_TextDocumentFormatting # | |
Defined in Ide.Types Methods combineResponses :: SMethod 'Method_TextDocumentFormatting -> Config -> ClientCapabilities -> MessageParams 'Method_TextDocumentFormatting -> NonEmpty (MessageResult 'Method_TextDocumentFormatting) -> MessageResult 'Method_TextDocumentFormatting # | |
PluginRequestMethod 'Method_TextDocumentHover # | |
Defined in Ide.Types Methods combineResponses :: SMethod 'Method_TextDocumentHover -> Config -> ClientCapabilities -> MessageParams 'Method_TextDocumentHover -> NonEmpty (MessageResult 'Method_TextDocumentHover) -> MessageResult 'Method_TextDocumentHover # | |
PluginRequestMethod 'Method_TextDocumentPrepareCallHierarchy # | |
Defined in Ide.Types Methods combineResponses :: SMethod 'Method_TextDocumentPrepareCallHierarchy -> Config -> ClientCapabilities -> MessageParams 'Method_TextDocumentPrepareCallHierarchy -> NonEmpty (MessageResult 'Method_TextDocumentPrepareCallHierarchy) -> MessageResult 'Method_TextDocumentPrepareCallHierarchy # | |
PluginRequestMethod 'Method_TextDocumentRangeFormatting # | |
Defined in Ide.Types Methods combineResponses :: SMethod 'Method_TextDocumentRangeFormatting -> Config -> ClientCapabilities -> MessageParams 'Method_TextDocumentRangeFormatting -> NonEmpty (MessageResult 'Method_TextDocumentRangeFormatting) -> MessageResult 'Method_TextDocumentRangeFormatting # | |
PluginRequestMethod 'Method_TextDocumentReferences # | |
Defined in Ide.Types Methods combineResponses :: SMethod 'Method_TextDocumentReferences -> Config -> ClientCapabilities -> MessageParams 'Method_TextDocumentReferences -> NonEmpty (MessageResult 'Method_TextDocumentReferences) -> MessageResult 'Method_TextDocumentReferences # | |
PluginRequestMethod 'Method_TextDocumentRename # | |
Defined in Ide.Types Methods combineResponses :: SMethod 'Method_TextDocumentRename -> Config -> ClientCapabilities -> MessageParams 'Method_TextDocumentRename -> NonEmpty (MessageResult 'Method_TextDocumentRename) -> MessageResult 'Method_TextDocumentRename # | |
PluginRequestMethod 'Method_TextDocumentSelectionRange # | |
Defined in Ide.Types Methods combineResponses :: SMethod 'Method_TextDocumentSelectionRange -> Config -> ClientCapabilities -> MessageParams 'Method_TextDocumentSelectionRange -> NonEmpty (MessageResult 'Method_TextDocumentSelectionRange) -> MessageResult 'Method_TextDocumentSelectionRange # | |
PluginRequestMethod 'Method_TextDocumentSemanticTokensFull # | |
Defined in Ide.Types Methods combineResponses :: SMethod 'Method_TextDocumentSemanticTokensFull -> Config -> ClientCapabilities -> MessageParams 'Method_TextDocumentSemanticTokensFull -> NonEmpty (MessageResult 'Method_TextDocumentSemanticTokensFull) -> MessageResult 'Method_TextDocumentSemanticTokensFull # | |
PluginRequestMethod 'Method_TextDocumentSemanticTokensFullDelta # | |
Defined in Ide.Types Methods combineResponses :: SMethod 'Method_TextDocumentSemanticTokensFullDelta -> Config -> ClientCapabilities -> MessageParams 'Method_TextDocumentSemanticTokensFullDelta -> NonEmpty (MessageResult 'Method_TextDocumentSemanticTokensFullDelta) -> MessageResult 'Method_TextDocumentSemanticTokensFullDelta # | |
PluginRequestMethod 'Method_TextDocumentTypeDefinition # | |
Defined in Ide.Types Methods combineResponses :: SMethod 'Method_TextDocumentTypeDefinition -> Config -> ClientCapabilities -> MessageParams 'Method_TextDocumentTypeDefinition -> NonEmpty (MessageResult 'Method_TextDocumentTypeDefinition) -> MessageResult 'Method_TextDocumentTypeDefinition # | |
PluginRequestMethod 'Method_WorkspaceSymbol # | |
Defined in Ide.Types Methods combineResponses :: SMethod 'Method_WorkspaceSymbol -> Config -> ClientCapabilities -> MessageParams 'Method_WorkspaceSymbol -> NonEmpty (MessageResult 'Method_WorkspaceSymbol) -> MessageResult 'Method_WorkspaceSymbol # | |
PluginRequestMethod ('Method_CustomMethod m :: Method 'ClientToServer 'Request) # | |
Defined in Ide.Types Methods combineResponses :: SMethod ('Method_CustomMethod m :: Method 'ClientToServer 'Request) -> Config -> ClientCapabilities -> MessageParams ('Method_CustomMethod m :: Method 'ClientToServer 'Request) -> NonEmpty (MessageResult ('Method_CustomMethod m :: Method 'ClientToServer 'Request)) -> MessageResult ('Method_CustomMethod m :: Method 'ClientToServer 'Request) # |
getProcessID :: IO Int #
Get the operating system process id for the running server instance. This should be the same for the lifetime of the instance, and different from that of any other currently running instance.
installSigUsr1Handler :: IO () -> IO () #
lookupCommandProvider :: IdePlugins ideState -> CommandId -> Maybe PluginId #
type ResolveFunction ideState a (m :: Method 'ClientToServer 'Request) = ideState -> PluginId -> MessageParams m -> Uri -> a -> ExceptT PluginError (LspM Config) (MessageResult m) #
mkResolveHandler :: forall ideState a (m :: Method 'ClientToServer 'Request). (FromJSON a, PluginRequestMethod m, HasData_ (MessageParams m) (Maybe Value)) => SClientMethod m -> ResolveFunction ideState a m -> PluginHandlers ideState #
Make a handler for resolve methods. In here we take your provided ResolveFunction and turn it into a PluginHandlers. See Note [Resolve in PluginHandlers]