hls-plugin-api-2.7.0.0: Haskell Language Server API for plugin communication
Safe HaskellNone
LanguageGHC2021

Ide.Types

Synopsis

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

newtype IdeCommand state #

Constructors

IdeCommand (state -> IO ()) 

Instances

Instances details
Show (IdeCommand st) # 
Instance details

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) 

Instances

Instances details
GCompare IdeMethod # 
Instance details

Defined in Ide.Types

Methods

gcompare :: forall (a :: Method 'ClientToServer 'Request) (b :: Method 'ClientToServer 'Request). IdeMethod a -> IdeMethod b -> GOrdering a b #

GEq IdeMethod # 
Instance details

Defined in Ide.Types

Methods

geq :: forall (a :: Method 'ClientToServer 'Request) (b :: Method 'ClientToServer 'Request). IdeMethod a -> IdeMethod b -> Maybe (a :~: b) #

data IdeNotification (m :: Method 'ClientToServer 'Notification) #

Methods which have a PluginMethod instance

Constructors

PluginNotificationMethod m => IdeNotification (SMethod m) 

Instances

Instances details
GCompare IdeNotification # 
Instance details

Defined in Ide.Types

Methods

gcompare :: forall (a :: Method 'ClientToServer 'Notification) (b :: Method 'ClientToServer 'Notification). IdeNotification a -> IdeNotification b -> GOrdering a b #

GEq IdeNotification # 
Instance details

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

Instances details
Monoid (IdePlugins a) # 
Instance details

Defined in Ide.Types

Semigroup (IdePlugins a) # 
Instance details

Defined in Ide.Types

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

data Config #

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.

Instances

Instances details
ToJSON Config # 
Instance details

Defined in Ide.Types

Show Config # 
Instance details

Defined in Ide.Types

Default Config # 
Instance details

Defined in Ide.Types

Methods

def :: Config #

Eq Config # 
Instance details

Defined in Ide.Types

Methods

(==) :: Config -> Config -> Bool #

(/=) :: Config -> Config -> Bool #

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.

Instances

Instances details
ToJSON PluginConfig # 
Instance details

Defined in Ide.Types

Show PluginConfig # 
Instance details

Defined in Ide.Types

Default PluginConfig # 
Instance details

Defined in Ide.Types

Methods

def :: PluginConfig #

Eq PluginConfig # 
Instance details

Defined in Ide.Types

data CheckParents #

Instances

Instances details
FromJSON CheckParents # 
Instance details

Defined in Ide.Types

ToJSON CheckParents # 
Instance details

Defined in Ide.Types

Generic CheckParents # 
Instance details

Defined in Ide.Types

Associated Types

type Rep CheckParents 
Instance details

Defined in Ide.Types

type Rep CheckParents = D1 ('MetaData "CheckParents" "Ide.Types" "hls-plugin-api-2.7.0.0-HcTkuXxSLIZG3q65FjVdQM" 'False) (C1 ('MetaCons "NeverCheck" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "CheckOnSave" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "AlwaysCheck" 'PrefixI 'False) (U1 :: Type -> Type)))
Show CheckParents # 
Instance details

Defined in Ide.Types

Eq CheckParents # 
Instance details

Defined in Ide.Types

Ord CheckParents # 
Instance details

Defined in Ide.Types

type Rep CheckParents # 
Instance details

Defined in Ide.Types

type Rep CheckParents = D1 ('MetaData "CheckParents" "Ide.Types" "hls-plugin-api-2.7.0.0-HcTkuXxSLIZG3q65FjVdQM" 'False) (C1 ('MetaCons "NeverCheck" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "CheckOnSave" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "AlwaysCheck" 'PrefixI 'False) (U1 :: Type -> Type)))

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

data CustomConfig #

An existential wrapper of Properties

Constructors

CustomConfig (Properties r) 

data FallbackCodeActionParams #

Constructors

FallbackCodeActionParams 

Fields

Instances

Instances details
FromJSON FallbackCodeActionParams # 
Instance details

Defined in Ide.Types

ToJSON FallbackCodeActionParams # 
Instance details

Defined in Ide.Types

Generic FallbackCodeActionParams # 
Instance details

Defined in Ide.Types

Associated Types

type Rep FallbackCodeActionParams 
Instance details

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))))
type Rep FallbackCodeActionParams # 
Instance details

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

class HasTracing a where #

Minimal complete definition

Nothing

Methods

traceWithSpan :: SpanInFlight -> a -> IO () #

Instances

Instances details
HasTracing Value # 
Instance details

Defined in Ide.Types

Methods

traceWithSpan :: SpanInFlight -> Value -> IO () #

HasTracing CallHierarchyIncomingCallsParams # 
Instance details

Defined in Ide.Types

Methods

traceWithSpan :: SpanInFlight -> CallHierarchyIncomingCallsParams -> IO () #

HasTracing CallHierarchyOutgoingCallsParams # 
Instance details

Defined in Ide.Types

Methods

traceWithSpan :: SpanInFlight -> CallHierarchyOutgoingCallsParams -> IO () #

HasTracing CodeAction # 
Instance details

Defined in Ide.Types

Methods

traceWithSpan :: SpanInFlight -> CodeAction -> IO () #

HasTracing CodeLens # 
Instance details

Defined in Ide.Types

Methods

traceWithSpan :: SpanInFlight -> CodeLens -> IO () #

HasTracing CompletionItem # 
Instance details

Defined in Ide.Types

Methods

traceWithSpan :: SpanInFlight -> CompletionItem -> IO () #

HasTracing DidChangeConfigurationParams # 
Instance details

Defined in Ide.Types

Methods

traceWithSpan :: SpanInFlight -> DidChangeConfigurationParams -> IO () #

HasTracing DidChangeWatchedFilesParams # 
Instance details

Defined in Ide.Types

Methods

traceWithSpan :: SpanInFlight -> DidChangeWatchedFilesParams -> IO () #

HasTracing DidChangeWorkspaceFoldersParams # 
Instance details

Defined in Ide.Types

Methods

traceWithSpan :: SpanInFlight -> DidChangeWorkspaceFoldersParams -> IO () #

HasTracing DocumentLink # 
Instance details

Defined in Ide.Types

Methods

traceWithSpan :: SpanInFlight -> DocumentLink -> IO () #

HasTracing ExecuteCommandParams # 
Instance details

Defined in Ide.Types

Methods

traceWithSpan :: SpanInFlight -> ExecuteCommandParams -> IO () #

HasTracing InitializeParams # 
Instance details

Defined in Ide.Types

Methods

traceWithSpan :: SpanInFlight -> InitializeParams -> IO () #

HasTracing InitializedParams # 
Instance details

Defined in Ide.Types

Methods

traceWithSpan :: SpanInFlight -> InitializedParams -> IO () #

HasTracing InlayHint # 
Instance details

Defined in Ide.Types

Methods

traceWithSpan :: SpanInFlight -> InlayHint -> IO () #

HasTracing WorkspaceSymbol # 
Instance details

Defined in Ide.Types

Methods

traceWithSpan :: SpanInFlight -> WorkspaceSymbol -> IO () #

HasTracing WorkspaceSymbolParams # 
Instance details

Defined in Ide.Types

Methods

traceWithSpan :: SpanInFlight -> WorkspaceSymbolParams -> IO () #

(HasTextDocument a doc, HasUri doc Uri) => HasTracing a # 
Instance details

Defined in Ide.Types

Methods

traceWithSpan :: SpanInFlight -> a -> IO () #

data PluginCommand ideState #

Constructors

FromJSON a => PluginCommand 

newtype CommandId #

Constructors

CommandId Text 

Instances

Instances details
IsString CommandId # 
Instance details

Defined in Ide.Types

Read CommandId # 
Instance details

Defined in Ide.Types

Show CommandId # 
Instance details

Defined in Ide.Types

Eq CommandId # 
Instance details

Defined in Ide.Types

Ord CommandId # 
Instance details

Defined in Ide.Types

type CommandFunction ideState a = ideState -> Maybe ProgressToken -> a -> ExceptT PluginError (LspM Config) (Value |? Null) #

mkLspCommand :: PluginId -> CommandId -> Text -> Maybe [Value] -> Command #

newtype PluginId #

Constructors

PluginId Text 

Instances

Instances details
FromJSON PluginId # 
Instance details

Defined in Ide.Types

ToJSON PluginId # 
Instance details

Defined in Ide.Types

IsString PluginId # 
Instance details

Defined in Ide.Types

Read PluginId # 
Instance details

Defined in Ide.Types

Show PluginId # 
Instance details

Defined in Ide.Types

Eq PluginId # 
Instance details

Defined in Ide.Types

Ord PluginId # 
Instance details

Defined in Ide.Types

Hashable PluginId # 
Instance details

Defined in Ide.Types

Methods

hashWithSalt :: Int -> PluginId -> Int #

hash :: PluginId -> Int #

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 #

Instances

Instances details
Monoid (PluginHandlers a) # 
Instance details

Defined in Ide.Types

Semigroup (PluginHandlers a) # 
Instance details

Defined in Ide.Types

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

handlesRequest #

Arguments

:: SMethod m

Method type.

-> MessageParams m

Whether a plugin is enabled might depend on the message parameters e.g. pluginFileType specifies which file extensions a plugin is allowed to handle

-> 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 PluginConfig configuration for this plugin

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

Instances details
PluginMethod 'Notification 'Method_Initialized # 
Instance details

Defined in Ide.Types

Methods

handlesRequest :: SMethod 'Method_Initialized -> MessageParams 'Method_Initialized -> PluginDescriptor c -> Config -> HandleRequestResult #

PluginMethod 'Notification 'Method_TextDocumentDidChange # 
Instance details

Defined in Ide.Types

Methods

handlesRequest :: SMethod 'Method_TextDocumentDidChange -> MessageParams 'Method_TextDocumentDidChange -> PluginDescriptor c -> Config -> HandleRequestResult #

PluginMethod 'Notification 'Method_TextDocumentDidClose # 
Instance details

Defined in Ide.Types

Methods

handlesRequest :: SMethod 'Method_TextDocumentDidClose -> MessageParams 'Method_TextDocumentDidClose -> PluginDescriptor c -> Config -> HandleRequestResult #

PluginMethod 'Notification 'Method_TextDocumentDidOpen # 
Instance details

Defined in Ide.Types

Methods

handlesRequest :: SMethod 'Method_TextDocumentDidOpen -> MessageParams 'Method_TextDocumentDidOpen -> PluginDescriptor c -> Config -> HandleRequestResult #

PluginMethod 'Notification 'Method_TextDocumentDidSave # 
Instance details

Defined in Ide.Types

Methods

handlesRequest :: SMethod 'Method_TextDocumentDidSave -> MessageParams 'Method_TextDocumentDidSave -> PluginDescriptor c -> Config -> HandleRequestResult #

PluginMethod 'Notification 'Method_WorkspaceDidChangeConfiguration # 
Instance details

Defined in Ide.Types

Methods

handlesRequest :: SMethod 'Method_WorkspaceDidChangeConfiguration -> MessageParams 'Method_WorkspaceDidChangeConfiguration -> PluginDescriptor c -> Config -> HandleRequestResult #

PluginMethod 'Notification 'Method_WorkspaceDidChangeWatchedFiles # 
Instance details

Defined in Ide.Types

Methods

handlesRequest :: SMethod 'Method_WorkspaceDidChangeWatchedFiles -> MessageParams 'Method_WorkspaceDidChangeWatchedFiles -> PluginDescriptor c -> Config -> HandleRequestResult #

PluginMethod 'Notification 'Method_WorkspaceDidChangeWorkspaceFolders # 
Instance details

Defined in Ide.Types

Methods

handlesRequest :: SMethod 'Method_WorkspaceDidChangeWorkspaceFolders -> MessageParams 'Method_WorkspaceDidChangeWorkspaceFolders -> PluginDescriptor c -> Config -> HandleRequestResult #

PluginMethod 'Request 'Method_CallHierarchyIncomingCalls # 
Instance details

Defined in Ide.Types

Methods

handlesRequest :: SMethod 'Method_CallHierarchyIncomingCalls -> MessageParams 'Method_CallHierarchyIncomingCalls -> PluginDescriptor c -> Config -> HandleRequestResult #

PluginMethod 'Request 'Method_CallHierarchyOutgoingCalls # 
Instance details

Defined in Ide.Types

Methods

handlesRequest :: SMethod 'Method_CallHierarchyOutgoingCalls -> MessageParams 'Method_CallHierarchyOutgoingCalls -> PluginDescriptor c -> Config -> HandleRequestResult #

PluginMethod 'Request 'Method_CodeActionResolve # 
Instance details

Defined in Ide.Types

Methods

handlesRequest :: SMethod 'Method_CodeActionResolve -> MessageParams 'Method_CodeActionResolve -> PluginDescriptor c -> Config -> HandleRequestResult #

PluginMethod 'Request 'Method_CodeLensResolve # 
Instance details

Defined in Ide.Types

Methods

handlesRequest :: SMethod 'Method_CodeLensResolve -> MessageParams 'Method_CodeLensResolve -> PluginDescriptor c -> Config -> HandleRequestResult #

PluginMethod 'Request 'Method_CompletionItemResolve # 
Instance details

Defined in Ide.Types

Methods

handlesRequest :: SMethod 'Method_CompletionItemResolve -> MessageParams 'Method_CompletionItemResolve -> PluginDescriptor c -> Config -> HandleRequestResult #

PluginMethod 'Request 'Method_TextDocumentCodeAction # 
Instance details

Defined in Ide.Types

Methods

handlesRequest :: SMethod 'Method_TextDocumentCodeAction -> MessageParams 'Method_TextDocumentCodeAction -> PluginDescriptor c -> Config -> HandleRequestResult #

PluginMethod 'Request 'Method_TextDocumentCodeLens # 
Instance details

Defined in Ide.Types

Methods

handlesRequest :: SMethod 'Method_TextDocumentCodeLens -> MessageParams 'Method_TextDocumentCodeLens -> PluginDescriptor c -> Config -> HandleRequestResult #

PluginMethod 'Request 'Method_TextDocumentCompletion # 
Instance details

Defined in Ide.Types

Methods

handlesRequest :: SMethod 'Method_TextDocumentCompletion -> MessageParams 'Method_TextDocumentCompletion -> PluginDescriptor c -> Config -> HandleRequestResult #

PluginMethod 'Request 'Method_TextDocumentDefinition # 
Instance details

Defined in Ide.Types

Methods

handlesRequest :: SMethod 'Method_TextDocumentDefinition -> MessageParams 'Method_TextDocumentDefinition -> PluginDescriptor c -> Config -> HandleRequestResult #

PluginMethod 'Request 'Method_TextDocumentDocumentHighlight # 
Instance details

Defined in Ide.Types

Methods

handlesRequest :: SMethod 'Method_TextDocumentDocumentHighlight -> MessageParams 'Method_TextDocumentDocumentHighlight -> PluginDescriptor c -> Config -> HandleRequestResult #

PluginMethod 'Request 'Method_TextDocumentDocumentSymbol # 
Instance details

Defined in Ide.Types

Methods

handlesRequest :: SMethod 'Method_TextDocumentDocumentSymbol -> MessageParams 'Method_TextDocumentDocumentSymbol -> PluginDescriptor c -> Config -> HandleRequestResult #

PluginMethod 'Request 'Method_TextDocumentFoldingRange # 
Instance details

Defined in Ide.Types

Methods

handlesRequest :: SMethod 'Method_TextDocumentFoldingRange -> MessageParams 'Method_TextDocumentFoldingRange -> PluginDescriptor c -> Config -> HandleRequestResult #

PluginMethod 'Request 'Method_TextDocumentFormatting # 
Instance details

Defined in Ide.Types

Methods

handlesRequest :: SMethod 'Method_TextDocumentFormatting -> MessageParams 'Method_TextDocumentFormatting -> PluginDescriptor c -> Config -> HandleRequestResult #

PluginMethod 'Request 'Method_TextDocumentHover # 
Instance details

Defined in Ide.Types

Methods

handlesRequest :: SMethod 'Method_TextDocumentHover -> MessageParams 'Method_TextDocumentHover -> PluginDescriptor c -> Config -> HandleRequestResult #

PluginMethod 'Request 'Method_TextDocumentPrepareCallHierarchy # 
Instance details

Defined in Ide.Types

Methods

handlesRequest :: SMethod 'Method_TextDocumentPrepareCallHierarchy -> MessageParams 'Method_TextDocumentPrepareCallHierarchy -> PluginDescriptor c -> Config -> HandleRequestResult #

PluginMethod 'Request 'Method_TextDocumentRangeFormatting # 
Instance details

Defined in Ide.Types

Methods

handlesRequest :: SMethod 'Method_TextDocumentRangeFormatting -> MessageParams 'Method_TextDocumentRangeFormatting -> PluginDescriptor c -> Config -> HandleRequestResult #

PluginMethod 'Request 'Method_TextDocumentReferences # 
Instance details

Defined in Ide.Types

Methods

handlesRequest :: SMethod 'Method_TextDocumentReferences -> MessageParams 'Method_TextDocumentReferences -> PluginDescriptor c -> Config -> HandleRequestResult #

PluginMethod 'Request 'Method_TextDocumentRename # 
Instance details

Defined in Ide.Types

Methods

handlesRequest :: SMethod 'Method_TextDocumentRename -> MessageParams 'Method_TextDocumentRename -> PluginDescriptor c -> Config -> HandleRequestResult #

PluginMethod 'Request 'Method_TextDocumentSelectionRange # 
Instance details

Defined in Ide.Types

Methods

handlesRequest :: SMethod 'Method_TextDocumentSelectionRange -> MessageParams 'Method_TextDocumentSelectionRange -> PluginDescriptor c -> Config -> HandleRequestResult #

PluginMethod 'Request 'Method_TextDocumentSemanticTokensFull # 
Instance details

Defined in Ide.Types

Methods

handlesRequest :: SMethod 'Method_TextDocumentSemanticTokensFull -> MessageParams 'Method_TextDocumentSemanticTokensFull -> PluginDescriptor c -> Config -> HandleRequestResult #

PluginMethod 'Request 'Method_TextDocumentSemanticTokensFullDelta # 
Instance details

Defined in Ide.Types

Methods

handlesRequest :: SMethod 'Method_TextDocumentSemanticTokensFullDelta -> MessageParams 'Method_TextDocumentSemanticTokensFullDelta -> PluginDescriptor c -> Config -> HandleRequestResult #

PluginMethod 'Request 'Method_TextDocumentTypeDefinition # 
Instance details

Defined in Ide.Types

Methods

handlesRequest :: SMethod 'Method_TextDocumentTypeDefinition -> MessageParams 'Method_TextDocumentTypeDefinition -> PluginDescriptor c -> Config -> HandleRequestResult #

PluginMethod 'Request 'Method_WorkspaceExecuteCommand # 
Instance details

Defined in Ide.Types

Methods

handlesRequest :: SMethod 'Method_WorkspaceExecuteCommand -> MessageParams 'Method_WorkspaceExecuteCommand -> PluginDescriptor c -> Config -> HandleRequestResult #

PluginMethod 'Request 'Method_WorkspaceSymbol # 
Instance details

Defined in Ide.Types

Methods

handlesRequest :: SMethod 'Method_WorkspaceSymbol -> MessageParams 'Method_WorkspaceSymbol -> PluginDescriptor c -> Config -> HandleRequestResult #

PluginMethod 'Request ('Method_CustomMethod m :: Method 'ClientToServer 'Request) # 
Instance details

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

class PluginMethod 'Request m => PluginRequestMethod (m :: Method 'ClientToServer 'Request) where #

Minimal complete definition

Nothing

Methods

combineResponses #

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

Instances details
PluginRequestMethod 'Method_CallHierarchyIncomingCalls # 
Instance details

Defined in Ide.Types

Methods

combineResponses :: SMethod 'Method_CallHierarchyIncomingCalls -> Config -> ClientCapabilities -> MessageParams 'Method_CallHierarchyIncomingCalls -> NonEmpty (MessageResult 'Method_CallHierarchyIncomingCalls) -> MessageResult 'Method_CallHierarchyIncomingCalls #

PluginRequestMethod 'Method_CallHierarchyOutgoingCalls # 
Instance details

Defined in Ide.Types

Methods

combineResponses :: SMethod 'Method_CallHierarchyOutgoingCalls -> Config -> ClientCapabilities -> MessageParams 'Method_CallHierarchyOutgoingCalls -> NonEmpty (MessageResult 'Method_CallHierarchyOutgoingCalls) -> MessageResult 'Method_CallHierarchyOutgoingCalls #

PluginRequestMethod 'Method_CodeActionResolve # 
Instance details

Defined in Ide.Types

Methods

combineResponses :: SMethod 'Method_CodeActionResolve -> Config -> ClientCapabilities -> MessageParams 'Method_CodeActionResolve -> NonEmpty (MessageResult 'Method_CodeActionResolve) -> MessageResult 'Method_CodeActionResolve #

PluginRequestMethod 'Method_CodeLensResolve # 
Instance details

Defined in Ide.Types

Methods

combineResponses :: SMethod 'Method_CodeLensResolve -> Config -> ClientCapabilities -> MessageParams 'Method_CodeLensResolve -> NonEmpty (MessageResult 'Method_CodeLensResolve) -> MessageResult 'Method_CodeLensResolve #

PluginRequestMethod 'Method_CompletionItemResolve # 
Instance details

Defined in Ide.Types

Methods

combineResponses :: SMethod 'Method_CompletionItemResolve -> Config -> ClientCapabilities -> MessageParams 'Method_CompletionItemResolve -> NonEmpty (MessageResult 'Method_CompletionItemResolve) -> MessageResult 'Method_CompletionItemResolve #

PluginRequestMethod 'Method_TextDocumentCodeAction # 
Instance details

Defined in Ide.Types

Methods

combineResponses :: SMethod 'Method_TextDocumentCodeAction -> Config -> ClientCapabilities -> MessageParams 'Method_TextDocumentCodeAction -> NonEmpty (MessageResult 'Method_TextDocumentCodeAction) -> MessageResult 'Method_TextDocumentCodeAction #

PluginRequestMethod 'Method_TextDocumentCodeLens # 
Instance details

Defined in Ide.Types

Methods

combineResponses :: SMethod 'Method_TextDocumentCodeLens -> Config -> ClientCapabilities -> MessageParams 'Method_TextDocumentCodeLens -> NonEmpty (MessageResult 'Method_TextDocumentCodeLens) -> MessageResult 'Method_TextDocumentCodeLens #

PluginRequestMethod 'Method_TextDocumentCompletion # 
Instance details

Defined in Ide.Types

Methods

combineResponses :: SMethod 'Method_TextDocumentCompletion -> Config -> ClientCapabilities -> MessageParams 'Method_TextDocumentCompletion -> NonEmpty (MessageResult 'Method_TextDocumentCompletion) -> MessageResult 'Method_TextDocumentCompletion #

PluginRequestMethod 'Method_TextDocumentDefinition # 
Instance details

Defined in Ide.Types

Methods

combineResponses :: SMethod 'Method_TextDocumentDefinition -> Config -> ClientCapabilities -> MessageParams 'Method_TextDocumentDefinition -> NonEmpty (MessageResult 'Method_TextDocumentDefinition) -> MessageResult 'Method_TextDocumentDefinition #

PluginRequestMethod 'Method_TextDocumentDocumentHighlight # 
Instance details

Defined in Ide.Types

Methods

combineResponses :: SMethod 'Method_TextDocumentDocumentHighlight -> Config -> ClientCapabilities -> MessageParams 'Method_TextDocumentDocumentHighlight -> NonEmpty (MessageResult 'Method_TextDocumentDocumentHighlight) -> MessageResult 'Method_TextDocumentDocumentHighlight #

PluginRequestMethod 'Method_TextDocumentDocumentSymbol # 
Instance details

Defined in Ide.Types

Methods

combineResponses :: SMethod 'Method_TextDocumentDocumentSymbol -> Config -> ClientCapabilities -> MessageParams 'Method_TextDocumentDocumentSymbol -> NonEmpty (MessageResult 'Method_TextDocumentDocumentSymbol) -> MessageResult 'Method_TextDocumentDocumentSymbol #

PluginRequestMethod 'Method_TextDocumentFoldingRange # 
Instance details

Defined in Ide.Types

Methods

combineResponses :: SMethod 'Method_TextDocumentFoldingRange -> Config -> ClientCapabilities -> MessageParams 'Method_TextDocumentFoldingRange -> NonEmpty (MessageResult 'Method_TextDocumentFoldingRange) -> MessageResult 'Method_TextDocumentFoldingRange #

PluginRequestMethod 'Method_TextDocumentFormatting # 
Instance details

Defined in Ide.Types

Methods

combineResponses :: SMethod 'Method_TextDocumentFormatting -> Config -> ClientCapabilities -> MessageParams 'Method_TextDocumentFormatting -> NonEmpty (MessageResult 'Method_TextDocumentFormatting) -> MessageResult 'Method_TextDocumentFormatting #

PluginRequestMethod 'Method_TextDocumentHover # 
Instance details

Defined in Ide.Types

Methods

combineResponses :: SMethod 'Method_TextDocumentHover -> Config -> ClientCapabilities -> MessageParams 'Method_TextDocumentHover -> NonEmpty (MessageResult 'Method_TextDocumentHover) -> MessageResult 'Method_TextDocumentHover #

PluginRequestMethod 'Method_TextDocumentPrepareCallHierarchy # 
Instance details

Defined in Ide.Types

Methods

combineResponses :: SMethod 'Method_TextDocumentPrepareCallHierarchy -> Config -> ClientCapabilities -> MessageParams 'Method_TextDocumentPrepareCallHierarchy -> NonEmpty (MessageResult 'Method_TextDocumentPrepareCallHierarchy) -> MessageResult 'Method_TextDocumentPrepareCallHierarchy #

PluginRequestMethod 'Method_TextDocumentRangeFormatting # 
Instance details

Defined in Ide.Types

Methods

combineResponses :: SMethod 'Method_TextDocumentRangeFormatting -> Config -> ClientCapabilities -> MessageParams 'Method_TextDocumentRangeFormatting -> NonEmpty (MessageResult 'Method_TextDocumentRangeFormatting) -> MessageResult 'Method_TextDocumentRangeFormatting #

PluginRequestMethod 'Method_TextDocumentReferences # 
Instance details

Defined in Ide.Types

Methods

combineResponses :: SMethod 'Method_TextDocumentReferences -> Config -> ClientCapabilities -> MessageParams 'Method_TextDocumentReferences -> NonEmpty (MessageResult 'Method_TextDocumentReferences) -> MessageResult 'Method_TextDocumentReferences #

PluginRequestMethod 'Method_TextDocumentRename # 
Instance details

Defined in Ide.Types

Methods

combineResponses :: SMethod 'Method_TextDocumentRename -> Config -> ClientCapabilities -> MessageParams 'Method_TextDocumentRename -> NonEmpty (MessageResult 'Method_TextDocumentRename) -> MessageResult 'Method_TextDocumentRename #

PluginRequestMethod 'Method_TextDocumentSelectionRange # 
Instance details

Defined in Ide.Types

Methods

combineResponses :: SMethod 'Method_TextDocumentSelectionRange -> Config -> ClientCapabilities -> MessageParams 'Method_TextDocumentSelectionRange -> NonEmpty (MessageResult 'Method_TextDocumentSelectionRange) -> MessageResult 'Method_TextDocumentSelectionRange #

PluginRequestMethod 'Method_TextDocumentSemanticTokensFull # 
Instance details

Defined in Ide.Types

Methods

combineResponses :: SMethod 'Method_TextDocumentSemanticTokensFull -> Config -> ClientCapabilities -> MessageParams 'Method_TextDocumentSemanticTokensFull -> NonEmpty (MessageResult 'Method_TextDocumentSemanticTokensFull) -> MessageResult 'Method_TextDocumentSemanticTokensFull #

PluginRequestMethod 'Method_TextDocumentSemanticTokensFullDelta # 
Instance details

Defined in Ide.Types

Methods

combineResponses :: SMethod 'Method_TextDocumentSemanticTokensFullDelta -> Config -> ClientCapabilities -> MessageParams 'Method_TextDocumentSemanticTokensFullDelta -> NonEmpty (MessageResult 'Method_TextDocumentSemanticTokensFullDelta) -> MessageResult 'Method_TextDocumentSemanticTokensFullDelta #

PluginRequestMethod 'Method_TextDocumentTypeDefinition # 
Instance details

Defined in Ide.Types

Methods

combineResponses :: SMethod 'Method_TextDocumentTypeDefinition -> Config -> ClientCapabilities -> MessageParams 'Method_TextDocumentTypeDefinition -> NonEmpty (MessageResult 'Method_TextDocumentTypeDefinition) -> MessageResult 'Method_TextDocumentTypeDefinition #

PluginRequestMethod 'Method_WorkspaceSymbol # 
Instance details

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) # 
Instance details

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

getPid :: IO Text #

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.

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]