packages feed

haskell-lsp-types 0.2.2.0 → 0.4.0.0

raw patch · 16 files changed

+5019/−4579 lines, 16 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

- Language.Haskell.LSP.TH.DataTypesJSON: [$sel:_arguments:Command] :: Command -> Maybe Value
- Language.Haskell.LSP.TH.DataTypesJSON: [$sel:_character:Position] :: Position -> Int
- Language.Haskell.LSP.TH.DataTypesJSON: [$sel:_command:Command] :: Command -> Text
- Language.Haskell.LSP.TH.DataTypesJSON: [$sel:_containerName:SymbolInformation] :: SymbolInformation -> Maybe Text
- Language.Haskell.LSP.TH.DataTypesJSON: [$sel:_end:Range] :: Range -> Position
- Language.Haskell.LSP.TH.DataTypesJSON: [$sel:_kind:SymbolInformation] :: SymbolInformation -> SymbolKind
- Language.Haskell.LSP.TH.DataTypesJSON: [$sel:_line:Position] :: Position -> Int
- Language.Haskell.LSP.TH.DataTypesJSON: [$sel:_location:SymbolInformation] :: SymbolInformation -> Location
- Language.Haskell.LSP.TH.DataTypesJSON: [$sel:_name:SymbolInformation] :: SymbolInformation -> Text
- Language.Haskell.LSP.TH.DataTypesJSON: [$sel:_range:Location] :: Location -> Range
- Language.Haskell.LSP.TH.DataTypesJSON: [$sel:_start:Range] :: Range -> Position
- Language.Haskell.LSP.TH.DataTypesJSON: [$sel:_textDocument:DocumentSymbolParams] :: DocumentSymbolParams -> TextDocumentIdentifier
- Language.Haskell.LSP.TH.DataTypesJSON: [$sel:_title:Command] :: Command -> Text
- Language.Haskell.LSP.TH.DataTypesJSON: [$sel:_uri:Location] :: Location -> Uri
- Language.Haskell.LSP.TH.DataTypesJSON: [$sel:getUri:Uri] :: Uri -> Text
- Language.Haskell.LSP.TH.DataTypesJSON: instance (Data.Aeson.Types.FromJSON.FromJSON m, Data.Aeson.Types.FromJSON.FromJSON a) => Data.Aeson.Types.FromJSON.FromJSON (Language.Haskell.LSP.TH.DataTypesJSON.NotificationMessage m a)
- Language.Haskell.LSP.TH.DataTypesJSON: instance (Data.Aeson.Types.FromJSON.FromJSON m, Data.Aeson.Types.FromJSON.FromJSON req, Data.Aeson.Types.FromJSON.FromJSON resp) => Data.Aeson.Types.FromJSON.FromJSON (Language.Haskell.LSP.TH.DataTypesJSON.RequestMessage m req resp)
- Language.Haskell.LSP.TH.DataTypesJSON: instance (Data.Aeson.Types.ToJSON.ToJSON m, Data.Aeson.Types.ToJSON.ToJSON a) => Data.Aeson.Types.ToJSON.ToJSON (Language.Haskell.LSP.TH.DataTypesJSON.NotificationMessage m a)
- Language.Haskell.LSP.TH.DataTypesJSON: instance (Data.Aeson.Types.ToJSON.ToJSON m, Data.Aeson.Types.ToJSON.ToJSON req, Data.Aeson.Types.ToJSON.ToJSON resp) => Data.Aeson.Types.ToJSON.ToJSON (Language.Haskell.LSP.TH.DataTypesJSON.RequestMessage m req resp)
- Language.Haskell.LSP.TH.DataTypesJSON: instance (GHC.Classes.Eq a, GHC.Classes.Eq m) => GHC.Classes.Eq (Language.Haskell.LSP.TH.DataTypesJSON.NotificationMessage m a)
- Language.Haskell.LSP.TH.DataTypesJSON: instance (GHC.Classes.Eq req, GHC.Classes.Eq m) => GHC.Classes.Eq (Language.Haskell.LSP.TH.DataTypesJSON.RequestMessage m req resp)
- Language.Haskell.LSP.TH.DataTypesJSON: instance (GHC.Read.Read a, GHC.Read.Read m) => GHC.Read.Read (Language.Haskell.LSP.TH.DataTypesJSON.NotificationMessage m a)
- Language.Haskell.LSP.TH.DataTypesJSON: instance (GHC.Read.Read req, GHC.Read.Read m) => GHC.Read.Read (Language.Haskell.LSP.TH.DataTypesJSON.RequestMessage m req resp)
- Language.Haskell.LSP.TH.DataTypesJSON: instance (GHC.Show.Show a, GHC.Show.Show m) => GHC.Show.Show (Language.Haskell.LSP.TH.DataTypesJSON.NotificationMessage m a)
- Language.Haskell.LSP.TH.DataTypesJSON: instance (GHC.Show.Show req, GHC.Show.Show m) => GHC.Show.Show (Language.Haskell.LSP.TH.DataTypesJSON.RequestMessage m req resp)
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.FromJSON.FromJSON Language.Haskell.LSP.TH.DataTypesJSON.CancelParams
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.FromJSON.FromJSON Language.Haskell.LSP.TH.DataTypesJSON.ClientMethod
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.FromJSON.FromJSON Language.Haskell.LSP.TH.DataTypesJSON.CodeActionContext
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.FromJSON.FromJSON Language.Haskell.LSP.TH.DataTypesJSON.CodeActionParams
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.FromJSON.FromJSON Language.Haskell.LSP.TH.DataTypesJSON.Command
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.FromJSON.FromJSON Language.Haskell.LSP.TH.DataTypesJSON.Diagnostic
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.FromJSON.FromJSON Language.Haskell.LSP.TH.DataTypesJSON.DiagnosticRelatedInformation
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.FromJSON.FromJSON Language.Haskell.LSP.TH.DataTypesJSON.DiagnosticSeverity
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.FromJSON.FromJSON Language.Haskell.LSP.TH.DataTypesJSON.DocumentSymbolParams
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.FromJSON.FromJSON Language.Haskell.LSP.TH.DataTypesJSON.ErrorCode
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.FromJSON.FromJSON Language.Haskell.LSP.TH.DataTypesJSON.Location
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.FromJSON.FromJSON Language.Haskell.LSP.TH.DataTypesJSON.LspId
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.FromJSON.FromJSON Language.Haskell.LSP.TH.DataTypesJSON.LspIdRsp
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.FromJSON.FromJSON Language.Haskell.LSP.TH.DataTypesJSON.Position
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.FromJSON.FromJSON Language.Haskell.LSP.TH.DataTypesJSON.Range
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.FromJSON.FromJSON Language.Haskell.LSP.TH.DataTypesJSON.ResponseError
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.FromJSON.FromJSON Language.Haskell.LSP.TH.DataTypesJSON.ServerMethod
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.FromJSON.FromJSON Language.Haskell.LSP.TH.DataTypesJSON.SymbolInformation
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.FromJSON.FromJSON Language.Haskell.LSP.TH.DataTypesJSON.SymbolKind
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.FromJSON.FromJSON Language.Haskell.LSP.TH.DataTypesJSON.TextDocumentEdit
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.FromJSON.FromJSON Language.Haskell.LSP.TH.DataTypesJSON.TextDocumentIdentifier
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.FromJSON.FromJSON Language.Haskell.LSP.TH.DataTypesJSON.TextEdit
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.FromJSON.FromJSON Language.Haskell.LSP.TH.DataTypesJSON.Uri
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.FromJSON.FromJSON Language.Haskell.LSP.TH.DataTypesJSON.VersionedTextDocumentIdentifier
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.FromJSON.FromJSON Language.Haskell.LSP.TH.DataTypesJSON.WorkspaceEdit
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.FromJSON.FromJSON a => Data.Aeson.Types.FromJSON.FromJSON (Language.Haskell.LSP.TH.DataTypesJSON.List a)
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.FromJSON.FromJSON a => Data.Aeson.Types.FromJSON.FromJSON (Language.Haskell.LSP.TH.DataTypesJSON.ResponseMessage a)
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.FromJSON.FromJSONKey Language.Haskell.LSP.TH.DataTypesJSON.Uri
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.ToJSON.ToJSON Language.Haskell.LSP.TH.DataTypesJSON.CancelParams
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.ToJSON.ToJSON Language.Haskell.LSP.TH.DataTypesJSON.ClientMethod
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.ToJSON.ToJSON Language.Haskell.LSP.TH.DataTypesJSON.CodeActionContext
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.ToJSON.ToJSON Language.Haskell.LSP.TH.DataTypesJSON.CodeActionParams
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.ToJSON.ToJSON Language.Haskell.LSP.TH.DataTypesJSON.Command
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.ToJSON.ToJSON Language.Haskell.LSP.TH.DataTypesJSON.Diagnostic
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.ToJSON.ToJSON Language.Haskell.LSP.TH.DataTypesJSON.DiagnosticRelatedInformation
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.ToJSON.ToJSON Language.Haskell.LSP.TH.DataTypesJSON.DiagnosticSeverity
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.ToJSON.ToJSON Language.Haskell.LSP.TH.DataTypesJSON.DocumentSymbolParams
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.ToJSON.ToJSON Language.Haskell.LSP.TH.DataTypesJSON.ErrorCode
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.ToJSON.ToJSON Language.Haskell.LSP.TH.DataTypesJSON.Location
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.ToJSON.ToJSON Language.Haskell.LSP.TH.DataTypesJSON.LspId
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.ToJSON.ToJSON Language.Haskell.LSP.TH.DataTypesJSON.LspIdRsp
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.ToJSON.ToJSON Language.Haskell.LSP.TH.DataTypesJSON.Position
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.ToJSON.ToJSON Language.Haskell.LSP.TH.DataTypesJSON.Range
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.ToJSON.ToJSON Language.Haskell.LSP.TH.DataTypesJSON.ResponseError
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.ToJSON.ToJSON Language.Haskell.LSP.TH.DataTypesJSON.ServerMethod
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.ToJSON.ToJSON Language.Haskell.LSP.TH.DataTypesJSON.SymbolInformation
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.ToJSON.ToJSON Language.Haskell.LSP.TH.DataTypesJSON.SymbolKind
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.ToJSON.ToJSON Language.Haskell.LSP.TH.DataTypesJSON.TextDocumentEdit
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.ToJSON.ToJSON Language.Haskell.LSP.TH.DataTypesJSON.TextDocumentIdentifier
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.ToJSON.ToJSON Language.Haskell.LSP.TH.DataTypesJSON.TextEdit
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.ToJSON.ToJSON Language.Haskell.LSP.TH.DataTypesJSON.Uri
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.ToJSON.ToJSON Language.Haskell.LSP.TH.DataTypesJSON.VersionedTextDocumentIdentifier
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.ToJSON.ToJSON Language.Haskell.LSP.TH.DataTypesJSON.WorkspaceEdit
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.ToJSON.ToJSON a => Data.Aeson.Types.ToJSON.ToJSON (Language.Haskell.LSP.TH.DataTypesJSON.List a)
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.ToJSON.ToJSON a => Data.Aeson.Types.ToJSON.ToJSON (Language.Haskell.LSP.TH.DataTypesJSON.ResponseMessage a)
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.ToJSON.ToJSONKey Language.Haskell.LSP.TH.DataTypesJSON.Uri
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Foldable.Foldable Language.Haskell.LSP.TH.DataTypesJSON.List
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Hashable.Class.Hashable Language.Haskell.LSP.TH.DataTypesJSON.Uri
- Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Traversable.Traversable Language.Haskell.LSP.TH.DataTypesJSON.List
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Base.Functor Language.Haskell.LSP.TH.DataTypesJSON.List
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Base.Monoid (Language.Haskell.LSP.TH.DataTypesJSON.List a)
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Base.Monoid Language.Haskell.LSP.TH.DataTypesJSON.WorkspaceEdit
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Classes.Eq Language.Haskell.LSP.TH.DataTypesJSON.CancelParams
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Classes.Eq Language.Haskell.LSP.TH.DataTypesJSON.ClientMethod
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Classes.Eq Language.Haskell.LSP.TH.DataTypesJSON.CodeActionContext
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Classes.Eq Language.Haskell.LSP.TH.DataTypesJSON.CodeActionParams
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Classes.Eq Language.Haskell.LSP.TH.DataTypesJSON.Command
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Classes.Eq Language.Haskell.LSP.TH.DataTypesJSON.Diagnostic
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Classes.Eq Language.Haskell.LSP.TH.DataTypesJSON.DiagnosticRelatedInformation
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Classes.Eq Language.Haskell.LSP.TH.DataTypesJSON.DiagnosticSeverity
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Classes.Eq Language.Haskell.LSP.TH.DataTypesJSON.DocumentSymbolParams
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Classes.Eq Language.Haskell.LSP.TH.DataTypesJSON.ErrorCode
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Classes.Eq Language.Haskell.LSP.TH.DataTypesJSON.Location
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Classes.Eq Language.Haskell.LSP.TH.DataTypesJSON.LspId
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Classes.Eq Language.Haskell.LSP.TH.DataTypesJSON.LspIdRsp
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Classes.Eq Language.Haskell.LSP.TH.DataTypesJSON.Position
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Classes.Eq Language.Haskell.LSP.TH.DataTypesJSON.Range
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Classes.Eq Language.Haskell.LSP.TH.DataTypesJSON.ResponseError
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Classes.Eq Language.Haskell.LSP.TH.DataTypesJSON.ServerMethod
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Classes.Eq Language.Haskell.LSP.TH.DataTypesJSON.SymbolInformation
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Classes.Eq Language.Haskell.LSP.TH.DataTypesJSON.SymbolKind
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Classes.Eq Language.Haskell.LSP.TH.DataTypesJSON.TextDocumentEdit
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Classes.Eq Language.Haskell.LSP.TH.DataTypesJSON.TextDocumentIdentifier
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Classes.Eq Language.Haskell.LSP.TH.DataTypesJSON.TextEdit
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Classes.Eq Language.Haskell.LSP.TH.DataTypesJSON.Uri
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Classes.Eq Language.Haskell.LSP.TH.DataTypesJSON.VersionedTextDocumentIdentifier
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Classes.Eq Language.Haskell.LSP.TH.DataTypesJSON.WorkspaceEdit
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Classes.Eq a => GHC.Classes.Eq (Language.Haskell.LSP.TH.DataTypesJSON.List a)
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Classes.Eq a => GHC.Classes.Eq (Language.Haskell.LSP.TH.DataTypesJSON.ResponseMessage a)
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Classes.Ord Language.Haskell.LSP.TH.DataTypesJSON.ClientMethod
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Classes.Ord Language.Haskell.LSP.TH.DataTypesJSON.Diagnostic
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Classes.Ord Language.Haskell.LSP.TH.DataTypesJSON.DiagnosticRelatedInformation
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Classes.Ord Language.Haskell.LSP.TH.DataTypesJSON.DiagnosticSeverity
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Classes.Ord Language.Haskell.LSP.TH.DataTypesJSON.Location
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Classes.Ord Language.Haskell.LSP.TH.DataTypesJSON.LspId
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Classes.Ord Language.Haskell.LSP.TH.DataTypesJSON.Position
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Classes.Ord Language.Haskell.LSP.TH.DataTypesJSON.Range
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Classes.Ord Language.Haskell.LSP.TH.DataTypesJSON.ServerMethod
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Classes.Ord Language.Haskell.LSP.TH.DataTypesJSON.Uri
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Classes.Ord a => GHC.Classes.Ord (Language.Haskell.LSP.TH.DataTypesJSON.List a)
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Read.Read Language.Haskell.LSP.TH.DataTypesJSON.CancelParams
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Read.Read Language.Haskell.LSP.TH.DataTypesJSON.ClientMethod
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Read.Read Language.Haskell.LSP.TH.DataTypesJSON.CodeActionContext
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Read.Read Language.Haskell.LSP.TH.DataTypesJSON.CodeActionParams
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Read.Read Language.Haskell.LSP.TH.DataTypesJSON.Command
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Read.Read Language.Haskell.LSP.TH.DataTypesJSON.Diagnostic
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Read.Read Language.Haskell.LSP.TH.DataTypesJSON.DiagnosticRelatedInformation
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Read.Read Language.Haskell.LSP.TH.DataTypesJSON.DiagnosticSeverity
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Read.Read Language.Haskell.LSP.TH.DataTypesJSON.DocumentSymbolParams
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Read.Read Language.Haskell.LSP.TH.DataTypesJSON.ErrorCode
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Read.Read Language.Haskell.LSP.TH.DataTypesJSON.Location
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Read.Read Language.Haskell.LSP.TH.DataTypesJSON.LspId
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Read.Read Language.Haskell.LSP.TH.DataTypesJSON.LspIdRsp
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Read.Read Language.Haskell.LSP.TH.DataTypesJSON.Position
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Read.Read Language.Haskell.LSP.TH.DataTypesJSON.Range
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Read.Read Language.Haskell.LSP.TH.DataTypesJSON.ResponseError
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Read.Read Language.Haskell.LSP.TH.DataTypesJSON.ServerMethod
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Read.Read Language.Haskell.LSP.TH.DataTypesJSON.SymbolInformation
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Read.Read Language.Haskell.LSP.TH.DataTypesJSON.SymbolKind
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Read.Read Language.Haskell.LSP.TH.DataTypesJSON.TextDocumentEdit
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Read.Read Language.Haskell.LSP.TH.DataTypesJSON.TextDocumentIdentifier
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Read.Read Language.Haskell.LSP.TH.DataTypesJSON.TextEdit
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Read.Read Language.Haskell.LSP.TH.DataTypesJSON.Uri
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Read.Read Language.Haskell.LSP.TH.DataTypesJSON.VersionedTextDocumentIdentifier
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Read.Read Language.Haskell.LSP.TH.DataTypesJSON.WorkspaceEdit
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Read.Read a => GHC.Read.Read (Language.Haskell.LSP.TH.DataTypesJSON.List a)
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Read.Read a => GHC.Read.Read (Language.Haskell.LSP.TH.DataTypesJSON.ResponseMessage a)
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Show.Show Language.Haskell.LSP.TH.DataTypesJSON.CancelParams
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Show.Show Language.Haskell.LSP.TH.DataTypesJSON.ClientMethod
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Show.Show Language.Haskell.LSP.TH.DataTypesJSON.CodeActionContext
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Show.Show Language.Haskell.LSP.TH.DataTypesJSON.CodeActionParams
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Show.Show Language.Haskell.LSP.TH.DataTypesJSON.Command
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Show.Show Language.Haskell.LSP.TH.DataTypesJSON.Diagnostic
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Show.Show Language.Haskell.LSP.TH.DataTypesJSON.DiagnosticRelatedInformation
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Show.Show Language.Haskell.LSP.TH.DataTypesJSON.DiagnosticSeverity
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Show.Show Language.Haskell.LSP.TH.DataTypesJSON.DocumentSymbolParams
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Show.Show Language.Haskell.LSP.TH.DataTypesJSON.ErrorCode
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Show.Show Language.Haskell.LSP.TH.DataTypesJSON.Location
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Show.Show Language.Haskell.LSP.TH.DataTypesJSON.LspId
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Show.Show Language.Haskell.LSP.TH.DataTypesJSON.LspIdRsp
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Show.Show Language.Haskell.LSP.TH.DataTypesJSON.Position
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Show.Show Language.Haskell.LSP.TH.DataTypesJSON.Range
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Show.Show Language.Haskell.LSP.TH.DataTypesJSON.ResponseError
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Show.Show Language.Haskell.LSP.TH.DataTypesJSON.ServerMethod
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Show.Show Language.Haskell.LSP.TH.DataTypesJSON.SymbolInformation
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Show.Show Language.Haskell.LSP.TH.DataTypesJSON.SymbolKind
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Show.Show Language.Haskell.LSP.TH.DataTypesJSON.TextDocumentEdit
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Show.Show Language.Haskell.LSP.TH.DataTypesJSON.TextDocumentIdentifier
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Show.Show Language.Haskell.LSP.TH.DataTypesJSON.TextEdit
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Show.Show Language.Haskell.LSP.TH.DataTypesJSON.Uri
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Show.Show Language.Haskell.LSP.TH.DataTypesJSON.VersionedTextDocumentIdentifier
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Show.Show Language.Haskell.LSP.TH.DataTypesJSON.WorkspaceEdit
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Show.Show a => GHC.Show.Show (Language.Haskell.LSP.TH.DataTypesJSON.List a)
- Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Show.Show a => GHC.Show.Show (Language.Haskell.LSP.TH.DataTypesJSON.ResponseMessage a)
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasAdditionalTextEdits Language.Haskell.LSP.TH.DataTypesJSON.CompletionItem (GHC.Base.Maybe (Language.Haskell.LSP.TH.DataTypesJSON.List Language.Haskell.LSP.TH.DataTypesJSON.TextEdit))
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasArguments Language.Haskell.LSP.TH.DataTypesJSON.Command (GHC.Base.Maybe Data.Aeson.Types.Internal.Value)
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasArguments Language.Haskell.LSP.TH.DataTypesJSON.ExecuteCommandParams (GHC.Base.Maybe (Language.Haskell.LSP.TH.DataTypesJSON.List Data.Aeson.Types.Internal.Value))
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasChanges Language.Haskell.LSP.TH.DataTypesJSON.DidChangeWatchedFilesParams (Language.Haskell.LSP.TH.DataTypesJSON.List Language.Haskell.LSP.TH.DataTypesJSON.FileEvent)
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasChanges Language.Haskell.LSP.TH.DataTypesJSON.WorkspaceEdit (GHC.Base.Maybe Language.Haskell.LSP.TH.DataTypesJSON.WorkspaceEditMap)
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasCharacter Language.Haskell.LSP.TH.DataTypesJSON.Position GHC.Types.Int
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasCode Language.Haskell.LSP.TH.DataTypesJSON.Diagnostic (GHC.Base.Maybe Data.Text.Internal.Text)
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasCode Language.Haskell.LSP.TH.DataTypesJSON.ResponseError Language.Haskell.LSP.TH.DataTypesJSON.ErrorCode
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasCommand Language.Haskell.LSP.TH.DataTypesJSON.CodeLens (GHC.Base.Maybe Language.Haskell.LSP.TH.DataTypesJSON.Command)
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasCommand Language.Haskell.LSP.TH.DataTypesJSON.Command Data.Text.Internal.Text
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasCommand Language.Haskell.LSP.TH.DataTypesJSON.CompletionItem (GHC.Base.Maybe Language.Haskell.LSP.TH.DataTypesJSON.Command)
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasCommands Language.Haskell.LSP.TH.DataTypesJSON.ExecuteCommandOptions (Language.Haskell.LSP.TH.DataTypesJSON.List Data.Text.Internal.Text)
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasCommands Language.Haskell.LSP.TH.DataTypesJSON.ExecuteCommandRegistrationOptions (Language.Haskell.LSP.TH.DataTypesJSON.List Data.Text.Internal.Text)
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasContainerName Language.Haskell.LSP.TH.DataTypesJSON.SymbolInformation (GHC.Base.Maybe Data.Text.Internal.Text)
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasContentChanges Language.Haskell.LSP.TH.DataTypesJSON.DidChangeTextDocumentParams (Language.Haskell.LSP.TH.DataTypesJSON.List Language.Haskell.LSP.TH.DataTypesJSON.TextDocumentContentChangeEvent)
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasContents Language.Haskell.LSP.TH.DataTypesJSON.Hover (Language.Haskell.LSP.TH.DataTypesJSON.List Language.Haskell.LSP.TH.DataTypesJSON.MarkedString)
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasContext Language.Haskell.LSP.TH.DataTypesJSON.CodeActionParams Language.Haskell.LSP.TH.DataTypesJSON.CodeActionContext
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasDiagnostics Language.Haskell.LSP.TH.DataTypesJSON.CodeActionContext (Language.Haskell.LSP.TH.DataTypesJSON.List Language.Haskell.LSP.TH.DataTypesJSON.Diagnostic)
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasDiagnostics Language.Haskell.LSP.TH.DataTypesJSON.PublishDiagnosticsParams (Language.Haskell.LSP.TH.DataTypesJSON.List Language.Haskell.LSP.TH.DataTypesJSON.Diagnostic)
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasDocumentChanges Language.Haskell.LSP.TH.DataTypesJSON.WorkspaceEdit (GHC.Base.Maybe (Language.Haskell.LSP.TH.DataTypesJSON.List Language.Haskell.LSP.TH.DataTypesJSON.TextDocumentEdit))
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasEdit Language.Haskell.LSP.TH.DataTypesJSON.ApplyWorkspaceEditParams Language.Haskell.LSP.TH.DataTypesJSON.WorkspaceEdit
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasEdits Language.Haskell.LSP.TH.DataTypesJSON.TextDocumentEdit (Language.Haskell.LSP.TH.DataTypesJSON.List Language.Haskell.LSP.TH.DataTypesJSON.TextEdit)
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasEnd Language.Haskell.LSP.TH.DataTypesJSON.Range Language.Haskell.LSP.TH.DataTypesJSON.Position
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasError (Language.Haskell.LSP.TH.DataTypesJSON.ResponseMessage a) (GHC.Base.Maybe Language.Haskell.LSP.TH.DataTypesJSON.ResponseError)
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasId (Language.Haskell.LSP.TH.DataTypesJSON.RequestMessage m req resp) Language.Haskell.LSP.TH.DataTypesJSON.LspId
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasId (Language.Haskell.LSP.TH.DataTypesJSON.ResponseMessage a) Language.Haskell.LSP.TH.DataTypesJSON.LspIdRsp
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasId Language.Haskell.LSP.TH.DataTypesJSON.CancelParams Language.Haskell.LSP.TH.DataTypesJSON.LspId
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasItems Language.Haskell.LSP.TH.DataTypesJSON.CompletionListType (Language.Haskell.LSP.TH.DataTypesJSON.List Language.Haskell.LSP.TH.DataTypesJSON.CompletionItem)
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasJsonrpc (Language.Haskell.LSP.TH.DataTypesJSON.NotificationMessage m a) Data.Text.Internal.Text
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasJsonrpc (Language.Haskell.LSP.TH.DataTypesJSON.RequestMessage m req resp) Data.Text.Internal.Text
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasJsonrpc (Language.Haskell.LSP.TH.DataTypesJSON.ResponseMessage a) Data.Text.Internal.Text
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasKind Language.Haskell.LSP.TH.DataTypesJSON.SymbolInformation Language.Haskell.LSP.TH.DataTypesJSON.SymbolKind
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasLine Language.Haskell.LSP.TH.DataTypesJSON.Position GHC.Types.Int
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasLocation Language.Haskell.LSP.TH.DataTypesJSON.DiagnosticRelatedInformation Language.Haskell.LSP.TH.DataTypesJSON.Location
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasLocation Language.Haskell.LSP.TH.DataTypesJSON.SymbolInformation Language.Haskell.LSP.TH.DataTypesJSON.Location
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasMessage Language.Haskell.LSP.TH.DataTypesJSON.Diagnostic Data.Text.Internal.Text
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasMessage Language.Haskell.LSP.TH.DataTypesJSON.DiagnosticRelatedInformation Data.Text.Internal.Text
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasMessage Language.Haskell.LSP.TH.DataTypesJSON.ResponseError Data.Text.Internal.Text
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasMethod (Language.Haskell.LSP.TH.DataTypesJSON.NotificationMessage m a) m
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasMethod (Language.Haskell.LSP.TH.DataTypesJSON.RequestMessage m req resp) m
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasMethod Language.Haskell.LSP.TH.DataTypesJSON.Registration Language.Haskell.LSP.TH.DataTypesJSON.ClientMethod
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasName Language.Haskell.LSP.TH.DataTypesJSON.SymbolInformation Data.Text.Internal.Text
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasNewText Language.Haskell.LSP.TH.DataTypesJSON.TextEdit Data.Text.Internal.Text
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasParams (Language.Haskell.LSP.TH.DataTypesJSON.NotificationMessage m a) a
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasParams (Language.Haskell.LSP.TH.DataTypesJSON.RequestMessage m req resp) req
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasPosition Language.Haskell.LSP.TH.DataTypesJSON.DocumentOnTypeFormattingParams Language.Haskell.LSP.TH.DataTypesJSON.Position
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasPosition Language.Haskell.LSP.TH.DataTypesJSON.ReferenceParams Language.Haskell.LSP.TH.DataTypesJSON.Position
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasPosition Language.Haskell.LSP.TH.DataTypesJSON.RenameParams Language.Haskell.LSP.TH.DataTypesJSON.Position
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasPosition Language.Haskell.LSP.TH.DataTypesJSON.TextDocumentPositionParams Language.Haskell.LSP.TH.DataTypesJSON.Position
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasRange Language.Haskell.LSP.TH.DataTypesJSON.CodeActionParams Language.Haskell.LSP.TH.DataTypesJSON.Range
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasRange Language.Haskell.LSP.TH.DataTypesJSON.CodeLens Language.Haskell.LSP.TH.DataTypesJSON.Range
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasRange Language.Haskell.LSP.TH.DataTypesJSON.Diagnostic Language.Haskell.LSP.TH.DataTypesJSON.Range
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasRange Language.Haskell.LSP.TH.DataTypesJSON.DocumentHighlight Language.Haskell.LSP.TH.DataTypesJSON.Range
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasRange Language.Haskell.LSP.TH.DataTypesJSON.DocumentLink Language.Haskell.LSP.TH.DataTypesJSON.Range
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasRange Language.Haskell.LSP.TH.DataTypesJSON.DocumentRangeFormattingParams Language.Haskell.LSP.TH.DataTypesJSON.Range
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasRange Language.Haskell.LSP.TH.DataTypesJSON.Hover (GHC.Base.Maybe Language.Haskell.LSP.TH.DataTypesJSON.Range)
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasRange Language.Haskell.LSP.TH.DataTypesJSON.Location Language.Haskell.LSP.TH.DataTypesJSON.Range
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasRange Language.Haskell.LSP.TH.DataTypesJSON.TextDocumentContentChangeEvent (GHC.Base.Maybe Language.Haskell.LSP.TH.DataTypesJSON.Range)
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasRange Language.Haskell.LSP.TH.DataTypesJSON.TextEdit Language.Haskell.LSP.TH.DataTypesJSON.Range
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasRegistrations Language.Haskell.LSP.TH.DataTypesJSON.RegistrationParams (Language.Haskell.LSP.TH.DataTypesJSON.List Language.Haskell.LSP.TH.DataTypesJSON.Registration)
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasRelatedInformation Language.Haskell.LSP.TH.DataTypesJSON.Diagnostic (GHC.Base.Maybe (Language.Haskell.LSP.TH.DataTypesJSON.List Language.Haskell.LSP.TH.DataTypesJSON.DiagnosticRelatedInformation))
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasResult (Language.Haskell.LSP.TH.DataTypesJSON.ResponseMessage a) (GHC.Base.Maybe a)
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasRootUri Language.Haskell.LSP.TH.DataTypesJSON.InitializeParams (GHC.Base.Maybe Language.Haskell.LSP.TH.DataTypesJSON.Uri)
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasSeverity Language.Haskell.LSP.TH.DataTypesJSON.Diagnostic (GHC.Base.Maybe Language.Haskell.LSP.TH.DataTypesJSON.DiagnosticSeverity)
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasSignatures Language.Haskell.LSP.TH.DataTypesJSON.SignatureHelp (Language.Haskell.LSP.TH.DataTypesJSON.List Language.Haskell.LSP.TH.DataTypesJSON.SignatureInformation)
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasSource Language.Haskell.LSP.TH.DataTypesJSON.Diagnostic (GHC.Base.Maybe Language.Haskell.LSP.TH.DataTypesJSON.DiagnosticSource)
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasStart Language.Haskell.LSP.TH.DataTypesJSON.Range Language.Haskell.LSP.TH.DataTypesJSON.Position
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasTextDocument Language.Haskell.LSP.TH.DataTypesJSON.CodeActionParams Language.Haskell.LSP.TH.DataTypesJSON.TextDocumentIdentifier
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasTextDocument Language.Haskell.LSP.TH.DataTypesJSON.CodeLensParams Language.Haskell.LSP.TH.DataTypesJSON.TextDocumentIdentifier
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasTextDocument Language.Haskell.LSP.TH.DataTypesJSON.DidChangeTextDocumentParams Language.Haskell.LSP.TH.DataTypesJSON.VersionedTextDocumentIdentifier
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasTextDocument Language.Haskell.LSP.TH.DataTypesJSON.DidCloseTextDocumentParams Language.Haskell.LSP.TH.DataTypesJSON.TextDocumentIdentifier
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasTextDocument Language.Haskell.LSP.TH.DataTypesJSON.DidSaveTextDocumentParams Language.Haskell.LSP.TH.DataTypesJSON.TextDocumentIdentifier
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasTextDocument Language.Haskell.LSP.TH.DataTypesJSON.DocumentFormattingParams Language.Haskell.LSP.TH.DataTypesJSON.TextDocumentIdentifier
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasTextDocument Language.Haskell.LSP.TH.DataTypesJSON.DocumentLinkParams Language.Haskell.LSP.TH.DataTypesJSON.TextDocumentIdentifier
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasTextDocument Language.Haskell.LSP.TH.DataTypesJSON.DocumentOnTypeFormattingParams Language.Haskell.LSP.TH.DataTypesJSON.TextDocumentIdentifier
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasTextDocument Language.Haskell.LSP.TH.DataTypesJSON.DocumentRangeFormattingParams Language.Haskell.LSP.TH.DataTypesJSON.TextDocumentIdentifier
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasTextDocument Language.Haskell.LSP.TH.DataTypesJSON.DocumentSymbolParams Language.Haskell.LSP.TH.DataTypesJSON.TextDocumentIdentifier
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasTextDocument Language.Haskell.LSP.TH.DataTypesJSON.ReferenceParams Language.Haskell.LSP.TH.DataTypesJSON.TextDocumentIdentifier
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasTextDocument Language.Haskell.LSP.TH.DataTypesJSON.RenameParams Language.Haskell.LSP.TH.DataTypesJSON.TextDocumentIdentifier
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasTextDocument Language.Haskell.LSP.TH.DataTypesJSON.TextDocumentEdit Language.Haskell.LSP.TH.DataTypesJSON.VersionedTextDocumentIdentifier
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasTextDocument Language.Haskell.LSP.TH.DataTypesJSON.TextDocumentPositionParams Language.Haskell.LSP.TH.DataTypesJSON.TextDocumentIdentifier
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasTextDocument Language.Haskell.LSP.TH.DataTypesJSON.WillSaveTextDocumentParams Language.Haskell.LSP.TH.DataTypesJSON.TextDocumentIdentifier
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasTextDocumentSync Language.Haskell.LSP.TH.DataTypesJSON.InitializeResponseCapabilitiesInner (GHC.Base.Maybe Language.Haskell.LSP.TH.DataTypesJSON.TextDocumentSyncOptions)
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasTextEdit Language.Haskell.LSP.TH.DataTypesJSON.CompletionItem (GHC.Base.Maybe Language.Haskell.LSP.TH.DataTypesJSON.TextEdit)
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasTitle Language.Haskell.LSP.TH.DataTypesJSON.Command Data.Text.Internal.Text
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasTriggerCharacters Language.Haskell.LSP.TH.DataTypesJSON.CompletionRegistrationOptions (GHC.Base.Maybe (Language.Haskell.LSP.TH.DataTypesJSON.List GHC.Base.String))
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasTriggerCharacters Language.Haskell.LSP.TH.DataTypesJSON.SignatureHelpRegistrationOptions (GHC.Base.Maybe (Language.Haskell.LSP.TH.DataTypesJSON.List GHC.Base.String))
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasUnregistrations Language.Haskell.LSP.TH.DataTypesJSON.UnregistrationParams (Language.Haskell.LSP.TH.DataTypesJSON.List Language.Haskell.LSP.TH.DataTypesJSON.Unregistration)
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasUri Language.Haskell.LSP.TH.DataTypesJSON.FileEvent Language.Haskell.LSP.TH.DataTypesJSON.Uri
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasUri Language.Haskell.LSP.TH.DataTypesJSON.Location Language.Haskell.LSP.TH.DataTypesJSON.Uri
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasUri Language.Haskell.LSP.TH.DataTypesJSON.PublishDiagnosticsParams Language.Haskell.LSP.TH.DataTypesJSON.Uri
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasUri Language.Haskell.LSP.TH.DataTypesJSON.TextDocumentIdentifier Language.Haskell.LSP.TH.DataTypesJSON.Uri
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasUri Language.Haskell.LSP.TH.DataTypesJSON.TextDocumentItem Language.Haskell.LSP.TH.DataTypesJSON.Uri
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasUri Language.Haskell.LSP.TH.DataTypesJSON.VersionedTextDocumentIdentifier Language.Haskell.LSP.TH.DataTypesJSON.Uri
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasVersion Language.Haskell.LSP.TH.DataTypesJSON.VersionedTextDocumentIdentifier Language.Haskell.LSP.TH.DataTypesJSON.TextDocumentVersion
- Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasXdata Language.Haskell.LSP.TH.DataTypesJSON.ResponseError (GHC.Base.Maybe Data.Aeson.Types.Internal.Value)
- Language.Haskell.LSP.TH.Messages: fmClientCancelNotification :: LspId -> CancelNotification
- Language.Haskell.LSP.TH.Messages: fmClientCodeActionRequest :: LspId -> CodeActionParams -> CodeActionRequest
- Language.Haskell.LSP.TH.Messages: fmClientCodeLensRequest :: LspId -> CodeLensParams -> CodeLensRequest
- Language.Haskell.LSP.TH.Messages: fmClientCodeLensResolveRequest :: LspId -> CodeLens -> CodeLensResolveRequest
- Language.Haskell.LSP.TH.Messages: fmClientCompletionItemResolveRequest :: LspId -> CompletionItem -> CompletionItemResolveRequest
- Language.Haskell.LSP.TH.Messages: fmClientCompletionRequest :: LspId -> TextDocumentPositionParams -> CompletionRequest
- Language.Haskell.LSP.TH.Messages: fmClientDefinitionRequest :: LspId -> TextDocumentPositionParams -> DefinitionRequest
- Language.Haskell.LSP.TH.Messages: fmClientDidChangeConfigurationNotification :: DidChangeConfigurationParams -> DidChangeConfigurationNotification
- Language.Haskell.LSP.TH.Messages: fmClientDidChangeTextDocumentNotification :: DidChangeTextDocumentParams -> DidChangeTextDocumentNotification
- Language.Haskell.LSP.TH.Messages: fmClientDidChangeWatchedFilesNotification :: DidChangeWatchedFilesParams -> DidChangeWatchedFilesNotification
- Language.Haskell.LSP.TH.Messages: fmClientDidCloseTextDocumentNotification :: DidCloseTextDocumentParams -> DidCloseTextDocumentNotification
- Language.Haskell.LSP.TH.Messages: fmClientDidOpenTextDocumentNotification :: DidOpenTextDocumentParams -> DidOpenTextDocumentNotification
- Language.Haskell.LSP.TH.Messages: fmClientDidSaveTextDocumentNotification :: DidSaveTextDocumentParams -> DidSaveTextDocumentNotification
- Language.Haskell.LSP.TH.Messages: fmClientDocumentFormattingRequest :: LspId -> DocumentFormattingParams -> DocumentFormattingRequest
- Language.Haskell.LSP.TH.Messages: fmClientDocumentHighlightRequest :: LspId -> TextDocumentPositionParams -> DocumentHighlightRequest
- Language.Haskell.LSP.TH.Messages: fmClientDocumentLinkRequest :: LspId -> DocumentLinkParams -> DocumentLinkRequest
- Language.Haskell.LSP.TH.Messages: fmClientDocumentLinkResolveRequest :: LspId -> DocumentLink -> DocumentLinkResolveRequest
- Language.Haskell.LSP.TH.Messages: fmClientDocumentOnTypeFormattingRequest :: LspId -> DocumentOnTypeFormattingParams -> DocumentOnTypeFormattingRequest
- Language.Haskell.LSP.TH.Messages: fmClientDocumentRangeFormattingRequest :: LspId -> DocumentRangeFormattingParams -> DocumentRangeFormattingRequest
- Language.Haskell.LSP.TH.Messages: fmClientDocumentSymbolRequest :: LspId -> DocumentSymbolParams -> DocumentSymbolRequest
- Language.Haskell.LSP.TH.Messages: fmClientExecuteCommandRequest :: LspId -> ExecuteCommandParams -> ExecuteCommandRequest
- Language.Haskell.LSP.TH.Messages: fmClientExitNotification :: ExitNotification
- Language.Haskell.LSP.TH.Messages: fmClientHoverRequest :: LspId -> TextDocumentPositionParams -> HoverRequest
- Language.Haskell.LSP.TH.Messages: fmClientInitializeRequest :: LspId -> InitializeParams -> InitializeRequest
- Language.Haskell.LSP.TH.Messages: fmClientInitializedNotification :: InitializedNotification
- Language.Haskell.LSP.TH.Messages: fmClientReferencesRequest :: LspId -> ReferenceParams -> ReferencesRequest
- Language.Haskell.LSP.TH.Messages: fmClientRenameRequest :: LspId -> RenameParams -> RenameRequest
- Language.Haskell.LSP.TH.Messages: fmClientShutdownRequest :: LspId -> Maybe Value -> ShutdownRequest
- Language.Haskell.LSP.TH.Messages: fmClientSignatureHelpRequest :: LspId -> TextDocumentPositionParams -> SignatureHelpRequest
- Language.Haskell.LSP.TH.Messages: fmClientWillSaveTextDocumentNotification :: WillSaveTextDocumentParams -> WillSaveTextDocumentNotification
- Language.Haskell.LSP.TH.Messages: fmClientWillSaveWaitUntilRequest :: LspId -> WillSaveTextDocumentParams -> WillSaveWaitUntilTextDocumentRequest
- Language.Haskell.LSP.TH.Messages: fmClientWorkspaceSymbolRequest :: LspId -> WorkspaceSymbolParams -> WorkspaceSymbolRequest
- Language.Haskell.LSP.TH.Messages: fmServerApplyWorkspaceEditRequest :: LspId -> ApplyWorkspaceEditParams -> ApplyWorkspaceEditRequest
- Language.Haskell.LSP.TH.Messages: fmServerLogMessageNotification :: MessageType -> Text -> LogMessageNotification
- Language.Haskell.LSP.TH.Messages: fmServerPublishDiagnosticsNotification :: PublishDiagnosticsParams -> PublishDiagnosticsNotification
- Language.Haskell.LSP.TH.Messages: fmServerRegisterCapabilityRequest :: LspId -> RegistrationParams -> RegisterCapabilityRequest
- Language.Haskell.LSP.TH.Messages: fmServerShowMessageNotification :: MessageType -> Text -> ShowMessageNotification
- Language.Haskell.LSP.TH.Messages: fmServerShowMessageRequest :: LspId -> ShowMessageRequestParams -> ShowMessageRequest
- Language.Haskell.LSP.TH.Messages: fmServerTelemetryNotification :: Value -> TelemetryNotification
- Language.Haskell.LSP.TH.Messages: fmServerUnregisterCapabilityRequest :: LspId -> UnregistrationParams -> UnregisterCapabilityRequest
+ Language.Haskell.LSP.TH.ClientCapabilities: CodeActionKindValueSet :: List CodeActionKind -> CodeActionKindValueSet
+ Language.Haskell.LSP.TH.ClientCapabilities: CodeActionLiteralSupport :: CodeActionKindValueSet -> CodeActionLiteralSupport
+ Language.Haskell.LSP.TH.ClientCapabilities: [$sel:_codeActionKind:CodeActionLiteralSupport] :: CodeActionLiteralSupport -> CodeActionKindValueSet
+ Language.Haskell.LSP.TH.ClientCapabilities: [$sel:_codeActionLiteralSupport:CodeActionClientCapabilities] :: CodeActionClientCapabilities -> Maybe CodeActionLiteralSupport
+ Language.Haskell.LSP.TH.ClientCapabilities: [$sel:_valueSet:CodeActionKindValueSet] :: CodeActionKindValueSet -> List CodeActionKind
+ Language.Haskell.LSP.TH.ClientCapabilities: data CodeActionKindValueSet
+ Language.Haskell.LSP.TH.ClientCapabilities: data CodeActionLiteralSupport
+ Language.Haskell.LSP.TH.ClientCapabilities: instance Data.Aeson.Types.FromJSON.FromJSON Language.Haskell.LSP.TH.ClientCapabilities.CodeActionKindValueSet
+ Language.Haskell.LSP.TH.ClientCapabilities: instance Data.Aeson.Types.FromJSON.FromJSON Language.Haskell.LSP.TH.ClientCapabilities.CodeActionLiteralSupport
+ Language.Haskell.LSP.TH.ClientCapabilities: instance Data.Aeson.Types.ToJSON.ToJSON Language.Haskell.LSP.TH.ClientCapabilities.CodeActionKindValueSet
+ Language.Haskell.LSP.TH.ClientCapabilities: instance Data.Aeson.Types.ToJSON.ToJSON Language.Haskell.LSP.TH.ClientCapabilities.CodeActionLiteralSupport
+ Language.Haskell.LSP.TH.ClientCapabilities: instance Data.Default.Class.Default Language.Haskell.LSP.TH.ClientCapabilities.CodeActionKindValueSet
+ Language.Haskell.LSP.TH.ClientCapabilities: instance GHC.Classes.Eq Language.Haskell.LSP.TH.ClientCapabilities.CodeActionKindValueSet
+ Language.Haskell.LSP.TH.ClientCapabilities: instance GHC.Classes.Eq Language.Haskell.LSP.TH.ClientCapabilities.CodeActionLiteralSupport
+ Language.Haskell.LSP.TH.ClientCapabilities: instance GHC.Read.Read Language.Haskell.LSP.TH.ClientCapabilities.CodeActionKindValueSet
+ Language.Haskell.LSP.TH.ClientCapabilities: instance GHC.Read.Read Language.Haskell.LSP.TH.ClientCapabilities.CodeActionLiteralSupport
+ Language.Haskell.LSP.TH.ClientCapabilities: instance GHC.Show.Show Language.Haskell.LSP.TH.ClientCapabilities.CodeActionKindValueSet
+ Language.Haskell.LSP.TH.ClientCapabilities: instance GHC.Show.Show Language.Haskell.LSP.TH.ClientCapabilities.CodeActionLiteralSupport
+ Language.Haskell.LSP.TH.DataTypesJSON: CancelRequestServer :: ServerMethod
+ Language.Haskell.LSP.TH.DataTypesJSON: CodeAction :: Text -> Maybe CodeActionKind -> Maybe (List Diagnostic) -> Maybe WorkspaceEdit -> Maybe Command -> CodeAction
+ Language.Haskell.LSP.TH.DataTypesJSON: CodeActionQuickFix :: CodeActionKind
+ Language.Haskell.LSP.TH.DataTypesJSON: CodeActionRefactor :: CodeActionKind
+ Language.Haskell.LSP.TH.DataTypesJSON: CodeActionRefactorExtract :: CodeActionKind
+ Language.Haskell.LSP.TH.DataTypesJSON: CodeActionRefactorInline :: CodeActionKind
+ Language.Haskell.LSP.TH.DataTypesJSON: CodeActionRefactorRewrite :: CodeActionKind
+ Language.Haskell.LSP.TH.DataTypesJSON: CodeActionSource :: CodeActionKind
+ Language.Haskell.LSP.TH.DataTypesJSON: CodeActionSourceOrganizeImports :: CodeActionKind
+ Language.Haskell.LSP.TH.DataTypesJSON: CodeActionUnknown :: Text -> CodeActionKind
+ Language.Haskell.LSP.TH.DataTypesJSON: CommandOrCodeActionCodeAction :: CodeAction -> CommandOrCodeAction
+ Language.Haskell.LSP.TH.DataTypesJSON: CommandOrCodeActionCommand :: Command -> CommandOrCodeAction
+ Language.Haskell.LSP.TH.DataTypesJSON: RequestCancelled :: ErrorCode
+ Language.Haskell.LSP.TH.DataTypesJSON: ServerErrorEnd :: ErrorCode
+ Language.Haskell.LSP.TH.DataTypesJSON: ServerErrorStart :: ErrorCode
+ Language.Haskell.LSP.TH.DataTypesJSON: ServerNotInitialized :: ErrorCode
+ Language.Haskell.LSP.TH.DataTypesJSON: TDSKind :: TextDocumentSyncKind -> TDS
+ Language.Haskell.LSP.TH.DataTypesJSON: TDSOptions :: TextDocumentSyncOptions -> TDS
+ Language.Haskell.LSP.TH.DataTypesJSON: UnknownErrorCode :: ErrorCode
+ Language.Haskell.LSP.TH.DataTypesJSON: [$sel:_command:CodeAction] :: CodeAction -> Maybe Command
+ Language.Haskell.LSP.TH.DataTypesJSON: [$sel:_diagnostics:CodeAction] :: CodeAction -> Maybe (List Diagnostic)
+ Language.Haskell.LSP.TH.DataTypesJSON: [$sel:_edit:CodeAction] :: CodeAction -> Maybe WorkspaceEdit
+ Language.Haskell.LSP.TH.DataTypesJSON: [$sel:_kind:CodeAction] :: CodeAction -> Maybe CodeActionKind
+ Language.Haskell.LSP.TH.DataTypesJSON: [$sel:_title:CodeAction] :: CodeAction -> Text
+ Language.Haskell.LSP.TH.DataTypesJSON: [$sel:only:CodeActionContext] :: CodeActionContext -> Maybe (List CodeActionKind)
+ Language.Haskell.LSP.TH.DataTypesJSON: [_arguments] :: Command -> Maybe Value
+ Language.Haskell.LSP.TH.DataTypesJSON: [_character] :: Position -> Int
+ Language.Haskell.LSP.TH.DataTypesJSON: [_command] :: Command -> Text
+ Language.Haskell.LSP.TH.DataTypesJSON: [_containerName] :: SymbolInformation -> Maybe Text
+ Language.Haskell.LSP.TH.DataTypesJSON: [_end] :: Range -> Position
+ Language.Haskell.LSP.TH.DataTypesJSON: [_kind] :: SymbolInformation -> SymbolKind
+ Language.Haskell.LSP.TH.DataTypesJSON: [_line] :: Position -> Int
+ Language.Haskell.LSP.TH.DataTypesJSON: [_location] :: SymbolInformation -> Location
+ Language.Haskell.LSP.TH.DataTypesJSON: [_name] :: SymbolInformation -> Text
+ Language.Haskell.LSP.TH.DataTypesJSON: [_range] :: Location -> Range
+ Language.Haskell.LSP.TH.DataTypesJSON: [_start] :: Range -> Position
+ Language.Haskell.LSP.TH.DataTypesJSON: [_textDocument] :: DocumentSymbolParams -> TextDocumentIdentifier
+ Language.Haskell.LSP.TH.DataTypesJSON: [_title] :: Command -> Text
+ Language.Haskell.LSP.TH.DataTypesJSON: [_uri] :: Location -> Uri
+ Language.Haskell.LSP.TH.DataTypesJSON: [getUri] :: Uri -> Text
+ Language.Haskell.LSP.TH.DataTypesJSON: data CodeAction
+ Language.Haskell.LSP.TH.DataTypesJSON: data CodeActionKind
+ Language.Haskell.LSP.TH.DataTypesJSON: data CommandOrCodeAction
+ Language.Haskell.LSP.TH.DataTypesJSON: data TDS
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.FromJSON.FromJSON Language.Haskell.LSP.TH.DataTypesJSON.TDS
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Data.Aeson.Types.ToJSON.ToJSON Language.Haskell.LSP.TH.DataTypesJSON.TDS
+ Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Classes.Eq Language.Haskell.LSP.TH.DataTypesJSON.TDS
+ Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Read.Read Language.Haskell.LSP.TH.DataTypesJSON.TDS
+ Language.Haskell.LSP.TH.DataTypesJSON: instance GHC.Show.Show Language.Haskell.LSP.TH.DataTypesJSON.TDS
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasAdditionalTextEdits Language.Haskell.LSP.TH.DataTypesJSON.CompletionItem (GHC.Base.Maybe (Language.Haskell.LSP.TH.List.List Language.Haskell.LSP.TH.WorkspaceEdit.TextEdit))
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasArguments Language.Haskell.LSP.TH.Command.Command (GHC.Base.Maybe Data.Aeson.Types.Internal.Value)
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasArguments Language.Haskell.LSP.TH.DataTypesJSON.ExecuteCommandParams (GHC.Base.Maybe (Language.Haskell.LSP.TH.List.List Data.Aeson.Types.Internal.Value))
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasChanges Language.Haskell.LSP.TH.DataTypesJSON.DidChangeWatchedFilesParams (Language.Haskell.LSP.TH.List.List Language.Haskell.LSP.TH.DataTypesJSON.FileEvent)
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasChanges Language.Haskell.LSP.TH.WorkspaceEdit.WorkspaceEdit (GHC.Base.Maybe Language.Haskell.LSP.TH.WorkspaceEdit.WorkspaceEditMap)
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasCharacter Language.Haskell.LSP.TH.Location.Position GHC.Types.Int
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasCode Language.Haskell.LSP.TH.Diagnostic.Diagnostic (GHC.Base.Maybe Data.Text.Internal.Text)
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasCode Language.Haskell.LSP.TH.Message.ResponseError Language.Haskell.LSP.TH.Message.ErrorCode
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasCommand Language.Haskell.LSP.TH.CodeAction.CodeAction (GHC.Base.Maybe Language.Haskell.LSP.TH.Command.Command)
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasCommand Language.Haskell.LSP.TH.Command.Command Data.Text.Internal.Text
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasCommand Language.Haskell.LSP.TH.DataTypesJSON.CodeLens (GHC.Base.Maybe Language.Haskell.LSP.TH.Command.Command)
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasCommand Language.Haskell.LSP.TH.DataTypesJSON.CompletionItem (GHC.Base.Maybe Language.Haskell.LSP.TH.Command.Command)
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasCommands Language.Haskell.LSP.TH.DataTypesJSON.ExecuteCommandOptions (Language.Haskell.LSP.TH.List.List Data.Text.Internal.Text)
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasCommands Language.Haskell.LSP.TH.DataTypesJSON.ExecuteCommandRegistrationOptions (Language.Haskell.LSP.TH.List.List Data.Text.Internal.Text)
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasContainerName Language.Haskell.LSP.TH.Symbol.SymbolInformation (GHC.Base.Maybe Data.Text.Internal.Text)
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasContentChanges Language.Haskell.LSP.TH.DataTypesJSON.DidChangeTextDocumentParams (Language.Haskell.LSP.TH.List.List Language.Haskell.LSP.TH.DataTypesJSON.TextDocumentContentChangeEvent)
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasContents Language.Haskell.LSP.TH.DataTypesJSON.Hover (Language.Haskell.LSP.TH.List.List Language.Haskell.LSP.TH.DataTypesJSON.MarkedString)
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasContext Language.Haskell.LSP.TH.CodeAction.CodeActionParams Language.Haskell.LSP.TH.CodeAction.CodeActionContext
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasDiagnostics Language.Haskell.LSP.TH.CodeAction.CodeAction (GHC.Base.Maybe (Language.Haskell.LSP.TH.List.List Language.Haskell.LSP.TH.Diagnostic.Diagnostic))
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasDiagnostics Language.Haskell.LSP.TH.CodeAction.CodeActionContext (Language.Haskell.LSP.TH.List.List Language.Haskell.LSP.TH.Diagnostic.Diagnostic)
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasDiagnostics Language.Haskell.LSP.TH.DataTypesJSON.PublishDiagnosticsParams (Language.Haskell.LSP.TH.List.List Language.Haskell.LSP.TH.Diagnostic.Diagnostic)
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasDocumentChanges Language.Haskell.LSP.TH.WorkspaceEdit.WorkspaceEdit (GHC.Base.Maybe (Language.Haskell.LSP.TH.List.List Language.Haskell.LSP.TH.WorkspaceEdit.TextDocumentEdit))
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasEdit Language.Haskell.LSP.TH.CodeAction.CodeAction (GHC.Base.Maybe Language.Haskell.LSP.TH.WorkspaceEdit.WorkspaceEdit)
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasEdit Language.Haskell.LSP.TH.DataTypesJSON.ApplyWorkspaceEditParams Language.Haskell.LSP.TH.WorkspaceEdit.WorkspaceEdit
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasEdits Language.Haskell.LSP.TH.WorkspaceEdit.TextDocumentEdit (Language.Haskell.LSP.TH.List.List Language.Haskell.LSP.TH.WorkspaceEdit.TextEdit)
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasEnd Language.Haskell.LSP.TH.Location.Range Language.Haskell.LSP.TH.Location.Position
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasError (Language.Haskell.LSP.TH.Message.ResponseMessage a) (GHC.Base.Maybe Language.Haskell.LSP.TH.Message.ResponseError)
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasId (Language.Haskell.LSP.TH.Message.RequestMessage m req resp) Language.Haskell.LSP.TH.Message.LspId
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasId (Language.Haskell.LSP.TH.Message.ResponseMessage a) Language.Haskell.LSP.TH.Message.LspIdRsp
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasId Language.Haskell.LSP.TH.Message.CancelParams Language.Haskell.LSP.TH.Message.LspId
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasItems Language.Haskell.LSP.TH.DataTypesJSON.CompletionListType (Language.Haskell.LSP.TH.List.List Language.Haskell.LSP.TH.DataTypesJSON.CompletionItem)
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasJsonrpc (Language.Haskell.LSP.TH.Message.NotificationMessage m a) Data.Text.Internal.Text
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasJsonrpc (Language.Haskell.LSP.TH.Message.RequestMessage m req resp) Data.Text.Internal.Text
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasJsonrpc (Language.Haskell.LSP.TH.Message.ResponseMessage a) Data.Text.Internal.Text
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasKind Language.Haskell.LSP.TH.CodeAction.CodeAction (GHC.Base.Maybe Language.Haskell.LSP.TH.CodeAction.CodeActionKind)
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasKind Language.Haskell.LSP.TH.Symbol.SymbolInformation Language.Haskell.LSP.TH.Symbol.SymbolKind
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasLine Language.Haskell.LSP.TH.Location.Position GHC.Types.Int
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasLocation Language.Haskell.LSP.TH.Diagnostic.DiagnosticRelatedInformation Language.Haskell.LSP.TH.Location.Location
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasLocation Language.Haskell.LSP.TH.Symbol.SymbolInformation Language.Haskell.LSP.TH.Location.Location
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasMessage Language.Haskell.LSP.TH.Diagnostic.Diagnostic Data.Text.Internal.Text
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasMessage Language.Haskell.LSP.TH.Diagnostic.DiagnosticRelatedInformation Data.Text.Internal.Text
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasMessage Language.Haskell.LSP.TH.Message.ResponseError Data.Text.Internal.Text
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasMethod (Language.Haskell.LSP.TH.Message.NotificationMessage m a) m
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasMethod (Language.Haskell.LSP.TH.Message.RequestMessage m req resp) m
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasMethod Language.Haskell.LSP.TH.DataTypesJSON.Registration Language.Haskell.LSP.TH.Message.ClientMethod
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasName Language.Haskell.LSP.TH.Symbol.SymbolInformation Data.Text.Internal.Text
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasNewText Language.Haskell.LSP.TH.WorkspaceEdit.TextEdit Data.Text.Internal.Text
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasParams (Language.Haskell.LSP.TH.Message.NotificationMessage m a) a
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasParams (Language.Haskell.LSP.TH.Message.RequestMessage m req resp) req
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasPosition Language.Haskell.LSP.TH.DataTypesJSON.DocumentOnTypeFormattingParams Language.Haskell.LSP.TH.Location.Position
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasPosition Language.Haskell.LSP.TH.DataTypesJSON.ReferenceParams Language.Haskell.LSP.TH.Location.Position
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasPosition Language.Haskell.LSP.TH.DataTypesJSON.RenameParams Language.Haskell.LSP.TH.Location.Position
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasPosition Language.Haskell.LSP.TH.DataTypesJSON.TextDocumentPositionParams Language.Haskell.LSP.TH.Location.Position
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasRange Language.Haskell.LSP.TH.CodeAction.CodeActionParams Language.Haskell.LSP.TH.Location.Range
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasRange Language.Haskell.LSP.TH.DataTypesJSON.CodeLens Language.Haskell.LSP.TH.Location.Range
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasRange Language.Haskell.LSP.TH.DataTypesJSON.DocumentHighlight Language.Haskell.LSP.TH.Location.Range
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasRange Language.Haskell.LSP.TH.DataTypesJSON.DocumentLink Language.Haskell.LSP.TH.Location.Range
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasRange Language.Haskell.LSP.TH.DataTypesJSON.DocumentRangeFormattingParams Language.Haskell.LSP.TH.Location.Range
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasRange Language.Haskell.LSP.TH.DataTypesJSON.Hover (GHC.Base.Maybe Language.Haskell.LSP.TH.Location.Range)
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasRange Language.Haskell.LSP.TH.DataTypesJSON.TextDocumentContentChangeEvent (GHC.Base.Maybe Language.Haskell.LSP.TH.Location.Range)
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasRange Language.Haskell.LSP.TH.Diagnostic.Diagnostic Language.Haskell.LSP.TH.Location.Range
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasRange Language.Haskell.LSP.TH.Location.Location Language.Haskell.LSP.TH.Location.Range
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasRange Language.Haskell.LSP.TH.WorkspaceEdit.TextEdit Language.Haskell.LSP.TH.Location.Range
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasRegistrations Language.Haskell.LSP.TH.DataTypesJSON.RegistrationParams (Language.Haskell.LSP.TH.List.List Language.Haskell.LSP.TH.DataTypesJSON.Registration)
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasRelatedInformation Language.Haskell.LSP.TH.Diagnostic.Diagnostic (GHC.Base.Maybe (Language.Haskell.LSP.TH.List.List Language.Haskell.LSP.TH.Diagnostic.DiagnosticRelatedInformation))
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasResult (Language.Haskell.LSP.TH.Message.ResponseMessage a) (GHC.Base.Maybe a)
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasRootUri Language.Haskell.LSP.TH.DataTypesJSON.InitializeParams (GHC.Base.Maybe Language.Haskell.LSP.TH.Uri.Uri)
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasSeverity Language.Haskell.LSP.TH.Diagnostic.Diagnostic (GHC.Base.Maybe Language.Haskell.LSP.TH.Diagnostic.DiagnosticSeverity)
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasSignatures Language.Haskell.LSP.TH.DataTypesJSON.SignatureHelp (Language.Haskell.LSP.TH.List.List Language.Haskell.LSP.TH.DataTypesJSON.SignatureInformation)
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasSource Language.Haskell.LSP.TH.Diagnostic.Diagnostic (GHC.Base.Maybe Language.Haskell.LSP.TH.Diagnostic.DiagnosticSource)
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasStart Language.Haskell.LSP.TH.Location.Range Language.Haskell.LSP.TH.Location.Position
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasTextDocument Language.Haskell.LSP.TH.CodeAction.CodeActionParams Language.Haskell.LSP.TH.TextDocumentIdentifier.TextDocumentIdentifier
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasTextDocument Language.Haskell.LSP.TH.DataTypesJSON.CodeLensParams Language.Haskell.LSP.TH.TextDocumentIdentifier.TextDocumentIdentifier
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasTextDocument Language.Haskell.LSP.TH.DataTypesJSON.DidChangeTextDocumentParams Language.Haskell.LSP.TH.WorkspaceEdit.VersionedTextDocumentIdentifier
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasTextDocument Language.Haskell.LSP.TH.DataTypesJSON.DidCloseTextDocumentParams Language.Haskell.LSP.TH.TextDocumentIdentifier.TextDocumentIdentifier
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasTextDocument Language.Haskell.LSP.TH.DataTypesJSON.DidSaveTextDocumentParams Language.Haskell.LSP.TH.TextDocumentIdentifier.TextDocumentIdentifier
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasTextDocument Language.Haskell.LSP.TH.DataTypesJSON.DocumentFormattingParams Language.Haskell.LSP.TH.TextDocumentIdentifier.TextDocumentIdentifier
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasTextDocument Language.Haskell.LSP.TH.DataTypesJSON.DocumentLinkParams Language.Haskell.LSP.TH.TextDocumentIdentifier.TextDocumentIdentifier
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasTextDocument Language.Haskell.LSP.TH.DataTypesJSON.DocumentOnTypeFormattingParams Language.Haskell.LSP.TH.TextDocumentIdentifier.TextDocumentIdentifier
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasTextDocument Language.Haskell.LSP.TH.DataTypesJSON.DocumentRangeFormattingParams Language.Haskell.LSP.TH.TextDocumentIdentifier.TextDocumentIdentifier
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasTextDocument Language.Haskell.LSP.TH.DataTypesJSON.ReferenceParams Language.Haskell.LSP.TH.TextDocumentIdentifier.TextDocumentIdentifier
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasTextDocument Language.Haskell.LSP.TH.DataTypesJSON.RenameParams Language.Haskell.LSP.TH.TextDocumentIdentifier.TextDocumentIdentifier
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasTextDocument Language.Haskell.LSP.TH.DataTypesJSON.TextDocumentPositionParams Language.Haskell.LSP.TH.TextDocumentIdentifier.TextDocumentIdentifier
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasTextDocument Language.Haskell.LSP.TH.DataTypesJSON.WillSaveTextDocumentParams Language.Haskell.LSP.TH.TextDocumentIdentifier.TextDocumentIdentifier
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasTextDocument Language.Haskell.LSP.TH.Symbol.DocumentSymbolParams Language.Haskell.LSP.TH.TextDocumentIdentifier.TextDocumentIdentifier
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasTextDocument Language.Haskell.LSP.TH.WorkspaceEdit.TextDocumentEdit Language.Haskell.LSP.TH.WorkspaceEdit.VersionedTextDocumentIdentifier
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasTextDocumentSync Language.Haskell.LSP.TH.DataTypesJSON.InitializeResponseCapabilitiesInner (GHC.Base.Maybe Language.Haskell.LSP.TH.DataTypesJSON.TDS)
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasTextEdit Language.Haskell.LSP.TH.DataTypesJSON.CompletionItem (GHC.Base.Maybe Language.Haskell.LSP.TH.WorkspaceEdit.TextEdit)
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasTitle Language.Haskell.LSP.TH.CodeAction.CodeAction Data.Text.Internal.Text
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasTitle Language.Haskell.LSP.TH.Command.Command Data.Text.Internal.Text
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasTriggerCharacters Language.Haskell.LSP.TH.DataTypesJSON.CompletionRegistrationOptions (GHC.Base.Maybe (Language.Haskell.LSP.TH.List.List GHC.Base.String))
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasTriggerCharacters Language.Haskell.LSP.TH.DataTypesJSON.SignatureHelpRegistrationOptions (GHC.Base.Maybe (Language.Haskell.LSP.TH.List.List GHC.Base.String))
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasUnregistrations Language.Haskell.LSP.TH.DataTypesJSON.UnregistrationParams (Language.Haskell.LSP.TH.List.List Language.Haskell.LSP.TH.DataTypesJSON.Unregistration)
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasUri Language.Haskell.LSP.TH.DataTypesJSON.FileEvent Language.Haskell.LSP.TH.Uri.Uri
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasUri Language.Haskell.LSP.TH.DataTypesJSON.PublishDiagnosticsParams Language.Haskell.LSP.TH.Uri.Uri
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasUri Language.Haskell.LSP.TH.DataTypesJSON.TextDocumentItem Language.Haskell.LSP.TH.Uri.Uri
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasUri Language.Haskell.LSP.TH.Location.Location Language.Haskell.LSP.TH.Uri.Uri
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasUri Language.Haskell.LSP.TH.TextDocumentIdentifier.TextDocumentIdentifier Language.Haskell.LSP.TH.Uri.Uri
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasUri Language.Haskell.LSP.TH.WorkspaceEdit.VersionedTextDocumentIdentifier Language.Haskell.LSP.TH.Uri.Uri
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasVersion Language.Haskell.LSP.TH.WorkspaceEdit.VersionedTextDocumentIdentifier Language.Haskell.LSP.TH.WorkspaceEdit.TextDocumentVersion
+ Language.Haskell.LSP.TH.DataTypesJSON: instance Language.Haskell.LSP.TH.DataTypesJSON.HasXdata Language.Haskell.LSP.TH.Message.ResponseError (GHC.Base.Maybe Data.Aeson.Types.Internal.Value)
+ Language.Haskell.LSP.TH.DataTypesJSON: requestId :: LspIdRsp -> LspId
+ Language.Haskell.LSP.TH.DataTypesJSON: type CancelNotificationServer = NotificationMessage ServerMethod CancelParams
+ Language.Haskell.LSP.TH.DataTypesJSON: type RegisterCapabilityResponse = ResponseMessage ()
+ Language.Haskell.LSP.TH.DataTypesJSON: type UnregisterCapabilityResponse = ResponseMessage ()
+ Language.Haskell.LSP.TH.MessageFuncs: fmClientCancelNotification :: LspId -> CancelNotification
+ Language.Haskell.LSP.TH.MessageFuncs: fmClientCodeActionRequest :: LspId -> CodeActionParams -> CodeActionRequest
+ Language.Haskell.LSP.TH.MessageFuncs: fmClientCodeLensRequest :: LspId -> CodeLensParams -> CodeLensRequest
+ Language.Haskell.LSP.TH.MessageFuncs: fmClientCodeLensResolveRequest :: LspId -> CodeLens -> CodeLensResolveRequest
+ Language.Haskell.LSP.TH.MessageFuncs: fmClientCompletionItemResolveRequest :: LspId -> CompletionItem -> CompletionItemResolveRequest
+ Language.Haskell.LSP.TH.MessageFuncs: fmClientCompletionRequest :: LspId -> TextDocumentPositionParams -> CompletionRequest
+ Language.Haskell.LSP.TH.MessageFuncs: fmClientDefinitionRequest :: LspId -> TextDocumentPositionParams -> DefinitionRequest
+ Language.Haskell.LSP.TH.MessageFuncs: fmClientDidChangeConfigurationNotification :: DidChangeConfigurationParams -> DidChangeConfigurationNotification
+ Language.Haskell.LSP.TH.MessageFuncs: fmClientDidChangeTextDocumentNotification :: DidChangeTextDocumentParams -> DidChangeTextDocumentNotification
+ Language.Haskell.LSP.TH.MessageFuncs: fmClientDidChangeWatchedFilesNotification :: DidChangeWatchedFilesParams -> DidChangeWatchedFilesNotification
+ Language.Haskell.LSP.TH.MessageFuncs: fmClientDidCloseTextDocumentNotification :: DidCloseTextDocumentParams -> DidCloseTextDocumentNotification
+ Language.Haskell.LSP.TH.MessageFuncs: fmClientDidOpenTextDocumentNotification :: DidOpenTextDocumentParams -> DidOpenTextDocumentNotification
+ Language.Haskell.LSP.TH.MessageFuncs: fmClientDidSaveTextDocumentNotification :: DidSaveTextDocumentParams -> DidSaveTextDocumentNotification
+ Language.Haskell.LSP.TH.MessageFuncs: fmClientDocumentFormattingRequest :: LspId -> DocumentFormattingParams -> DocumentFormattingRequest
+ Language.Haskell.LSP.TH.MessageFuncs: fmClientDocumentHighlightRequest :: LspId -> TextDocumentPositionParams -> DocumentHighlightRequest
+ Language.Haskell.LSP.TH.MessageFuncs: fmClientDocumentLinkRequest :: LspId -> DocumentLinkParams -> DocumentLinkRequest
+ Language.Haskell.LSP.TH.MessageFuncs: fmClientDocumentLinkResolveRequest :: LspId -> DocumentLink -> DocumentLinkResolveRequest
+ Language.Haskell.LSP.TH.MessageFuncs: fmClientDocumentOnTypeFormattingRequest :: LspId -> DocumentOnTypeFormattingParams -> DocumentOnTypeFormattingRequest
+ Language.Haskell.LSP.TH.MessageFuncs: fmClientDocumentRangeFormattingRequest :: LspId -> DocumentRangeFormattingParams -> DocumentRangeFormattingRequest
+ Language.Haskell.LSP.TH.MessageFuncs: fmClientDocumentSymbolRequest :: LspId -> DocumentSymbolParams -> DocumentSymbolRequest
+ Language.Haskell.LSP.TH.MessageFuncs: fmClientExecuteCommandRequest :: LspId -> ExecuteCommandParams -> ExecuteCommandRequest
+ Language.Haskell.LSP.TH.MessageFuncs: fmClientExitNotification :: ExitNotification
+ Language.Haskell.LSP.TH.MessageFuncs: fmClientHoverRequest :: LspId -> TextDocumentPositionParams -> HoverRequest
+ Language.Haskell.LSP.TH.MessageFuncs: fmClientInitializeRequest :: LspId -> InitializeParams -> InitializeRequest
+ Language.Haskell.LSP.TH.MessageFuncs: fmClientInitializedNotification :: InitializedNotification
+ Language.Haskell.LSP.TH.MessageFuncs: fmClientReferencesRequest :: LspId -> ReferenceParams -> ReferencesRequest
+ Language.Haskell.LSP.TH.MessageFuncs: fmClientRenameRequest :: LspId -> RenameParams -> RenameRequest
+ Language.Haskell.LSP.TH.MessageFuncs: fmClientShutdownRequest :: LspId -> Maybe Value -> ShutdownRequest
+ Language.Haskell.LSP.TH.MessageFuncs: fmClientSignatureHelpRequest :: LspId -> TextDocumentPositionParams -> SignatureHelpRequest
+ Language.Haskell.LSP.TH.MessageFuncs: fmClientWillSaveTextDocumentNotification :: WillSaveTextDocumentParams -> WillSaveTextDocumentNotification
+ Language.Haskell.LSP.TH.MessageFuncs: fmClientWillSaveWaitUntilRequest :: LspId -> WillSaveTextDocumentParams -> WillSaveWaitUntilTextDocumentRequest
+ Language.Haskell.LSP.TH.MessageFuncs: fmClientWorkspaceSymbolRequest :: LspId -> WorkspaceSymbolParams -> WorkspaceSymbolRequest
+ Language.Haskell.LSP.TH.MessageFuncs: fmServerApplyWorkspaceEditRequest :: LspId -> ApplyWorkspaceEditParams -> ApplyWorkspaceEditRequest
+ Language.Haskell.LSP.TH.MessageFuncs: fmServerLogMessageNotification :: MessageType -> Text -> LogMessageNotification
+ Language.Haskell.LSP.TH.MessageFuncs: fmServerPublishDiagnosticsNotification :: PublishDiagnosticsParams -> PublishDiagnosticsNotification
+ Language.Haskell.LSP.TH.MessageFuncs: fmServerRegisterCapabilityRequest :: LspId -> RegistrationParams -> RegisterCapabilityRequest
+ Language.Haskell.LSP.TH.MessageFuncs: fmServerShowMessageNotification :: MessageType -> Text -> ShowMessageNotification
+ Language.Haskell.LSP.TH.MessageFuncs: fmServerShowMessageRequest :: LspId -> ShowMessageRequestParams -> ShowMessageRequest
+ Language.Haskell.LSP.TH.MessageFuncs: fmServerTelemetryNotification :: Value -> TelemetryNotification
+ Language.Haskell.LSP.TH.MessageFuncs: fmServerUnregisterCapabilityRequest :: LspId -> UnregistrationParams -> UnregisterCapabilityRequest
- Language.Haskell.LSP.TH.ClientCapabilities: CodeActionClientCapabilities :: Maybe Bool -> CodeActionClientCapabilities
+ Language.Haskell.LSP.TH.ClientCapabilities: CodeActionClientCapabilities :: Maybe Bool -> Maybe CodeActionLiteralSupport -> CodeActionClientCapabilities
- Language.Haskell.LSP.TH.DataTypesJSON: CodeActionContext :: List Diagnostic -> CodeActionContext
+ Language.Haskell.LSP.TH.DataTypesJSON: CodeActionContext :: List Diagnostic -> Maybe (List CodeActionKind) -> CodeActionContext
- Language.Haskell.LSP.TH.DataTypesJSON: InitializeResponseCapabilitiesInner :: Maybe TextDocumentSyncOptions -> Maybe Bool -> Maybe CompletionOptions -> Maybe SignatureHelpOptions -> Maybe Bool -> Maybe Bool -> Maybe Bool -> Maybe Bool -> Maybe Bool -> Maybe Bool -> Maybe CodeLensOptions -> Maybe Bool -> Maybe Bool -> Maybe DocumentOnTypeFormattingOptions -> Maybe Bool -> Maybe DocumentLinkOptions -> Maybe ExecuteCommandOptions -> Maybe Value -> InitializeResponseCapabilitiesInner
+ Language.Haskell.LSP.TH.DataTypesJSON: InitializeResponseCapabilitiesInner :: Maybe TDS -> Maybe Bool -> Maybe CompletionOptions -> Maybe SignatureHelpOptions -> Maybe Bool -> Maybe Bool -> Maybe Bool -> Maybe Bool -> Maybe Bool -> Maybe Bool -> Maybe CodeLensOptions -> Maybe Bool -> Maybe Bool -> Maybe DocumentOnTypeFormattingOptions -> Maybe Bool -> Maybe DocumentLinkOptions -> Maybe ExecuteCommandOptions -> Maybe Value -> InitializeResponseCapabilitiesInner
- Language.Haskell.LSP.TH.DataTypesJSON: [$sel:_textDocumentSync:InitializeResponseCapabilitiesInner] :: InitializeResponseCapabilitiesInner -> Maybe TextDocumentSyncOptions
+ Language.Haskell.LSP.TH.DataTypesJSON: [$sel:_textDocumentSync:InitializeResponseCapabilitiesInner] :: InitializeResponseCapabilitiesInner -> Maybe TDS
- Language.Haskell.LSP.TH.DataTypesJSON: type CodeActionRequest = RequestMessage ClientMethod CodeActionParams (List Command)
+ Language.Haskell.LSP.TH.DataTypesJSON: type CodeActionRequest = RequestMessage ClientMethod CodeActionParams (List CommandOrCodeAction)
- Language.Haskell.LSP.TH.DataTypesJSON: type CodeActionResponse = ResponseMessage (List Command)
+ Language.Haskell.LSP.TH.DataTypesJSON: type CodeActionResponse = ResponseMessage (List CommandOrCodeAction)
- Language.Haskell.LSP.TH.DataTypesJSON: type TextDocumentVersion = Int
+ Language.Haskell.LSP.TH.DataTypesJSON: type TextDocumentVersion = Maybe Int

Files

ChangeLog.md view
@@ -1,5 +1,19 @@-# Revision history for haskell-lsp+# Revision history for haskell-lsp-types +## 0.4.0.0  -- 2018-07-10++* CodeAction support as per v3.8 of the specification, by @Bubba+* Update VersionedTextDocumentIdentifier to match specification, by @Bubba.++## 0.3.0.0++* Handle TextDocumentSync fallbacks with new TDS type.++## 0.2.3.0++* GHC 8.4.3 support+* Introduce additional error codes as per the LSP spec. By @Bubba+ ## 0.2.2.0  -- 2018-05-04  * Make Diagnostic relatedInformation optional, as per the LSP Spec. By @Bubba.@@ -9,4 +23,3 @@ * Broken out from the haskell-lsp package, to simplify development   by not having to run massive TH processes when working on the   framework.-
haskell-lsp-types.cabal view
@@ -1,5 +1,5 @@ name:                haskell-lsp-types-version:             0.2.2.0+version:             0.4.0.0 synopsis:            Haskell library for the Microsoft Language Server Protocol, data types  description:         An implementation of the types to allow language implementors to@@ -10,7 +10,7 @@ license-file:        LICENSE author:              Alan Zimmerman maintainer:          alan.zimm@gmail.com-copyright:           Alan Zimmerman, 2016-2017+copyright:           Alan Zimmerman, 2016-2018 category:            Development build-type:          Simple extra-source-files:  ChangeLog.md, README.md@@ -20,9 +20,18 @@   exposed-modules:     Language.Haskell.LSP.TH.ClientCapabilities                      , Language.Haskell.LSP.TH.Constants                      , Language.Haskell.LSP.TH.DataTypesJSON-                     , Language.Haskell.LSP.TH.Messages+                     , Language.Haskell.LSP.TH.MessageFuncs                      , Language.Haskell.LSP.TH.Utils-  -- other-modules:+  other-modules:       Language.Haskell.LSP.TH.Command+                     , Language.Haskell.LSP.TH.CodeAction+                     , Language.Haskell.LSP.TH.Diagnostic+                     , Language.Haskell.LSP.TH.List+                     , Language.Haskell.LSP.TH.Location+                     , Language.Haskell.LSP.TH.Message+                     , Language.Haskell.LSP.TH.Symbol+                     , Language.Haskell.LSP.TH.TextDocumentIdentifier+                     , Language.Haskell.LSP.TH.Uri+                     , Language.Haskell.LSP.TH.WorkspaceEdit  -- other-extensions:   ghc-options:         -Wall   -- ghc-options:         -Werror
src/Language/Haskell/LSP/TH/ClientCapabilities.hs view
@@ -1,19 +1,13 @@-{-# LANGUAGE DeriveGeneric         #-} {-# LANGUAGE DuplicateRecordFields #-}-{-# LANGUAGE FlexibleInstances     #-} {-# LANGUAGE TemplateHaskell       #-}-{-# LANGUAGE TypeSynonymInstances  #-}  module Language.Haskell.LSP.TH.ClientCapabilities where  import           Data.Aeson.TH--- import           Data.Aeson.Types import qualified Data.Aeson as A--- import qualified Data.HashMap.Strict as H--- import qualified Data.Text as T- import Language.Haskell.LSP.TH.Constants--- import Language.Haskell.LSP.Utility+import Language.Haskell.LSP.TH.CodeAction+import Language.Haskell.LSP.TH.List import Data.Default  -- ---------------------------------------------------------------------@@ -496,9 +490,37 @@  -- ------------------------------------- +data CodeActionKindValueSet =+  CodeActionKindValueSet+   { _valueSet :: List CodeActionKind+   } deriving (Show, Read, Eq)++instance Default CodeActionKindValueSet where+  def = CodeActionKindValueSet (List allKinds)+    where allKinds = [ CodeActionQuickFix+                     , CodeActionRefactor+                     , CodeActionRefactorExtract+                     , CodeActionRefactorInline+                     , CodeActionRefactorRewrite+                     , CodeActionSource+                     , CodeActionSourceOrganizeImports+                     ]++$(deriveJSON lspOptions ''CodeActionKindValueSet)++data CodeActionLiteralSupport =+  CodeActionLiteralSupport+    { _codeActionKind :: CodeActionKindValueSet -- ^ The code action kind is support with the following value set.+    } deriving (Show, Read, Eq)++$(deriveJSON lspOptions ''CodeActionLiteralSupport)+ data CodeActionClientCapabilities =   CodeActionClientCapabilities-    { _dynamicRegistration :: Maybe Bool+    { _dynamicRegistration      :: Maybe Bool -- ^ Whether code action supports dynamic registration.+    , _codeActionLiteralSupport :: Maybe CodeActionLiteralSupport -- ^ The client support code action literals as a valid response+                                                                 -- of the `textDocument/codeAction` request.+                                                                 -- Since 3.8.0     } deriving (Show, Read, Eq)  $(deriveJSON lspOptions ''CodeActionClientCapabilities)
+ src/Language/Haskell/LSP/TH/CodeAction.hs view
@@ -0,0 +1,294 @@+{-# LANGUAGE DuplicateRecordFields      #-}+{-# LANGUAGE OverloadedStrings          #-}+{-# LANGUAGE TemplateHaskell            #-}+module Language.Haskell.LSP.TH.CodeAction where++import           Control.Applicative+import qualified Data.Aeson                    as A+import           Data.Aeson.TH+import           Data.Aeson.Types+import           Data.Text                      ( Text )+import           Language.Haskell.LSP.TH.Command+import           Language.Haskell.LSP.TH.Constants+import           Language.Haskell.LSP.TH.Diagnostic+import           Language.Haskell.LSP.TH.List+import           Language.Haskell.LSP.TH.Location+import           Language.Haskell.LSP.TH.Message+import           Language.Haskell.LSP.TH.TextDocumentIdentifier+import           Language.Haskell.LSP.TH.WorkspaceEdit+++{-+Code Action Request++https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#code-action-request++The code action request is sent from the client to the server tocompute commands+for a given text document and range. These commands are typically code fixes to+either fix problems or to beautify/refactor code. The result of a+textDocument/codeAction request is an array of Command literals which are+typically presented in the user interface. When the command is selected the+server should be contacted again (via the workspace/executeCommand) request to+execute the command.++Since version 3.8.0: support for CodeAction litarals to enable the following+scenarios:++the ability to directly return a workspace edit from e code action request. This+avoids having another server roundtrip to execute an actual code action. However+server providers should be aware that if the code action is expensive to compute+or the edits are huge it might still be beneficial if the result is imply a+command and the actual edit is only computed when needed. the ability to group+code actions using a kind. Clients are allowed to ignore that information.+However it allows them to better group code action for example into+corresponding menus (e.g. all refactor code actions into a refactor menu).+Clients need to announce there support code action literals and code action+kinds via the corresponding client capability+textDocument.codeAction.codeActionLiteralSupport.++Request++    method: 'textDocument/codeAction'+    params: CodeActionParams defined as follows:++/**+ * Params for the CodeActionRequest+ */+interface CodeActionParams {+	/**+	 * The document in which the command was invoked.+	 */+	textDocument: TextDocumentIdentifier;++	/**+	 * The range for which the command was invoked.+	 */+	range: Range;++	/**+	 * Context carrying additional information.+	 */+	context: CodeActionContext;+}++/**+ * The kind of a code action.+ *+ * Kinds are a hierarchical list of identifiers separated by `.`, e.g. `"refactor.extract.function"`.+ *+ * The set of kinds is open and client needs to announce the kinds it supports to the server during+ * initialization.+ */+export type CodeActionKind = string;++/**+ * A set of predefined code action kinds+ */+export namespace CodeActionKind {+	/**+	 * Base kind for quickfix actions: 'quickfix'+	 */+	export const QuickFix: CodeActionKind = 'quickfix';++	/**+	 * Base kind for refactoring actions: 'refactor'+	 */+	export const Refactor: CodeActionKind = 'refactor';++	/**+	 * Base kind for refactoring extraction actions: 'refactor.extract'+	 *+	 * Example extract actions:+	 *+	 * - Extract method+	 * - Extract function+	 * - Extract variable+	 * - Extract interface from class+	 * - ...+	 */+	export const RefactorExtract: CodeActionKind = 'refactor.extract';++	/**+	 * Base kind for refactoring inline actions: 'refactor.inline'+	 *+	 * Example inline actions:+	 *+	 * - Inline function+	 * - Inline variable+	 * - Inline constant+	 * - ...+	 */+	export const RefactorInline: CodeActionKind = 'refactor.inline';++	/**+	 * Base kind for refactoring rewrite actions: 'refactor.rewrite'+	 *+	 * Example rewrite actions:+	 *+	 * - Convert JavaScript function to class+	 * - Add or remove parameter+	 * - Encapsulate field+	 * - Make method static+	 * - Move method to base class+	 * - ...+	 */+	export const RefactorRewrite: CodeActionKind = 'refactor.rewrite';++	/**+	 * Base kind for source actions: `source`+	 *+	 * Source code actions apply to the entire file.+	 */+	export const Source: CodeActionKind = 'source';++	/**+	 * Base kind for an organize imports source action: `source.organizeImports`+	 */+	export const SourceOrganizeImports: CodeActionKind = 'source.organizeImports';+}++/**+ * Contains additional diagnostic information about the context in which+ * a code action is run.+ */+interface CodeActionContext {+	/**+	 * An array of diagnostics.+	 */+	diagnostics: Diagnostic[];++	/**+	 * Requested kind of actions to return.+	 *+	 * Actions not of this kind are filtered out by the client before being shown. So servers+	 * can omit computing them.+	 */+	only?: CodeActionKind[];+}++Response++    result: (Command | CodeAction)[] | null where CodeAction is defined as follows:+        /**+    * A code action represents a change that can be performed in code, e.g. to fix a problem or+    * to refactor code.+    *+    * A CodeAction must set either `edit` and/or a `command`. If both are supplied, the `edit` is applied first, then the `command` is executed.+    */+    export interface CodeAction {++        /**+        * A short, human-readable, title for this code action.+        */+        title: string;++        /**+        * The kind of the code action.+        *+        * Used to filter code actions.+        */+        kind?: CodeActionKind;++        /**+        * The diagnostics that this code action resolves.+        */+        diagnostics?: Diagnostic[];++        /**+        * The workspace edit this code action performs.+        */+        edit?: WorkspaceEdit;++        /**+        * A command this code action executes. If a code action+        * provides an edit and a command, first the edit is+        * executed and then the command.+        */+        command?: Command;+    }+    error: code and message set in case an exception happens during the code+           action request.++-}++data CodeActionKind = CodeActionQuickFix+                    | CodeActionRefactor+                    | CodeActionRefactorExtract+                    | CodeActionRefactorInline+                    | CodeActionRefactorRewrite+                    | CodeActionSource+                    | CodeActionSourceOrganizeImports+                    | CodeActionUnknown Text+  deriving (Read,Show,Eq)++instance ToJSON CodeActionKind where+  toJSON CodeActionQuickFix                   = String "quickfix"+  toJSON CodeActionRefactor                   = String "refactor"+  toJSON CodeActionRefactorExtract            = String "refactor.extract"+  toJSON CodeActionRefactorInline             = String "refactor.inline"+  toJSON CodeActionRefactorRewrite            = String "refactor.rewrite"+  toJSON CodeActionSource                     = String "source"+  toJSON CodeActionSourceOrganizeImports      = String "source.organizeImports"+  toJSON (CodeActionUnknown s)                = String s++instance FromJSON CodeActionKind where+  parseJSON (String "quickfix")               = pure CodeActionQuickFix+  parseJSON (String "refactor")               = pure CodeActionRefactor+  parseJSON (String "refactor.extract")       = pure CodeActionRefactorExtract+  parseJSON (String "refactor.inline")        = pure CodeActionRefactorInline+  parseJSON (String "refactor.rewrite")       = pure CodeActionRefactorRewrite+  parseJSON (String "source")                 = pure CodeActionSource+  parseJSON (String "source.organizeImports") = pure CodeActionSourceOrganizeImports+  parseJSON (String s)                        = pure (CodeActionUnknown s)+  parseJSON _                                 = mempty++data CodeActionContext =+  CodeActionContext+    { _diagnostics :: List Diagnostic+    , only         :: Maybe (List CodeActionKind)+    } deriving (Read,Show,Eq)++deriveJSON lspOptions ''CodeActionContext+++data CodeActionParams =+  CodeActionParams+    { _textDocument :: TextDocumentIdentifier+    , _range        :: Range+    , _context      :: CodeActionContext+    } deriving (Read,Show,Eq)++deriveJSON lspOptions ''CodeActionParams++data CodeAction =+  -- | A code action represents a change that can be performed in code, e.g. to fix a problem or+  -- to refactor code.+  --+  -- A CodeAction must set either '_edit' and/or a '_command'. If both are supplied,+  -- the '_edit' is applied first, then the '_command' is executed.+  CodeAction+    { _title       :: Text -- ^ A short, human-readable, title for this code action.+    , _kind        :: Maybe CodeActionKind -- ^ The kind of the code action. Used to filter code actions.+    , _diagnostics :: Maybe (List Diagnostic) -- ^ The diagnostics that this code action resolves.+    , _edit        :: Maybe WorkspaceEdit -- ^ The workspace edit this code action performs.+    , _command     :: Maybe Command -- ^ A command this code action executes. If a code action+                                    -- provides an edit and a command, first the edit is+                                    -- executed and then the command.+    } deriving (Read,Show,Eq)++deriveJSON lspOptions ''CodeAction++data CommandOrCodeAction = CommandOrCodeActionCommand Command+                         | CommandOrCodeActionCodeAction CodeAction+  deriving (Read,Show,Eq)++instance FromJSON CommandOrCodeAction where+  parseJSON x = CommandOrCodeActionCommand <$> parseJSON x+              <|> CommandOrCodeActionCodeAction <$> parseJSON x++instance ToJSON CommandOrCodeAction where+  toJSON (CommandOrCodeActionCommand x) = toJSON x+  toJSON (CommandOrCodeActionCodeAction x) = toJSON x++type CodeActionRequest  = RequestMessage ClientMethod CodeActionParams (List CommandOrCodeAction)+type CodeActionResponse = ResponseMessage (List CommandOrCodeAction)
+ src/Language/Haskell/LSP/TH/Command.hs view
@@ -0,0 +1,44 @@+{-# LANGUAGE TemplateHaskell            #-}++module Language.Haskell.LSP.TH.Command where++import           Data.Aeson+import           Data.Aeson.TH+import           Data.Text+import           Language.Haskell.LSP.TH.Constants+-- ---------------------------------------------------------------------+{-+Command++https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#command++Represents a reference to a command. Provides a title which will be used to+represent a command in the UI. Commands are identitifed using a string+identifier and the protocol currently doesn't specify a set of well known+commands. So executing a command requires some tool extension code.++interface Command {+    /**+     * Title of the command, like `save`.+     */+    title: string;+    /**+     * The identifier of the actual command handler.+     */+    command: string;+    /**+     * Arguments that the command handler should be+     * invoked with.+     */+    arguments?: any[];+}+-}++data Command =+  Command+    { _title     :: Text+    , _command   :: Text+    , _arguments :: Maybe Value+    } deriving (Show, Read, Eq)++deriveJSON lspOptions ''Command
src/Language/Haskell/LSP/TH/DataTypesJSON.hs view
@@ -10,4256 +10,3201 @@ {-# LANGUAGE TemplateHaskell            #-} {-# LANGUAGE TypeSynonymInstances       #-} -module Language.Haskell.LSP.TH.DataTypesJSON where--import           Control.Lens.TH                            (makeFieldsNoPrefix)-import qualified Data.Aeson                                 as A-import           Data.Aeson.TH-import           Data.Aeson.Types-import           Data.Hashable-import qualified Data.HashMap.Strict                        as H-import           Data.Monoid                                ((<>))-import           Data.Text                                  (Text)-import qualified Data.Text                                  as T-import           Network.URI-import qualified System.FilePath.Posix                      as FPP-import qualified System.FilePath.Windows                    as FPW-import qualified System.Info-import           System.IO                                  (FilePath)--import           Language.Haskell.LSP.TH.ClientCapabilities-import           Language.Haskell.LSP.TH.Constants-import           Language.Haskell.LSP.TH.Utils---- ------------------------------------------------------------------------- | This data type is used to host a FromJSON instance for the encoding used by--- elisp, where an empty list shows up as "null"-newtype List a = List [a]-                deriving (Show,Read,Eq,Ord,Monoid,Functor,Foldable,Traversable)--instance (A.ToJSON a) => A.ToJSON (List a) where-  toJSON (List ls) = toJSON ls--instance (A.FromJSON a) => A.FromJSON (List a) where-  parseJSON A.Null = return (List [])-  parseJSON v      = List <$> parseJSON v--#if __GLASGOW_HASKELL__ >= 804-instance Semigroup (List a) where-  (<>) = mappend-#endif---- -----------------------------------------------------------------------newtype Uri = Uri { getUri :: Text }-  deriving (Eq,Ord,Read,Show,A.FromJSON,A.ToJSON,Hashable,A.ToJSONKey,A.FromJSONKey)--fileScheme :: String-fileScheme = "file:"--windowsOS :: String-windowsOS = "mingw32"--type SystemOS = String--uriToFilePath :: Uri -> Maybe FilePath-uriToFilePath = platformAwareUriToFilePath System.Info.os--platformAwareUriToFilePath :: String -> Uri -> Maybe FilePath-platformAwareUriToFilePath systemOS (Uri uri) = do-  parsedUri <- parseURI $ T.unpack uri-  if uriScheme parsedUri == fileScheme-    then return $ (platformAdjustFromUriPath systemOS . unEscapeString . uriPath) parsedUri-    else Nothing--platformAdjustFromUriPath :: SystemOS -> String -> FilePath-platformAdjustFromUriPath systemOS srcPath =-  if systemOS /= windowsOS then srcPath-    else let-      firstSegment:rest = (FPP.splitDirectories . tail) srcPath  -- Drop leading '/' for absolute Windows paths-      drive = if FPW.isDrive firstSegment then FPW.addTrailingPathSeparator firstSegment else firstSegment-      in FPW.joinDrive drive $ FPW.joinPath rest--filePathToUri :: FilePath -> Uri-filePathToUri = platformAwareFilePathToUri System.Info.os--platformAwareFilePathToUri :: SystemOS -> FilePath -> Uri-platformAwareFilePathToUri systemOS fp = Uri . T.pack . show $ URI-  { uriScheme = fileScheme-  , uriAuthority = Just $ URIAuth "" "" ""-  , uriPath = platformAdjustToUriPath systemOS fp-  , uriQuery = ""-  , uriFragment = ""-  }--platformAdjustToUriPath :: SystemOS -> FilePath -> String-platformAdjustToUriPath systemOS srcPath =-  if systemOS /= windowsOS then srcPath-    else let-      drive:rest = FPW.splitDirectories srcPath-      leaveCharUnescaped = (/= ':')-      removePathSeparator = filter (not . FPW.isPathSeparator)-      escapedDrive = removePathSeparator $ escapeURIString leaveCharUnescaped drive-      in '/' : FPP.joinPath (escapedDrive : rest)---- ------------------------------------------------------------------------- | Id used for a request, Can be either a String or an Int-data LspId = IdInt Int | IdString Text-            deriving (Show,Read,Eq,Ord)--instance A.ToJSON LspId where-  toJSON (IdInt i)    = toJSON i-  toJSON (IdString s) = toJSON s--instance A.FromJSON LspId where-  parseJSON v@(A.Number _) = IdInt <$> parseJSON v-  parseJSON  (A.String  s) = return (IdString s)-  parseJSON _              = mempty---- ------------------------------------------------------------------------- | Id used for a response, Can be either a String or an Int, or Null. If a--- request doesn't provide a result value the receiver of a request still needs--- to return a response message to conform to the JSON RPC specification. The--- result property of the ResponseMessage should be set to null in this case to--- signal a successful request.-data LspIdRsp = IdRspInt Int | IdRspString Text | IdRspNull-            deriving (Show,Read,Eq)--instance A.ToJSON LspIdRsp where-  toJSON (IdRspInt i)    = toJSON i-  toJSON (IdRspString s) = toJSON s-  toJSON IdRspNull       = A.Null--instance A.FromJSON LspIdRsp where-  parseJSON v@(A.Number _) = IdRspInt <$> parseJSON v-  parseJSON  (A.String  s) = return $ IdRspString s-  parseJSON  A.Null        = return IdRspNull-  parseJSON _              = mempty--responseId :: LspId -> LspIdRsp-responseId (IdInt    i) = (IdRspInt i)-responseId (IdString s) = (IdRspString s)---- ------------------------------------------------------------------------- Client Methods-data ClientMethod =- -- General-   Initialize- | Initialized- | Shutdown- | Exit- | CancelRequest- -- Workspace- | WorkspaceDidChangeConfiguration- | WorkspaceDidChangeWatchedFiles- | WorkspaceSymbol- | WorkspaceExecuteCommand- -- Document- | TextDocumentDidOpen- | TextDocumentDidChange- | TextDocumentWillSave- | TextDocumentWillSaveWaitUntil- | TextDocumentDidSave- | TextDocumentDidClose- | TextDocumentCompletion- | CompletionItemResolve- | TextDocumentHover- | TextDocumentSignatureHelp- | TextDocumentReferences- | TextDocumentDocumentHighlight- | TextDocumentDocumentSymbol- | TextDocumentFormatting- | TextDocumentRangeFormatting- | TextDocumentOnTypeFormatting- | TextDocumentDefinition- | TextDocumentCodeAction- | TextDocumentCodeLens- | CodeLensResolve- | TextDocumentDocumentLink- | DocumentLinkResolve- | TextDocumentRename- -- Messages of the form $/message- -- Implementation Dependent, can be ignored- | Misc Text-   deriving (Eq,Ord,Read,Show)--instance A.FromJSON ClientMethod where-  -- General-  parseJSON (A.String "initialize")                       = return Initialize-  parseJSON (A.String "initialized")                      = return Initialized-  parseJSON (A.String "shutdown")                         = return Shutdown-  parseJSON (A.String "exit")                             = return Exit-  parseJSON (A.String "$/cancelRequest")                  = return CancelRequest- -- Workspace-  parseJSON (A.String "workspace/didChangeConfiguration") = return WorkspaceDidChangeConfiguration-  parseJSON (A.String "workspace/didChangeWatchedFiles")  = return WorkspaceDidChangeWatchedFiles-  parseJSON (A.String "workspace/symbol")                 = return WorkspaceSymbol-  parseJSON (A.String "workspace/executeCommand")         = return WorkspaceExecuteCommand- -- Document-  parseJSON (A.String "textDocument/didOpen")             = return TextDocumentDidOpen-  parseJSON (A.String "textDocument/didChange")           = return TextDocumentDidChange-  parseJSON (A.String "textDocument/willSave")            = return TextDocumentWillSave-  parseJSON (A.String "textDocument/willSaveWaitUntil")   = return TextDocumentWillSaveWaitUntil-  parseJSON (A.String "textDocument/didSave")             = return TextDocumentDidSave-  parseJSON (A.String "textDocument/didClose")            = return TextDocumentDidClose-  parseJSON (A.String "textDocument/completion")          = return TextDocumentCompletion-  parseJSON (A.String "completionItem/resolve")           = return CompletionItemResolve-  parseJSON (A.String "textDocument/hover")               = return TextDocumentHover-  parseJSON (A.String "textDocument/signatureHelp")       = return TextDocumentSignatureHelp-  parseJSON (A.String "textDocument/references")          = return TextDocumentReferences-  parseJSON (A.String "textDocument/documentHighlight")   = return TextDocumentDocumentHighlight-  parseJSON (A.String "textDocument/documentSymbol")      = return TextDocumentDocumentSymbol-  parseJSON (A.String "textDocument/formatting")          = return TextDocumentFormatting-  parseJSON (A.String "textDocument/rangeFormatting")     = return TextDocumentRangeFormatting-  parseJSON (A.String "textDocument/onTypeFormatting")    = return TextDocumentOnTypeFormatting-  parseJSON (A.String "textDocument/definition")          = return TextDocumentDefinition-  parseJSON (A.String "textDocument/codeAction")          = return TextDocumentCodeAction-  parseJSON (A.String "textDocument/codeLens")            = return TextDocumentCodeLens-  parseJSON (A.String "codeLens/resolve")                 = return CodeLensResolve-  parseJSON (A.String "textDocument/documentLink")        = return TextDocumentDocumentLink-  parseJSON (A.String "documentLink/resolve")             = return DocumentLinkResolve-  parseJSON (A.String "textDocument/rename")              = return TextDocumentRename-  parseJSON (A.String x)                                  = if T.isPrefixOf "$/" x-                                                               then return $ Misc (T.drop 2 x)-                                                            else mempty-  parseJSON _                                             = mempty--instance A.ToJSON ClientMethod where-  -- General-  toJSON Initialize                      = A.String "initialize"-  toJSON Initialized                     = A.String "initialized"-  toJSON Shutdown                        = A.String "shutdown"-  toJSON Exit                            = A.String "exit"-  toJSON CancelRequest                   = A.String "$/cancelRequest"-  -- Workspace-  toJSON WorkspaceDidChangeConfiguration = A.String "workspace/didChangeConfiguration"-  toJSON WorkspaceDidChangeWatchedFiles  = A.String "workspace/didChangeWatchedFiles"-  toJSON WorkspaceSymbol                 = A.String "workspace/symbol"-  toJSON WorkspaceExecuteCommand         = A.String "workspace/executeCommand"-  -- Document-  toJSON TextDocumentDidOpen             = A.String "textDocument/didOpen"-  toJSON TextDocumentDidChange           = A.String "textDocument/didChange"-  toJSON TextDocumentWillSave            = A.String "textDocument/willSave"-  toJSON TextDocumentWillSaveWaitUntil   = A.String "textDocument/willSaveWaitUntil"-  toJSON TextDocumentDidSave             = A.String "textDocument/didSave"-  toJSON TextDocumentDidClose            = A.String "textDocument/didClose"-  toJSON TextDocumentCompletion          = A.String "textDocument/completion"-  toJSON CompletionItemResolve           = A.String "completionItem/resolve"-  toJSON TextDocumentHover               = A.String "textDocument/hover"-  toJSON TextDocumentSignatureHelp       = A.String "textDocument/signatureHelp"-  toJSON TextDocumentReferences          = A.String "textDocument/references"-  toJSON TextDocumentDocumentHighlight   = A.String "textDocument/documentHighlight"-  toJSON TextDocumentDocumentSymbol      = A.String "textDocument/documentSymbol"-  toJSON TextDocumentFormatting          = A.String "textDocument/formatting"-  toJSON TextDocumentRangeFormatting     = A.String "textDocument/rangeFormatting"-  toJSON TextDocumentOnTypeFormatting    = A.String "textDocument/onTypeFormatting"-  toJSON TextDocumentDefinition          = A.String "textDocument/definition"-  toJSON TextDocumentCodeAction          = A.String "textDocument/codeAction"-  toJSON TextDocumentCodeLens            = A.String "textDocument/codeLens"-  toJSON CodeLensResolve                 = A.String "codeLens/resolve"-  toJSON TextDocumentRename              = A.String "textDocument/rename"-  toJSON TextDocumentDocumentLink        = A.String "textDocument/documentLink"-  toJSON DocumentLinkResolve             = A.String "documentLink/resolve"-  toJSON (Misc xs)                       = A.String $ "$/" <> xs--data ServerMethod =-  -- Window-    WindowShowMessage-  | WindowShowMessageRequest-  | WindowLogMessage-  | TelemetryEvent-  -- Client-  | ClientRegisterCapability-  | ClientUnregisterCapability-  -- Workspace-  | WorkspaceApplyEdit-  -- Document-  | TextDocumentPublishDiagnostics-   deriving (Eq,Ord,Read,Show)--instance A.FromJSON ServerMethod where-  -- Window-  parseJSON (A.String "window/showMessage")              = return WindowShowMessage-  parseJSON (A.String "window/showMessageRequest")       = return WindowShowMessageRequest-  parseJSON (A.String "window/logMessage")               = return WindowLogMessage-  parseJSON (A.String "telemetry/event")                 = return TelemetryEvent-  -- Client-  parseJSON (A.String "client/registerCapability")       = return ClientRegisterCapability-  parseJSON (A.String "client/unregisterCapability")     = return ClientUnregisterCapability-  -- Workspace-  parseJSON (A.String "workspace/applyEdit")             = return WorkspaceApplyEdit-  -- Document-  parseJSON (A.String "textDocument/publishDiagnostics") = return TextDocumentPublishDiagnostics-  parseJSON _                                            = mempty--instance A.ToJSON ServerMethod where-  -- Window-  toJSON WindowShowMessage = A.String "window/showMessage"-  toJSON WindowShowMessageRequest = A.String "window/showMessageRequest"-  toJSON WindowLogMessage = A.String "window/logMessage"-  toJSON TelemetryEvent = A.String "telemetry/event"-  -- Client-  toJSON ClientRegisterCapability = A.String "client/registerCapability"-  toJSON ClientUnregisterCapability = A.String "client/unregisterCapability"-  -- Workspace-  toJSON WorkspaceApplyEdit = A.String "workspace/applyEdit"-  -- Document-  toJSON TextDocumentPublishDiagnostics = A.String "textDocument/publishDiagnostics"--data RequestMessage m req resp =-  RequestMessage-    { _jsonrpc :: Text-    , _id      :: LspId-    , _method  :: m-    , _params  :: req-    } deriving (Read,Show,Eq)--deriveJSON lspOptions ''RequestMessage-makeFieldsNoPrefix ''RequestMessage---- ----------------------------------------------------------------------{--interface ResponseError<D> {-    /**-     * A number indicating the error type that occurred.-     */-    code: number;--    /**-     * A string providing a short description of the error.-     */-    message: string;--    /**-     * A Primitive or Structured value that contains additional-     * information about the error. Can be omitted.-     */-    data?: D;-}--export namespace ErrorCodes {-        // Defined by JSON RPC-        export const ParseError: number = -32700;-        export const InvalidRequest: number = -32600;-        export const MethodNotFound: number = -32601;-        export const InvalidParams: number = -32602;-        export const InternalError: number = -32603;-        export const serverErrorStart: number = -32099;-        export const serverErrorEnd: number = -32000;-        export const ServerNotInitialized: number = -32002;-        export const UnknownErrorCode: number = -32001;--        // Defined by the protocol.-        export const RequestCancelled: number = -32800;-}--}--data ErrorCode = ParseError-               | InvalidRequest-               | MethodNotFound-               | InvalidParams-               | InternalError-               -- ^ Note: server error codes are reserved from -32099 to -32000-               deriving (Read,Show,Eq)--instance A.ToJSON ErrorCode where-  toJSON ParseError     = A.Number (-32700)-  toJSON InvalidRequest = A.Number (-32600)-  toJSON MethodNotFound = A.Number (-32601)-  toJSON InvalidParams  = A.Number (-32602)-  toJSON InternalError  = A.Number (-32603)--instance A.FromJSON ErrorCode where-  parseJSON (A.Number (-32700)) = pure ParseError-  parseJSON (A.Number (-32600)) = pure InvalidRequest-  parseJSON (A.Number (-32601)) = pure MethodNotFound-  parseJSON (A.Number (-32602)) = pure InvalidParams-  parseJSON (A.Number (-32603)) = pure InternalError-  parseJSON _                   = mempty---- ---------------------------------------data ResponseError =-  ResponseError-    { _code    :: ErrorCode-    , _message :: Text-    , _xdata   :: Maybe A.Value-    } deriving (Read,Show,Eq)--deriveJSON lspOptions{ fieldLabelModifier = customModifier } ''ResponseError-makeFieldsNoPrefix ''ResponseError---- -----------------------------------------------------------------------data ResponseMessage a =-  ResponseMessage-    { _jsonrpc :: Text-    , _id      :: LspIdRsp-    , _result  :: Maybe a-    , _error   :: Maybe ResponseError-    } deriving (Read,Show,Eq)--deriveJSON lspOptions ''ResponseMessage-makeFieldsNoPrefix ''ResponseMessage--type ErrorResponse = ResponseMessage ()---- -----------------------------------------------------------------------type BareResponseMessage = ResponseMessage A.Value---- ----------------------------------------------------------------------{--$ Notifications and Requests--Notification and requests ids starting with '$/' are messages which are protocol-implementation dependent and might not be implementable in all clients or-servers. For example if the server implementation uses a single threaded-synchronous programming language then there is little a server can do to react-to a '$/cancelRequest'. If a server or client receives notifications or requests-starting with '$/' it is free to ignore them if they are unknown.--}--data NotificationMessage m a =-  NotificationMessage-    { _jsonrpc :: Text-    , _method  :: m-    , _params  :: a-    } deriving (Read,Show,Eq)--deriveJSON lspOptions ''NotificationMessage-makeFieldsNoPrefix ''NotificationMessage---- ----------------------------------------------------------------------{--Cancellation Support--https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#cancellation-support--    New: The base protocol now offers support for request cancellation. To-    cancel a request, a notification message with the following properties is-    sent:--Notification:--    method: '$/cancelRequest'-    params: CancelParams defined as follows:--interface CancelParams {-    /**-     * The request id to cancel.-     */-    id: number | string;-}--A request that got canceled still needs to return from the server and send a-response back. It can not be left open / hanging. This is in line with the JSON-RPC protocol that requires that every request sends a response back. In addition-it allows for returning partial results on cancel.--}--data CancelParams =-  CancelParams-    { _id :: LspId-    } deriving (Read,Show,Eq)--deriveJSON lspOptions ''CancelParams-makeFieldsNoPrefix ''CancelParams--type CancelNotification = NotificationMessage ClientMethod CancelParams---- -----------------------------------------------------------------------{--The current protocol is talored for textual documents which content can be-represented as a string. There is currently no support for binary documents.-Positions inside a document (see Position definition below) are expressed as a-zero-based line and character offset. To ensure that both client and server-split the string into the same line representation the protocol specs the-following end of line sequences: '\n', '\r\n' and '\r'.--export const EOL: string[] = ['\n', '\r\n', '\r'];--}-{--https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#position--Position in a text document expressed as zero-based line and character offset. A-position is between two characters like an 'insert' cursor in a editor.--interface Position {-    /**-     * Line position in a document (zero-based).-     */-    line: number;--    /**-     * Character offset on a line in a document (zero-based).-     */-    character: number;-}--}-data Position =-  Position-    { _line      :: Int-    , _character :: Int-    } deriving (Show, Read, Eq, Ord)--deriveJSON lspOptions ''Position-makeFieldsNoPrefix ''Position---- ----------------------------------------------------------------------{--https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#range--A range in a text document expressed as (zero-based) start and end positions. A-range is comparable to a selection in an editor. Therefore the end position is-exclusive.--interface Range {-    /**-     * The range's start position.-     */-    start: Position;--    /**-     * The range's end position.-     */-    end: Position;-}--}--data Range =-  Range-    { _start :: Position-    , _end   :: Position-    } deriving (Show, Read, Eq, Ord)--deriveJSON lspOptions ''Range-makeFieldsNoPrefix ''Range---- ----------------------------------------------------------------------{--https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#location--Represents a location inside a resource, such as a line inside a text file.--interface Location {-    uri: string;-    range: Range;-}--}--data Location =-  Location-    { _uri   :: Uri-    , _range :: Range-    } deriving (Show, Read, Eq, Ord)--deriveJSON lspOptions ''Location-makeFieldsNoPrefix ''Location---- ----------------------------------------------------------------------{--The protocol currently supports the following diagnostic severities:--enum DiagnosticSeverity {-    /**-     * Reports an error.-     */-    Error = 1,-    /**-     * Reports a warning.-     */-    Warning = 2,-    /**-     * Reports an information.-     */-    Information = 3,-    /**-     * Reports a hint.-     */-    Hint = 4-}--}-data DiagnosticSeverity-  = DsError   -- ^ Error = 1,-  | DsWarning -- ^ Warning = 2,-  | DsInfo    -- ^ Info = 3,-  | DsHint    -- ^ Hint = 4-  deriving (Eq,Ord,Show,Read)--instance A.ToJSON DiagnosticSeverity where-  toJSON DsError   = A.Number 1-  toJSON DsWarning = A.Number 2-  toJSON DsInfo    = A.Number 3-  toJSON DsHint    = A.Number 4--instance A.FromJSON DiagnosticSeverity where-  parseJSON (A.Number 1) = pure DsError-  parseJSON (A.Number 2) = pure DsWarning-  parseJSON (A.Number 3) = pure DsInfo-  parseJSON (A.Number 4) = pure DsHint-  parseJSON _            = mempty---- ----------------------------------------------------------------------{--Represents a related message and source code location for a diagnostic. This should be-used to point to code locations that cause or related to a diagnostics, e.g when duplicating-a symbol in a scope.--export interface DiagnosticRelatedInformation {-  /**-   * The location of this related diagnostic information.-   */-  location: Location;--  /**-   * The message of this related diagnostic information.-   */-  message: string;-}--}--data DiagnosticRelatedInformation =-  DiagnosticRelatedInformation-    { _location :: Location-    , _message  :: Text-    } deriving (Show, Read, Eq, Ord)--deriveJSON lspOptions ''DiagnosticRelatedInformation-makeFieldsNoPrefix ''DiagnosticRelatedInformation---- ----------------------------------------------------------------------{--Diagnostic--https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#diagnostic--Represents a diagnostic, such as a compiler error or warning. Diagnostic objects-are only valid in the scope of a resource.--interface Diagnostic {-    /**-     * The range at which the message applies.-     */-    range: Range;--    /**-     * The diagnostic's severity. Can be omitted. If omitted it is up to the-     * client to interpret diagnostics as error, warning, info or hint.-     */-    severity?: number;--    /**-     * The diagnostic's code. Can be omitted.-     */-    code?: number | string;--    /**-     * A human-readable string describing the source of this-     * diagnostic, e.g. 'typescript' or 'super lint'.-     */-    source?: string;--    /**-     * The diagnostic's message.-     */-    message: string;--    /**-     * An array of related diagnostic information, e.g. when symbol-names within-     * a scope collide all definitions can be marked via this property.-     */-    relatedInformation?: DiagnosticRelatedInformation[];-}--}--type DiagnosticSource = Text-data Diagnostic =-  Diagnostic-    { _range              :: Range-    , _severity           :: Maybe DiagnosticSeverity-    , _code               :: Maybe Text -- Note: Protocol allows Int too.-    , _source             :: Maybe DiagnosticSource-    , _message            :: Text-    , _relatedInformation :: Maybe (List DiagnosticRelatedInformation)-    } deriving (Show, Read, Eq, Ord)--deriveJSON lspOptions ''Diagnostic-makeFieldsNoPrefix ''Diagnostic---- ----------------------------------------------------------------------{--Command--https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#command--Represents a reference to a command. Provides a title which will be used to-represent a command in the UI. Commands are identitifed using a string-identifier and the protocol currently doesn't specify a set of well known-commands. So executing a command requires some tool extension code.--interface Command {-    /**-     * Title of the command, like `save`.-     */-    title: string;-    /**-     * The identifier of the actual command handler.-     */-    command: string;-    /**-     * Arguments that the command handler should be-     * invoked with.-     */-    arguments?: any[];-}--}--data Command =-  Command-    { _title     :: Text-    , _command   :: Text-    , _arguments :: Maybe A.Value-    } deriving (Show, Read, Eq)--deriveJSON lspOptions ''Command-makeFieldsNoPrefix ''Command---- ----------------------------------------------------------------------{--TextEdit--https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#textedit--A textual edit applicable to a text document.--interface TextEdit {-    /**-     * The range of the text document to be manipulated. To insert-     * text into a document create a range where start === end.-     */-    range: Range;--    /**-     * The string to be inserted. For delete operations use an-     * empty string.-     */-    newText: string;-}----}--data TextEdit =-  TextEdit-    { _range   :: Range-    , _newText :: Text-    } deriving (Show,Read,Eq)--deriveJSON lspOptions ''TextEdit-makeFieldsNoPrefix ''TextEdit---- ----------------------------------------------------------------------{--VersionedTextDocumentIdentifier--https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#versionedtextdocumentidentifier--    New: An identifier to denote a specific version of a text document.--interface VersionedTextDocumentIdentifier extends TextDocumentIdentifier {-    /**-     * The version number of this document.-     */-    version: number;--}--type TextDocumentVersion = Int--data VersionedTextDocumentIdentifier =-  VersionedTextDocumentIdentifier-    { _uri     :: Uri-    , _version :: TextDocumentVersion-    } deriving (Show, Read, Eq)--deriveJSON lspOptions ''VersionedTextDocumentIdentifier-makeFieldsNoPrefix ''VersionedTextDocumentIdentifier---- ----------------------------------------------------------------------{--New in 3.0-------------TextDocumentEdit-https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#new-textdocumentedit--If multiple TextEdits are applied to a text document, all text edits describe-changes made to the initial document version. Execution wise text edits should-applied from the bottom to the top of the text document. Overlapping text edits-are not supported.--export interface TextDocumentEdit {-        /**-         * The text document to change.-         */-        textDocument: VersionedTextDocumentIdentifier;--        /**-         * The edits to be applied.-         */-        edits: TextEdit[];-}---}--data TextDocumentEdit =-  TextDocumentEdit-    { _textDocument :: VersionedTextDocumentIdentifier-    , _edits        :: List TextEdit-    } deriving (Show, Read, Eq)--deriveJSON lspOptions ''TextDocumentEdit-makeFieldsNoPrefix ''TextDocumentEdit---- ----------------------------------------------------------------------{--Changed in 3.0-----------------WorkspaceEdit--https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#workspaceedit---Changed A workspace edit represents changes to many resources managed in the-workspace. The edit should either provide changes or documentChanges. If-documentChanges are present they are preferred over changes if the client can-handle versioned document edits.--export interface WorkspaceEdit {-        /**-         * Holds changes to existing resources.-         */-        changes?: { [uri: string]: TextEdit[]; };--        /**-         * An array of `TextDocumentEdit`s to express changes to specific a specific-         * version of a text document. Whether a client supports versioned document-         * edits is expressed via `WorkspaceClientCapabilities.versionedWorkspaceEdit`.-         */-        documentChanges?: TextDocumentEdit[];-}--}--type WorkspaceEditMap = H.HashMap Uri (List TextEdit)--data WorkspaceEdit =-  WorkspaceEdit-    { _changes         :: Maybe WorkspaceEditMap-    , _documentChanges :: Maybe (List TextDocumentEdit)-    } deriving (Show, Read, Eq)--instance Monoid WorkspaceEdit where-  mempty = WorkspaceEdit Nothing Nothing-  mappend (WorkspaceEdit a b) (WorkspaceEdit c d) = WorkspaceEdit (a <> c) (b <> d)--deriveJSON lspOptions ''WorkspaceEdit-makeFieldsNoPrefix ''WorkspaceEdit--#if __GLASGOW_HASKELL__ >= 804-instance Semigroup WorkspaceEdit where-  (<>) = mappend-#endif---- ----------------------------------------------------------------------{--TextDocumentIdentifier--https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#textdocumentidentifier--Text documents are identified using a URI. On the protocol level, URIs are-passed as strings. The corresponding JSON structure looks like this:--interface TextDocumentIdentifier {-    /**-     * The text document's URI.-     */-    uri: string;-}--}-data TextDocumentIdentifier =-  TextDocumentIdentifier-    { _uri :: Uri-    } deriving (Show, Read, Eq)--deriveJSON lspOptions ''TextDocumentIdentifier-makeFieldsNoPrefix ''TextDocumentIdentifier---- -----------------------------------------------------------------------{--TextDocumentItem--https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#textdocumentitem--    New: An item to transfer a text document from the client to the server.--interface TextDocumentItem {-    /**-     * The text document's URI.-     */-    uri: string;--    /**-     * The text document's language identifier.-     */-    languageId: string;--    /**-     * The version number of this document (it will strictly increase after each-     * change, including undo/redo).-     */-    version: number;--    /**-     * The content of the opened text document.-     */-    text: string;-}--}--data TextDocumentItem =-  TextDocumentItem {-    _uri        :: Uri-  , _languageId :: Text-  , _version    :: Int-  , _text       :: Text-  } deriving (Show, Read, Eq)--deriveJSON lspOptions ''TextDocumentItem-makeFieldsNoPrefix ''TextDocumentItem---- ----------------------------------------------------------------------{--TextDocumentPositionParams--https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#textdocumentpositionparams--    Changed: Was TextDocumentPosition in 1.0 with inlined parameters---interface TextDocumentPositionParams {-    /**-     * The text document.-     */-    textDocument: TextDocumentIdentifier;--    /**-     * The position inside the text document.-     */-    position: Position;-}---}-data TextDocumentPositionParams =-  TextDocumentPositionParams-    { _textDocument :: TextDocumentIdentifier-    , _position     :: Position-    } deriving (Show, Read, Eq)--deriveJSON lspOptions ''TextDocumentPositionParams-makeFieldsNoPrefix ''TextDocumentPositionParams---- ----------------------------------------------------------------------{--New in 3.0-------------DocumentFilter-https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#new-documentfilter--A document filter denotes a document through properties like language, schema or-pattern. Examples are a filter that applies to TypeScript files on disk or a-filter the applies to JSON files with name package.json:--    { language: 'typescript', scheme: 'file' }-    { language: 'json', pattern: '**/package.json' }--export interface DocumentFilter {-        /**-         * A language id, like `typescript`.-         */-        language?: string;--        /**-         * A Uri [scheme](#Uri.scheme), like `file` or `untitled`.-         */-        scheme?: string;--        /**-         * A glob pattern, like `*.{ts,js}`.-         */-        pattern?: string;-}--}-data DocumentFilter =-  DocumentFilter-    { _language :: Text-    , _scheme   :: Text-    , _pattern  :: Maybe Text-    } deriving (Show, Read, Eq)--deriveJSON lspOptions ''DocumentFilter-makeFieldsNoPrefix ''DocumentFilter--{--A document selector is the combination of one or many document filters.--export type DocumentSelector = DocumentFilter[];--}-type DocumentSelector = List DocumentFilter---- =====================================================================--- ACTUAL PROTOCOL -------------------------------------------------------- =====================================================================---- ------------------------------------------------------------------------ Initialize Request--- ----------------------------------------------------------------------{--Initialize Request--https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#initialize-request--The initialize request is sent as the first request from the client to the server.--Request--    method: 'initialize'-    params: InitializeParams defined as follows:--interface InitializeParams {-        /**-         * The process Id of the parent process that started-         * the server. Is null if the process has not been started by another process.-         * If the parent process is not alive then the server should exit (see exit notification) its process.-         */-        processId: number | null;--        /**-         * The rootPath of the workspace. Is null-         * if no folder is open.-         *-         * @deprecated in favour of rootUri.-         */-        rootPath?: string | null;--        /**-         * The rootUri of the workspace. Is null if no-         * folder is open. If both `rootPath` and `rootUri` are set-         * `rootUri` wins.-         */-        rootUri: DocumentUri | null;--        /**-         * User provided initialization options.-         */-        initializationOptions?: any;--        /**-         * The capabilities provided by the client (editor or tool)-         */-        capabilities: ClientCapabilities;--        /**-         * The initial trace setting. If omitted trace is disabled ('off').-         */-        trace?: 'off' | 'messages' | 'verbose';-}--}--data Trace = TraceOff | TraceMessages | TraceVerbose-           deriving (Show, Read, Eq)--instance A.ToJSON Trace where-  toJSON TraceOff      = A.String (T.pack "off")-  toJSON TraceMessages = A.String (T.pack "messages")-  toJSON TraceVerbose  = A.String (T.pack "verbose")--instance A.FromJSON Trace where-  parseJSON (A.String s) = case T.unpack s of-    "off"      -> return TraceOff-    "messages" -> return TraceMessages-    "verbose"  -> return TraceVerbose-    _          -> mempty-  parseJSON _                               = mempty--data InitializeParams =-  InitializeParams {-    _processId             :: Maybe Int-  , _rootPath              :: Maybe Text -- ^ Deprecated in favour of _rootUri-  , _rootUri               :: Maybe Uri-  , _initializationOptions :: Maybe A.Value-  , _capabilities          :: ClientCapabilities-  , _trace                 :: Maybe Trace-  } deriving (Show, Read, Eq)---deriveJSON lspOptions ''InitializeParams-makeFieldsNoPrefix ''InitializeParams---- ------------------------------------------------------------------------ Initialize Response--- ----------------------------------------------------------------------{---    error.data:--interface InitializeError {-    /**-     * Indicates whether the client should retry to send the-     * initilize request after showing the message provided-     * in the ResponseError.-     */-    retry: boolean;----}-data InitializeError =-  InitializeError-    { _retry :: Bool-    } deriving (Read, Show, Eq)--deriveJSON lspOptions ''InitializeError-makeFieldsNoPrefix ''InitializeError---- ----------------------------------------------------------------------{--The server can signal the following capabilities:--/**- * Defines how the host (editor) should sync document changes to the language server.- */-enum TextDocumentSyncKind {-    /**-     * Documents should not be synced at all.-     */-    None = 0,-    /**-     * Documents are synced by always sending the full content of the document.-     */-    Full = 1,-    /**-     * Documents are synced by sending the full content on open. After that only incremental-     * updates to the document are sent.-     */-    Incremental = 2-}--}---- ^ Note: Omitting this parameter from the capabilities is effectively a fourth--- state, where DidSave events are generated without sending document contents.-data TextDocumentSyncKind = TdSyncNone-                          | TdSyncFull-                          | TdSyncIncremental-       deriving (Read,Eq,Show)--instance A.ToJSON TextDocumentSyncKind where-  toJSON TdSyncNone        = A.Number 0-  toJSON TdSyncFull        = A.Number 1-  toJSON TdSyncIncremental = A.Number 2--instance A.FromJSON TextDocumentSyncKind where-  parseJSON (A.Number 0) = pure TdSyncNone-  parseJSON (A.Number 1) = pure TdSyncFull-  parseJSON (A.Number 2) = pure TdSyncIncremental-  parseJSON _            = mempty---- ----------------------------------------------------------------------{--/**- * Completion options.- */-interface CompletionOptions {-    /**-     * The server provides support to resolve additional information for a completion item.-     */-    resolveProvider?: boolean;--    /**-     * The characters that trigger completion automatically.-     */-    triggerCharacters?: string[];-}--}--data CompletionOptions =-  CompletionOptions-    { _resolveProvider   :: Maybe Bool-    , _triggerCharacters :: Maybe [String]-    } deriving (Read,Show,Eq)--deriveJSON lspOptions {omitNothingFields = True } ''CompletionOptions-makeFieldsNoPrefix ''CompletionOptions---- ----------------------------------------------------------------------{--/**- * Signature help options.- */-interface SignatureHelpOptions {-    /**-     * The characters that trigger signature help automatically.-     */-    triggerCharacters?: string[];--}--data SignatureHelpOptions =-  SignatureHelpOptions-    { _triggerCharacters :: Maybe [String]-    } deriving (Read,Show,Eq)--deriveJSON lspOptions ''SignatureHelpOptions-makeFieldsNoPrefix ''SignatureHelpOptions---- ----------------------------------------------------------------------{--/**- * Code Lens options.- */-interface CodeLensOptions {-    /**-     * Code lens has a resolve provider as well.-     */-    resolveProvider?: boolean;-}--}--data CodeLensOptions =-  CodeLensOptions-    { _resolveProvider :: Maybe Bool-    } deriving (Read,Show,Eq)--deriveJSON lspOptions ''CodeLensOptions-makeFieldsNoPrefix ''CodeLensOptions---- ----------------------------------------------------------------------{--/**- * Format document on type options- */-interface DocumentOnTypeFormattingOptions {-    /**-     * A character on which formatting should be triggered, like `}`.-     */-    firstTriggerCharacter: string;-    /**-     * More trigger characters.-     */-    moreTriggerCharacter?: string[]-}--}-data DocumentOnTypeFormattingOptions =-  DocumentOnTypeFormattingOptions-    { _firstTriggerCharacter :: Text-    , _moreTriggerCharacter  :: Maybe [String]-    } deriving (Read,Show,Eq)--deriveJSON lspOptions ''DocumentOnTypeFormattingOptions-makeFieldsNoPrefix ''DocumentOnTypeFormattingOptions---- ----------------------------------------------------------------------{--New in 3.0-------------/**- * Document link options- */-export interface DocumentLinkOptions {-        /**-         * Document links have a resolve provider as well.-         */-        resolveProvider?: boolean;-}--}--data DocumentLinkOptions =-  DocumentLinkOptions-    { -- |Document links have a resolve provider as well.-      _resolveProvider :: Maybe Bool-    } deriving (Show, Read, Eq)--deriveJSON lspOptions ''DocumentLinkOptions-makeFieldsNoPrefix ''DocumentLinkOptions---- -----------------------------------------------------------------------{--New in 3.0--------------/**- * Execute command options.- */-export interface ExecuteCommandOptions {-        /**-         * The commands to be executed on the server-         */-        commands: string[]-}--}--data ExecuteCommandOptions =-  ExecuteCommandOptions-    { -- | The commands to be executed on the server-      _commands :: List Text-    } deriving (Show, Read, Eq)--deriveJSON lspOptions ''ExecuteCommandOptions-makeFieldsNoPrefix ''ExecuteCommandOptions---- ----------------------------------------------------------------------{--New in 3.0------------/**- * Save options.- */-export interface SaveOptions {-        /**-         * The client is supposed to include the content on save.-         */-        includeText?: boolean;-}--}-data SaveOptions =-  SaveOptions-    { -- |The client is supposed to include the content on save.-      _includeText :: Maybe Bool-    } deriving (Show, Read, Eq)--deriveJSON lspOptions ''SaveOptions-makeFieldsNoPrefix ''SaveOptions---- ----------------------------------------------------------------------{--New in 3.0-------------export interface TextDocumentSyncOptions {-        /**-         * Open and close notifications are sent to the server.-         */-        openClose?: boolean;-        /**-         * Change notificatins are sent to the server. See TextDocumentSyncKind.None, TextDocumentSyncKind.Full-         * and TextDocumentSyncKindIncremental.-         */-        change?: number;-        /**-         * Will save notifications are sent to the server.-         */-        willSave?: boolean;-        /**-         * Will save wait until requests are sent to the server.-         */-        willSaveWaitUntil?: boolean;-        /**-         * Save notifications are sent to the server.-         */-        save?: SaveOptions;-}--}--data TextDocumentSyncOptions =-  TextDocumentSyncOptions-    { -- | Open and close notifications are sent to the server.-      _openClose         :: Maybe Bool--      -- | Change notificatins are sent to the server. See-      -- TextDocumentSyncKind.None, TextDocumentSyncKind.Full and-      -- TextDocumentSyncKindIncremental.-    , _change            :: Maybe TextDocumentSyncKind--      -- | Will save notifications are sent to the server.-    , _willSave          :: Maybe Bool--      -- | Will save wait until requests are sent to the server.-    , _willSaveWaitUntil :: Maybe Bool--      -- |Save notifications are sent to the server.-    , _save              :: Maybe SaveOptions-    } deriving (Show, Read, Eq)--deriveJSON lspOptions ''TextDocumentSyncOptions-makeFieldsNoPrefix ''TextDocumentSyncOptions---- ----------------------------------------------------------------------{---Extended in 3.0------------------interface ServerCapabilities {-        /**-         * Defines how text documents are synced. Is either a detailed structure defining each notification or-         * for backwards compatibility the TextDocumentSyncKind number.-         */-        textDocumentSync?: TextDocumentSyncOptions | number;-        /**-         * The server provides hover support.-         */-        hoverProvider?: boolean;-        /**-         * The server provides completion support.-         */-        completionProvider?: CompletionOptions;-        /**-         * The server provides signature help support.-         */-        signatureHelpProvider?: SignatureHelpOptions;-        /**-         * The server provides goto definition support.-         */-        definitionProvider?: boolean;-        /**-         * The server provides find references support.-         */-        referencesProvider?: boolean;-        /**-         * The server provides document highlight support.-         */-        documentHighlightProvider?: boolean;-        /**-         * The server provides document symbol support.-         */-        documentSymbolProvider?: boolean;-        /**-         * The server provides workspace symbol support.-         */-        workspaceSymbolProvider?: boolean;-        /**-         * The server provides code actions.-         */-        codeActionProvider?: boolean;-        /**-         * The server provides code lens.-         */-        codeLensProvider?: CodeLensOptions;-        /**-         * The server provides document formatting.-         */-        documentFormattingProvider?: boolean;-        /**-         * The server provides document range formatting.-         */-        documentRangeFormattingProvider?: boolean;-        /**-         * The server provides document formatting on typing.-         */-        documentOnTypeFormattingProvider?: DocumentOnTypeFormattingOptions;-        /**-         * The server provides rename support.-         */-        renameProvider?: boolean;-        /**-         * The server provides document link support.-         */-        documentLinkProvider?: DocumentLinkOptions;-        /**-         * The server provides execute command support.-         */-        executeCommandProvider?: ExecuteCommandOptions;-        /**-         * Experimental server capabilities.-         */-        experimental?: any;-}--}--data InitializeResponseCapabilitiesInner =-  InitializeResponseCapabilitiesInner-    { _textDocumentSync                 :: Maybe TextDocumentSyncOptions-    , _hoverProvider                    :: Maybe Bool-    , _completionProvider               :: Maybe CompletionOptions-    , _signatureHelpProvider            :: Maybe SignatureHelpOptions-    , _definitionProvider               :: Maybe Bool-    , _referencesProvider               :: Maybe Bool-    , _documentHighlightProvider        :: Maybe Bool-    , _documentSymbolProvider           :: Maybe Bool-    , _workspaceSymbolProvider          :: Maybe Bool-    , _codeActionProvider               :: Maybe Bool-    , _codeLensProvider                 :: Maybe CodeLensOptions-    , _documentFormattingProvider       :: Maybe Bool-    , _documentRangeFormattingProvider  :: Maybe Bool-    , _documentOnTypeFormattingProvider :: Maybe DocumentOnTypeFormattingOptions-    , _renameProvider                   :: Maybe Bool-    -- Following are new in 3.0-    , _documentLinkProvider             :: Maybe DocumentLinkOptions-    , _executeCommandProvider           :: Maybe ExecuteCommandOptions-    , _experimental                     :: Maybe A.Value-    } deriving (Show, Read, Eq)--deriveJSON lspOptions ''InitializeResponseCapabilitiesInner-makeFieldsNoPrefix ''InitializeResponseCapabilitiesInner----- ------------------------------------------------------------------------ |---   Information about the capabilities of a language server----data InitializeResponseCapabilities =-  InitializeResponseCapabilities {-    _capabilities :: InitializeResponseCapabilitiesInner-  } deriving (Show, Read, Eq)--deriveJSON lspOptions ''InitializeResponseCapabilities-makeFieldsNoPrefix ''InitializeResponseCapabilities---- -----------------------------------------------------------------------type InitializeResponse = ResponseMessage InitializeResponseCapabilities--type InitializeRequest = RequestMessage ClientMethod InitializeParams InitializeResponseCapabilities--{--    error.code:--/**- * Known error codes for an `InitializeError`;- */-export namespace InitializeError {-        /**-         * If the protocol version provided by the client can't be handled by the server.-         * @deprecated This initialize error got replaced by client capabilities. There is-         * no version handshake in version 3.0x-         */-        export const unknownProtocolVersion: number = 1;-}--    error.data:--interface InitializeError {-        /**-         * Indicates whether the client execute the following retry logic:-         * (1) show the message provided by the ResponseError to the user-         * (2) user selects retry or cancel-         * (3) if user selected retry the initialize method is sent again.-         */-        retry: boolean;-}--}---- -----------------------------------------------------------------------{--New in 3.0------------Initialized Notification--The initialized notification is sent from the client to the server after the-client is fully initialized and is able to listen to arbritary requests and-notifications sent from the server.--Notification:--    method: 'initialized'-    params: void---}--data InitializedParams =-  InitializedParams-    {-    } deriving (Show, Read, Eq)--instance A.FromJSON InitializedParams where-  parseJSON (A.Object _) = pure InitializedParams-  parseJSON _            = mempty--instance A.ToJSON InitializedParams where-  toJSON InitializedParams = A.Object mempty--type InitializedNotification = NotificationMessage ClientMethod (Maybe InitializedParams)---- ----------------------------------------------------------------------{--Shutdown Request--https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#shutdown-request--The shutdown request is sent from the client to the server. It asks the server-to shut down, but to not exit (otherwise the response might not be delivered-correctly to the client). There is a separate exit notification that asks the-server to exit.--Request--    method: 'shutdown'-    params: undefined--Response--    result: undefined-    error: code and message set in case an exception happens during shutdown request.----}--type ShutdownRequest  = RequestMessage ClientMethod (Maybe A.Value) Text-type ShutdownResponse = ResponseMessage Text---- ----------------------------------------------------------------------{--Exit Notification--https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#exit-notification--A notification to ask the server to exit its process.--Notification--    method: 'exit'---}---- |---   Notification from the server to actually exit now, after shutdown acked----data ExitParams =-  ExitParams-    {-    } deriving (Show, Read, Eq)--deriveJSON defaultOptions ''ExitParams--type ExitNotification = NotificationMessage ClientMethod (Maybe ExitParams)---- ----------------------------------------------------------------------{--ShowMessage Notification--https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#showmessage-notification--The show message notification is sent from a server to a client to ask the-client to display a particular message in the user interface.--Notification:--    method: 'window/showMessage'-    params: ShowMessageParams defined as follows:--interface ShowMessageParams {-    /**-     * The message type. See {@link MessageType}.-     */-    type: number;--    /**-     * The actual message.-     */-    message: string;-}--Where the type is defined as follows:--enum MessageType {-    /**-     * An error message.-     */-    Error = 1,-    /**-     * A warning message.-     */-    Warning = 2,-    /**-     * An information message.-     */-    Info = 3,-    /**-     * A log message.-     */-    Log = 4-}--}-data MessageType = MtError   -- ^ Error = 1,-                 | MtWarning -- ^ Warning = 2,-                 | MtInfo    -- ^ Info = 3,-                 | MtLog     -- ^ Log = 4-        deriving (Eq,Ord,Show,Read,Enum)--instance A.ToJSON MessageType where-  toJSON MtError   = A.Number 1-  toJSON MtWarning = A.Number 2-  toJSON MtInfo    = A.Number 3-  toJSON MtLog     = A.Number 4--instance A.FromJSON MessageType where-  parseJSON (A.Number 1) = pure MtError-  parseJSON (A.Number 2) = pure MtWarning-  parseJSON (A.Number 3) = pure MtInfo-  parseJSON (A.Number 4) = pure MtLog-  parseJSON _            = mempty---- ------------------------------------------data ShowMessageParams =-  ShowMessageParams {-    _xtype   :: MessageType-  , _message :: Text-  } deriving (Show, Read, Eq)--deriveJSON lspOptions{ fieldLabelModifier = customModifier } ''ShowMessageParams-makeFieldsNoPrefix ''ShowMessageParams--type ShowMessageNotification = NotificationMessage ServerMethod ShowMessageParams---- ----------------------------------------------------------------------{--ShowMessage Request--https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#showmessage-request--    New: The show message request is sent from a server to a client to ask the-    client to display a particular message in the user interface. In addition to-    the show message notification the request allows to pass actions and to wait-    for an answer from the client.--Request:--    method: 'window/showMessageRequest'-    params: ShowMessageRequestParams defined as follows:--Response:--    result: the selected MessageActionItem-    error: code and message set in case an exception happens during showing a message.--interface ShowMessageRequestParams {-    /**-     * The message type. See {@link MessageType}-     */-    type: number;--    /**-     * The actual message-     */-    message: string;--    /**-     * The message action items to present.-     */-    actions?: MessageActionItem[];-}--Where the MessageActionItem is defined as follows:--interface MessageActionItem {-    /**-     * A short title like 'Retry', 'Open Log' etc.-     */-    title: string;-}--}--data MessageActionItem =-  MessageActionItem-    { _title :: Text-    } deriving (Show,Read,Eq)--deriveJSON lspOptions ''MessageActionItem-makeFieldsNoPrefix ''MessageActionItem---data ShowMessageRequestParams =-  ShowMessageRequestParams-    { _xtype   :: MessageType-    , _message :: Text-    , _actions :: Maybe [MessageActionItem]-    } deriving (Show,Read,Eq)--deriveJSON lspOptions{ fieldLabelModifier = customModifier } ''ShowMessageRequestParams-makeFieldsNoPrefix ''ShowMessageRequestParams--type ShowMessageRequest = RequestMessage ServerMethod ShowMessageRequestParams Text-type ShowMessageResponse = ResponseMessage Text---- ----------------------------------------------------------------------{--LogMessage Notification--https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#logmessage-notification--The log message notification is sent from the server to the client to ask the-client to log a particular message.--Notification:--    method: 'window/logMessage'-    params: LogMessageParams defined as follows:--interface LogMessageParams {-    /**-     * The message type. See {@link MessageType}-     */-    type: number;--    /**-     * The actual message-     */-    message: string;-}--Where type is defined as above.--}--data LogMessageParams =-  LogMessageParams {-    _xtype   :: MessageType-  , _message :: Text-  } deriving (Show, Read, Eq)--deriveJSON lspOptions{ fieldLabelModifier = customModifier } ''LogMessageParams-makeFieldsNoPrefix ''LogMessageParams---type LogMessageNotification = NotificationMessage ServerMethod LogMessageParams---- ----------------------------------------------------------------------{--Telemetry Notification--https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#telemetry-notification--    New: The telemetry notification is sent from the server to the client to ask-    the client to log a telemetry event.--Notification:--    method: 'telemetry/event'-    params: 'any'--}---type TelemetryNotification = NotificationMessage ServerMethod A.Value---- ----------------------------------------------------------------------{--New in 3.0-------------Register Capability--The client/registerCapability request is sent from the server to the client to-register for a new capability on the client side. Not all clients need to-support dynamic capability registration. A client opts in via the-ClientCapabilities.dynamicRegistration property.--Request:--    method: 'client/registerCapability'-    params: RegistrationParams--Where RegistrationParams are defined as follows:--/**- * General paramters to to regsiter for a capability.- */-export interface Registration {-        /**-         * The id used to register the request. The id can be used to deregister-         * the request again.-         */-        id: string;--        /**-         * The method / capability to register for.-         */-        method: string;--        /**-         * Options necessary for the registration.-         */-        registerOptions?: any;-}--export interface RegistrationParams {-        registrations: Registration[];-}--}--data Registration =-  Registration-    { -- |The id used to register the request. The id can be used to deregister-      -- the request again.-      _id              :: Text--       -- | The method / capability to register for.-    , _method          :: ClientMethod--      -- | Options necessary for the registration.-    , _registerOptions :: Maybe A.Value-    } deriving (Show, Read, Eq)--deriveJSON lspOptions ''Registration-makeFieldsNoPrefix ''Registration--data RegistrationParams =-  RegistrationParams-    { _registrations :: List Registration-    } deriving (Show, Read, Eq)--deriveJSON lspOptions ''RegistrationParams-makeFieldsNoPrefix ''RegistrationParams---- |Note: originates at the server-type RegisterCapabilityRequest = RequestMessage ServerMethod RegistrationParams ()---- ---------------------------------------{--Since most of the registration options require to specify a document selector-there is a base interface that can be used.--export interface TextDocumentRegistrationOptions {-        /**-         * A document selector to identify the scope of the registration. If set to null-         * the document selector provided on the client side will be used.-         */-        documentSelector: DocumentSelector | null;-}--}--data TextDocumentRegistrationOptions =-  TextDocumentRegistrationOptions-    { _documentSelector :: Maybe DocumentSelector-    } deriving (Show, Read, Eq)--deriveJSON lspOptions ''TextDocumentRegistrationOptions-makeFieldsNoPrefix ''TextDocumentRegistrationOptions---- ----------------------------------------------------------------------{--New in 3.0-------------Unregister Capability--The client/unregisterCapability request is sent from the server to the client to-unregister a previously register capability.--Request:--    method: 'client/unregisterCapability'-    params: UnregistrationParams--Where UnregistrationParams are defined as follows:--/**- * General parameters to unregister a capability.- */-export interface Unregistration {-        /**-         * The id used to unregister the request or notification. Usually an id-         * provided during the register request.-         */-        id: string;--        /**-         * The method / capability to unregister for.-         */-        method: string;-}--export interface UnregistrationParams {-        unregisterations: Unregistration[];-}--}--data Unregistration =-  Unregistration-    { -- | The id used to unregister the request or notification. Usually an id-      -- provided during the register request.-      _id     :: Text--       -- |The method / capability to unregister for.-    , _method :: Text-    } deriving (Show, Read, Eq)--deriveJSON lspOptions ''Unregistration-makeFieldsNoPrefix ''Unregistration--data UnregistrationParams =-  UnregistrationParams-    { _unregistrations :: List Unregistration-    } deriving (Show, Read, Eq)--deriveJSON lspOptions ''UnregistrationParams-makeFieldsNoPrefix ''UnregistrationParams--type UnregisterCapabilityRequest = RequestMessage ServerMethod UnregistrationParams ()---- ----------------------------------------------------------------------{--DidChangeConfiguration Notification--https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#didchangeconfiguration-notification--A notification sent from the client to the server to signal the change of-configuration settings.--Notification:--    method: 'workspace/didChangeConfiguration',-    params: DidChangeConfigurationParams defined as follows:--interface DidChangeConfigurationParams {-    /**-     * The actual changed settings-     */-    settings: any;-}--}--data DidChangeConfigurationParams =-  DidChangeConfigurationParams {-    _settings :: A.Value-  } deriving (Show, Read, Eq)--deriveJSON lspOptions ''DidChangeConfigurationParams-makeFieldsNoPrefix ''DidChangeConfigurationParams---type DidChangeConfigurationNotification = NotificationMessage ClientMethod DidChangeConfigurationParams---- ----------------------------------------------------------------------{--DidOpenTextDocument Notification--https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#didopentextdocument-notification--The document open notification is sent from the client to the server to signal-newly opened text documents. The document's truth is now managed by the client-and the server must not try to read the document's truth using the document's-uri.--Notification:--    method: 'textDocument/didOpen'-    params: DidOpenTextDocumentParams defined as follows:--interface DidOpenTextDocumentParams {-    /**-     * The document that was opened.-     */-    textDocument: TextDocumentItem;-}--Registration Options: TextDocumentRegistrationOptions--}--data DidOpenTextDocumentParams =-  DidOpenTextDocumentParams {-    _textDocument :: TextDocumentItem-  } deriving (Show, Read, Eq)--deriveJSON lspOptions ''DidOpenTextDocumentParams-makeFieldsNoPrefix ''DidOpenTextDocumentParams--type DidOpenTextDocumentNotification = NotificationMessage ClientMethod DidOpenTextDocumentParams---- ----------------------------------------------------------------------{--DidChangeTextDocument Notification--https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#didchangetextdocument-notification--    Changed: The document change notification is sent from the client to the-    server to signal changes to a text document. In 2.0 the shape of the params-    has changed to include proper version numbers and language ids.--Notification:--    method: 'textDocument/didChange'-    params: DidChangeTextDocumentParams defined as follows:--interface DidChangeTextDocumentParams {-    /**-     * The document that did change. The version number points-     * to the version after all provided content changes have-     * been applied.-     */-    textDocument: VersionedTextDocumentIdentifier;--    /**-     * The actual content changes.-     */-    contentChanges: TextDocumentContentChangeEvent[];-}--/**- * An event describing a change to a text document. If range and rangeLength are omitted- * the new text is considered to be the full content of the document.- */-interface TextDocumentContentChangeEvent {-    /**-     * The range of the document that changed.-     */-    range?: Range;--    /**-     * The length of the range that got replaced.-     */-    rangeLength?: number;--    /**-     * The new text of the document.-     */-    text: string;-}--}-data TextDocumentContentChangeEvent =-  TextDocumentContentChangeEvent-    { _range       :: Maybe Range-    , _rangeLength :: Maybe Int-    , _text        :: Text-    } deriving (Read,Show,Eq)--deriveJSON lspOptions { omitNothingFields = True } ''TextDocumentContentChangeEvent-makeFieldsNoPrefix ''TextDocumentContentChangeEvent---- ---------------------------------------data DidChangeTextDocumentParams =-  DidChangeTextDocumentParams-    { _textDocument   :: VersionedTextDocumentIdentifier-    , _contentChanges :: List TextDocumentContentChangeEvent-    } deriving (Show,Read,Eq)--deriveJSON lspOptions ''DidChangeTextDocumentParams-makeFieldsNoPrefix ''DidChangeTextDocumentParams--type DidChangeTextDocumentNotification = NotificationMessage ClientMethod DidChangeTextDocumentParams-{--New in 3.0-------------Registration Options: TextDocumentChangeRegistrationOptions defined as follows:--/**- * Descibe options to be used when registered for text document change events.- */-export interface TextDocumentChangeRegistrationOptions extends TextDocumentRegistrationOptions {-        /**-         * How documents are synced to the server. See TextDocumentSyncKind.Full-         * and TextDocumentSyncKindIncremental.-         */-        syncKind: number;-}--}--data TextDocumentChangeRegistrationOptions =-  TextDocumentChangeRegistrationOptions-    { _documentSelector :: Maybe DocumentSelector-    , _syncKind         :: TextDocumentSyncKind-    } deriving (Show, Read, Eq)--deriveJSON lspOptions ''TextDocumentChangeRegistrationOptions-makeFieldsNoPrefix ''TextDocumentChangeRegistrationOptions---- ----------------------------------------------------------------------{---New in 3.0-------------WillSaveTextDocument Notification--The document will save notification is sent from the client to the server before-the document is actually saved.--Notification:--    method: 'textDocument/willSave'-    params: WillSaveTextDocumentParams defined as follows:--/**- * The parameters send in a will save text document notification.- */-export interface WillSaveTextDocumentParams {-        /**-         * The document that will be saved.-         */-        textDocument: TextDocumentIdentifier;--        /**-         * The 'TextDocumentSaveReason'.-         */-        reason: number;-}--/**- * Represents reasons why a text document is saved.- */-export namespace TextDocumentSaveReason {--        /**-         * Manually triggered, e.g. by the user pressing save, by starting debugging,-         * or by an API call.-         */-        export const Manual = 1;--        /**-         * Automatic after a delay.-         */-        export const AfterDelay = 2;--        /**-         * When the editor lost focus.-         */-        export const FocusOut = 3;-}-Registration Options: TextDocumentRegistrationOptions--}--data TextDocumentSaveReason-  = SaveManual-         -- ^ Manually triggered, e.g. by the user pressing save, by starting-         -- debugging, or by an API call.-  | SaveAfterDelay -- ^ Automatic after a delay-  | SaveFocusOut   -- ^ When the editor lost focus-  deriving (Show, Read, Eq)--instance A.ToJSON TextDocumentSaveReason where-  toJSON SaveManual     = A.Number 1-  toJSON SaveAfterDelay = A.Number 2-  toJSON SaveFocusOut   = A.Number 3--instance A.FromJSON TextDocumentSaveReason where-  parseJSON (A.Number 1) = pure SaveManual-  parseJSON (A.Number 2) = pure SaveAfterDelay-  parseJSON (A.Number 3) = pure SaveFocusOut-  parseJSON _            = mempty--data WillSaveTextDocumentParams =-  WillSaveTextDocumentParams-    { _textDocument :: TextDocumentIdentifier-    , _reason       :: TextDocumentSaveReason-    } deriving (Show, Read, Eq)--deriveJSON lspOptions ''WillSaveTextDocumentParams-makeFieldsNoPrefix ''WillSaveTextDocumentParams--type WillSaveTextDocumentNotification = NotificationMessage ClientMethod WillSaveTextDocumentParams---- ----------------------------------------------------------------------{--New in 3.0-------------WillSaveWaitUntilTextDocument Request--The document will save request is sent from the client to the server before the-document is actually saved. The request can return an array of TextEdits which-will be applied to the text document before it is saved. Please note that-clients might drop results if computing the text edits took too long or if a-server constantly fails on this request. This is done to keep the save fast and-reliable.--Request:--    method: 'textDocument/willSaveWaitUntil'-    params: WillSaveTextDocumentParams--Response:--    result: TextEdit[]-    error: code and message set in case an exception happens during the willSaveWaitUntil request.--Registration Options: TextDocumentRegistrationOptions--}--type WillSaveWaitUntilTextDocumentRequest = RequestMessage ClientMethod WillSaveTextDocumentParams (List TextEdit)-type WillSaveWaitUntilTextDocumentResponse = ResponseMessage (List TextEdit)---- ----------------------------------------------------------------------{--DidSaveTextDocument Notification--https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#didsavetextdocument-notification--    New: The document save notification is sent from the client to the server-    when the document was saved in the client.--    method: 'textDocument/didSave'-    params: DidSaveTextDocumentParams defined as follows:--interface DidSaveTextDocumentParams {-    /**-     * The document that was saved.-     */-    textDocument: TextDocumentIdentifier;-}--}-data DidSaveTextDocumentParams =-  DidSaveTextDocumentParams-    { _textDocument :: TextDocumentIdentifier-    } deriving (Read,Show,Eq)--deriveJSON lspOptions ''DidSaveTextDocumentParams-makeFieldsNoPrefix ''DidSaveTextDocumentParams--type DidSaveTextDocumentNotification = NotificationMessage ClientMethod DidSaveTextDocumentParams------ ----------------------------------------------------------------------{--DidCloseTextDocument Notification--https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#didclosetextdocument-notification--The document close notification is sent from the client to the server when the-document got closed in the client. The document's truth now exists where the-document's uri points to (e.g. if the document's uri is a file uri the truth now-exists on disk).--    Changed: In 2.0 the params are of type DidCloseTextDocumentParams which-    contains a reference to a text document.--Notification:--    method: 'textDocument/didClose'-    params: DidCloseTextDocumentParams defined as follows:--interface DidCloseTextDocumentParams {-    /**-     * The document that was closed.-     */-    textDocument: TextDocumentIdentifier;-}--}-data DidCloseTextDocumentParams =-  DidCloseTextDocumentParams-    { _textDocument :: TextDocumentIdentifier-    } deriving (Read,Show,Eq)--deriveJSON lspOptions ''DidCloseTextDocumentParams-makeFieldsNoPrefix ''DidCloseTextDocumentParams---type DidCloseTextDocumentNotification = NotificationMessage ClientMethod DidCloseTextDocumentParams---- ----------------------------------------------------------------------{--DidChangeWatchedFiles Notification--https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#didchangewatchedfiles-notification--The watched files notification is sent from the client to the server when the-client detects changes to files watched by the language client.--Notification:--    method: 'workspace/didChangeWatchedFiles'-    params: DidChangeWatchedFilesParams defined as follows:--interface DidChangeWatchedFilesParams {-    /**-     * The actual file events.-     */-    changes: FileEvent[];-}--Where FileEvents are described as follows:--/**- * The file event type.- */-enum FileChangeType {-    /**-     * The file got created.-     */-    Created = 1,-    /**-     * The file got changed.-     */-    Changed = 2,-    /**-     * The file got deleted.-     */-    Deleted = 3-}--/**- * An event describing a file change.- */-interface FileEvent {-    /**-     * The file's URI.-     */-    uri: string;-    /**-     * The change type.-     */-    type: number;--}-data FileChangeType = FcCreated-                    | FcChanged-                    | FcDeleted-       deriving (Read,Show,Eq)--instance A.ToJSON FileChangeType where-  toJSON FcCreated = A.Number 1-  toJSON FcChanged = A.Number 2-  toJSON FcDeleted = A.Number 3--instance A.FromJSON FileChangeType where-  parseJSON (A.Number 1) = pure FcCreated-  parseJSON (A.Number 2) = pure FcChanged-  parseJSON (A.Number 3) = pure FcDeleted-  parseJSON _            = mempty----- ---------------------------------------data FileEvent =-  FileEvent-    { _uri   :: Uri-    , _xtype :: FileChangeType-    } deriving (Read,Show,Eq)--deriveJSON lspOptions{ fieldLabelModifier = customModifier } ''FileEvent-makeFieldsNoPrefix ''FileEvent--data DidChangeWatchedFilesParams =-  DidChangeWatchedFilesParams-    { _changes :: List FileEvent-    } deriving (Read,Show,Eq)--deriveJSON lspOptions ''DidChangeWatchedFilesParams-makeFieldsNoPrefix ''DidChangeWatchedFilesParams---type DidChangeWatchedFilesNotification = NotificationMessage ClientMethod DidChangeWatchedFilesParams---- ----------------------------------------------------------------------{--PublishDiagnostics Notification--https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#publishdiagnostics-notification--Diagnostics notification are sent from the server to the client to signal-results of validation runs.--Notification--    method: 'textDocument/publishDiagnostics'-    params: PublishDiagnosticsParams defined as follows:--interface PublishDiagnosticsParams {-    /**-     * The URI for which diagnostic information is reported.-     */-    uri: string;--    /**-     * An array of diagnostic information items.-     */-    diagnostics: Diagnostic[];-}--}--data PublishDiagnosticsParams =-  PublishDiagnosticsParams-    { _uri         :: Uri-    , _diagnostics :: List Diagnostic-    } deriving (Read,Show,Eq)--deriveJSON lspOptions ''PublishDiagnosticsParams-makeFieldsNoPrefix ''PublishDiagnosticsParams---type PublishDiagnosticsNotification = NotificationMessage ServerMethod PublishDiagnosticsParams---- ----------------------------------------------------------------------{--Completion Request--The Completion request is sent from the client to the server to compute-completion items at a given cursor position. Completion items are presented in-the IntelliSense user interface. If computing full completion items is-expensive, servers can additionally provide a handler for the completion item-resolve request ('completionItem/resolve'). This request is sent when a-completion item is selected in the user interface. A typically use case is for-example: the 'textDocument/completion' request doesn't fill in the documentation-property for returned completion items since it is expensive to compute. When-the item is selected in the user interface then a 'completionItem/resolve'-request is sent with the selected completion item as a param. The returned-completion item should have the documentation property filled in.--    Changed: In 2.0 the request uses TextDocumentPositionParams with a proper-    textDocument and position property. In 1.0 the uri of the referenced text-    document was inlined into the params object.--Request--    method: 'textDocument/completion'-    params: TextDocumentPositionParams--}---- ---------------------------------------{---Response--    result: CompletionItem[] | CompletionList--/**- * Represents a collection of [completion items](#CompletionItem) to be presented- * in the editor.- */-interface CompletionList {-    /**-     * This list it not complete. Further typing should result in recomputing-     * this list.-     */-    isIncomplete: boolean;-    /**-     * The completion items.-     */-    items: CompletionItem[];-}---New in 3.0 : InsertTextFormat--/**- * Defines whether the insert text in a completion item should be interpreted as- * plain text or a snippet.- */-namespace InsertTextFormat {-        /**-         * The primary text to be inserted is treated as a plain string.-         */-        export const PlainText = 1;--        /**-         * The primary text to be inserted is treated as a snippet.-         *-         * A snippet can define tab stops and placeholders with `$1`, `$2`-         * and `${3:foo}`. `$0` defines the final tab stop, it defaults to-         * the end of the snippet. Placeholders with equal identifiers are linked,-         * that is typing in one will update others too.-         *-         * See also: https://github.com/Microsoft/vscode/blob/master/src/vs/editor/contrib/snippet/common/snippet.md-         */-        export const Snippet = 2;-}----interface CompletionItem {-    /**-     * The label of this completion item. By default-     * also the text that is inserted when selecting-     * this completion.-     */-    label: string;-    /**-     * The kind of this completion item. Based of the kind-     * an icon is chosen by the editor.-     */-    kind?: number;-    /**-     * A human-readable string with additional information-     * about this item, like type or symbol information.-     */-    detail?: string;-    /**-     * A human-readable string that represents a doc-comment.-     */-    documentation?: string;-    /**-     * A string that shoud be used when comparing this item-     * with other items. When `falsy` the label is used.-     */-    sortText?: string;-    /**-     * A string that should be used when filtering a set of-     * completion items. When `falsy` the label is used.-     */-    filterText?: string;-    /**-     * A string that should be inserted a document when selecting-     * this completion. When `falsy` the label is used.-     */-    insertText?: string;-    -- Following field is new in 3.0-        /**-         * The format of the insert text. The format applies to both the `insertText` property-         * and the `newText` property of a provided `textEdit`.-         */-    insertTextFormat?: InsertTextFormat;-        /**-         * An edit which is applied to a document when selecting this completion. When an edit is provided the value of-         * `insertText` is ignored.-         *-         * *Note:* The range of the edit must be a single line range and it must contain the position at which completion-         * has been requested.-         */--    textEdit?: TextEdit;--    -- Following field is new in 3.0-        /**-         * An optional array of additional text edits that are applied when-         * selecting this completion. Edits must not overlap with the main edit-         * nor with themselves.-         */-    additionalTextEdits?: TextEdit[];-    -- Following field is new in 3.0-        /**-         * An optional command that is executed *after* inserting this completion. *Note* that-         * additional modifications to the current document should be described with the-         * additionalTextEdits-property.-         */--    command?: Command;-        /**-         * An data entry field that is preserved on a completion item between-         * a completion and a completion resolve request.-         */--    data?: any-}--Where CompletionItemKind is defined as follows:--/**- * The kind of a completion entry.- */-enum CompletionItemKind {-    Text = 1,-    Method = 2,-    Function = 3,-    Constructor = 4,-    Field = 5,-    Variable = 6,-    Class = 7,-    Interface = 8,-    Module = 9,-    Property = 10,-    Unit = 11,-    Value = 12,-    Enum = 13,-    Keyword = 14,-    Snippet = 15,-    Color = 16,-    File = 17,-    Reference = 18-}--    error: code and message set in case an exception happens during the completion request.--}---- ---------------------------------------data InsertTextFormat-  = PlainText -- ^The primary text to be inserted is treated as a plain string.-  | Snippet-      -- ^ The primary text to be inserted is treated as a snippet.-      ---      -- A snippet can define tab stops and placeholders with `$1`, `$2`-      -- and `${3:foo}`. `$0` defines the final tab stop, it defaults to-      -- the end of the snippet. Placeholders with equal identifiers are linked,-      -- that is typing in one will update others too.-      ---      -- See also: https://github.com/Microsoft/vscode/blob/master/src/vs/editor/contrib/snippet/common/snippet.md-    deriving (Show, Read, Eq)--instance A.ToJSON InsertTextFormat where-  toJSON PlainText = A.Number 1-  toJSON Snippet   = A.Number 2--instance A.FromJSON InsertTextFormat where-  parseJSON (A.Number  1) = pure PlainText-  parseJSON (A.Number  2) = pure Snippet-  parseJSON _             = mempty---- ---------------------------------------data CompletionItemKind = CiText-                        | CiMethod-                        | CiFunction-                        | CiConstructor-                        | CiField-                        | CiVariable-                        | CiClass-                        | CiInterface-                        | CiModule-                        | CiProperty-                        | CiUnit-                        | CiValue-                        | CiEnum-                        | CiKeyword-                        | CiSnippet-                        | CiColor-                        | CiFile-                        | CiReference-         deriving (Read,Show,Eq,Ord)--instance A.ToJSON CompletionItemKind where-  toJSON CiText        = A.Number 1-  toJSON CiMethod      = A.Number 2-  toJSON CiFunction    = A.Number 3-  toJSON CiConstructor = A.Number 4-  toJSON CiField       = A.Number 5-  toJSON CiVariable    = A.Number 6-  toJSON CiClass       = A.Number 7-  toJSON CiInterface   = A.Number 8-  toJSON CiModule      = A.Number 9-  toJSON CiProperty    = A.Number 10-  toJSON CiUnit        = A.Number 11-  toJSON CiValue       = A.Number 12-  toJSON CiEnum        = A.Number 13-  toJSON CiKeyword     = A.Number 14-  toJSON CiSnippet     = A.Number 15-  toJSON CiColor       = A.Number 16-  toJSON CiFile        = A.Number 17-  toJSON CiReference   = A.Number 18--instance A.FromJSON CompletionItemKind where-  parseJSON (A.Number  1) = pure CiText-  parseJSON (A.Number  2) = pure CiMethod-  parseJSON (A.Number  3) = pure CiFunction-  parseJSON (A.Number  4) = pure CiConstructor-  parseJSON (A.Number  5) = pure CiField-  parseJSON (A.Number  6) = pure CiVariable-  parseJSON (A.Number  7) = pure CiClass-  parseJSON (A.Number  8) = pure CiInterface-  parseJSON (A.Number  9) = pure CiModule-  parseJSON (A.Number 10) = pure CiProperty-  parseJSON (A.Number 11) = pure CiUnit-  parseJSON (A.Number 12) = pure CiValue-  parseJSON (A.Number 13) = pure CiEnum-  parseJSON (A.Number 14) = pure CiKeyword-  parseJSON (A.Number 15) = pure CiSnippet-  parseJSON (A.Number 16) = pure CiColor-  parseJSON (A.Number 17) = pure CiFile-  parseJSON (A.Number 18) = pure CiReference-  parseJSON _             = mempty----- ---------------------------------------data CompletionItem =-  CompletionItem-    { _label               :: Text -- ^ The label of this completion item. By default also-                       -- the text that is inserted when selecting this-                       -- completion.-    , _kind                :: Maybe CompletionItemKind-    , _detail              :: Maybe Text -- ^ A human-readable string with additional-                              -- information about this item, like type or-                              -- symbol information.-    , _documentation       :: Maybe Text -- ^ A human-readable string that represents-                                    -- a doc-comment.-    , _sortText            :: Maybe Text -- ^ A string that should be used when filtering-                                -- a set of completion items. When `falsy` the-                                -- label is used.-    , _filterText          :: Maybe Text -- ^ A string that should be used when-                                  -- filtering a set of completion items. When-                                  -- `falsy` the label is used.-    , _insertText          :: Maybe Text -- ^ A string that should be inserted a-                                  -- document when selecting this completion.-                                  -- When `falsy` the label is used.-    , _insertTextFormat    :: Maybe InsertTextFormat-         -- ^ The format of the insert text. The format applies to both the-         -- `insertText` property and the `newText` property of a provided-         -- `textEdit`.-    , _textEdit            :: Maybe TextEdit-         -- ^ An edit which is applied to a document when selecting this-         -- completion. When an edit is provided the value of `insertText` is-         -- ignored.-         ---         -- *Note:* The range of the edit must be a single line range and it-         -- must contain the position at which completion has been requested.-    , _additionalTextEdits :: Maybe (List TextEdit)-         -- ^ An optional array of additional text edits that are applied when-         -- selecting this completion. Edits must not overlap with the main edit-         -- nor with themselves.-    , _command             :: Maybe Command-        -- ^ An optional command that is executed *after* inserting this-        -- completion. *Note* that additional modifications to the current-        -- document should be described with the additionalTextEdits-property.-    , _xdata               :: Maybe A.Value -- ^ An data entry field that is preserved on a-                              -- completion item between a completion and a-                              -- completion resolve request.-    } deriving (Read,Show,Eq)--deriveJSON lspOptions{ fieldLabelModifier = customModifier } ''CompletionItem-makeFieldsNoPrefix ''CompletionItem--data CompletionListType =-  CompletionListType-    { _isIncomplete :: Bool-    , _items        :: List CompletionItem-    } deriving (Read,Show,Eq)--deriveJSON lspOptions ''CompletionListType-makeFieldsNoPrefix ''CompletionListType---data CompletionResponseResult-  = CompletionList CompletionListType-  | Completions (List CompletionItem)-  deriving (Read,Show,Eq)--deriveJSON defaultOptions { fieldLabelModifier = rdrop (length ("CompletionResponseResult"::String)), sumEncoding = UntaggedValue } ''CompletionResponseResult--type CompletionResponse = ResponseMessage CompletionResponseResult-type CompletionRequest = RequestMessage ClientMethod TextDocumentPositionParams CompletionResponseResult---- --------------------------------------{--New in 3.0-------------Registration Options: CompletionRegistrationOptions options defined as follows:--export interface CompletionRegistrationOptions extends TextDocumentRegistrationOptions {-        /**-         * The characters that trigger completion automatically.-         */-        triggerCharacters?: string[];--        /**-         * The server provides support to resolve additional-         * information for a completion item.-         */-        resolveProvider?: boolean;-}--}--data CompletionRegistrationOptions =-  CompletionRegistrationOptions-    { _documentSelector  :: Maybe DocumentSelector-    , _triggerCharacters :: Maybe (List String)-    , _resolveProvider   :: Maybe Bool-    } deriving (Show, Read, Eq)--deriveJSON lspOptions ''CompletionRegistrationOptions-makeFieldsNoPrefix ''CompletionRegistrationOptions---- ----------------------------------------------------------------------{--Completion Item Resolve Request--https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#completion-item-resolve-request--The request is sent from the client to the server to resolve additional-information for a given completion item.--Request--    method: 'completionItem/resolve'-    params: CompletionItem--Response--    result: CompletionItem-    error: code and message set in case an exception happens during the completion resolve request.--}--type CompletionItemResolveRequest  = RequestMessage ClientMethod CompletionItem CompletionItem-type CompletionItemResolveResponse = ResponseMessage CompletionItem---- ----------------------------------------------------------------------{--Hover Request--The hover request is sent from the client to the server to request hover-information at a given text document position.--    Changed: In 2.0 the request uses TextDocumentPositionParams with a proper-    textDocument and position property. In 1.0 the uri of the referenced text-    document was inlined into the params object.--Request--    method: 'textDocument/hover'-    params: TextDocumentPositionParams--Response--    result: Hover defined as follows:--/**- * The result of a hove request.- */-interface Hover {-    /**-     * The hover's content-     */-    contents: MarkedString | MarkedString[];--    /**-     * An optional range-     */-    range?: Range;-}--Where MarkedString is defined as follows:-/**- * MarkedString can be used to render human readable text. It is either a markdown string- * or a code-block that provides a language and a code snippet. The language identifier- * is sematically equal to the optional language identifier in fenced code blocks in GitHub- * issues. See https://help.github.com/articles/creating-and-highlighting-code-blocks/#syntax-highlighting- *- * The pair of a language and a value is an equivalent to markdown:- * ```${language}- * ${value}- * ```- *- * Note that markdown strings will be sanitized - that means html will be escaped.- */-type MarkedString = string | { language: string; value: string };--    error: code and message set in case an exception happens during the hover-    request.--Registration Options: TextDocumentRegistrationOptions---}--data LanguageString =-  LanguageString-    { _language :: Text-    , _value    :: Text-    } deriving (Read,Show,Eq)--deriveJSON lspOptions ''LanguageString-makeFieldsNoPrefix ''LanguageString--data MarkedString =-    PlainString T.Text-  | CodeString LanguageString-    deriving (Eq,Read,Show)--instance ToJSON MarkedString where-  toJSON (PlainString x) = toJSON x-  toJSON (CodeString  x) = toJSON x-instance FromJSON MarkedString where-  parseJSON (A.String t) = pure $ PlainString t-  parseJSON o            = CodeString <$> parseJSON o--data Hover =-  Hover-    { _contents :: List MarkedString-    , _range    :: Maybe Range-    } deriving (Read,Show,Eq)--deriveJSON lspOptions ''Hover-makeFieldsNoPrefix ''Hover---type HoverRequest = RequestMessage ClientMethod TextDocumentPositionParams Hover-type HoverResponse = ResponseMessage Hover---- ----------------------------------------------------------------------{--Signature Help Request--https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#signature-help-request--The signature help request is sent from the client to the server to request-signature information at a given cursor position.--    Changed: In 2.0 the request uses TextDocumentPositionParams with proper-    textDocument and position properties. In 1.0 the uri of the referenced text-    document was inlined into the params object.--Request--    method: 'textDocument/signatureHelp'-    params: TextDocumentPositionParams--Response--    result: SignatureHelp defined as follows:--/**- * Signature help represents the signature of something- * callable. There can be multiple signature but only one- * active and only one active parameter.- */-interface SignatureHelp {-    /**-     * One or more signatures.-     */-    signatures: SignatureInformation[];--    /**-     * The active signature.-     */-    activeSignature?: number;--    /**-     * The active parameter of the active signature.-     */-    activeParameter?: number;-}--/**- * Represents the signature of something callable. A signature- * can have a label, like a function-name, a doc-comment, and- * a set of parameters.- */-interface SignatureInformation {-    /**-     * The label of this signature. Will be shown in-     * the UI.-     */-    label: string;--    /**-     * The human-readable doc-comment of this signature. Will be shown-     * in the UI but can be omitted.-     */-    documentation?: string;--    /**-     * The parameters of this signature.-     */-    parameters?: ParameterInformation[];-}--/**- * Represents a parameter of a callable-signature. A parameter can- * have a label and a doc-comment.- */-interface ParameterInformation {-    /**-     * The label of this signature. Will be shown in-     * the UI.-     */-    label: string;--    /**-     * The human-readable doc-comment of this signature. Will be shown-     * in the UI but can be omitted.-     */-    documentation?: string;-}--    error: code and message set in case an exception happens during the-    signature help request.--}---data ParameterInformation =-  ParameterInformation-    { _label         :: Text-    , _documentation :: Maybe Text-    } deriving (Read,Show,Eq)-deriveJSON lspOptions ''ParameterInformation-makeFieldsNoPrefix ''ParameterInformation----- ---------------------------------------data SignatureInformation =-  SignatureInformation-    { _label         :: Text-    , _documentation :: Maybe Text-    , _parameters    :: Maybe [ParameterInformation]-    } deriving (Read,Show,Eq)--deriveJSON lspOptions ''SignatureInformation-makeFieldsNoPrefix ''SignatureInformation--data SignatureHelp =-  SignatureHelp-    { _signatures      :: List SignatureInformation-    , _activeSignature :: Maybe Int -- ^ The active signature-    , _activeParameter :: Maybe Int -- ^ The active parameter of the active signature-    } deriving (Read,Show,Eq)--deriveJSON lspOptions ''SignatureHelp-makeFieldsNoPrefix ''SignatureHelp--type SignatureHelpRequest = RequestMessage ClientMethod TextDocumentPositionParams SignatureHelp-type SignatureHelpResponse = ResponseMessage SignatureHelp---- --------------------------------------{--New in 3.0------------Registration Options: SignatureHelpRegistrationOptions defined as follows:--export interface SignatureHelpRegistrationOptions extends TextDocumentRegistrationOptions {-        /**-         * The characters that trigger signature help-         * automatically.-         */-        triggerCharacters?: string[];-}--}--data SignatureHelpRegistrationOptions =-  SignatureHelpRegistrationOptions-    { _documentSelector  :: Maybe DocumentSelector-    , _triggerCharacters :: Maybe (List String)-    } deriving (Show, Read, Eq)--deriveJSON lspOptions ''SignatureHelpRegistrationOptions-makeFieldsNoPrefix ''SignatureHelpRegistrationOptions---- ----------------------------------------------------------------------{--Goto Definition Request--https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#goto-definition-request--The goto definition request is sent from the client to the server to resolve the-definition location of a symbol at a given text document position.--    Changed: In 2.0 the request uses TextDocumentPositionParams with proper-    textDocument and position properties. In 1.0 the uri of the referenced text-    document was inlined into the params object.--Request--    method: 'textDocument/definition'-    params: TextDocumentPositionParams--Response:--    result: Location | Location[]-    error: code and message set in case an exception happens during the definition request.----}---- {"jsonrpc":"2.0","id":1,"method":"textDocument/definition","params":{"textDocument":{"uri":"file:///tmp/Foo.hs"},"position":{"line":1,"character":8}}}--data DefinitionResponseParams = SingleLoc Location | MultiLoc [Location]-  deriving (Eq,Read,Show)--instance A.ToJSON DefinitionResponseParams where-  toJSON (SingleLoc x) = toJSON x-  toJSON (MultiLoc xs) = toJSON xs--instance A.FromJSON DefinitionResponseParams where-  parseJSON xs@(A.Array _) = MultiLoc <$> parseJSON xs-  parseJSON x              = SingleLoc <$> parseJSON x--type DefinitionRequest  = RequestMessage ClientMethod TextDocumentPositionParams DefinitionResponseParams-type DefinitionResponse = ResponseMessage DefinitionResponseParams---- -----------------------------------------------------------------------{--Find References Request--https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#find-references-request--The references request is sent from the client to the server to resolve-project-wide references for the symbol denoted by the given text document-position.--    Changed: In 2.0 the request uses TextDocumentPositionParams with proper-    textDocument and position properties. In 1.0 the uri of the referenced text-    document was inlined into the params object.--Request--    method: 'textDocument/references'-    params: ReferenceParams defined as follows:--interface ReferenceParams extends TextDocumentPositionParams {-    context: ReferenceContext-}--interface ReferenceContext {-    /**-     * Include the declaration of the current symbol.-     */-    includeDeclaration: boolean;-}--Response:--    result: Location[]-    error: code and message set in case an exception happens during the-           reference request.--}--data ReferenceContext =-  ReferenceContext-    { _includeDeclaration :: Bool-    } deriving (Read,Show,Eq)--deriveJSON lspOptions ''ReferenceContext-makeFieldsNoPrefix ''ReferenceContext---data ReferenceParams =-  ReferenceParams-    { _textDocument :: TextDocumentIdentifier-    , _position     :: Position-    , _context      :: ReferenceContext-    } deriving (Read,Show,Eq)--deriveJSON lspOptions ''ReferenceParams-makeFieldsNoPrefix ''ReferenceParams---type ReferencesRequest  = RequestMessage ClientMethod ReferenceParams (List Location)-type ReferencesResponse = ResponseMessage (List Location)---- ----------------------------------------------------------------------{--Document Highlights Request--https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#document-highlights-request--The document highlight request is sent from the client to the server to resolve-a document highlights for a given text document position. For programming-languages this usually highlights all references to the symbol scoped to this-file. However we kept 'textDocument/documentHighlight' and-'textDocument/references' separate requests since the first one is allowed to be-more fuzzy. Symbol matches usually have a DocumentHighlightKind of Read or Write-whereas fuzzy or textual matches use Textas the kind.--    Changed: In 2.0 the request uses TextDocumentPositionParams with proper-    textDocument and position properties. In 1.0 the uri of the referenced text-    document was inlined into the params object.--Request--    method: 'textDocument/documentHighlight'-    params: TextDocumentPositionParams--Response--    result: DocumentHighlight[] defined as follows:--/**- * A document highlight is a range inside a text document which deserves- * special attention. Usually a document highlight is visualized by changing- * the background color of its range.- *- */-interface DocumentHighlight {-    /**-     * The range this highlight applies to.-     */-    range: Range;--    /**-     * The highlight kind, default is DocumentHighlightKind.Text.-     */-    kind?: number;-}--/**- * A document highlight kind.- */-enum DocumentHighlightKind {-    /**-     * A textual occurrance.-     */-    Text = 1,--    /**-     * Read-access of a symbol, like reading a variable.-     */-    Read = 2,--    /**-     * Write-access of a symbol, like writing to a variable.-     */-    Write = 3-}--    error: code and message set in case an exception happens during the document-           highlight request.--Registration Options: TextDocumentRegistrationOptions---}--data DocumentHighlightKind = HkText | HkRead | HkWrite-  deriving (Read,Show,Eq)--instance A.ToJSON DocumentHighlightKind where-  toJSON HkText  = A.Number 1-  toJSON HkRead  = A.Number 2-  toJSON HkWrite = A.Number 3--instance A.FromJSON DocumentHighlightKind where-  parseJSON (A.Number 1) = pure HkText-  parseJSON (A.Number 2) = pure HkRead-  parseJSON (A.Number 3) = pure HkWrite-  parseJSON _            = mempty---- ---------------------------------------data DocumentHighlight =-  DocumentHighlight-    { _range :: Range-    , _kind  :: Maybe DocumentHighlightKind-    } deriving (Read,Show,Eq)--deriveJSON lspOptions ''DocumentHighlight-makeFieldsNoPrefix ''DocumentHighlight--type DocumentHighlightRequest = RequestMessage ClientMethod TextDocumentPositionParams (List DocumentHighlight)-type DocumentHighlightsResponse = ResponseMessage (List DocumentHighlight)---- ----------------------------------------------------------------------{--Document Symbols Request--https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#document-symbols-request--The document symbol request is sent from the client to the server to list all-symbols found in a given text document.--    Changed: In 2.0 the request uses DocumentSymbolParams instead of a single-             uri.--Request--    method: 'textDocument/documentSymbol'-    params: DocumentSymbolParams defined as follows:--interface DocumentSymbolParams {-    /**-     * The text document.-     */-    textDocument: TextDocumentIdentifier;-}--Response--    result: SymbolInformation[] defined as follows:--/**- * Represents information about programming constructs like variables, classes,- * interfaces etc.- */-interface SymbolInformation {-    /**-     * The name of this symbol.-     */-    name: string;--    /**-     * The kind of this symbol.-     */-    kind: number;--    /**-     * The location of this symbol.-     */-    location: Location;--    /**-     * The name of the symbol containing this symbol.-     */-    containerName?: string;-}--Where the kind is defined like this:--/**- * A symbol kind.- */-export enum SymbolKind {-    File = 1,-    Module = 2,-    Namespace = 3,-    Package = 4,-    Class = 5,-    Method = 6,-    Property = 7,-    Field = 8,-    Constructor = 9,-    Enum = 10,-    Interface = 11,-    Function = 12,-    Variable = 13,-    Constant = 14,-    Text = 15,-    Number = 16,-    Boolean = 17,-    Array = 18,-}--    error: code and message set in case an exception happens during the document-           symbol request.--Registration Options: TextDocumentRegistrationOptions--}--data DocumentSymbolParams =-  DocumentSymbolParams-    { _textDocument :: TextDocumentIdentifier-    } deriving (Read,Show,Eq)--deriveJSON lspOptions ''DocumentSymbolParams-makeFieldsNoPrefix ''DocumentSymbolParams---- ---------------------------------------data SymbolKind-    = SkFile-    | SkModule-    | SkNamespace-    | SkPackage-    | SkClass-    | SkMethod-    | SkProperty-    | SkField-    | SkConstructor-    | SkEnum-    | SkInterface-    | SkFunction-    | SkVariable-    | SkConstant-    | SkString-    | SkNumber-    | SkBoolean-    | SkArray-    deriving (Read,Show,Eq)--instance A.ToJSON SymbolKind where-  toJSON SkFile        = A.Number 1-  toJSON SkModule      = A.Number 2-  toJSON SkNamespace   = A.Number 3-  toJSON SkPackage     = A.Number 4-  toJSON SkClass       = A.Number 5-  toJSON SkMethod      = A.Number 6-  toJSON SkProperty    = A.Number 7-  toJSON SkField       = A.Number 8-  toJSON SkConstructor = A.Number 9-  toJSON SkEnum        = A.Number 10-  toJSON SkInterface   = A.Number 11-  toJSON SkFunction    = A.Number 12-  toJSON SkVariable    = A.Number 13-  toJSON SkConstant    = A.Number 14-  toJSON SkString      = A.Number 15-  toJSON SkNumber      = A.Number 16-  toJSON SkBoolean     = A.Number 17-  toJSON SkArray       = A.Number 18--instance A.FromJSON SymbolKind where-  parseJSON (A.Number  1) = pure SkFile-  parseJSON (A.Number  2) = pure SkModule-  parseJSON (A.Number  3) = pure SkNamespace-  parseJSON (A.Number  4) = pure SkPackage-  parseJSON (A.Number  5) = pure SkClass-  parseJSON (A.Number  6) = pure SkMethod-  parseJSON (A.Number  7) = pure SkProperty-  parseJSON (A.Number  8) = pure SkField-  parseJSON (A.Number  9) = pure SkConstructor-  parseJSON (A.Number 10) = pure SkEnum-  parseJSON (A.Number 11) = pure SkInterface-  parseJSON (A.Number 12) = pure SkFunction-  parseJSON (A.Number 13) = pure SkVariable-  parseJSON (A.Number 14) = pure SkConstant-  parseJSON (A.Number 15) = pure SkString-  parseJSON (A.Number 16) = pure SkNumber-  parseJSON (A.Number 17) = pure SkBoolean-  parseJSON (A.Number 18) = pure SkArray-  parseJSON _             = mempty----- -----------------------------------------------------------------------data SymbolInformation =-  SymbolInformation-    { _name          :: Text-    , _kind          :: SymbolKind-    , _location      :: Location-    , _containerName :: Maybe Text -- ^The name of the symbol containing this-                                     -- symbol.-    } deriving (Read,Show,Eq)--deriveJSON lspOptions ''SymbolInformation-makeFieldsNoPrefix ''SymbolInformation----- ---------------------------------------type DocumentSymbolRequest = RequestMessage ClientMethod DocumentSymbolParams (List SymbolInformation)-type DocumentSymbolsResponse = ResponseMessage (List SymbolInformation)---- ----------------------------------------------------------------------{--Workspace Symbols Request--https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#workspace-symbols-request--The workspace symbol request is sent from the client to the server to list-project-wide symbols matching the query string.--Request--    method: 'workspace/symbol'-    params: WorkspaceSymbolParams defined as follows:--/**- * The parameters of a Workspace Symbol Request.- */-interface WorkspaceSymbolParams {-    /**-     * A non-empty query string-     */-    query: string;-}--Response--    result: SymbolInformation[] as defined above.-    error: code and message set in case an exception happens during the-           workspace symbol request.--}--data WorkspaceSymbolParams =-  WorkspaceSymbolParams-    { _query :: Text-    } deriving (Read,Show,Eq)--deriveJSON lspOptions ''WorkspaceSymbolParams-makeFieldsNoPrefix ''WorkspaceSymbolParams--type WorkspaceSymbolRequest  = RequestMessage ClientMethod WorkspaceSymbolParams (List SymbolInformation)-type WorkspaceSymbolsResponse = ResponseMessage (List SymbolInformation)---- ----------------------------------------------------------------------{--Code Action Request--https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#code-action-request--The code action request is sent from the client to the server to compute-commands for a given text document and range. The request is triggered when the-user moves the cursor into a problem marker in the editor or presses the-lightbulb associated with a marker.--Request--    method: 'textDocument/codeAction'-    params: CodeActionParams defined as follows:--/**- * Params for the CodeActionRequest- */-interface CodeActionParams {-    /**-     * The document in which the command was invoked.-     */-    textDocument: TextDocumentIdentifier;--    /**-     * The range for which the command was invoked.-     */-    range: Range;--    /**-     * Context carrying additional information.-     */-    context: CodeActionContext;-}--/**- * Contains additional diagnostic information about the context in which- * a code action is run.- */-interface CodeActionContext {-    /**-     * An array of diagnostics.-     */-    diagnostics: Diagnostic[];-}--Response--    result: Command[] defined as follows:-    error: code and message set in case an exception happens during the code-           action request.---}--data CodeActionContext =-  CodeActionContext-    { _diagnostics :: List Diagnostic-    } deriving (Read,Show,Eq)--deriveJSON lspOptions ''CodeActionContext-makeFieldsNoPrefix ''CodeActionContext---data CodeActionParams =-  CodeActionParams-    { _textDocument :: TextDocumentIdentifier-    , _range        :: Range-    , _context      :: CodeActionContext-    } deriving (Read,Show,Eq)--deriveJSON lspOptions ''CodeActionParams-makeFieldsNoPrefix ''CodeActionParams---type CodeActionRequest  = RequestMessage ClientMethod CodeActionParams (List Command)-type CodeActionResponse = ResponseMessage (List Command)---- ----------------------------------------------------------------------{--Code Lens Request--The code lens request is sent from the client to the server to compute code-lenses for a given text document.--    Changed: In 2.0 the request uses CodeLensParams instead of a single uri.--Request--    method: 'textDocument/codeLens'-    params: CodeLensParams defined as follows:--interface CodeLensParams {-    /**-     * The document to request code lens for.-     */-    textDocument: TextDocumentIdentifier;-}--Response--    result: CodeLens[] defined as follows:--/**- * A code lens represents a command that should be shown along with- * source text, like the number of references, a way to run tests, etc.- *- * A code lens is _unresolved_ when no command is associated to it. For performance- * reasons the creation of a code lens and resolving should be done in two stages.- */-interface CodeLens {-    /**-     * The range in which this code lens is valid. Should only span a single line.-     */-    range: Range;--    /**-     * The command this code lens represents.-     */-    command?: Command;--    /**-     * A data entry field that is preserved on a code lens item between-     * a code lens and a code lens resolve request.-     */-    data?: any-}--    error: code and message set in case an exception happens during the code-           lens request.--}--data CodeLensParams =-  CodeLensParams-    { _textDocument :: TextDocumentIdentifier-    } deriving (Read,Show,Eq)--deriveJSON lspOptions ''CodeLensParams-makeFieldsNoPrefix ''CodeLensParams----- ---------------------------------------data CodeLens =-  CodeLens-    { _range   :: Range-    , _command :: Maybe Command-    , _xdata   :: Maybe A.Value-    } deriving (Read,Show,Eq)--deriveJSON lspOptions{ fieldLabelModifier = customModifier } ''CodeLens-makeFieldsNoPrefix ''CodeLens---type CodeLensRequest = RequestMessage ClientMethod CodeLensParams (List CodeLens)-type CodeLensResponse = ResponseMessage (List CodeLens)---- --------------------------------------{--Registration Options: CodeLensRegistrationOptions defined as follows:--export interface CodeLensRegistrationOptions extends TextDocumentRegistrationOptions {-        /**-         * Code lens has a resolve provider as well.-         */-        resolveProvider?: boolean;-}--}--data CodeLensRegistrationOptions =-  CodeLensRegistrationOptions-    { _documentSelector :: Maybe DocumentSelector-    , _resolveProvider  :: Maybe Bool-    } deriving (Show, Read, Eq)--deriveJSON lspOptions ''CodeLensRegistrationOptions-makeFieldsNoPrefix ''CodeLensRegistrationOptions---- ----------------------------------------------------------------------{--Code Lens Resolve Request--https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#code-lens-resolve-request--The code lens resolve request is sent from the client to the server to resolve-the command for a given code lens item.--Request--    method: 'codeLens/resolve'-    params: CodeLens--Response--    result: CodeLens-    error: code and message set in case an exception happens during the code-           lens resolve request.----}--type CodeLensResolveRequest  = RequestMessage ClientMethod CodeLens (List CodeLens)-type CodeLensResolveResponse = ResponseMessage (List CodeLens)---- ----------------------------------------------------------------------{--New in 3.0-------------Document Link Request--The document links request is sent from the client to the server to request the-location of links in a document.--Request:--    method: 'textDocument/documentLink'-    params: DocumentLinkParams, defined as follows--interface DocumentLinkParams {-        /**-         * The document to provide document links for.-         */-        textDocument: TextDocumentIdentifier;-}--Response:--    result: An array of DocumentLink, or null.--/**- * A document link is a range in a text document that links to an internal or external resource, like another- * text document or a web site.- */-interface DocumentLink {-        /**-         * The range this link applies to.-         */-        range: Range;-        /**-         * The uri this link points to. If missing a resolve request is sent later.-         */-        target?: DocumentUri;-}--    error: code and message set in case an exception happens during the document link request.--Registration Options: DocumentLinkRegistrationOptions defined as follows:--export interface DocumentLinkRegistrationOptions extends TextDocumentRegistrationOptions {-        /**-         * Document links have a resolve provider as well.-         */-        resolveProvider?: boolean;-}--}--data DocumentLinkParams =-  DocumentLinkParams-    { _textDocument :: TextDocumentIdentifier-    } deriving (Read,Show,Eq)--deriveJSON lspOptions ''DocumentLinkParams-makeFieldsNoPrefix ''DocumentLinkParams--data DocumentLink =-  DocumentLink-    { _range  :: Range-    , _target :: Maybe Text-    } deriving (Show, Read, Eq)--deriveJSON lspOptions ''DocumentLink-makeFieldsNoPrefix ''DocumentLink--type DocumentLinkRequest = RequestMessage ClientMethod DocumentLinkParams (List DocumentLink)-type DocumentLinkResponse = ResponseMessage (List DocumentLink)---- ----------------------------------------------------------------------{--New in 3.0-------------Document Link Resolve Request--The document link resolve request is sent from the client to the server to resolve the target of a given document link.--Request:--    method: 'documentLink/resolve'-    params: DocumentLink--Response:--    result: DocumentLink-    error: code and message set in case an exception happens during the document link resolve request.---}--type DocumentLinkResolveRequest  = RequestMessage ClientMethod DocumentLink DocumentLink-type DocumentLinkResolveResponse = ResponseMessage DocumentLink---- ----------------------------------------------------------------------{--Document Formatting Request--https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#document-formatting-request--The document formatting request is sent from the server to the client to format-a whole document.--Request--    method: 'textDocument/formatting'-    params: DocumentFormattingParams defined as follows--interface DocumentFormattingParams {-    /**-     * The document to format.-     */-    textDocument: TextDocumentIdentifier;--    /**-     * The format options.-     */-    options: FormattingOptions;-}--/**- * Value-object describing what options formatting should use.- */-interface FormattingOptions {-    /**-     * Size of a tab in spaces.-     */-    tabSize: number;--    /**-     * Prefer spaces over tabs.-     */-    insertSpaces: boolean;--    /**-     * Signature for further properties.-     */-    [key: string]: boolean | number | string;-}--Response--    result: TextEdit[] describing the modification to the document to be-            formatted.-    error: code and message set in case an exception happens during the-           formatting request.--Registration Options: TextDocumentRegistrationOptions--}--data FormattingOptions =-  FormattingOptions-    { _tabSize      :: Int-    , _insertSpaces :: Bool -- ^ Prefer spaces over tabs-    -- Note: May be more properties-    } deriving (Read,Show,Eq)--deriveJSON lspOptions ''FormattingOptions-makeFieldsNoPrefix ''FormattingOptions--data DocumentFormattingParams =-  DocumentFormattingParams-    { _textDocument :: TextDocumentIdentifier-    , _options      :: FormattingOptions-    } deriving (Show,Read,Eq)--deriveJSON lspOptions ''DocumentFormattingParams-makeFieldsNoPrefix ''DocumentFormattingParams--type DocumentFormattingRequest  = RequestMessage ClientMethod DocumentFormattingParams (List TextEdit)-type DocumentFormattingResponse = ResponseMessage (List TextEdit)---- ----------------------------------------------------------------------{--Document Range Formatting Request--https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#document-range-formatting-request--The document range formatting request is sent from the client to the server to-format a given range in a document.--Request--    method: 'textDocument/rangeFormatting',-    params: DocumentRangeFormattingParams defined as follows--interface DocumentRangeFormattingParams {-    /**-     * The document to format.-     */-    textDocument: TextDocumentIdentifier;--    /**-     * The range to format-     */-    range: Range;--    /**-     * The format options-     */-    options: FormattingOptions;-}--Response--    result: TextEdit[] describing the modification to the document to be-            formatted.-    error: code and message set in case an exception happens during the range-           formatting request.--}--data DocumentRangeFormattingParams =-  DocumentRangeFormattingParams-    { _textDocument :: TextDocumentIdentifier-    , _range        :: Range-    , _options      :: FormattingOptions-    } deriving (Read,Show,Eq)--deriveJSON lspOptions ''DocumentRangeFormattingParams-makeFieldsNoPrefix ''DocumentRangeFormattingParams--type DocumentRangeFormattingRequest  = RequestMessage ClientMethod DocumentRangeFormattingParams (List TextEdit)-type DocumentRangeFormattingResponse = ResponseMessage (List TextEdit)---- ----------------------------------------------------------------------{--Document on Type Formatting Request--https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#document-on-type-formatting-request--The document on type formatting request is sent from the client to the server to-format parts of the document during typing.--Request--    method: 'textDocument/onTypeFormatting'-    params: DocumentOnTypeFormattingParams defined as follows--interface DocumentOnTypeFormattingParams {-    /**-     * The document to format.-     */-    textDocument: TextDocumentIdentifier;--    /**-     * The position at which this request was sent.-     */-    position: Position;--    /**-     * The character that has been typed.-     */-    ch: string;--    /**-     * The format options.-     */-    options: FormattingOptions;-}--Response--    result: TextEdit[] describing the modification to the document.-    error: code and message set in case an exception happens during the range-           formatting request.--Registration Options: DocumentOnTypeFormattingRegistrationOptions defined as follows:--export interface DocumentOnTypeFormattingRegistrationOptions extends TextDocumentRegistrationOptions {-        /**-         * A character on which formatting should be triggered, like `}`.-         */-        firstTriggerCharacter: string;-        /**-         * More trigger characters.-         */-        moreTriggerCharacter?: string[]-}--}--data DocumentOnTypeFormattingParams =-  DocumentOnTypeFormattingParams-    { _textDocument :: TextDocumentIdentifier-    , _position     :: Position-    , _ch           :: Text-    , _options      :: FormattingOptions-    } deriving (Read,Show,Eq)--deriveJSON lspOptions ''DocumentOnTypeFormattingParams-makeFieldsNoPrefix ''DocumentOnTypeFormattingParams--type DocumentOnTypeFormattingRequest  = RequestMessage ClientMethod DocumentOnTypeFormattingParams (List TextEdit)-type DocumentOnTypeFormattingResponse = ResponseMessage (List TextEdit)--data DocumentOnTypeFormattingRegistrationOptions =-  DocumentOnTypeFormattingRegistrationOptions-    { _firstTriggerCharacter :: Text-    , _moreTriggerCharacter  :: Maybe (List String)-    } deriving (Show, Read, Eq)--deriveJSON lspOptions ''DocumentOnTypeFormattingRegistrationOptions---- ----------------------------------------------------------------------{--Rename Request--https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#rename-request--The rename request is sent from the client to the server to perform a-workspace-wide rename of a symbol.--Request--    method: 'textDocument/rename'-    params: RenameParams defined as follows--interface RenameParams {-    /**-     * The document to format.-     */-    textDocument: TextDocumentIdentifier;--    /**-     * The position at which this request was sent.-     */-    position: Position;--    /**-     * The new name of the symbol. If the given name is not valid the-     * request must return a [ResponseError](#ResponseError) with an-     * appropriate message set.-     */-    newName: string;-}--Response--    result: WorkspaceEdit describing the modification to the workspace.-    error: code and message set in case an exception happens during the rename-           request.--Registration Options: TextDocumentRegistrationOptions---}-data RenameParams =-  RenameParams-    { _textDocument :: TextDocumentIdentifier-    , _position     :: Position-    , _newName      :: Text-    } deriving (Show, Read, Eq)--deriveJSON lspOptions ''RenameParams-makeFieldsNoPrefix ''RenameParams----- {\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"textDocument/rename\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/alanz/mysrc/github/alanz/haskell-lsp/src/HieVscode.hs\"},\"position\":{\"line\":37,\"character\":17},\"newName\":\"getArgs'\"}}--type RenameRequest  = RequestMessage ClientMethod RenameParams WorkspaceEdit-type RenameResponse = ResponseMessage WorkspaceEdit---- ----------------------------------------------------------------------{--New in 3.0-------------Execute a command--The workspace/executeCommand request is sent from the client to the server to-trigger command execution on the server. In most cases the server creates a-WorkspaceEdit structure and applies the changes to the workspace using the-request workspace/applyEdit which is sent from the server to the client.--Request:--    method: 'workspace/executeCommand'-    params: ExecuteCommandParams defined as follows:--export interface ExecuteCommandParams {--        /**-         * The identifier of the actual command handler.-         */-        command: string;-        /**-         * Arguments that the command should be invoked with.-         */-        arguments?: any[];-}--The arguments are typically specified when a command is returned from the server-to the client. Example requests that return a command are-textDocument/codeAction or textDocument/codeLens.--Response:--    result: any-    error: code and message set in case an exception happens during the request.--Registration Options: ExecuteCommandRegistrationOptions defined as follows:--/**- * Execute command registration options.- */-export interface ExecuteCommandRegistrationOptions {-        /**-         * The commands to be executed on the server-         */-        commands: string[]-}--}--data ExecuteCommandParams =-  ExecuteCommandParams-    { _command   :: Text-    , _arguments :: Maybe (List A.Value)-    } deriving (Show, Read, Eq)--deriveJSON lspOptions ''ExecuteCommandParams-makeFieldsNoPrefix ''ExecuteCommandParams--type ExecuteCommandRequest = RequestMessage ClientMethod ExecuteCommandParams A.Value-type ExecuteCommandResponse = ResponseMessage A.Value--data ExecuteCommandRegistrationOptions =-  ExecuteCommandRegistrationOptions-    { _commands :: List Text-    } deriving (Show, Read, Eq)--deriveJSON lspOptions ''ExecuteCommandRegistrationOptions-makeFieldsNoPrefix ''ExecuteCommandRegistrationOptions---- ----------------------------------------------------------------------{--New in 3.0-------------Applies a WorkspaceEdit--The workspace/applyEdit request is sent from the server to the client to modify-resource on the client side.--Request:--    method: 'workspace/applyEdit'-    params: ApplyWorkspaceEditParams defined as follows:--export interface ApplyWorkspaceEditParams {-        /**-         * The edits to apply.-         */-        edit: WorkspaceEdit;-}--Response:--    result: ApplyWorkspaceEditResponse defined as follows:--export interface ApplyWorkspaceEditResponse {-        /**-         * Indicates whether the edit was applied or not.-         */-        applied: boolean;-}--    error: code and message set in case an exception happens during the request.---}-data ApplyWorkspaceEditParams =-  ApplyWorkspaceEditParams-    { _edit :: WorkspaceEdit-    } deriving (Show, Read, Eq)--deriveJSON lspOptions ''ApplyWorkspaceEditParams-makeFieldsNoPrefix ''ApplyWorkspaceEditParams--data ApplyWorkspaceEditResponseBody =-  ApplyWorkspaceEditResponseBody-    { _applied :: Bool-    } deriving (Show, Read, Eq)--deriveJSON lspOptions ''ApplyWorkspaceEditResponseBody-makeFieldsNoPrefix ''ApplyWorkspaceEditResponseBody---- | Sent from the server to the client-type ApplyWorkspaceEditRequest  = RequestMessage ServerMethod ApplyWorkspaceEditParams ApplyWorkspaceEditResponseBody-type ApplyWorkspaceEditResponse = ResponseMessage ApplyWorkspaceEditResponseBody---- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%---- -----------------------------------------------------------------------data TraceParams =-  TraceParams {-    _value :: Text-  } deriving (Show, Read, Eq)--deriveJSON lspOptions ''TraceParams-makeFieldsNoPrefix ''TraceParams---data TraceNotification =-  TraceNotification {-    _params :: TraceParams-  } deriving (Show, Read, Eq)--deriveJSON lspOptions ''TraceNotification-makeFieldsNoPrefix ''TraceNotification------ ---------------------------------------------------------------------+module Language.Haskell.LSP.TH.DataTypesJSON+    ( module Language.Haskell.LSP.TH.DataTypesJSON+    , module Language.Haskell.LSP.TH.CodeAction+    , module Language.Haskell.LSP.TH.Command+    , module Language.Haskell.LSP.TH.Diagnostic+    , module Language.Haskell.LSP.TH.List+    , module Language.Haskell.LSP.TH.Location+    , module Language.Haskell.LSP.TH.Message+    , module Language.Haskell.LSP.TH.Symbol+    , module Language.Haskell.LSP.TH.TextDocumentIdentifier+    , module Language.Haskell.LSP.TH.Uri+    , module Language.Haskell.LSP.TH.WorkspaceEdit+    ) where++import           Control.Applicative+import           Control.Lens.TH                            (makeFieldsNoPrefix)+import qualified Data.Aeson                                 as A+import           Data.Aeson.TH+import           Data.Aeson.Types+import           Data.Text                                  (Text)+import qualified Data.Text                                  as T++import           Language.Haskell.LSP.TH.ClientCapabilities+import           Language.Haskell.LSP.TH.CodeAction+import           Language.Haskell.LSP.TH.Command+import           Language.Haskell.LSP.TH.Constants+import           Language.Haskell.LSP.TH.Diagnostic+import           Language.Haskell.LSP.TH.List+import           Language.Haskell.LSP.TH.Location+import           Language.Haskell.LSP.TH.Message+import           Language.Haskell.LSP.TH.Symbol+import           Language.Haskell.LSP.TH.TextDocumentIdentifier+import           Language.Haskell.LSP.TH.Utils+import           Language.Haskell.LSP.TH.Uri+import           Language.Haskell.LSP.TH.WorkspaceEdit++-- ---------------------------------------------------------------------+++{-+TextDocumentItem++https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#textdocumentitem++    New: An item to transfer a text document from the client to the server.++interface TextDocumentItem {+    /**+     * The text document's URI.+     */+    uri: string;++    /**+     * The text document's language identifier.+     */+    languageId: string;++    /**+     * The version number of this document (it will strictly increase after each+     * change, including undo/redo).+     */+    version: number;++    /**+     * The content of the opened text document.+     */+    text: string;+}+-}++data TextDocumentItem =+  TextDocumentItem {+    _uri        :: Uri+  , _languageId :: Text+  , _version    :: Int+  , _text       :: Text+  } deriving (Show, Read, Eq)++deriveJSON lspOptions ''TextDocumentItem+makeFieldsNoPrefix ''TextDocumentItem++-- ---------------------------------------------------------------------+{-+TextDocumentPositionParams++https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#textdocumentpositionparams++    Changed: Was TextDocumentPosition in 1.0 with inlined parameters+++interface TextDocumentPositionParams {+    /**+     * The text document.+     */+    textDocument: TextDocumentIdentifier;++    /**+     * The position inside the text document.+     */+    position: Position;+}++-}+data TextDocumentPositionParams =+  TextDocumentPositionParams+    { _textDocument :: TextDocumentIdentifier+    , _position     :: Position+    } deriving (Show, Read, Eq)++deriveJSON lspOptions ''TextDocumentPositionParams+makeFieldsNoPrefix ''TextDocumentPositionParams++-- ---------------------------------------------------------------------+{-+New in 3.0+----------++DocumentFilter+https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#new-documentfilter++A document filter denotes a document through properties like language, schema or+pattern. Examples are a filter that applies to TypeScript files on disk or a+filter the applies to JSON files with name package.json:++    { language: 'typescript', scheme: 'file' }+    { language: 'json', pattern: '**/package.json' }++export interface DocumentFilter {+        /**+         * A language id, like `typescript`.+         */+        language?: string;++        /**+         * A Uri [scheme](#Uri.scheme), like `file` or `untitled`.+         */+        scheme?: string;++        /**+         * A glob pattern, like `*.{ts,js}`.+         */+        pattern?: string;+}+-}+data DocumentFilter =+  DocumentFilter+    { _language :: Text+    , _scheme   :: Text+    , _pattern  :: Maybe Text+    } deriving (Show, Read, Eq)++deriveJSON lspOptions ''DocumentFilter+makeFieldsNoPrefix ''DocumentFilter++{-+A document selector is the combination of one or many document filters.++export type DocumentSelector = DocumentFilter[];+-}+type DocumentSelector = List DocumentFilter++-- =====================================================================+-- ACTUAL PROTOCOL -----------------------------------------------------+-- =====================================================================++-- ---------------------------------------------------------------------+-- Initialize Request+-- ---------------------------------------------------------------------+{-+Initialize Request++https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#initialize-request++The initialize request is sent as the first request from the client to the server.++Request++    method: 'initialize'+    params: InitializeParams defined as follows:++interface InitializeParams {+        /**+         * The process Id of the parent process that started+         * the server. Is null if the process has not been started by another process.+         * If the parent process is not alive then the server should exit (see exit notification) its process.+         */+        processId: number | null;++        /**+         * The rootPath of the workspace. Is null+         * if no folder is open.+         *+         * @deprecated in favour of rootUri.+         */+        rootPath?: string | null;++        /**+         * The rootUri of the workspace. Is null if no+         * folder is open. If both `rootPath` and `rootUri` are set+         * `rootUri` wins.+         */+        rootUri: DocumentUri | null;++        /**+         * User provided initialization options.+         */+        initializationOptions?: any;++        /**+         * The capabilities provided by the client (editor or tool)+         */+        capabilities: ClientCapabilities;++        /**+         * The initial trace setting. If omitted trace is disabled ('off').+         */+        trace?: 'off' | 'messages' | 'verbose';+}+-}++data Trace = TraceOff | TraceMessages | TraceVerbose+           deriving (Show, Read, Eq)++instance A.ToJSON Trace where+  toJSON TraceOff      = A.String (T.pack "off")+  toJSON TraceMessages = A.String (T.pack "messages")+  toJSON TraceVerbose  = A.String (T.pack "verbose")++instance A.FromJSON Trace where+  parseJSON (A.String s) = case T.unpack s of+    "off"      -> return TraceOff+    "messages" -> return TraceMessages+    "verbose"  -> return TraceVerbose+    _          -> mempty+  parseJSON _                               = mempty++data InitializeParams =+  InitializeParams {+    _processId             :: Maybe Int+  , _rootPath              :: Maybe Text -- ^ Deprecated in favour of _rootUri+  , _rootUri               :: Maybe Uri+  , _initializationOptions :: Maybe A.Value+  , _capabilities          :: ClientCapabilities+  , _trace                 :: Maybe Trace+  } deriving (Show, Read, Eq)+++deriveJSON lspOptions ''InitializeParams+makeFieldsNoPrefix ''InitializeParams++-- ---------------------------------------------------------------------+-- Initialize Response+-- ---------------------------------------------------------------------+{-++    error.data:++interface InitializeError {+    /**+     * Indicates whether the client should retry to send the+     * initilize request after showing the message provided+     * in the ResponseError.+     */+    retry: boolean;+-+-}+data InitializeError =+  InitializeError+    { _retry :: Bool+    } deriving (Read, Show, Eq)++deriveJSON lspOptions ''InitializeError+makeFieldsNoPrefix ''InitializeError++-- ---------------------------------------------------------------------+{-+The server can signal the following capabilities:++/**+ * Defines how the host (editor) should sync document changes to the language server.+ */+enum TextDocumentSyncKind {+    /**+     * Documents should not be synced at all.+     */+    None = 0,+    /**+     * Documents are synced by always sending the full content of the document.+     */+    Full = 1,+    /**+     * Documents are synced by sending the full content on open. After that only incremental+     * updates to the document are sent.+     */+    Incremental = 2+}+-}++-- ^ Note: Omitting this parameter from the capabilities is effectively a fourth+-- state, where DidSave events are generated without sending document contents.+data TextDocumentSyncKind = TdSyncNone+                          | TdSyncFull+                          | TdSyncIncremental+       deriving (Read,Eq,Show)++instance A.ToJSON TextDocumentSyncKind where+  toJSON TdSyncNone        = A.Number 0+  toJSON TdSyncFull        = A.Number 1+  toJSON TdSyncIncremental = A.Number 2++instance A.FromJSON TextDocumentSyncKind where+  parseJSON (A.Number 0) = pure TdSyncNone+  parseJSON (A.Number 1) = pure TdSyncFull+  parseJSON (A.Number 2) = pure TdSyncIncremental+  parseJSON _            = mempty++-- ---------------------------------------------------------------------+{-+/**+ * Completion options.+ */+interface CompletionOptions {+    /**+     * The server provides support to resolve additional information for a completion item.+     */+    resolveProvider?: boolean;++    /**+     * The characters that trigger completion automatically.+     */+    triggerCharacters?: string[];+}+-}++data CompletionOptions =+  CompletionOptions+    { _resolveProvider   :: Maybe Bool+    , _triggerCharacters :: Maybe [String]+    } deriving (Read,Show,Eq)++deriveJSON lspOptions {omitNothingFields = True } ''CompletionOptions+makeFieldsNoPrefix ''CompletionOptions++-- ---------------------------------------------------------------------+{-+/**+ * Signature help options.+ */+interface SignatureHelpOptions {+    /**+     * The characters that trigger signature help automatically.+     */+    triggerCharacters?: string[];+-}++data SignatureHelpOptions =+  SignatureHelpOptions+    { _triggerCharacters :: Maybe [String]+    } deriving (Read,Show,Eq)++deriveJSON lspOptions ''SignatureHelpOptions+makeFieldsNoPrefix ''SignatureHelpOptions++-- ---------------------------------------------------------------------+{-+/**+ * Code Lens options.+ */+interface CodeLensOptions {+    /**+     * Code lens has a resolve provider as well.+     */+    resolveProvider?: boolean;+}+-}++data CodeLensOptions =+  CodeLensOptions+    { _resolveProvider :: Maybe Bool+    } deriving (Read,Show,Eq)++deriveJSON lspOptions ''CodeLensOptions+makeFieldsNoPrefix ''CodeLensOptions++-- ---------------------------------------------------------------------+{-+/**+ * Format document on type options+ */+interface DocumentOnTypeFormattingOptions {+    /**+     * A character on which formatting should be triggered, like `}`.+     */+    firstTriggerCharacter: string;+    /**+     * More trigger characters.+     */+    moreTriggerCharacter?: string[]+}+-}+data DocumentOnTypeFormattingOptions =+  DocumentOnTypeFormattingOptions+    { _firstTriggerCharacter :: Text+    , _moreTriggerCharacter  :: Maybe [String]+    } deriving (Read,Show,Eq)++deriveJSON lspOptions ''DocumentOnTypeFormattingOptions+makeFieldsNoPrefix ''DocumentOnTypeFormattingOptions++-- ---------------------------------------------------------------------+{-+New in 3.0+----------++/**+ * Document link options+ */+export interface DocumentLinkOptions {+        /**+         * Document links have a resolve provider as well.+         */+        resolveProvider?: boolean;+}+-}++data DocumentLinkOptions =+  DocumentLinkOptions+    { -- |Document links have a resolve provider as well.+      _resolveProvider :: Maybe Bool+    } deriving (Show, Read, Eq)++deriveJSON lspOptions ''DocumentLinkOptions+makeFieldsNoPrefix ''DocumentLinkOptions++-- ---------------------------------------------------------------------++{-+New in 3.0+-----------++/**+ * Execute command options.+ */+export interface ExecuteCommandOptions {+        /**+         * The commands to be executed on the server+         */+        commands: string[]+}+-}++data ExecuteCommandOptions =+  ExecuteCommandOptions+    { -- | The commands to be executed on the server+      _commands :: List Text+    } deriving (Show, Read, Eq)++deriveJSON lspOptions ''ExecuteCommandOptions+makeFieldsNoPrefix ''ExecuteCommandOptions++-- ---------------------------------------------------------------------+{-+New in 3.0+----------+/**+ * Save options.+ */+export interface SaveOptions {+        /**+         * The client is supposed to include the content on save.+         */+        includeText?: boolean;+}+-}+data SaveOptions =+  SaveOptions+    { -- |The client is supposed to include the content on save.+      _includeText :: Maybe Bool+    } deriving (Show, Read, Eq)++deriveJSON lspOptions ''SaveOptions+makeFieldsNoPrefix ''SaveOptions++-- ---------------------------------------------------------------------+{-+New in 3.0+----------++export interface TextDocumentSyncOptions {+        /**+         * Open and close notifications are sent to the server.+         */+        openClose?: boolean;+        /**+         * Change notificatins are sent to the server. See TextDocumentSyncKind.None, TextDocumentSyncKind.Full+         * and TextDocumentSyncKindIncremental.+         */+        change?: number;+        /**+         * Will save notifications are sent to the server.+         */+        willSave?: boolean;+        /**+         * Will save wait until requests are sent to the server.+         */+        willSaveWaitUntil?: boolean;+        /**+         * Save notifications are sent to the server.+         */+        save?: SaveOptions;+}+-}++data TextDocumentSyncOptions =+  TextDocumentSyncOptions+    { -- | Open and close notifications are sent to the server.+      _openClose         :: Maybe Bool++      -- | Change notificatins are sent to the server. See+      -- TextDocumentSyncKind.None, TextDocumentSyncKind.Full and+      -- TextDocumentSyncKindIncremental.+    , _change            :: Maybe TextDocumentSyncKind++      -- | Will save notifications are sent to the server.+    , _willSave          :: Maybe Bool++      -- | Will save wait until requests are sent to the server.+    , _willSaveWaitUntil :: Maybe Bool++      -- |Save notifications are sent to the server.+    , _save              :: Maybe SaveOptions+    } deriving (Show, Read, Eq)++deriveJSON lspOptions ''TextDocumentSyncOptions+makeFieldsNoPrefix ''TextDocumentSyncOptions++-- ---------------------------------------------------------------------+{-++Extended in 3.0+---------------++interface ServerCapabilities {+        /**+         * Defines how text documents are synced. Is either a detailed structure defining each notification or+         * for backwards compatibility the TextDocumentSyncKind number.+         */+        textDocumentSync?: TextDocumentSyncOptions | number;+        /**+         * The server provides hover support.+         */+        hoverProvider?: boolean;+        /**+         * The server provides completion support.+         */+        completionProvider?: CompletionOptions;+        /**+         * The server provides signature help support.+         */+        signatureHelpProvider?: SignatureHelpOptions;+        /**+         * The server provides goto definition support.+         */+        definitionProvider?: boolean;+        /**+         * The server provides find references support.+         */+        referencesProvider?: boolean;+        /**+         * The server provides document highlight support.+         */+        documentHighlightProvider?: boolean;+        /**+         * The server provides document symbol support.+         */+        documentSymbolProvider?: boolean;+        /**+         * The server provides workspace symbol support.+         */+        workspaceSymbolProvider?: boolean;+        /**+         * The server provides code actions.+         */+        codeActionProvider?: boolean;+        /**+         * The server provides code lens.+         */+        codeLensProvider?: CodeLensOptions;+        /**+         * The server provides document formatting.+         */+        documentFormattingProvider?: boolean;+        /**+         * The server provides document range formatting.+         */+        documentRangeFormattingProvider?: boolean;+        /**+         * The server provides document formatting on typing.+         */+        documentOnTypeFormattingProvider?: DocumentOnTypeFormattingOptions;+        /**+         * The server provides rename support.+         */+        renameProvider?: boolean;+        /**+         * The server provides document link support.+         */+        documentLinkProvider?: DocumentLinkOptions;+        /**+         * The server provides execute command support.+         */+        executeCommandProvider?: ExecuteCommandOptions;+        /**+         * Experimental server capabilities.+         */+        experimental?: any;+}+-}++-- | Wrapper for TextDocumentSyncKind fallback.+data TDS = TDSOptions TextDocumentSyncOptions+         | TDSKind TextDocumentSyncKind+    deriving (Show, Read, Eq)++instance FromJSON TDS where+    parseJSON x = TDSOptions <$> parseJSON x <|> TDSKind <$> parseJSON x+    +instance ToJSON TDS where+    toJSON (TDSOptions x) = toJSON x+    toJSON (TDSKind x) = toJSON x+      +data InitializeResponseCapabilitiesInner =+  InitializeResponseCapabilitiesInner+    { _textDocumentSync                 :: Maybe TDS+    , _hoverProvider                    :: Maybe Bool+    , _completionProvider               :: Maybe CompletionOptions+    , _signatureHelpProvider            :: Maybe SignatureHelpOptions+    , _definitionProvider               :: Maybe Bool+    , _referencesProvider               :: Maybe Bool+    , _documentHighlightProvider        :: Maybe Bool+    , _documentSymbolProvider           :: Maybe Bool+    , _workspaceSymbolProvider          :: Maybe Bool+    , _codeActionProvider               :: Maybe Bool+    , _codeLensProvider                 :: Maybe CodeLensOptions+    , _documentFormattingProvider       :: Maybe Bool+    , _documentRangeFormattingProvider  :: Maybe Bool+    , _documentOnTypeFormattingProvider :: Maybe DocumentOnTypeFormattingOptions+    , _renameProvider                   :: Maybe Bool+    -- Following are new in 3.0+    , _documentLinkProvider             :: Maybe DocumentLinkOptions+    , _executeCommandProvider           :: Maybe ExecuteCommandOptions+    , _experimental                     :: Maybe A.Value+    } deriving (Show, Read, Eq)++deriveJSON lspOptions ''InitializeResponseCapabilitiesInner+makeFieldsNoPrefix ''InitializeResponseCapabilitiesInner++-- ---------------------------------------------------------------------+-- |+--   Information about the capabilities of a language server+--+data InitializeResponseCapabilities =+  InitializeResponseCapabilities {+    _capabilities :: InitializeResponseCapabilitiesInner+  } deriving (Show, Read, Eq)++deriveJSON lspOptions ''InitializeResponseCapabilities+makeFieldsNoPrefix ''InitializeResponseCapabilities++-- ---------------------------------------------------------------------++type InitializeResponse = ResponseMessage InitializeResponseCapabilities++type InitializeRequest = RequestMessage ClientMethod InitializeParams InitializeResponseCapabilities++{-+    error.code:++/**+ * Known error codes for an `InitializeError`;+ */+export namespace InitializeError {+        /**+         * If the protocol version provided by the client can't be handled by the server.+         * @deprecated This initialize error got replaced by client capabilities. There is+         * no version handshake in version 3.0x+         */+        export const unknownProtocolVersion: number = 1;+}++    error.data:++interface InitializeError {+        /**+         * Indicates whether the client execute the following retry logic:+         * (1) show the message provided by the ResponseError to the user+         * (2) user selects retry or cancel+         * (3) if user selected retry the initialize method is sent again.+         */+        retry: boolean;+}+-}++-- ---------------------------------------------------------------------++{-+New in 3.0+----------+Initialized Notification++The initialized notification is sent from the client to the server after the+client is fully initialized and is able to listen to arbritary requests and+notifications sent from the server.++Notification:++    method: 'initialized'+    params: void++-}++data InitializedParams =+  InitializedParams+    {+    } deriving (Show, Read, Eq)++instance A.FromJSON InitializedParams where+  parseJSON (A.Object _) = pure InitializedParams+  parseJSON _            = mempty++instance A.ToJSON InitializedParams where+  toJSON InitializedParams = A.Object mempty++type InitializedNotification = NotificationMessage ClientMethod (Maybe InitializedParams)++-- ---------------------------------------------------------------------+{-+Shutdown Request++https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#shutdown-request++The shutdown request is sent from the client to the server. It asks the server+to shut down, but to not exit (otherwise the response might not be delivered+correctly to the client). There is a separate exit notification that asks the+server to exit.++Request++    method: 'shutdown'+    params: undefined++Response++    result: undefined+    error: code and message set in case an exception happens during shutdown request.+++-}++type ShutdownRequest  = RequestMessage ClientMethod (Maybe A.Value) Text+type ShutdownResponse = ResponseMessage Text++-- ---------------------------------------------------------------------+{-+Exit Notification++https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#exit-notification++A notification to ask the server to exit its process.++Notification++    method: 'exit'++-}++-- |+--   Notification from the server to actually exit now, after shutdown acked+--+data ExitParams =+  ExitParams+    {+    } deriving (Show, Read, Eq)++deriveJSON defaultOptions ''ExitParams++type ExitNotification = NotificationMessage ClientMethod (Maybe ExitParams)++-- ---------------------------------------------------------------------+{-+ShowMessage Notification++https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#showmessage-notification++The show message notification is sent from a server to a client to ask the+client to display a particular message in the user interface.++Notification:++    method: 'window/showMessage'+    params: ShowMessageParams defined as follows:++interface ShowMessageParams {+    /**+     * The message type. See {@link MessageType}.+     */+    type: number;++    /**+     * The actual message.+     */+    message: string;+}++Where the type is defined as follows:++enum MessageType {+    /**+     * An error message.+     */+    Error = 1,+    /**+     * A warning message.+     */+    Warning = 2,+    /**+     * An information message.+     */+    Info = 3,+    /**+     * A log message.+     */+    Log = 4+}+-}+data MessageType = MtError   -- ^ Error = 1,+                 | MtWarning -- ^ Warning = 2,+                 | MtInfo    -- ^ Info = 3,+                 | MtLog     -- ^ Log = 4+        deriving (Eq,Ord,Show,Read,Enum)++instance A.ToJSON MessageType where+  toJSON MtError   = A.Number 1+  toJSON MtWarning = A.Number 2+  toJSON MtInfo    = A.Number 3+  toJSON MtLog     = A.Number 4++instance A.FromJSON MessageType where+  parseJSON (A.Number 1) = pure MtError+  parseJSON (A.Number 2) = pure MtWarning+  parseJSON (A.Number 3) = pure MtInfo+  parseJSON (A.Number 4) = pure MtLog+  parseJSON _            = mempty++-- ---------------------------------------+++data ShowMessageParams =+  ShowMessageParams {+    _xtype   :: MessageType+  , _message :: Text+  } deriving (Show, Read, Eq)++deriveJSON lspOptions{ fieldLabelModifier = customModifier } ''ShowMessageParams+makeFieldsNoPrefix ''ShowMessageParams++type ShowMessageNotification = NotificationMessage ServerMethod ShowMessageParams++-- ---------------------------------------------------------------------+{-+ShowMessage Request++https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#showmessage-request++    New: The show message request is sent from a server to a client to ask the+    client to display a particular message in the user interface. In addition to+    the show message notification the request allows to pass actions and to wait+    for an answer from the client.++Request:++    method: 'window/showMessageRequest'+    params: ShowMessageRequestParams defined as follows:++Response:++    result: the selected MessageActionItem+    error: code and message set in case an exception happens during showing a message.++interface ShowMessageRequestParams {+    /**+     * The message type. See {@link MessageType}+     */+    type: number;++    /**+     * The actual message+     */+    message: string;++    /**+     * The message action items to present.+     */+    actions?: MessageActionItem[];+}++Where the MessageActionItem is defined as follows:++interface MessageActionItem {+    /**+     * A short title like 'Retry', 'Open Log' etc.+     */+    title: string;+}+-}++data MessageActionItem =+  MessageActionItem+    { _title :: Text+    } deriving (Show,Read,Eq)++deriveJSON lspOptions ''MessageActionItem+makeFieldsNoPrefix ''MessageActionItem+++data ShowMessageRequestParams =+  ShowMessageRequestParams+    { _xtype   :: MessageType+    , _message :: Text+    , _actions :: Maybe [MessageActionItem]+    } deriving (Show,Read,Eq)++deriveJSON lspOptions{ fieldLabelModifier = customModifier } ''ShowMessageRequestParams+makeFieldsNoPrefix ''ShowMessageRequestParams++type ShowMessageRequest = RequestMessage ServerMethod ShowMessageRequestParams Text+type ShowMessageResponse = ResponseMessage Text++-- ---------------------------------------------------------------------+{-+LogMessage Notification++https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#logmessage-notification++The log message notification is sent from the server to the client to ask the+client to log a particular message.++Notification:++    method: 'window/logMessage'+    params: LogMessageParams defined as follows:++interface LogMessageParams {+    /**+     * The message type. See {@link MessageType}+     */+    type: number;++    /**+     * The actual message+     */+    message: string;+}++Where type is defined as above.+-}++data LogMessageParams =+  LogMessageParams {+    _xtype   :: MessageType+  , _message :: Text+  } deriving (Show, Read, Eq)++deriveJSON lspOptions{ fieldLabelModifier = customModifier } ''LogMessageParams+makeFieldsNoPrefix ''LogMessageParams+++type LogMessageNotification = NotificationMessage ServerMethod LogMessageParams++-- ---------------------------------------------------------------------+{-+Telemetry Notification++https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#telemetry-notification++    New: The telemetry notification is sent from the server to the client to ask+    the client to log a telemetry event.++Notification:++    method: 'telemetry/event'+    params: 'any'+-}+++type TelemetryNotification = NotificationMessage ServerMethod A.Value++-- ---------------------------------------------------------------------+{-+New in 3.0+----------++Register Capability++The client/registerCapability request is sent from the server to the client to+register for a new capability on the client side. Not all clients need to+support dynamic capability registration. A client opts in via the+ClientCapabilities.dynamicRegistration property.++Request:++    method: 'client/registerCapability'+    params: RegistrationParams++Where RegistrationParams are defined as follows:++/**+ * General paramters to to regsiter for a capability.+ */+export interface Registration {+        /**+         * The id used to register the request. The id can be used to deregister+         * the request again.+         */+        id: string;++        /**+         * The method / capability to register for.+         */+        method: string;++        /**+         * Options necessary for the registration.+         */+        registerOptions?: any;+}++export interface RegistrationParams {+        registrations: Registration[];+}+-}++data Registration =+  Registration+    { -- |The id used to register the request. The id can be used to deregister+      -- the request again.+      _id              :: Text++       -- | The method / capability to register for.+    , _method          :: ClientMethod++      -- | Options necessary for the registration.+    , _registerOptions :: Maybe A.Value+    } deriving (Show, Read, Eq)++deriveJSON lspOptions ''Registration+makeFieldsNoPrefix ''Registration++data RegistrationParams =+  RegistrationParams+    { _registrations :: List Registration+    } deriving (Show, Read, Eq)++deriveJSON lspOptions ''RegistrationParams+makeFieldsNoPrefix ''RegistrationParams++-- |Note: originates at the server+type RegisterCapabilityRequest = RequestMessage ServerMethod RegistrationParams ()++type RegisterCapabilityResponse = ResponseMessage ()++-- -------------------------------------++{-+Since most of the registration options require to specify a document selector+there is a base interface that can be used.++export interface TextDocumentRegistrationOptions {+        /**+         * A document selector to identify the scope of the registration. If set to null+         * the document selector provided on the client side will be used.+         */+        documentSelector: DocumentSelector | null;+}+-}++data TextDocumentRegistrationOptions =+  TextDocumentRegistrationOptions+    { _documentSelector :: Maybe DocumentSelector+    } deriving (Show, Read, Eq)++deriveJSON lspOptions ''TextDocumentRegistrationOptions+makeFieldsNoPrefix ''TextDocumentRegistrationOptions++-- ---------------------------------------------------------------------+{-+New in 3.0+----------++Unregister Capability++The client/unregisterCapability request is sent from the server to the client to+unregister a previously register capability.++Request:++    method: 'client/unregisterCapability'+    params: UnregistrationParams++Where UnregistrationParams are defined as follows:++/**+ * General parameters to unregister a capability.+ */+export interface Unregistration {+        /**+         * The id used to unregister the request or notification. Usually an id+         * provided during the register request.+         */+        id: string;++        /**+         * The method / capability to unregister for.+         */+        method: string;+}++export interface UnregistrationParams {+        unregisterations: Unregistration[];+}+-}++data Unregistration =+  Unregistration+    { -- | The id used to unregister the request or notification. Usually an id+      -- provided during the register request.+      _id     :: Text++       -- |The method / capability to unregister for.+    , _method :: Text+    } deriving (Show, Read, Eq)++deriveJSON lspOptions ''Unregistration+makeFieldsNoPrefix ''Unregistration++data UnregistrationParams =+  UnregistrationParams+    { _unregistrations :: List Unregistration+    } deriving (Show, Read, Eq)++deriveJSON lspOptions ''UnregistrationParams+makeFieldsNoPrefix ''UnregistrationParams++type UnregisterCapabilityRequest = RequestMessage ServerMethod UnregistrationParams ()++type UnregisterCapabilityResponse = ResponseMessage ()++-- ---------------------------------------------------------------------+{-+DidChangeConfiguration Notification++https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#didchangeconfiguration-notification++A notification sent from the client to the server to signal the change of+configuration settings.++Notification:++    method: 'workspace/didChangeConfiguration',+    params: DidChangeConfigurationParams defined as follows:++interface DidChangeConfigurationParams {+    /**+     * The actual changed settings+     */+    settings: any;+}+-}++data DidChangeConfigurationParams =+  DidChangeConfigurationParams {+    _settings :: A.Value+  } deriving (Show, Read, Eq)++deriveJSON lspOptions ''DidChangeConfigurationParams+makeFieldsNoPrefix ''DidChangeConfigurationParams+++type DidChangeConfigurationNotification = NotificationMessage ClientMethod DidChangeConfigurationParams++-- ---------------------------------------------------------------------+{-+DidOpenTextDocument Notification++https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#didopentextdocument-notification++The document open notification is sent from the client to the server to signal+newly opened text documents. The document's truth is now managed by the client+and the server must not try to read the document's truth using the document's+uri.++Notification:++    method: 'textDocument/didOpen'+    params: DidOpenTextDocumentParams defined as follows:++interface DidOpenTextDocumentParams {+    /**+     * The document that was opened.+     */+    textDocument: TextDocumentItem;+}++Registration Options: TextDocumentRegistrationOptions+-}++data DidOpenTextDocumentParams =+  DidOpenTextDocumentParams {+    _textDocument :: TextDocumentItem+  } deriving (Show, Read, Eq)++deriveJSON lspOptions ''DidOpenTextDocumentParams+makeFieldsNoPrefix ''DidOpenTextDocumentParams++type DidOpenTextDocumentNotification = NotificationMessage ClientMethod DidOpenTextDocumentParams++-- ---------------------------------------------------------------------+{-+DidChangeTextDocument Notification++https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#didchangetextdocument-notification++    Changed: The document change notification is sent from the client to the+    server to signal changes to a text document. In 2.0 the shape of the params+    has changed to include proper version numbers and language ids.++Notification:++    method: 'textDocument/didChange'+    params: DidChangeTextDocumentParams defined as follows:++interface DidChangeTextDocumentParams {+    /**+     * The document that did change. The version number points+     * to the version after all provided content changes have+     * been applied.+     */+    textDocument: VersionedTextDocumentIdentifier;++    /**+     * The actual content changes.+     */+    contentChanges: TextDocumentContentChangeEvent[];+}++/**+ * An event describing a change to a text document. If range and rangeLength are omitted+ * the new text is considered to be the full content of the document.+ */+interface TextDocumentContentChangeEvent {+    /**+     * The range of the document that changed.+     */+    range?: Range;++    /**+     * The length of the range that got replaced.+     */+    rangeLength?: number;++    /**+     * The new text of the document.+     */+    text: string;+}+-}+data TextDocumentContentChangeEvent =+  TextDocumentContentChangeEvent+    { _range       :: Maybe Range+    , _rangeLength :: Maybe Int+    , _text        :: Text+    } deriving (Read,Show,Eq)++deriveJSON lspOptions { omitNothingFields = True } ''TextDocumentContentChangeEvent+makeFieldsNoPrefix ''TextDocumentContentChangeEvent++-- -------------------------------------++data DidChangeTextDocumentParams =+  DidChangeTextDocumentParams+    { _textDocument   :: VersionedTextDocumentIdentifier+    , _contentChanges :: List TextDocumentContentChangeEvent+    } deriving (Show,Read,Eq)++deriveJSON lspOptions ''DidChangeTextDocumentParams+makeFieldsNoPrefix ''DidChangeTextDocumentParams++type DidChangeTextDocumentNotification = NotificationMessage ClientMethod DidChangeTextDocumentParams+{-+New in 3.0+----------++Registration Options: TextDocumentChangeRegistrationOptions defined as follows:++/**+ * Descibe options to be used when registered for text document change events.+ */+export interface TextDocumentChangeRegistrationOptions extends TextDocumentRegistrationOptions {+        /**+         * How documents are synced to the server. See TextDocumentSyncKind.Full+         * and TextDocumentSyncKindIncremental.+         */+        syncKind: number;+}+-}++data TextDocumentChangeRegistrationOptions =+  TextDocumentChangeRegistrationOptions+    { _documentSelector :: Maybe DocumentSelector+    , _syncKind         :: TextDocumentSyncKind+    } deriving (Show, Read, Eq)++deriveJSON lspOptions ''TextDocumentChangeRegistrationOptions+makeFieldsNoPrefix ''TextDocumentChangeRegistrationOptions++-- ---------------------------------------------------------------------+{-++New in 3.0+----------++WillSaveTextDocument Notification++The document will save notification is sent from the client to the server before+the document is actually saved.++Notification:++    method: 'textDocument/willSave'+    params: WillSaveTextDocumentParams defined as follows:++/**+ * The parameters send in a will save text document notification.+ */+export interface WillSaveTextDocumentParams {+        /**+         * The document that will be saved.+         */+        textDocument: TextDocumentIdentifier;++        /**+         * The 'TextDocumentSaveReason'.+         */+        reason: number;+}++/**+ * Represents reasons why a text document is saved.+ */+export namespace TextDocumentSaveReason {++        /**+         * Manually triggered, e.g. by the user pressing save, by starting debugging,+         * or by an API call.+         */+        export const Manual = 1;++        /**+         * Automatic after a delay.+         */+        export const AfterDelay = 2;++        /**+         * When the editor lost focus.+         */+        export const FocusOut = 3;+}+Registration Options: TextDocumentRegistrationOptions+-}++data TextDocumentSaveReason+  = SaveManual+         -- ^ Manually triggered, e.g. by the user pressing save, by starting+         -- debugging, or by an API call.+  | SaveAfterDelay -- ^ Automatic after a delay+  | SaveFocusOut   -- ^ When the editor lost focus+  deriving (Show, Read, Eq)++instance A.ToJSON TextDocumentSaveReason where+  toJSON SaveManual     = A.Number 1+  toJSON SaveAfterDelay = A.Number 2+  toJSON SaveFocusOut   = A.Number 3++instance A.FromJSON TextDocumentSaveReason where+  parseJSON (A.Number 1) = pure SaveManual+  parseJSON (A.Number 2) = pure SaveAfterDelay+  parseJSON (A.Number 3) = pure SaveFocusOut+  parseJSON _            = mempty++data WillSaveTextDocumentParams =+  WillSaveTextDocumentParams+    { _textDocument :: TextDocumentIdentifier+    , _reason       :: TextDocumentSaveReason+    } deriving (Show, Read, Eq)++deriveJSON lspOptions ''WillSaveTextDocumentParams+makeFieldsNoPrefix ''WillSaveTextDocumentParams++type WillSaveTextDocumentNotification = NotificationMessage ClientMethod WillSaveTextDocumentParams++-- ---------------------------------------------------------------------+{-+New in 3.0+----------++WillSaveWaitUntilTextDocument Request++The document will save request is sent from the client to the server before the+document is actually saved. The request can return an array of TextEdits which+will be applied to the text document before it is saved. Please note that+clients might drop results if computing the text edits took too long or if a+server constantly fails on this request. This is done to keep the save fast and+reliable.++Request:++    method: 'textDocument/willSaveWaitUntil'+    params: WillSaveTextDocumentParams++Response:++    result: TextEdit[]+    error: code and message set in case an exception happens during the willSaveWaitUntil request.++Registration Options: TextDocumentRegistrationOptions+-}++type WillSaveWaitUntilTextDocumentRequest = RequestMessage ClientMethod WillSaveTextDocumentParams (List TextEdit)+type WillSaveWaitUntilTextDocumentResponse = ResponseMessage (List TextEdit)++-- ---------------------------------------------------------------------+{-+DidSaveTextDocument Notification++https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#didsavetextdocument-notification++    New: The document save notification is sent from the client to the server+    when the document was saved in the client.++    method: 'textDocument/didSave'+    params: DidSaveTextDocumentParams defined as follows:++interface DidSaveTextDocumentParams {+    /**+     * The document that was saved.+     */+    textDocument: TextDocumentIdentifier;+}+-}+data DidSaveTextDocumentParams =+  DidSaveTextDocumentParams+    { _textDocument :: TextDocumentIdentifier+    } deriving (Read,Show,Eq)++deriveJSON lspOptions ''DidSaveTextDocumentParams+makeFieldsNoPrefix ''DidSaveTextDocumentParams++type DidSaveTextDocumentNotification = NotificationMessage ClientMethod DidSaveTextDocumentParams++++-- ---------------------------------------------------------------------+{-+DidCloseTextDocument Notification++https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#didclosetextdocument-notification++The document close notification is sent from the client to the server when the+document got closed in the client. The document's truth now exists where the+document's uri points to (e.g. if the document's uri is a file uri the truth now+exists on disk).++    Changed: In 2.0 the params are of type DidCloseTextDocumentParams which+    contains a reference to a text document.++Notification:++    method: 'textDocument/didClose'+    params: DidCloseTextDocumentParams defined as follows:++interface DidCloseTextDocumentParams {+    /**+     * The document that was closed.+     */+    textDocument: TextDocumentIdentifier;+}+-}+data DidCloseTextDocumentParams =+  DidCloseTextDocumentParams+    { _textDocument :: TextDocumentIdentifier+    } deriving (Read,Show,Eq)++deriveJSON lspOptions ''DidCloseTextDocumentParams+makeFieldsNoPrefix ''DidCloseTextDocumentParams+++type DidCloseTextDocumentNotification = NotificationMessage ClientMethod DidCloseTextDocumentParams++-- ---------------------------------------------------------------------+{-+DidChangeWatchedFiles Notification++https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#didchangewatchedfiles-notification++The watched files notification is sent from the client to the server when the+client detects changes to files watched by the language client.++Notification:++    method: 'workspace/didChangeWatchedFiles'+    params: DidChangeWatchedFilesParams defined as follows:++interface DidChangeWatchedFilesParams {+    /**+     * The actual file events.+     */+    changes: FileEvent[];+}++Where FileEvents are described as follows:++/**+ * The file event type.+ */+enum FileChangeType {+    /**+     * The file got created.+     */+    Created = 1,+    /**+     * The file got changed.+     */+    Changed = 2,+    /**+     * The file got deleted.+     */+    Deleted = 3+}++/**+ * An event describing a file change.+ */+interface FileEvent {+    /**+     * The file's URI.+     */+    uri: string;+    /**+     * The change type.+     */+    type: number;+-}+data FileChangeType = FcCreated+                    | FcChanged+                    | FcDeleted+       deriving (Read,Show,Eq)++instance A.ToJSON FileChangeType where+  toJSON FcCreated = A.Number 1+  toJSON FcChanged = A.Number 2+  toJSON FcDeleted = A.Number 3++instance A.FromJSON FileChangeType where+  parseJSON (A.Number 1) = pure FcCreated+  parseJSON (A.Number 2) = pure FcChanged+  parseJSON (A.Number 3) = pure FcDeleted+  parseJSON _            = mempty+++-- -------------------------------------++data FileEvent =+  FileEvent+    { _uri   :: Uri+    , _xtype :: FileChangeType+    } deriving (Read,Show,Eq)++deriveJSON lspOptions{ fieldLabelModifier = customModifier } ''FileEvent+makeFieldsNoPrefix ''FileEvent++data DidChangeWatchedFilesParams =+  DidChangeWatchedFilesParams+    { _changes :: List FileEvent+    } deriving (Read,Show,Eq)++deriveJSON lspOptions ''DidChangeWatchedFilesParams+makeFieldsNoPrefix ''DidChangeWatchedFilesParams+++type DidChangeWatchedFilesNotification = NotificationMessage ClientMethod DidChangeWatchedFilesParams++-- ---------------------------------------------------------------------+{-+PublishDiagnostics Notification++https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#publishdiagnostics-notification++Diagnostics notification are sent from the server to the client to signal+results of validation runs.++Notification++    method: 'textDocument/publishDiagnostics'+    params: PublishDiagnosticsParams defined as follows:++interface PublishDiagnosticsParams {+    /**+     * The URI for which diagnostic information is reported.+     */+    uri: string;++    /**+     * An array of diagnostic information items.+     */+    diagnostics: Diagnostic[];+}+-}++data PublishDiagnosticsParams =+  PublishDiagnosticsParams+    { _uri         :: Uri+    , _diagnostics :: List Diagnostic+    } deriving (Read,Show,Eq)++deriveJSON lspOptions ''PublishDiagnosticsParams+makeFieldsNoPrefix ''PublishDiagnosticsParams+++type PublishDiagnosticsNotification = NotificationMessage ServerMethod PublishDiagnosticsParams++-- ---------------------------------------------------------------------+{-+Completion Request++The Completion request is sent from the client to the server to compute+completion items at a given cursor position. Completion items are presented in+the IntelliSense user interface. If computing full completion items is+expensive, servers can additionally provide a handler for the completion item+resolve request ('completionItem/resolve'). This request is sent when a+completion item is selected in the user interface. A typically use case is for+example: the 'textDocument/completion' request doesn't fill in the documentation+property for returned completion items since it is expensive to compute. When+the item is selected in the user interface then a 'completionItem/resolve'+request is sent with the selected completion item as a param. The returned+completion item should have the documentation property filled in.++    Changed: In 2.0 the request uses TextDocumentPositionParams with a proper+    textDocument and position property. In 1.0 the uri of the referenced text+    document was inlined into the params object.++Request++    method: 'textDocument/completion'+    params: TextDocumentPositionParams+-}++-- -------------------------------------++{-++Response++    result: CompletionItem[] | CompletionList++/**+ * Represents a collection of [completion items](#CompletionItem) to be presented+ * in the editor.+ */+interface CompletionList {+    /**+     * This list it not complete. Further typing should result in recomputing+     * this list.+     */+    isIncomplete: boolean;+    /**+     * The completion items.+     */+    items: CompletionItem[];+}+++New in 3.0 : InsertTextFormat++/**+ * Defines whether the insert text in a completion item should be interpreted as+ * plain text or a snippet.+ */+namespace InsertTextFormat {+        /**+         * The primary text to be inserted is treated as a plain string.+         */+        export const PlainText = 1;++        /**+         * The primary text to be inserted is treated as a snippet.+         *+         * A snippet can define tab stops and placeholders with `$1`, `$2`+         * and `${3:foo}`. `$0` defines the final tab stop, it defaults to+         * the end of the snippet. Placeholders with equal identifiers are linked,+         * that is typing in one will update others too.+         *+         * See also: https://github.com/Microsoft/vscode/blob/master/src/vs/editor/contrib/snippet/common/snippet.md+         */+        export const Snippet = 2;+}++++interface CompletionItem {+    /**+     * The label of this completion item. By default+     * also the text that is inserted when selecting+     * this completion.+     */+    label: string;+    /**+     * The kind of this completion item. Based of the kind+     * an icon is chosen by the editor.+     */+    kind?: number;+    /**+     * A human-readable string with additional information+     * about this item, like type or symbol information.+     */+    detail?: string;+    /**+     * A human-readable string that represents a doc-comment.+     */+    documentation?: string;+    /**+     * A string that shoud be used when comparing this item+     * with other items. When `falsy` the label is used.+     */+    sortText?: string;+    /**+     * A string that should be used when filtering a set of+     * completion items. When `falsy` the label is used.+     */+    filterText?: string;+    /**+     * A string that should be inserted a document when selecting+     * this completion. When `falsy` the label is used.+     */+    insertText?: string;+    -- Following field is new in 3.0+        /**+         * The format of the insert text. The format applies to both the `insertText` property+         * and the `newText` property of a provided `textEdit`.+         */+    insertTextFormat?: InsertTextFormat;+        /**+         * An edit which is applied to a document when selecting this completion. When an edit is provided the value of+         * `insertText` is ignored.+         *+         * *Note:* The range of the edit must be a single line range and it must contain the position at which completion+         * has been requested.+         */++    textEdit?: TextEdit;++    -- Following field is new in 3.0+        /**+         * An optional array of additional text edits that are applied when+         * selecting this completion. Edits must not overlap with the main edit+         * nor with themselves.+         */+    additionalTextEdits?: TextEdit[];+    -- Following field is new in 3.0+        /**+         * An optional command that is executed *after* inserting this completion. *Note* that+         * additional modifications to the current document should be described with the+         * additionalTextEdits-property.+         */++    command?: Command;+        /**+         * An data entry field that is preserved on a completion item between+         * a completion and a completion resolve request.+         */++    data?: any+}++Where CompletionItemKind is defined as follows:++/**+ * The kind of a completion entry.+ */+enum CompletionItemKind {+    Text = 1,+    Method = 2,+    Function = 3,+    Constructor = 4,+    Field = 5,+    Variable = 6,+    Class = 7,+    Interface = 8,+    Module = 9,+    Property = 10,+    Unit = 11,+    Value = 12,+    Enum = 13,+    Keyword = 14,+    Snippet = 15,+    Color = 16,+    File = 17,+    Reference = 18+}++    error: code and message set in case an exception happens during the completion request.+-}++-- -------------------------------------++data InsertTextFormat+  = PlainText -- ^The primary text to be inserted is treated as a plain string.+  | Snippet+      -- ^ The primary text to be inserted is treated as a snippet.+      --+      -- A snippet can define tab stops and placeholders with `$1`, `$2`+      -- and `${3:foo}`. `$0` defines the final tab stop, it defaults to+      -- the end of the snippet. Placeholders with equal identifiers are linked,+      -- that is typing in one will update others too.+      --+      -- See also: https://github.com/Microsoft/vscode/blob/master/src/vs/editor/contrib/snippet/common/snippet.md+    deriving (Show, Read, Eq)++instance A.ToJSON InsertTextFormat where+  toJSON PlainText = A.Number 1+  toJSON Snippet   = A.Number 2++instance A.FromJSON InsertTextFormat where+  parseJSON (A.Number  1) = pure PlainText+  parseJSON (A.Number  2) = pure Snippet+  parseJSON _             = mempty++-- -------------------------------------++data CompletionItemKind = CiText+                        | CiMethod+                        | CiFunction+                        | CiConstructor+                        | CiField+                        | CiVariable+                        | CiClass+                        | CiInterface+                        | CiModule+                        | CiProperty+                        | CiUnit+                        | CiValue+                        | CiEnum+                        | CiKeyword+                        | CiSnippet+                        | CiColor+                        | CiFile+                        | CiReference+         deriving (Read,Show,Eq,Ord)++instance A.ToJSON CompletionItemKind where+  toJSON CiText        = A.Number 1+  toJSON CiMethod      = A.Number 2+  toJSON CiFunction    = A.Number 3+  toJSON CiConstructor = A.Number 4+  toJSON CiField       = A.Number 5+  toJSON CiVariable    = A.Number 6+  toJSON CiClass       = A.Number 7+  toJSON CiInterface   = A.Number 8+  toJSON CiModule      = A.Number 9+  toJSON CiProperty    = A.Number 10+  toJSON CiUnit        = A.Number 11+  toJSON CiValue       = A.Number 12+  toJSON CiEnum        = A.Number 13+  toJSON CiKeyword     = A.Number 14+  toJSON CiSnippet     = A.Number 15+  toJSON CiColor       = A.Number 16+  toJSON CiFile        = A.Number 17+  toJSON CiReference   = A.Number 18++instance A.FromJSON CompletionItemKind where+  parseJSON (A.Number  1) = pure CiText+  parseJSON (A.Number  2) = pure CiMethod+  parseJSON (A.Number  3) = pure CiFunction+  parseJSON (A.Number  4) = pure CiConstructor+  parseJSON (A.Number  5) = pure CiField+  parseJSON (A.Number  6) = pure CiVariable+  parseJSON (A.Number  7) = pure CiClass+  parseJSON (A.Number  8) = pure CiInterface+  parseJSON (A.Number  9) = pure CiModule+  parseJSON (A.Number 10) = pure CiProperty+  parseJSON (A.Number 11) = pure CiUnit+  parseJSON (A.Number 12) = pure CiValue+  parseJSON (A.Number 13) = pure CiEnum+  parseJSON (A.Number 14) = pure CiKeyword+  parseJSON (A.Number 15) = pure CiSnippet+  parseJSON (A.Number 16) = pure CiColor+  parseJSON (A.Number 17) = pure CiFile+  parseJSON (A.Number 18) = pure CiReference+  parseJSON _             = mempty+++-- -------------------------------------++data CompletionItem =+  CompletionItem+    { _label               :: Text -- ^ The label of this completion item. By default also+                       -- the text that is inserted when selecting this+                       -- completion.+    , _kind                :: Maybe CompletionItemKind+    , _detail              :: Maybe Text -- ^ A human-readable string with additional+                              -- information about this item, like type or+                              -- symbol information.+    , _documentation       :: Maybe Text -- ^ A human-readable string that represents+                                    -- a doc-comment.+    , _sortText            :: Maybe Text -- ^ A string that should be used when filtering+                                -- a set of completion items. When `falsy` the+                                -- label is used.+    , _filterText          :: Maybe Text -- ^ A string that should be used when+                                  -- filtering a set of completion items. When+                                  -- `falsy` the label is used.+    , _insertText          :: Maybe Text -- ^ A string that should be inserted a+                                  -- document when selecting this completion.+                                  -- When `falsy` the label is used.+    , _insertTextFormat    :: Maybe InsertTextFormat+         -- ^ The format of the insert text. The format applies to both the+         -- `insertText` property and the `newText` property of a provided+         -- `textEdit`.+    , _textEdit            :: Maybe TextEdit+         -- ^ An edit which is applied to a document when selecting this+         -- completion. When an edit is provided the value of `insertText` is+         -- ignored.+         --+         -- *Note:* The range of the edit must be a single line range and it+         -- must contain the position at which completion has been requested.+    , _additionalTextEdits :: Maybe (List TextEdit)+         -- ^ An optional array of additional text edits that are applied when+         -- selecting this completion. Edits must not overlap with the main edit+         -- nor with themselves.+    , _command             :: Maybe Command+        -- ^ An optional command that is executed *after* inserting this+        -- completion. *Note* that additional modifications to the current+        -- document should be described with the additionalTextEdits-property.+    , _xdata               :: Maybe A.Value -- ^ An data entry field that is preserved on a+                              -- completion item between a completion and a+                              -- completion resolve request.+    } deriving (Read,Show,Eq)++deriveJSON lspOptions{ fieldLabelModifier = customModifier } ''CompletionItem+makeFieldsNoPrefix ''CompletionItem++data CompletionListType =+  CompletionListType+    { _isIncomplete :: Bool+    , _items        :: List CompletionItem+    } deriving (Read,Show,Eq)++deriveJSON lspOptions ''CompletionListType+makeFieldsNoPrefix ''CompletionListType+++data CompletionResponseResult+  = CompletionList CompletionListType+  | Completions (List CompletionItem)+  deriving (Read,Show,Eq)++deriveJSON defaultOptions { fieldLabelModifier = rdrop (length ("CompletionResponseResult"::String)), sumEncoding = UntaggedValue } ''CompletionResponseResult++type CompletionResponse = ResponseMessage CompletionResponseResult+type CompletionRequest = RequestMessage ClientMethod TextDocumentPositionParams CompletionResponseResult++-- -------------------------------------+{-+New in 3.0+-----------+Registration Options: CompletionRegistrationOptions options defined as follows:++export interface CompletionRegistrationOptions extends TextDocumentRegistrationOptions {+        /**+         * The characters that trigger completion automatically.+         */+        triggerCharacters?: string[];++        /**+         * The server provides support to resolve additional+         * information for a completion item.+         */+        resolveProvider?: boolean;+}+-}++data CompletionRegistrationOptions =+  CompletionRegistrationOptions+    { _documentSelector  :: Maybe DocumentSelector+    , _triggerCharacters :: Maybe (List String)+    , _resolveProvider   :: Maybe Bool+    } deriving (Show, Read, Eq)++deriveJSON lspOptions ''CompletionRegistrationOptions+makeFieldsNoPrefix ''CompletionRegistrationOptions++-- ---------------------------------------------------------------------+{-+Completion Item Resolve Request++https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#completion-item-resolve-request++The request is sent from the client to the server to resolve additional+information for a given completion item.++Request++    method: 'completionItem/resolve'+    params: CompletionItem++Response++    result: CompletionItem+    error: code and message set in case an exception happens during the completion resolve request.+-}++type CompletionItemResolveRequest  = RequestMessage ClientMethod CompletionItem CompletionItem+type CompletionItemResolveResponse = ResponseMessage CompletionItem++-- ---------------------------------------------------------------------+{-+Hover Request++The hover request is sent from the client to the server to request hover+information at a given text document position.++    Changed: In 2.0 the request uses TextDocumentPositionParams with a proper+    textDocument and position property. In 1.0 the uri of the referenced text+    document was inlined into the params object.++Request++    method: 'textDocument/hover'+    params: TextDocumentPositionParams++Response++    result: Hover defined as follows:++/**+ * The result of a hove request.+ */+interface Hover {+    /**+     * The hover's content+     */+    contents: MarkedString | MarkedString[];++    /**+     * An optional range+     */+    range?: Range;+}++Where MarkedString is defined as follows:+/**+ * MarkedString can be used to render human readable text. It is either a markdown string+ * or a code-block that provides a language and a code snippet. The language identifier+ * is sematically equal to the optional language identifier in fenced code blocks in GitHub+ * issues. See https://help.github.com/articles/creating-and-highlighting-code-blocks/#syntax-highlighting+ *+ * The pair of a language and a value is an equivalent to markdown:+ * ```${language}+ * ${value}+ * ```+ *+ * Note that markdown strings will be sanitized - that means html will be escaped.+ */+type MarkedString = string | { language: string; value: string };++    error: code and message set in case an exception happens during the hover+    request.++Registration Options: TextDocumentRegistrationOptions++-}++data LanguageString =+  LanguageString+    { _language :: Text+    , _value    :: Text+    } deriving (Read,Show,Eq)++deriveJSON lspOptions ''LanguageString+makeFieldsNoPrefix ''LanguageString++data MarkedString =+    PlainString T.Text+  | CodeString LanguageString+    deriving (Eq,Read,Show)++instance ToJSON MarkedString where+  toJSON (PlainString x) = toJSON x+  toJSON (CodeString  x) = toJSON x+instance FromJSON MarkedString where+  parseJSON (A.String t) = pure $ PlainString t+  parseJSON o            = CodeString <$> parseJSON o++data Hover =+  Hover+    { _contents :: List MarkedString+    , _range    :: Maybe Range+    } deriving (Read,Show,Eq)++deriveJSON lspOptions ''Hover+makeFieldsNoPrefix ''Hover+++type HoverRequest = RequestMessage ClientMethod TextDocumentPositionParams Hover+type HoverResponse = ResponseMessage Hover++-- ---------------------------------------------------------------------+{-+Signature Help Request++https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#signature-help-request++The signature help request is sent from the client to the server to request+signature information at a given cursor position.++    Changed: In 2.0 the request uses TextDocumentPositionParams with proper+    textDocument and position properties. In 1.0 the uri of the referenced text+    document was inlined into the params object.++Request++    method: 'textDocument/signatureHelp'+    params: TextDocumentPositionParams++Response++    result: SignatureHelp defined as follows:++/**+ * Signature help represents the signature of something+ * callable. There can be multiple signature but only one+ * active and only one active parameter.+ */+interface SignatureHelp {+    /**+     * One or more signatures.+     */+    signatures: SignatureInformation[];++    /**+     * The active signature.+     */+    activeSignature?: number;++    /**+     * The active parameter of the active signature.+     */+    activeParameter?: number;+}++/**+ * Represents the signature of something callable. A signature+ * can have a label, like a function-name, a doc-comment, and+ * a set of parameters.+ */+interface SignatureInformation {+    /**+     * The label of this signature. Will be shown in+     * the UI.+     */+    label: string;++    /**+     * The human-readable doc-comment of this signature. Will be shown+     * in the UI but can be omitted.+     */+    documentation?: string;++    /**+     * The parameters of this signature.+     */+    parameters?: ParameterInformation[];+}++/**+ * Represents a parameter of a callable-signature. A parameter can+ * have a label and a doc-comment.+ */+interface ParameterInformation {+    /**+     * The label of this signature. Will be shown in+     * the UI.+     */+    label: string;++    /**+     * The human-readable doc-comment of this signature. Will be shown+     * in the UI but can be omitted.+     */+    documentation?: string;+}++    error: code and message set in case an exception happens during the+    signature help request.+-}+++data ParameterInformation =+  ParameterInformation+    { _label         :: Text+    , _documentation :: Maybe Text+    } deriving (Read,Show,Eq)+deriveJSON lspOptions ''ParameterInformation+makeFieldsNoPrefix ''ParameterInformation+++-- -------------------------------------++data SignatureInformation =+  SignatureInformation+    { _label         :: Text+    , _documentation :: Maybe Text+    , _parameters    :: Maybe [ParameterInformation]+    } deriving (Read,Show,Eq)++deriveJSON lspOptions ''SignatureInformation+makeFieldsNoPrefix ''SignatureInformation++data SignatureHelp =+  SignatureHelp+    { _signatures      :: List SignatureInformation+    , _activeSignature :: Maybe Int -- ^ The active signature+    , _activeParameter :: Maybe Int -- ^ The active parameter of the active signature+    } deriving (Read,Show,Eq)++deriveJSON lspOptions ''SignatureHelp+makeFieldsNoPrefix ''SignatureHelp++type SignatureHelpRequest = RequestMessage ClientMethod TextDocumentPositionParams SignatureHelp+type SignatureHelpResponse = ResponseMessage SignatureHelp++-- -------------------------------------+{-+New in 3.0+----------+Registration Options: SignatureHelpRegistrationOptions defined as follows:++export interface SignatureHelpRegistrationOptions extends TextDocumentRegistrationOptions {+        /**+         * The characters that trigger signature help+         * automatically.+         */+        triggerCharacters?: string[];+}+-}++data SignatureHelpRegistrationOptions =+  SignatureHelpRegistrationOptions+    { _documentSelector  :: Maybe DocumentSelector+    , _triggerCharacters :: Maybe (List String)+    } deriving (Show, Read, Eq)++deriveJSON lspOptions ''SignatureHelpRegistrationOptions+makeFieldsNoPrefix ''SignatureHelpRegistrationOptions++-- ---------------------------------------------------------------------+{-+Goto Definition Request++https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#goto-definition-request++The goto definition request is sent from the client to the server to resolve the+definition location of a symbol at a given text document position.++    Changed: In 2.0 the request uses TextDocumentPositionParams with proper+    textDocument and position properties. In 1.0 the uri of the referenced text+    document was inlined into the params object.++Request++    method: 'textDocument/definition'+    params: TextDocumentPositionParams++Response:++    result: Location | Location[]+    error: code and message set in case an exception happens during the definition request.+++-}++-- {"jsonrpc":"2.0","id":1,"method":"textDocument/definition","params":{"textDocument":{"uri":"file:///tmp/Foo.hs"},"position":{"line":1,"character":8}}}++data DefinitionResponseParams = SingleLoc Location | MultiLoc [Location]+  deriving (Eq,Read,Show)++instance A.ToJSON DefinitionResponseParams where+  toJSON (SingleLoc x) = toJSON x+  toJSON (MultiLoc xs) = toJSON xs++instance A.FromJSON DefinitionResponseParams where+  parseJSON xs@(A.Array _) = MultiLoc <$> parseJSON xs+  parseJSON x              = SingleLoc <$> parseJSON x++type DefinitionRequest  = RequestMessage ClientMethod TextDocumentPositionParams DefinitionResponseParams+type DefinitionResponse = ResponseMessage DefinitionResponseParams++-- ---------------------------------------------------------------------++{-+Find References Request++https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#find-references-request++The references request is sent from the client to the server to resolve+project-wide references for the symbol denoted by the given text document+position.++    Changed: In 2.0 the request uses TextDocumentPositionParams with proper+    textDocument and position properties. In 1.0 the uri of the referenced text+    document was inlined into the params object.++Request++    method: 'textDocument/references'+    params: ReferenceParams defined as follows:++interface ReferenceParams extends TextDocumentPositionParams {+    context: ReferenceContext+}++interface ReferenceContext {+    /**+     * Include the declaration of the current symbol.+     */+    includeDeclaration: boolean;+}++Response:++    result: Location[]+    error: code and message set in case an exception happens during the+           reference request.+-}++data ReferenceContext =+  ReferenceContext+    { _includeDeclaration :: Bool+    } deriving (Read,Show,Eq)++deriveJSON lspOptions ''ReferenceContext+makeFieldsNoPrefix ''ReferenceContext+++data ReferenceParams =+  ReferenceParams+    { _textDocument :: TextDocumentIdentifier+    , _position     :: Position+    , _context      :: ReferenceContext+    } deriving (Read,Show,Eq)++deriveJSON lspOptions ''ReferenceParams+makeFieldsNoPrefix ''ReferenceParams+++type ReferencesRequest  = RequestMessage ClientMethod ReferenceParams (List Location)+type ReferencesResponse = ResponseMessage (List Location)++-- ---------------------------------------------------------------------+{-+Document Highlights Request++https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#document-highlights-request++The document highlight request is sent from the client to the server to resolve+a document highlights for a given text document position. For programming+languages this usually highlights all references to the symbol scoped to this+file. However we kept 'textDocument/documentHighlight' and+'textDocument/references' separate requests since the first one is allowed to be+more fuzzy. Symbol matches usually have a DocumentHighlightKind of Read or Write+whereas fuzzy or textual matches use Textas the kind.++    Changed: In 2.0 the request uses TextDocumentPositionParams with proper+    textDocument and position properties. In 1.0 the uri of the referenced text+    document was inlined into the params object.++Request++    method: 'textDocument/documentHighlight'+    params: TextDocumentPositionParams++Response++    result: DocumentHighlight[] defined as follows:++/**+ * A document highlight is a range inside a text document which deserves+ * special attention. Usually a document highlight is visualized by changing+ * the background color of its range.+ *+ */+interface DocumentHighlight {+    /**+     * The range this highlight applies to.+     */+    range: Range;++    /**+     * The highlight kind, default is DocumentHighlightKind.Text.+     */+    kind?: number;+}++/**+ * A document highlight kind.+ */+enum DocumentHighlightKind {+    /**+     * A textual occurrance.+     */+    Text = 1,++    /**+     * Read-access of a symbol, like reading a variable.+     */+    Read = 2,++    /**+     * Write-access of a symbol, like writing to a variable.+     */+    Write = 3+}++    error: code and message set in case an exception happens during the document+           highlight request.++Registration Options: TextDocumentRegistrationOptions++-}++data DocumentHighlightKind = HkText | HkRead | HkWrite+  deriving (Read,Show,Eq)++instance A.ToJSON DocumentHighlightKind where+  toJSON HkText  = A.Number 1+  toJSON HkRead  = A.Number 2+  toJSON HkWrite = A.Number 3++instance A.FromJSON DocumentHighlightKind where+  parseJSON (A.Number 1) = pure HkText+  parseJSON (A.Number 2) = pure HkRead+  parseJSON (A.Number 3) = pure HkWrite+  parseJSON _            = mempty++-- -------------------------------------++data DocumentHighlight =+  DocumentHighlight+    { _range :: Range+    , _kind  :: Maybe DocumentHighlightKind+    } deriving (Read,Show,Eq)++deriveJSON lspOptions ''DocumentHighlight+makeFieldsNoPrefix ''DocumentHighlight++type DocumentHighlightRequest = RequestMessage ClientMethod TextDocumentPositionParams (List DocumentHighlight)+type DocumentHighlightsResponse = ResponseMessage (List DocumentHighlight)++-- ---------------------------------------------------------------------+{-+Workspace Symbols Request++https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#workspace-symbols-request++The workspace symbol request is sent from the client to the server to list+project-wide symbols matching the query string.++Request++    method: 'workspace/symbol'+    params: WorkspaceSymbolParams defined as follows:++/**+ * The parameters of a Workspace Symbol Request.+ */+interface WorkspaceSymbolParams {+    /**+     * A non-empty query string+     */+    query: string;+}++Response++    result: SymbolInformation[] as defined above.+    error: code and message set in case an exception happens during the+           workspace symbol request.+-}++data WorkspaceSymbolParams =+  WorkspaceSymbolParams+    { _query :: Text+    } deriving (Read,Show,Eq)++deriveJSON lspOptions ''WorkspaceSymbolParams+makeFieldsNoPrefix ''WorkspaceSymbolParams++type WorkspaceSymbolRequest  = RequestMessage ClientMethod WorkspaceSymbolParams (List SymbolInformation)+type WorkspaceSymbolsResponse = ResponseMessage (List SymbolInformation)++-- ---------------------------------------------------------------------+{-+Code Lens Request++The code lens request is sent from the client to the server to compute code+lenses for a given text document.++    Changed: In 2.0 the request uses CodeLensParams instead of a single uri.++Request++    method: 'textDocument/codeLens'+    params: CodeLensParams defined as follows:++interface CodeLensParams {+    /**+     * The document to request code lens for.+     */+    textDocument: TextDocumentIdentifier;+}++Response++    result: CodeLens[] defined as follows:++/**+ * A code lens represents a command that should be shown along with+ * source text, like the number of references, a way to run tests, etc.+ *+ * A code lens is _unresolved_ when no command is associated to it. For performance+ * reasons the creation of a code lens and resolving should be done in two stages.+ */+interface CodeLens {+    /**+     * The range in which this code lens is valid. Should only span a single line.+     */+    range: Range;++    /**+     * The command this code lens represents.+     */+    command?: Command;++    /**+     * A data entry field that is preserved on a code lens item between+     * a code lens and a code lens resolve request.+     */+    data?: any+}++    error: code and message set in case an exception happens during the code+           lens request.+-}++data CodeLensParams =+  CodeLensParams+    { _textDocument :: TextDocumentIdentifier+    } deriving (Read,Show,Eq)++deriveJSON lspOptions ''CodeLensParams+makeFieldsNoPrefix ''CodeLensParams+++-- -------------------------------------++data CodeLens =+  CodeLens+    { _range   :: Range+    , _command :: Maybe Command+    , _xdata   :: Maybe A.Value+    } deriving (Read,Show,Eq)++deriveJSON lspOptions{ fieldLabelModifier = customModifier } ''CodeLens+makeFieldsNoPrefix ''CodeLens+++type CodeLensRequest = RequestMessage ClientMethod CodeLensParams (List CodeLens)+type CodeLensResponse = ResponseMessage (List CodeLens)++-- -------------------------------------+{-+Registration Options: CodeLensRegistrationOptions defined as follows:++export interface CodeLensRegistrationOptions extends TextDocumentRegistrationOptions {+        /**+         * Code lens has a resolve provider as well.+         */+        resolveProvider?: boolean;+}+-}++data CodeLensRegistrationOptions =+  CodeLensRegistrationOptions+    { _documentSelector :: Maybe DocumentSelector+    , _resolveProvider  :: Maybe Bool+    } deriving (Show, Read, Eq)++deriveJSON lspOptions ''CodeLensRegistrationOptions+makeFieldsNoPrefix ''CodeLensRegistrationOptions++-- ---------------------------------------------------------------------+{-+Code Lens Resolve Request++https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#code-lens-resolve-request++The code lens resolve request is sent from the client to the server to resolve+the command for a given code lens item.++Request++    method: 'codeLens/resolve'+    params: CodeLens++Response++    result: CodeLens+    error: code and message set in case an exception happens during the code+           lens resolve request.+++-}++type CodeLensResolveRequest  = RequestMessage ClientMethod CodeLens (List CodeLens)+type CodeLensResolveResponse = ResponseMessage (List CodeLens)++-- ---------------------------------------------------------------------+{-+New in 3.0+----------++Document Link Request++The document links request is sent from the client to the server to request the+location of links in a document.++Request:++    method: 'textDocument/documentLink'+    params: DocumentLinkParams, defined as follows++interface DocumentLinkParams {+        /**+         * The document to provide document links for.+         */+        textDocument: TextDocumentIdentifier;+}++Response:++    result: An array of DocumentLink, or null.++/**+ * A document link is a range in a text document that links to an internal or external resource, like another+ * text document or a web site.+ */+interface DocumentLink {+        /**+         * The range this link applies to.+         */+        range: Range;+        /**+         * The uri this link points to. If missing a resolve request is sent later.+         */+        target?: DocumentUri;+}++    error: code and message set in case an exception happens during the document link request.++Registration Options: DocumentLinkRegistrationOptions defined as follows:++export interface DocumentLinkRegistrationOptions extends TextDocumentRegistrationOptions {+        /**+         * Document links have a resolve provider as well.+         */+        resolveProvider?: boolean;+}+-}++data DocumentLinkParams =+  DocumentLinkParams+    { _textDocument :: TextDocumentIdentifier+    } deriving (Read,Show,Eq)++deriveJSON lspOptions ''DocumentLinkParams+makeFieldsNoPrefix ''DocumentLinkParams++data DocumentLink =+  DocumentLink+    { _range  :: Range+    , _target :: Maybe Text+    } deriving (Show, Read, Eq)++deriveJSON lspOptions ''DocumentLink+makeFieldsNoPrefix ''DocumentLink++type DocumentLinkRequest = RequestMessage ClientMethod DocumentLinkParams (List DocumentLink)+type DocumentLinkResponse = ResponseMessage (List DocumentLink)++-- ---------------------------------------------------------------------+{-+New in 3.0+----------++Document Link Resolve Request++The document link resolve request is sent from the client to the server to resolve the target of a given document link.++Request:++    method: 'documentLink/resolve'+    params: DocumentLink++Response:++    result: DocumentLink+    error: code and message set in case an exception happens during the document link resolve request.++-}++type DocumentLinkResolveRequest  = RequestMessage ClientMethod DocumentLink DocumentLink+type DocumentLinkResolveResponse = ResponseMessage DocumentLink++-- ---------------------------------------------------------------------+{-+Document Formatting Request++https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#document-formatting-request++The document formatting request is sent from the server to the client to format+a whole document.++Request++    method: 'textDocument/formatting'+    params: DocumentFormattingParams defined as follows++interface DocumentFormattingParams {+    /**+     * The document to format.+     */+    textDocument: TextDocumentIdentifier;++    /**+     * The format options.+     */+    options: FormattingOptions;+}++/**+ * Value-object describing what options formatting should use.+ */+interface FormattingOptions {+    /**+     * Size of a tab in spaces.+     */+    tabSize: number;++    /**+     * Prefer spaces over tabs.+     */+    insertSpaces: boolean;++    /**+     * Signature for further properties.+     */+    [key: string]: boolean | number | string;+}++Response++    result: TextEdit[] describing the modification to the document to be+            formatted.+    error: code and message set in case an exception happens during the+           formatting request.++Registration Options: TextDocumentRegistrationOptions+-}++data FormattingOptions =+  FormattingOptions+    { _tabSize      :: Int+    , _insertSpaces :: Bool -- ^ Prefer spaces over tabs+    -- Note: May be more properties+    } deriving (Read,Show,Eq)++deriveJSON lspOptions ''FormattingOptions+makeFieldsNoPrefix ''FormattingOptions++data DocumentFormattingParams =+  DocumentFormattingParams+    { _textDocument :: TextDocumentIdentifier+    , _options      :: FormattingOptions+    } deriving (Show,Read,Eq)++deriveJSON lspOptions ''DocumentFormattingParams+makeFieldsNoPrefix ''DocumentFormattingParams++type DocumentFormattingRequest  = RequestMessage ClientMethod DocumentFormattingParams (List TextEdit)+type DocumentFormattingResponse = ResponseMessage (List TextEdit)++-- ---------------------------------------------------------------------+{-+Document Range Formatting Request++https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#document-range-formatting-request++The document range formatting request is sent from the client to the server to+format a given range in a document.++Request++    method: 'textDocument/rangeFormatting',+    params: DocumentRangeFormattingParams defined as follows++interface DocumentRangeFormattingParams {+    /**+     * The document to format.+     */+    textDocument: TextDocumentIdentifier;++    /**+     * The range to format+     */+    range: Range;++    /**+     * The format options+     */+    options: FormattingOptions;+}++Response++    result: TextEdit[] describing the modification to the document to be+            formatted.+    error: code and message set in case an exception happens during the range+           formatting request.+-}++data DocumentRangeFormattingParams =+  DocumentRangeFormattingParams+    { _textDocument :: TextDocumentIdentifier+    , _range        :: Range+    , _options      :: FormattingOptions+    } deriving (Read,Show,Eq)++deriveJSON lspOptions ''DocumentRangeFormattingParams+makeFieldsNoPrefix ''DocumentRangeFormattingParams++type DocumentRangeFormattingRequest  = RequestMessage ClientMethod DocumentRangeFormattingParams (List TextEdit)+type DocumentRangeFormattingResponse = ResponseMessage (List TextEdit)++-- ---------------------------------------------------------------------+{-+Document on Type Formatting Request++https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#document-on-type-formatting-request++The document on type formatting request is sent from the client to the server to+format parts of the document during typing.++Request++    method: 'textDocument/onTypeFormatting'+    params: DocumentOnTypeFormattingParams defined as follows++interface DocumentOnTypeFormattingParams {+    /**+     * The document to format.+     */+    textDocument: TextDocumentIdentifier;++    /**+     * The position at which this request was sent.+     */+    position: Position;++    /**+     * The character that has been typed.+     */+    ch: string;++    /**+     * The format options.+     */+    options: FormattingOptions;+}++Response++    result: TextEdit[] describing the modification to the document.+    error: code and message set in case an exception happens during the range+           formatting request.++Registration Options: DocumentOnTypeFormattingRegistrationOptions defined as follows:++export interface DocumentOnTypeFormattingRegistrationOptions extends TextDocumentRegistrationOptions {+        /**+         * A character on which formatting should be triggered, like `}`.+         */+        firstTriggerCharacter: string;+        /**+         * More trigger characters.+         */+        moreTriggerCharacter?: string[]+}+-}++data DocumentOnTypeFormattingParams =+  DocumentOnTypeFormattingParams+    { _textDocument :: TextDocumentIdentifier+    , _position     :: Position+    , _ch           :: Text+    , _options      :: FormattingOptions+    } deriving (Read,Show,Eq)++deriveJSON lspOptions ''DocumentOnTypeFormattingParams+makeFieldsNoPrefix ''DocumentOnTypeFormattingParams++type DocumentOnTypeFormattingRequest  = RequestMessage ClientMethod DocumentOnTypeFormattingParams (List TextEdit)+type DocumentOnTypeFormattingResponse = ResponseMessage (List TextEdit)++data DocumentOnTypeFormattingRegistrationOptions =+  DocumentOnTypeFormattingRegistrationOptions+    { _firstTriggerCharacter :: Text+    , _moreTriggerCharacter  :: Maybe (List String)+    } deriving (Show, Read, Eq)++deriveJSON lspOptions ''DocumentOnTypeFormattingRegistrationOptions++-- ---------------------------------------------------------------------+{-+Rename Request++https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#rename-request++The rename request is sent from the client to the server to perform a+workspace-wide rename of a symbol.++Request++    method: 'textDocument/rename'+    params: RenameParams defined as follows++interface RenameParams {+    /**+     * The document to format.+     */+    textDocument: TextDocumentIdentifier;++    /**+     * The position at which this request was sent.+     */+    position: Position;++    /**+     * The new name of the symbol. If the given name is not valid the+     * request must return a [ResponseError](#ResponseError) with an+     * appropriate message set.+     */+    newName: string;+}++Response++    result: WorkspaceEdit describing the modification to the workspace.+    error: code and message set in case an exception happens during the rename+           request.++Registration Options: TextDocumentRegistrationOptions++-}+data RenameParams =+  RenameParams+    { _textDocument :: TextDocumentIdentifier+    , _position     :: Position+    , _newName      :: Text+    } deriving (Show, Read, Eq)++deriveJSON lspOptions ''RenameParams+makeFieldsNoPrefix ''RenameParams+++-- {\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"textDocument/rename\",\"params\":{\"textDocument\":{\"uri\":\"file:///home/alanz/mysrc/github/alanz/haskell-lsp/src/HieVscode.hs\"},\"position\":{\"line\":37,\"character\":17},\"newName\":\"getArgs'\"}}++type RenameRequest  = RequestMessage ClientMethod RenameParams WorkspaceEdit+type RenameResponse = ResponseMessage WorkspaceEdit++-- ---------------------------------------------------------------------+{-+New in 3.0+----------++Execute a command++The workspace/executeCommand request is sent from the client to the server to+trigger command execution on the server. In most cases the server creates a+WorkspaceEdit structure and applies the changes to the workspace using the+request workspace/applyEdit which is sent from the server to the client.++Request:++    method: 'workspace/executeCommand'+    params: ExecuteCommandParams defined as follows:++export interface ExecuteCommandParams {++        /**+         * The identifier of the actual command handler.+         */+        command: string;+        /**+         * Arguments that the command should be invoked with.+         */+        arguments?: any[];+}++The arguments are typically specified when a command is returned from the server+to the client. Example requests that return a command are+textDocument/codeAction or textDocument/codeLens.++Response:++    result: any+    error: code and message set in case an exception happens during the request.++Registration Options: ExecuteCommandRegistrationOptions defined as follows:++/**+ * Execute command registration options.+ */+export interface ExecuteCommandRegistrationOptions {+        /**+         * The commands to be executed on the server+         */+        commands: string[]+}+-}++data ExecuteCommandParams =+  ExecuteCommandParams+    { _command   :: Text+    , _arguments :: Maybe (List A.Value)+    } deriving (Show, Read, Eq)++deriveJSON lspOptions ''ExecuteCommandParams+makeFieldsNoPrefix ''ExecuteCommandParams++type ExecuteCommandRequest = RequestMessage ClientMethod ExecuteCommandParams A.Value+type ExecuteCommandResponse = ResponseMessage A.Value++data ExecuteCommandRegistrationOptions =+  ExecuteCommandRegistrationOptions+    { _commands :: List Text+    } deriving (Show, Read, Eq)++deriveJSON lspOptions ''ExecuteCommandRegistrationOptions+makeFieldsNoPrefix ''ExecuteCommandRegistrationOptions++-- ---------------------------------------------------------------------+{-+New in 3.0+----------++Applies a WorkspaceEdit++The workspace/applyEdit request is sent from the server to the client to modify+resource on the client side.++Request:++    method: 'workspace/applyEdit'+    params: ApplyWorkspaceEditParams defined as follows:++export interface ApplyWorkspaceEditParams {+        /**+         * The edits to apply.+         */+        edit: WorkspaceEdit;+}++Response:++    result: ApplyWorkspaceEditResponse defined as follows:++export interface ApplyWorkspaceEditResponse {+        /**+         * Indicates whether the edit was applied or not.+         */+        applied: boolean;+}++    error: code and message set in case an exception happens during the request.++-}+data ApplyWorkspaceEditParams =+  ApplyWorkspaceEditParams+    { _edit :: WorkspaceEdit+    } deriving (Show, Read, Eq)++deriveJSON lspOptions ''ApplyWorkspaceEditParams+makeFieldsNoPrefix ''ApplyWorkspaceEditParams++data ApplyWorkspaceEditResponseBody =+  ApplyWorkspaceEditResponseBody+    { _applied :: Bool+    } deriving (Show, Read, Eq)++deriveJSON lspOptions ''ApplyWorkspaceEditResponseBody+makeFieldsNoPrefix ''ApplyWorkspaceEditResponseBody++-- | Sent from the server to the client+type ApplyWorkspaceEditRequest  = RequestMessage ServerMethod ApplyWorkspaceEditParams ApplyWorkspaceEditResponseBody+type ApplyWorkspaceEditResponse = ResponseMessage ApplyWorkspaceEditResponseBody++-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%++-- ---------------------------------------------------------------------++data TraceParams =+  TraceParams {+    _value :: Text+  } deriving (Show, Read, Eq)++deriveJSON lspOptions ''TraceParams+makeFieldsNoPrefix ''TraceParams+++data TraceNotification =+  TraceNotification {+    _params :: TraceParams+  } deriving (Show, Read, Eq)++deriveJSON lspOptions ''TraceNotification+makeFieldsNoPrefix ''TraceNotification++++-- ---------------------------------------------------------------------++-- Generating lenses+-- Need to do this all in one file or else we get duplicate functions++-- Location+makeFieldsNoPrefix ''Position+makeFieldsNoPrefix ''Range+makeFieldsNoPrefix ''Location++-- CodeActions+makeFieldsNoPrefix ''CodeActionContext+makeFieldsNoPrefix ''CodeActionParams+makeFieldsNoPrefix ''CodeAction++-- WorkspaceEdit+makeFieldsNoPrefix ''TextEdit+makeFieldsNoPrefix ''VersionedTextDocumentIdentifier+makeFieldsNoPrefix ''TextDocumentEdit+makeFieldsNoPrefix ''WorkspaceEdit++-- Message+makeFieldsNoPrefix ''RequestMessage+makeFieldsNoPrefix ''ResponseError+makeFieldsNoPrefix ''ResponseMessage+makeFieldsNoPrefix ''NotificationMessage+makeFieldsNoPrefix ''CancelParams++-- TextDocumentIdentifier+makeFieldsNoPrefix ''TextDocumentIdentifier++-- Command+makeFieldsNoPrefix ''Command++-- Diagnostic+makeFieldsNoPrefix ''Diagnostic+makeFieldsNoPrefix ''DiagnosticRelatedInformation++-- Symbol+makeFieldsNoPrefix ''DocumentSymbolParams+makeFieldsNoPrefix ''SymbolInformation
+ src/Language/Haskell/LSP/TH/Diagnostic.hs view
@@ -0,0 +1,139 @@+{-# LANGUAGE DuplicateRecordFields      #-}+{-# LANGUAGE TemplateHaskell            #-}++module Language.Haskell.LSP.TH.Diagnostic where++import qualified Data.Aeson                                 as A+import           Data.Aeson.TH+import           Data.Text+import           Language.Haskell.LSP.TH.Constants+import           Language.Haskell.LSP.TH.List+import           Language.Haskell.LSP.TH.Location++-- ---------------------------------------------------------------------+{-+The protocol currently supports the following diagnostic severities:++enum DiagnosticSeverity {+    /**+     * Reports an error.+     */+    Error = 1,+    /**+     * Reports a warning.+     */+    Warning = 2,+    /**+     * Reports an information.+     */+    Information = 3,+    /**+     * Reports a hint.+     */+    Hint = 4+}+-}+data DiagnosticSeverity+  = DsError   -- ^ Error = 1,+  | DsWarning -- ^ Warning = 2,+  | DsInfo    -- ^ Info = 3,+  | DsHint    -- ^ Hint = 4+  deriving (Eq,Ord,Show,Read)++instance A.ToJSON DiagnosticSeverity where+  toJSON DsError   = A.Number 1+  toJSON DsWarning = A.Number 2+  toJSON DsInfo    = A.Number 3+  toJSON DsHint    = A.Number 4++instance A.FromJSON DiagnosticSeverity where+  parseJSON (A.Number 1) = pure DsError+  parseJSON (A.Number 2) = pure DsWarning+  parseJSON (A.Number 3) = pure DsInfo+  parseJSON (A.Number 4) = pure DsHint+  parseJSON _            = mempty++-- ---------------------------------------------------------------------+{-+Represents a related message and source code location for a diagnostic. This should be+used to point to code locations that cause or related to a diagnostics, e.g when duplicating+a symbol in a scope.++export interface DiagnosticRelatedInformation {+  /**+   * The location of this related diagnostic information.+   */+  location: Location;++  /**+   * The message of this related diagnostic information.+   */+  message: string;+}+-}++data DiagnosticRelatedInformation =+  DiagnosticRelatedInformation+    { _location :: Location+    , _message  :: Text+    } deriving (Show, Read, Eq, Ord)++deriveJSON lspOptions ''DiagnosticRelatedInformation++-- ---------------------------------------------------------------------+{-+Diagnostic++https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#diagnostic++Represents a diagnostic, such as a compiler error or warning. Diagnostic objects+are only valid in the scope of a resource.++interface Diagnostic {+    /**+     * The range at which the message applies.+     */+    range: Range;++    /**+     * The diagnostic's severity. Can be omitted. If omitted it is up to the+     * client to interpret diagnostics as error, warning, info or hint.+     */+    severity?: number;++    /**+     * The diagnostic's code. Can be omitted.+     */+    code?: number | string;++    /**+     * A human-readable string describing the source of this+     * diagnostic, e.g. 'typescript' or 'super lint'.+     */+    source?: string;++    /**+     * The diagnostic's message.+     */+    message: string;++    /**+     * An array of related diagnostic information, e.g. when symbol-names within+     * a scope collide all definitions can be marked via this property.+     */+    relatedInformation?: DiagnosticRelatedInformation[];+}+-}++type DiagnosticSource = Text+data Diagnostic =+  Diagnostic+    { _range              :: Range+    , _severity           :: Maybe DiagnosticSeverity+    , _code               :: Maybe Text -- Note: Protocol allows Int too.+    , _source             :: Maybe DiagnosticSource+    , _message            :: Text+    , _relatedInformation :: Maybe (List DiagnosticRelatedInformation)+    } deriving (Show, Read, Eq, Ord)++deriveJSON lspOptions ''Diagnostic
+ src/Language/Haskell/LSP/TH/List.hs view
@@ -0,0 +1,26 @@+-- Need to split these types out into a separate module since+-- ClientCapabilities also depends on them+{-# LANGUAGE CPP #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE DeriveTraversable          #-}+module Language.Haskell.LSP.TH.List where++import qualified Data.Aeson                                 as A+import           Data.Aeson.Types++-- | This data type is used to host a FromJSON instance for the encoding used by+-- elisp, where an empty list shows up as "null"+newtype List a = List [a]+                deriving (Show,Read,Eq,Ord,Monoid,Functor,Foldable,Traversable)++instance (A.ToJSON a) => A.ToJSON (List a) where+  toJSON (List ls) = toJSON ls++instance (A.FromJSON a) => A.FromJSON (List a) where+  parseJSON A.Null = return (List [])+  parseJSON v      = List <$> parseJSON v++#if __GLASGOW_HASKELL__ >= 804+instance Semigroup (List a) where+  (<>) = mappend+#endif
+ src/Language/Haskell/LSP/TH/Location.hs view
@@ -0,0 +1,93 @@+{-# LANGUAGE TemplateHaskell            #-}+module Language.Haskell.LSP.TH.Location where++import           Data.Aeson.TH+import           Language.Haskell.LSP.TH.Constants+import           Language.Haskell.LSP.TH.Uri++-- ---------------------------------------------------------------------++{-+The current protocol is talored for textual documents which content can be+represented as a string. There is currently no support for binary documents.+Positions inside a document (see Position definition below) are expressed as a+zero-based line and character offset. To ensure that both client and server+split the string into the same line representation the protocol specs the+following end of line sequences: '\n', '\r\n' and '\r'.++export const EOL: string[] = ['\n', '\r\n', '\r'];+-}+{-+https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#position++Position in a text document expressed as zero-based line and character offset. A+position is between two characters like an 'insert' cursor in a editor.++interface Position {+    /**+     * Line position in a document (zero-based).+     */+    line: number;++    /**+     * Character offset on a line in a document (zero-based).+     */+    character: number;+}+-}+data Position =+  Position+    { _line      :: Int+    , _character :: Int+    } deriving (Show, Read, Eq, Ord)++deriveJSON lspOptions ''Position++-- ---------------------------------------------------------------------+{-+https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#range++A range in a text document expressed as (zero-based) start and end positions. A+range is comparable to a selection in an editor. Therefore the end position is+exclusive.++interface Range {+    /**+     * The range's start position.+     */+    start: Position;++    /**+     * The range's end position.+     */+    end: Position;+}+-}++data Range =+  Range+    { _start :: Position+    , _end   :: Position+    } deriving (Show, Read, Eq, Ord)++deriveJSON lspOptions ''Range++-- ---------------------------------------------------------------------+{-+https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#location++Represents a location inside a resource, such as a line inside a text file.++interface Location {+    uri: string;+    range: Range;+}+-}++data Location =+  Location+    { _uri   :: Uri+    , _range :: Range+    } deriving (Show, Read, Eq, Ord)++deriveJSON lspOptions ''Location
+ src/Language/Haskell/LSP/TH/Message.hs view
@@ -0,0 +1,417 @@+{-# LANGUAGE DuplicateRecordFields      #-}+{-# LANGUAGE OverloadedStrings          #-}+{-# LANGUAGE TemplateHaskell            #-}+module Language.Haskell.LSP.TH.Message where++import qualified Data.Aeson                                 as A+import           Data.Aeson.TH+import           Data.Aeson.Types+import           Data.Hashable+-- For <= 8.2.2+import           Data.Monoid                                ((<>))+import           Data.Text                                  (Text)+import qualified Data.Text                                  as T+import           Language.Haskell.LSP.TH.Constants+++-- | Id used for a request, Can be either a String or an Int+data LspId = IdInt Int | IdString Text+            deriving (Show,Read,Eq,Ord)++instance A.ToJSON LspId where+  toJSON (IdInt i)    = toJSON i+  toJSON (IdString s) = toJSON s++instance A.FromJSON LspId where+  parseJSON v@(A.Number _) = IdInt <$> parseJSON v+  parseJSON  (A.String  s) = return (IdString s)+  parseJSON _              = mempty++instance Hashable LspId where+  hashWithSalt salt (IdInt i) = hashWithSalt salt i+  hashWithSalt salt (IdString s) = hashWithSalt salt s++-- ---------------------------------------------------------------------++-- | Id used for a response, Can be either a String or an Int, or Null. If a+-- request doesn't provide a result value the receiver of a request still needs+-- to return a response message to conform to the JSON RPC specification. The+-- result property of the ResponseMessage should be set to null in this case to+-- signal a successful request.+data LspIdRsp = IdRspInt Int | IdRspString Text | IdRspNull+            deriving (Show,Read,Eq)++instance A.ToJSON LspIdRsp where+  toJSON (IdRspInt i)    = toJSON i+  toJSON (IdRspString s) = toJSON s+  toJSON IdRspNull       = A.Null++instance A.FromJSON LspIdRsp where+  parseJSON v@(A.Number _) = IdRspInt <$> parseJSON v+  parseJSON  (A.String  s) = return $ IdRspString s+  parseJSON  A.Null        = return IdRspNull+  parseJSON _              = mempty++instance Hashable LspIdRsp where+  hashWithSalt salt (IdRspInt i) = hashWithSalt salt i+  hashWithSalt salt (IdRspString s) = hashWithSalt salt s+  hashWithSalt _ IdRspNull = 0++-- | Converts an LspId to its LspIdRsp counterpart.+responseId :: LspId -> LspIdRsp+responseId (IdInt    i) = IdRspInt i+responseId (IdString s) = IdRspString s++-- | Converts an LspIdRsp to its LspId counterpart. +requestId :: LspIdRsp -> LspId+requestId (IdRspInt    i) = IdInt i+requestId (IdRspString s) = IdString s+requestId IdRspNull       = error "Null response id"++-- ---------------------------------------------------------------------++-- Client Methods+data ClientMethod =+ -- General+   Initialize+ | Initialized+ | Shutdown+ | Exit+ | CancelRequest+ -- Workspace+ | WorkspaceDidChangeConfiguration+ | WorkspaceDidChangeWatchedFiles+ | WorkspaceSymbol+ | WorkspaceExecuteCommand+ -- Document+ | TextDocumentDidOpen+ | TextDocumentDidChange+ | TextDocumentWillSave+ | TextDocumentWillSaveWaitUntil+ | TextDocumentDidSave+ | TextDocumentDidClose+ | TextDocumentCompletion+ | CompletionItemResolve+ | TextDocumentHover+ | TextDocumentSignatureHelp+ | TextDocumentReferences+ | TextDocumentDocumentHighlight+ | TextDocumentDocumentSymbol+ | TextDocumentFormatting+ | TextDocumentRangeFormatting+ | TextDocumentOnTypeFormatting+ | TextDocumentDefinition+ | TextDocumentCodeAction+ | TextDocumentCodeLens+ | CodeLensResolve+ | TextDocumentDocumentLink+ | DocumentLinkResolve+ | TextDocumentRename+ -- Messages of the form $/message+ -- Implementation Dependent, can be ignored+ | Misc Text+   deriving (Eq,Ord,Read,Show)++instance A.FromJSON ClientMethod where+  -- General+  parseJSON (A.String "initialize")                       = return Initialize+  parseJSON (A.String "initialized")                      = return Initialized+  parseJSON (A.String "shutdown")                         = return Shutdown+  parseJSON (A.String "exit")                             = return Exit+  parseJSON (A.String "$/cancelRequest")                  = return CancelRequest+ -- Workspace+  parseJSON (A.String "workspace/didChangeConfiguration") = return WorkspaceDidChangeConfiguration+  parseJSON (A.String "workspace/didChangeWatchedFiles")  = return WorkspaceDidChangeWatchedFiles+  parseJSON (A.String "workspace/symbol")                 = return WorkspaceSymbol+  parseJSON (A.String "workspace/executeCommand")         = return WorkspaceExecuteCommand+ -- Document+  parseJSON (A.String "textDocument/didOpen")             = return TextDocumentDidOpen+  parseJSON (A.String "textDocument/didChange")           = return TextDocumentDidChange+  parseJSON (A.String "textDocument/willSave")            = return TextDocumentWillSave+  parseJSON (A.String "textDocument/willSaveWaitUntil")   = return TextDocumentWillSaveWaitUntil+  parseJSON (A.String "textDocument/didSave")             = return TextDocumentDidSave+  parseJSON (A.String "textDocument/didClose")            = return TextDocumentDidClose+  parseJSON (A.String "textDocument/completion")          = return TextDocumentCompletion+  parseJSON (A.String "completionItem/resolve")           = return CompletionItemResolve+  parseJSON (A.String "textDocument/hover")               = return TextDocumentHover+  parseJSON (A.String "textDocument/signatureHelp")       = return TextDocumentSignatureHelp+  parseJSON (A.String "textDocument/references")          = return TextDocumentReferences+  parseJSON (A.String "textDocument/documentHighlight")   = return TextDocumentDocumentHighlight+  parseJSON (A.String "textDocument/documentSymbol")      = return TextDocumentDocumentSymbol+  parseJSON (A.String "textDocument/formatting")          = return TextDocumentFormatting+  parseJSON (A.String "textDocument/rangeFormatting")     = return TextDocumentRangeFormatting+  parseJSON (A.String "textDocument/onTypeFormatting")    = return TextDocumentOnTypeFormatting+  parseJSON (A.String "textDocument/definition")          = return TextDocumentDefinition+  parseJSON (A.String "textDocument/codeAction")          = return TextDocumentCodeAction+  parseJSON (A.String "textDocument/codeLens")            = return TextDocumentCodeLens+  parseJSON (A.String "codeLens/resolve")                 = return CodeLensResolve+  parseJSON (A.String "textDocument/documentLink")        = return TextDocumentDocumentLink+  parseJSON (A.String "documentLink/resolve")             = return DocumentLinkResolve+  parseJSON (A.String "textDocument/rename")              = return TextDocumentRename+  parseJSON (A.String x)                                  = if T.isPrefixOf "$/" x+                                                               then return $ Misc (T.drop 2 x)+                                                            else mempty+  parseJSON _                                             = mempty++instance A.ToJSON ClientMethod where+  -- General+  toJSON Initialize                      = A.String "initialize"+  toJSON Initialized                     = A.String "initialized"+  toJSON Shutdown                        = A.String "shutdown"+  toJSON Exit                            = A.String "exit"+  toJSON CancelRequest                   = A.String "$/cancelRequest"+  -- Workspace+  toJSON WorkspaceDidChangeConfiguration = A.String "workspace/didChangeConfiguration"+  toJSON WorkspaceDidChangeWatchedFiles  = A.String "workspace/didChangeWatchedFiles"+  toJSON WorkspaceSymbol                 = A.String "workspace/symbol"+  toJSON WorkspaceExecuteCommand         = A.String "workspace/executeCommand"+  -- Document+  toJSON TextDocumentDidOpen             = A.String "textDocument/didOpen"+  toJSON TextDocumentDidChange           = A.String "textDocument/didChange"+  toJSON TextDocumentWillSave            = A.String "textDocument/willSave"+  toJSON TextDocumentWillSaveWaitUntil   = A.String "textDocument/willSaveWaitUntil"+  toJSON TextDocumentDidSave             = A.String "textDocument/didSave"+  toJSON TextDocumentDidClose            = A.String "textDocument/didClose"+  toJSON TextDocumentCompletion          = A.String "textDocument/completion"+  toJSON CompletionItemResolve           = A.String "completionItem/resolve"+  toJSON TextDocumentHover               = A.String "textDocument/hover"+  toJSON TextDocumentSignatureHelp       = A.String "textDocument/signatureHelp"+  toJSON TextDocumentReferences          = A.String "textDocument/references"+  toJSON TextDocumentDocumentHighlight   = A.String "textDocument/documentHighlight"+  toJSON TextDocumentDocumentSymbol      = A.String "textDocument/documentSymbol"+  toJSON TextDocumentFormatting          = A.String "textDocument/formatting"+  toJSON TextDocumentRangeFormatting     = A.String "textDocument/rangeFormatting"+  toJSON TextDocumentOnTypeFormatting    = A.String "textDocument/onTypeFormatting"+  toJSON TextDocumentDefinition          = A.String "textDocument/definition"+  toJSON TextDocumentCodeAction          = A.String "textDocument/codeAction"+  toJSON TextDocumentCodeLens            = A.String "textDocument/codeLens"+  toJSON CodeLensResolve                 = A.String "codeLens/resolve"+  toJSON TextDocumentRename              = A.String "textDocument/rename"+  toJSON TextDocumentDocumentLink        = A.String "textDocument/documentLink"+  toJSON DocumentLinkResolve             = A.String "documentLink/resolve"+  toJSON (Misc xs)                       = A.String $ "$/" <> xs++data ServerMethod =+  -- Window+    WindowShowMessage+  | WindowShowMessageRequest+  | WindowLogMessage+  | TelemetryEvent+  -- Client+  | ClientRegisterCapability+  | ClientUnregisterCapability+  -- Workspace+  | WorkspaceApplyEdit+  -- Document+  | TextDocumentPublishDiagnostics+  -- Cancelling+  | CancelRequestServer  +   deriving (Eq,Ord,Read,Show)++instance A.FromJSON ServerMethod where+  -- Window+  parseJSON (A.String "window/showMessage")              = return WindowShowMessage+  parseJSON (A.String "window/showMessageRequest")       = return WindowShowMessageRequest+  parseJSON (A.String "window/logMessage")               = return WindowLogMessage+  parseJSON (A.String "telemetry/event")                 = return TelemetryEvent+  -- Client+  parseJSON (A.String "client/registerCapability")       = return ClientRegisterCapability+  parseJSON (A.String "client/unregisterCapability")     = return ClientUnregisterCapability+  -- Workspace+  parseJSON (A.String "workspace/applyEdit")             = return WorkspaceApplyEdit+  -- Document+  parseJSON (A.String "textDocument/publishDiagnostics") = return TextDocumentPublishDiagnostics+  -- Cancelling+  parseJSON (A.String "$/cancelRequest")                 = return CancelRequestServer+  parseJSON _                                            = mempty++instance A.ToJSON ServerMethod where+  -- Window+  toJSON WindowShowMessage = A.String "window/showMessage"+  toJSON WindowShowMessageRequest = A.String "window/showMessageRequest"+  toJSON WindowLogMessage = A.String "window/logMessage"+  toJSON TelemetryEvent = A.String "telemetry/event"+  -- Client+  toJSON ClientRegisterCapability = A.String "client/registerCapability"+  toJSON ClientUnregisterCapability = A.String "client/unregisterCapability"+  -- Workspace+  toJSON WorkspaceApplyEdit = A.String "workspace/applyEdit"+  -- Document+  toJSON TextDocumentPublishDiagnostics = A.String "textDocument/publishDiagnostics"+  -- Cancelling+  toJSON CancelRequestServer = A.String "$/cancelRequest"++data RequestMessage m req resp =+  RequestMessage+    { _jsonrpc :: Text+    , _id      :: LspId+    , _method  :: m+    , _params  :: req+    } deriving (Read,Show,Eq)++deriveJSON lspOptions ''RequestMessage++-- ---------------------------------------------------------------------+{-+interface ResponseError<D> {+    /**+     * A number indicating the error type that occurred.+     */+    code: number;++    /**+     * A string providing a short description of the error.+     */+    message: string;++    /**+     * A Primitive or Structured value that contains additional+     * information about the error. Can be omitted.+     */+    data?: D;+}++export namespace ErrorCodes {+        // Defined by JSON RPC+        export const ParseError: number = -32700;+        export const InvalidRequest: number = -32600;+        export const MethodNotFound: number = -32601;+        export const InvalidParams: number = -32602;+        export const InternalError: number = -32603;+        export const serverErrorStart: number = -32099;+        export const serverErrorEnd: number = -32000;+        export const ServerNotInitialized: number = -32002;+        export const UnknownErrorCode: number = -32001;++        // Defined by the protocol.+        export const RequestCancelled: number = -32800;+}+-}++data ErrorCode = ParseError+               | InvalidRequest+               | MethodNotFound+               | InvalidParams+               | InternalError+               | ServerErrorStart+               | ServerErrorEnd+               | ServerNotInitialized+               | UnknownErrorCode+               | RequestCancelled+               -- ^ Note: server error codes are reserved from -32099 to -32000+               deriving (Read,Show,Eq)++instance A.ToJSON ErrorCode where+  toJSON ParseError           = A.Number (-32700)+  toJSON InvalidRequest       = A.Number (-32600)+  toJSON MethodNotFound       = A.Number (-32601)+  toJSON InvalidParams        = A.Number (-32602)+  toJSON InternalError        = A.Number (-32603)+  toJSON ServerErrorStart     = A.Number (-32099)+  toJSON ServerErrorEnd       = A.Number (-32000)+  toJSON ServerNotInitialized = A.Number (-32002)+  toJSON UnknownErrorCode     = A.Number (-32001)+  toJSON RequestCancelled     = A.Number (-32800)++instance A.FromJSON ErrorCode where+  parseJSON (A.Number (-32700)) = pure ParseError+  parseJSON (A.Number (-32600)) = pure InvalidRequest+  parseJSON (A.Number (-32601)) = pure MethodNotFound+  parseJSON (A.Number (-32602)) = pure InvalidParams+  parseJSON (A.Number (-32603)) = pure InternalError+  parseJSON (A.Number (-32099)) = pure ServerErrorStart+  parseJSON (A.Number (-32000)) = pure ServerErrorEnd+  parseJSON (A.Number (-32002)) = pure ServerNotInitialized+  parseJSON (A.Number (-32001)) = pure UnknownErrorCode+  parseJSON (A.Number (-32800)) = pure RequestCancelled+  parseJSON _                   = mempty++-- -------------------------------------++data ResponseError =+  ResponseError+    { _code    :: ErrorCode+    , _message :: Text+    , _xdata   :: Maybe A.Value+    } deriving (Read,Show,Eq)++deriveJSON lspOptions{ fieldLabelModifier = customModifier } ''ResponseError++-- ---------------------------------------------------------------------++data ResponseMessage a =+  ResponseMessage+    { _jsonrpc :: Text+    , _id      :: LspIdRsp+    , _result  :: Maybe a+    , _error   :: Maybe ResponseError+    } deriving (Read,Show,Eq)++deriveJSON lspOptions ''ResponseMessage++type ErrorResponse = ResponseMessage ()++-- ---------------------------------------------------------------------++type BareResponseMessage = ResponseMessage A.Value++-- ---------------------------------------------------------------------+{-+$ Notifications and Requests++Notification and requests ids starting with '$/' are messages which are protocol+implementation dependent and might not be implementable in all clients or+servers. For example if the server implementation uses a single threaded+synchronous programming language then there is little a server can do to react+to a '$/cancelRequest'. If a server or client receives notifications or requests+starting with '$/' it is free to ignore them if they are unknown.+-}++data NotificationMessage m a =+  NotificationMessage+    { _jsonrpc :: Text+    , _method  :: m+    , _params  :: a+    } deriving (Read,Show,Eq)++deriveJSON lspOptions ''NotificationMessage++-- ---------------------------------------------------------------------+{-+Cancellation Support++https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#cancellation-support++    New: The base protocol now offers support for request cancellation. To+    cancel a request, a notification message with the following properties is+    sent:++Notification:++    method: '$/cancelRequest'+    params: CancelParams defined as follows:++interface CancelParams {+    /**+     * The request id to cancel.+     */+    id: number | string;+}++A request that got canceled still needs to return from the server and send a+response back. It can not be left open / hanging. This is in line with the JSON+RPC protocol that requires that every request sends a response back. In addition+it allows for returning partial results on cancel.+-}++data CancelParams =+  CancelParams+    { _id :: LspId+    } deriving (Read,Show,Eq)++deriveJSON lspOptions ''CancelParams++type CancelNotification = NotificationMessage ClientMethod CancelParams+type CancelNotificationServer = NotificationMessage ServerMethod CancelParams++-- ---------------------------------------------------------------------
+ src/Language/Haskell/LSP/TH/MessageFuncs.hs view
@@ -0,0 +1,310 @@+{-# LANGUAGE GADTs               #-}+{-# LANGUAGE MultiWayIf          #-}+{-# LANGUAGE BinaryLiterals      #-}+{-# LANGUAGE OverloadedStrings   #-}+{-# LANGUAGE RankNTypes          #-}+{-# LANGUAGE ScopedTypeVariables #-}++module Language.Haskell.LSP.TH.MessageFuncs (+  -- * General+    fmClientInitializeRequest+  , fmClientInitializedNotification+  , fmClientShutdownRequest+  , fmClientExitNotification+  , fmClientCancelNotification++  -- * Window+  , fmServerShowMessageNotification+  , fmServerShowMessageRequest+  , fmServerLogMessageNotification+  , fmServerTelemetryNotification++  -- * Client+  , fmServerRegisterCapabilityRequest+  , fmServerUnregisterCapabilityRequest++  -- * Workspace+  , fmClientDidChangeConfigurationNotification+  , fmClientDidChangeWatchedFilesNotification+  , fmClientWorkspaceSymbolRequest+  , fmClientExecuteCommandRequest+  , fmServerApplyWorkspaceEditRequest++  -- * Document+  , fmServerPublishDiagnosticsNotification+  , fmClientDidOpenTextDocumentNotification+  , fmClientDidChangeTextDocumentNotification+  , fmClientWillSaveTextDocumentNotification+  , fmClientWillSaveWaitUntilRequest+  , fmClientDidSaveTextDocumentNotification+  , fmClientDidCloseTextDocumentNotification+  , fmClientCompletionRequest+  , fmClientCompletionItemResolveRequest+  , fmClientHoverRequest+  , fmClientSignatureHelpRequest+  , fmClientReferencesRequest+  , fmClientDocumentHighlightRequest+  , fmClientDocumentSymbolRequest+  , fmClientDocumentFormattingRequest+  , fmClientDocumentRangeFormattingRequest+  , fmClientDocumentOnTypeFormattingRequest+  , fmClientDefinitionRequest+  , fmClientCodeActionRequest+  , fmClientCodeLensRequest+  , fmClientCodeLensResolveRequest+  , fmClientDocumentLinkRequest+  , fmClientDocumentLinkResolveRequest+  , fmClientRenameRequest+  ) where++import qualified Data.Aeson as J+import           Data.Text ( Text )+import qualified Language.Haskell.LSP.TH.DataTypesJSON      as J++-- ---------------------------------------------------------------------+{-# ANN module ("HLint: ignore Eta reduce"         :: String) #-}+{-# ANN module ("HLint: ignore Redundant do"       :: String) #-}+{-# ANN module ("HLint: ignore Reduce duplication" :: String) #-}+-- ---------------------------------------------------------------------++-- ----------------------------------------------------------------------+-- General+-- ----------------------------------------------------------------------++-- * :leftwards_arrow_with_hook: [initialize](#initialize)++fmClientInitializeRequest :: J.LspId -> J.InitializeParams -> J.InitializeRequest+fmClientInitializeRequest rid params+  = J.RequestMessage  "2.0" rid J.Initialize params++-- ----------------------------------------------------------------------+-- * **New** :arrow_right: [initialized](#initialized)++-- | From 3.0+fmClientInitializedNotification :: J.InitializedNotification+fmClientInitializedNotification = J.NotificationMessage "2.0" J.Initialized Nothing++-- ----------------------------------------------------------------------+-- * :leftwards_arrow_with_hook: [shutdown](#shutdown)++fmClientShutdownRequest :: J.LspId -> Maybe J.Value -> J.ShutdownRequest+fmClientShutdownRequest rid params+  = J.RequestMessage  "2.0" rid J.Shutdown params++-- ----------------------------------------------------------------------+-- * :arrow_right: [exit](#exit)++fmClientExitNotification :: J.ExitNotification+fmClientExitNotification = J.NotificationMessage "2.0" J.Exit Nothing++-- ----------------------------------------------------------------------+-- * :arrow_right: [$/cancelRequest](#cancelRequest)++fmClientCancelNotification :: J.LspId -> J.CancelNotification+fmClientCancelNotification idToCancel+  = J.NotificationMessage "2.0" J.CancelRequest  (J.CancelParams idToCancel)++-- ----------------------------------------------------------------------+-- Window+-- ----------------------------------------------------------------------++-- * :arrow_left: [window/showMessage](#window_showMessage)++fmServerShowMessageNotification :: J.MessageType -> Text -> J.ShowMessageNotification+fmServerShowMessageNotification mt msg+  = J.NotificationMessage "2.0" J.WindowShowMessage (J.ShowMessageParams mt msg)++-- ----------------------------------------------------------------------+-- * :arrow_right_hook: [window/showMessageRequest](#window_showMessageRequest)++fmServerShowMessageRequest :: J.LspId -> J.ShowMessageRequestParams -> J.ShowMessageRequest+fmServerShowMessageRequest rid params+  = J.RequestMessage  "2.0" rid J.WindowShowMessageRequest params++-- ----------------------------------------------------------------------+-- * :arrow_left: [window/logMessage](#window_logMessage)++fmServerLogMessageNotification :: J.MessageType -> Text -> J.LogMessageNotification+fmServerLogMessageNotification mt msg+  = J.NotificationMessage "2.0" J.WindowLogMessage (J.LogMessageParams mt msg)++-- ----------------------------------------------------------------------+-- * :arrow_left: [telemetry/event](#telemetry_event)++fmServerTelemetryNotification :: J.Value  -> J.TelemetryNotification+fmServerTelemetryNotification params+  = J.NotificationMessage "2.0" J.TelemetryEvent params++-- ----------------------------------------------------------------------+--  Client+-- ----------------------------------------------------------------------++-- * :arrow_right_hook: [client/registerCapability](#client_registerCapability)+-- | from 3.0+fmServerRegisterCapabilityRequest :: J.LspId -> J.RegistrationParams -> J.RegisterCapabilityRequest+fmServerRegisterCapabilityRequest rid params+  = J.RequestMessage  "2.0" rid J.ClientRegisterCapability params++-- * :arrow_right_hook: [client/unregisterCapability](#client_unregisterCapability)+-- | from 3.0+fmServerUnregisterCapabilityRequest :: J.LspId -> J.UnregistrationParams -> J.UnregisterCapabilityRequest+fmServerUnregisterCapabilityRequest rid params+  = J.RequestMessage  "2.0" rid J.ClientUnregisterCapability params++-- ----------------------------------------------------------------------+-- Workspace+-- ----------------------------------------------------------------------++-- * :arrow_right: [workspace/didChangeConfiguration](#workspace_didChangeConfiguration)+fmClientDidChangeConfigurationNotification :: J.DidChangeConfigurationParams -> J.DidChangeConfigurationNotification+fmClientDidChangeConfigurationNotification params+  = J.NotificationMessage "2.0" J.WorkspaceDidChangeConfiguration params++-- * :arrow_right: [workspace/didChangeWatchedFiles](#workspace_didChangeWatchedFiles)+fmClientDidChangeWatchedFilesNotification :: J.DidChangeWatchedFilesParams -> J.DidChangeWatchedFilesNotification+fmClientDidChangeWatchedFilesNotification params+  = J.NotificationMessage "2.0" J.WorkspaceDidChangeWatchedFiles params++-- * :leftwards_arrow_with_hook: [workspace/symbol](#workspace_symbol)+fmClientWorkspaceSymbolRequest :: J.LspId -> J.WorkspaceSymbolParams -> J.WorkspaceSymbolRequest+fmClientWorkspaceSymbolRequest rid params+  = J.RequestMessage  "2.0" rid J.WorkspaceSymbol params++-- * **New** :leftwards_arrow_with_hook: [workspace/executeCommand](#workspace_executeCommand)+-- | From 3.0+fmClientExecuteCommandRequest :: J.LspId -> J.ExecuteCommandParams -> J.ExecuteCommandRequest+fmClientExecuteCommandRequest rid params+  = J.RequestMessage  "2.0" rid J.WorkspaceExecuteCommand params++-- * **New** :arrow_right_hook: [workspace/applyEdit](#workspace_applyEdit)+-- | From 3.0+fmServerApplyWorkspaceEditRequest :: J.LspId -> J.ApplyWorkspaceEditParams -> J.ApplyWorkspaceEditRequest+fmServerApplyWorkspaceEditRequest rid params+  = J.RequestMessage  "2.0" rid J.WorkspaceApplyEdit params++-- ----------------------------------------------------------------------+ -- Document+-- ----------------------------------------------------------------------++-- * :arrow_left: [textDocument/publishDiagnostics](#textDocument_publishDiagnostics)+fmServerPublishDiagnosticsNotification :: J.PublishDiagnosticsParams -> J.PublishDiagnosticsNotification+fmServerPublishDiagnosticsNotification params+  = J.NotificationMessage "2.0" J.TextDocumentPublishDiagnostics params++-- * :arrow_right: [textDocument/didOpen](#textDocument_didOpen)+fmClientDidOpenTextDocumentNotification :: J.DidOpenTextDocumentParams -> J.DidOpenTextDocumentNotification+fmClientDidOpenTextDocumentNotification params+  = J.NotificationMessage "2.0" J.TextDocumentDidOpen params++-- * :arrow_right: [textDocument/didChange](#textDocument_didChange)+fmClientDidChangeTextDocumentNotification :: J.DidChangeTextDocumentParams -> J.DidChangeTextDocumentNotification+fmClientDidChangeTextDocumentNotification params+  = J.NotificationMessage "2.0" J.TextDocumentDidChange params++-- * :arrow_right: [textDocument/willSave](#textDocument_willSave)+fmClientWillSaveTextDocumentNotification :: J.WillSaveTextDocumentParams -> J.WillSaveTextDocumentNotification+fmClientWillSaveTextDocumentNotification params+  = J.NotificationMessage "2.0" J.TextDocumentWillSave params++-- * **New** :leftwards_arrow_with_hook: [textDocument/willSaveWaitUntil](#textDocument_willSaveWaitUntil)+-- | From 3.0+fmClientWillSaveWaitUntilRequest :: J.LspId -> J.WillSaveTextDocumentParams -> J.WillSaveWaitUntilTextDocumentRequest+fmClientWillSaveWaitUntilRequest rid params+  = J.RequestMessage "2.0" rid J.TextDocumentWillSaveWaitUntil params++-- * **New** :arrow_right: [textDocument/didSave](#textDocument_didSave)+-- | 3.0+fmClientDidSaveTextDocumentNotification :: J.DidSaveTextDocumentParams -> J.DidSaveTextDocumentNotification+fmClientDidSaveTextDocumentNotification params+  = J.NotificationMessage "2.0" J.TextDocumentDidSave params++-- * :arrow_right: [textDocument/didClose](#textDocument_didClose)+fmClientDidCloseTextDocumentNotification :: J.DidCloseTextDocumentParams -> J.DidCloseTextDocumentNotification+fmClientDidCloseTextDocumentNotification params+  = J.NotificationMessage "2.0" J.TextDocumentDidClose params++-- * :leftwards_arrow_with_hook: [textDocument/completion](#textDocument_completion)+fmClientCompletionRequest :: J.LspId -> J.TextDocumentPositionParams -> J.CompletionRequest+fmClientCompletionRequest rid params+  = J.RequestMessage "2.0" rid J.TextDocumentCompletion params++-- * :leftwards_arrow_with_hook: [completionItem/resolve](#completionItem_resolve)+fmClientCompletionItemResolveRequest :: J.LspId -> J.CompletionItem -> J.CompletionItemResolveRequest+fmClientCompletionItemResolveRequest rid params+  = J.RequestMessage "2.0" rid J.CompletionItemResolve params++-- * :leftwards_arrow_with_hook: [textDocument/hover](#textDocument_hover)+fmClientHoverRequest :: J.LspId -> J.TextDocumentPositionParams -> J.HoverRequest+fmClientHoverRequest rid params+  = J.RequestMessage "2.0" rid J.TextDocumentHover params++-- * :leftwards_arrow_with_hook: [textDocument/signatureHelp](#textDocument_signatureHelp)+fmClientSignatureHelpRequest :: J.LspId -> J.TextDocumentPositionParams -> J.SignatureHelpRequest+fmClientSignatureHelpRequest rid params+  = J.RequestMessage "2.0" rid J.TextDocumentSignatureHelp params++-- * :leftwards_arrow_with_hook: [textDocument/references](#textDocument_references)+fmClientReferencesRequest :: J.LspId -> J.ReferenceParams -> J.ReferencesRequest+fmClientReferencesRequest rid params+  = J.RequestMessage "2.0" rid J.TextDocumentReferences params++-- * :leftwards_arrow_with_hook: [textDocument/documentHighlight](#textDocument_documentHighlight)+fmClientDocumentHighlightRequest :: J.LspId -> J.TextDocumentPositionParams -> J.DocumentHighlightRequest+fmClientDocumentHighlightRequest rid params+  = J.RequestMessage "2.0" rid J.TextDocumentDocumentHighlight params++-- * :leftwards_arrow_with_hook: [textDocument/documentSymbol](#textDocument_documentSymbol)+fmClientDocumentSymbolRequest :: J.LspId -> J.DocumentSymbolParams -> J.DocumentSymbolRequest+fmClientDocumentSymbolRequest rid params+  = J.RequestMessage "2.0" rid J.TextDocumentDocumentSymbol params++-- * :leftwards_arrow_with_hook: [textDocument/formatting](#textDocument_formatting)+fmClientDocumentFormattingRequest :: J.LspId -> J.DocumentFormattingParams -> J.DocumentFormattingRequest+fmClientDocumentFormattingRequest rid params+  = J.RequestMessage "2.0" rid J.TextDocumentFormatting params++-- * :leftwards_arrow_with_hook: [textDocument/rangeFormatting](#textDocument_rangeFormatting)+fmClientDocumentRangeFormattingRequest :: J.LspId -> J.DocumentRangeFormattingParams -> J.DocumentRangeFormattingRequest+fmClientDocumentRangeFormattingRequest rid params+  = J.RequestMessage "2.0" rid J.TextDocumentRangeFormatting params++-- * :leftwards_arrow_with_hook: [textDocument/onTypeFormatting](#textDocument_onTypeFormatting)+fmClientDocumentOnTypeFormattingRequest :: J.LspId -> J.DocumentOnTypeFormattingParams -> J.DocumentOnTypeFormattingRequest+fmClientDocumentOnTypeFormattingRequest rid params+  = J.RequestMessage "2.0" rid J.TextDocumentOnTypeFormatting params++-- * :leftwards_arrow_with_hook: [textDocument/definition](#textDocument_definition)+fmClientDefinitionRequest :: J.LspId -> J.TextDocumentPositionParams -> J.DefinitionRequest+fmClientDefinitionRequest rid params+  = J.RequestMessage "2.0" rid J.TextDocumentDefinition params++-- * :leftwards_arrow_with_hook: [textDocument/codeAction](#textDocument_codeAction)+fmClientCodeActionRequest :: J.LspId -> J.CodeActionParams -> J.CodeActionRequest+fmClientCodeActionRequest rid params+  = J.RequestMessage "2.0" rid J.TextDocumentCodeAction params++-- * :leftwards_arrow_with_hook: [textDocument/codeLens](#textDocument_codeLens)+fmClientCodeLensRequest :: J.LspId -> J.CodeLensParams -> J.CodeLensRequest+fmClientCodeLensRequest rid params+  = J.RequestMessage "2.0" rid J.TextDocumentCodeLens params++-- * :leftwards_arrow_with_hook: [codeLens/resolve](#codeLens_resolve)+fmClientCodeLensResolveRequest :: J.LspId -> J.CodeLens -> J.CodeLensResolveRequest+fmClientCodeLensResolveRequest rid params+  = J.RequestMessage "2.0" rid J.CodeLensResolve params++-- * :leftwards_arrow_with_hook: [textDocument/documentLink](#textDocument_documentLink)+fmClientDocumentLinkRequest :: J.LspId -> J.DocumentLinkParams -> J.DocumentLinkRequest+fmClientDocumentLinkRequest rid params+  = J.RequestMessage "2.0" rid J.TextDocumentDocumentLink params++-- * :leftwards_arrow_with_hook: [documentLink/resolve](#documentLink_resolve)+fmClientDocumentLinkResolveRequest :: J.LspId -> J.DocumentLink -> J.DocumentLinkResolveRequest+fmClientDocumentLinkResolveRequest rid params+  = J.RequestMessage "2.0" rid J.DocumentLinkResolve params++-- * :leftwards_arrow_with_hook: [textDocument/rename](#textDocument_rename)+fmClientRenameRequest :: J.LspId -> J.RenameParams -> J.RenameRequest+fmClientRenameRequest rid params+  = J.RequestMessage "2.0" rid J.TextDocumentRename params+
− src/Language/Haskell/LSP/TH/Messages.hs
@@ -1,311 +0,0 @@-{-# LANGUAGE GADTs               #-}-{-# LANGUAGE LambdaCase          #-}-{-# LANGUAGE MultiWayIf          #-}-{-# LANGUAGE BinaryLiterals      #-}-{-# LANGUAGE OverloadedStrings   #-}-{-# LANGUAGE RankNTypes          #-}-{-# LANGUAGE ScopedTypeVariables #-}--module Language.Haskell.LSP.TH.Messages (-  -- * General-    fmClientInitializeRequest-  , fmClientInitializedNotification-  , fmClientShutdownRequest-  , fmClientExitNotification-  , fmClientCancelNotification--  -- * Window-  , fmServerShowMessageNotification-  , fmServerShowMessageRequest-  , fmServerLogMessageNotification-  , fmServerTelemetryNotification--  -- * Client-  , fmServerRegisterCapabilityRequest-  , fmServerUnregisterCapabilityRequest--  -- * Workspace-  , fmClientDidChangeConfigurationNotification-  , fmClientDidChangeWatchedFilesNotification-  , fmClientWorkspaceSymbolRequest-  , fmClientExecuteCommandRequest-  , fmServerApplyWorkspaceEditRequest--  -- * Document-  , fmServerPublishDiagnosticsNotification-  , fmClientDidOpenTextDocumentNotification-  , fmClientDidChangeTextDocumentNotification-  , fmClientWillSaveTextDocumentNotification-  , fmClientWillSaveWaitUntilRequest-  , fmClientDidSaveTextDocumentNotification-  , fmClientDidCloseTextDocumentNotification-  , fmClientCompletionRequest-  , fmClientCompletionItemResolveRequest-  , fmClientHoverRequest-  , fmClientSignatureHelpRequest-  , fmClientReferencesRequest-  , fmClientDocumentHighlightRequest-  , fmClientDocumentSymbolRequest-  , fmClientDocumentFormattingRequest-  , fmClientDocumentRangeFormattingRequest-  , fmClientDocumentOnTypeFormattingRequest-  , fmClientDefinitionRequest-  , fmClientCodeActionRequest-  , fmClientCodeLensRequest-  , fmClientCodeLensResolveRequest-  , fmClientDocumentLinkRequest-  , fmClientDocumentLinkResolveRequest-  , fmClientRenameRequest-  ) where--import qualified Data.Aeson as J-import           Data.Text ( Text )-import qualified Language.Haskell.LSP.TH.DataTypesJSON      as J---- ----------------------------------------------------------------------{-# ANN module ("HLint: ignore Eta reduce"         :: String) #-}-{-# ANN module ("HLint: ignore Redundant do"       :: String) #-}-{-# ANN module ("HLint: ignore Reduce duplication" :: String) #-}--- ------------------------------------------------------------------------- ------------------------------------------------------------------------- General--- -------------------------------------------------------------------------- * :leftwards_arrow_with_hook: [initialize](#initialize)--fmClientInitializeRequest :: J.LspId -> J.InitializeParams -> J.InitializeRequest-fmClientInitializeRequest rid params-  = J.RequestMessage  "2.0" rid J.Initialize params---- ------------------------------------------------------------------------- * **New** :arrow_right: [initialized](#initialized)---- | From 3.0-fmClientInitializedNotification :: J.InitializedNotification-fmClientInitializedNotification = J.NotificationMessage "2.0" J.Initialized Nothing---- ------------------------------------------------------------------------- * :leftwards_arrow_with_hook: [shutdown](#shutdown)--fmClientShutdownRequest :: J.LspId -> Maybe J.Value -> J.ShutdownRequest-fmClientShutdownRequest rid params-  = J.RequestMessage  "2.0" rid J.Shutdown params---- ------------------------------------------------------------------------- * :arrow_right: [exit](#exit)--fmClientExitNotification :: J.ExitNotification-fmClientExitNotification = J.NotificationMessage "2.0" J.Exit Nothing---- ------------------------------------------------------------------------- * :arrow_right: [$/cancelRequest](#cancelRequest)--fmClientCancelNotification :: J.LspId -> J.CancelNotification-fmClientCancelNotification idToCancel-  = J.NotificationMessage "2.0" J.CancelRequest  (J.CancelParams idToCancel)---- ------------------------------------------------------------------------- Window--- -------------------------------------------------------------------------- * :arrow_left: [window/showMessage](#window_showMessage)--fmServerShowMessageNotification :: J.MessageType -> Text -> J.ShowMessageNotification-fmServerShowMessageNotification mt msg-  = J.NotificationMessage "2.0" J.WindowShowMessage (J.ShowMessageParams mt msg)---- ------------------------------------------------------------------------- * :arrow_right_hook: [window/showMessageRequest](#window_showMessageRequest)--fmServerShowMessageRequest :: J.LspId -> J.ShowMessageRequestParams -> J.ShowMessageRequest-fmServerShowMessageRequest rid params-  = J.RequestMessage  "2.0" rid J.WindowShowMessageRequest params---- ------------------------------------------------------------------------- * :arrow_left: [window/logMessage](#window_logMessage)--fmServerLogMessageNotification :: J.MessageType -> Text -> J.LogMessageNotification-fmServerLogMessageNotification mt msg-  = J.NotificationMessage "2.0" J.WindowLogMessage (J.LogMessageParams mt msg)---- ------------------------------------------------------------------------- * :arrow_left: [telemetry/event](#telemetry_event)--fmServerTelemetryNotification :: J.Value  -> J.TelemetryNotification-fmServerTelemetryNotification params-  = J.NotificationMessage "2.0" J.TelemetryEvent params---- -------------------------------------------------------------------------  Client--- -------------------------------------------------------------------------- * :arrow_right_hook: [client/registerCapability](#client_registerCapability)--- | from 3.0-fmServerRegisterCapabilityRequest :: J.LspId -> J.RegistrationParams -> J.RegisterCapabilityRequest-fmServerRegisterCapabilityRequest rid params-  = J.RequestMessage  "2.0" rid J.ClientRegisterCapability params---- * :arrow_right_hook: [client/unregisterCapability](#client_unregisterCapability)--- | from 3.0-fmServerUnregisterCapabilityRequest :: J.LspId -> J.UnregistrationParams -> J.UnregisterCapabilityRequest-fmServerUnregisterCapabilityRequest rid params-  = J.RequestMessage  "2.0" rid J.ClientUnregisterCapability params---- ------------------------------------------------------------------------- Workspace--- -------------------------------------------------------------------------- * :arrow_right: [workspace/didChangeConfiguration](#workspace_didChangeConfiguration)-fmClientDidChangeConfigurationNotification :: J.DidChangeConfigurationParams -> J.DidChangeConfigurationNotification-fmClientDidChangeConfigurationNotification params-  = J.NotificationMessage "2.0" J.WorkspaceDidChangeConfiguration params---- * :arrow_right: [workspace/didChangeWatchedFiles](#workspace_didChangeWatchedFiles)-fmClientDidChangeWatchedFilesNotification :: J.DidChangeWatchedFilesParams -> J.DidChangeWatchedFilesNotification-fmClientDidChangeWatchedFilesNotification params-  = J.NotificationMessage "2.0" J.WorkspaceDidChangeWatchedFiles params---- * :leftwards_arrow_with_hook: [workspace/symbol](#workspace_symbol)-fmClientWorkspaceSymbolRequest :: J.LspId -> J.WorkspaceSymbolParams -> J.WorkspaceSymbolRequest-fmClientWorkspaceSymbolRequest rid params-  = J.RequestMessage  "2.0" rid J.WorkspaceSymbol params---- * **New** :leftwards_arrow_with_hook: [workspace/executeCommand](#workspace_executeCommand)--- | From 3.0-fmClientExecuteCommandRequest :: J.LspId -> J.ExecuteCommandParams -> J.ExecuteCommandRequest-fmClientExecuteCommandRequest rid params-  = J.RequestMessage  "2.0" rid J.WorkspaceExecuteCommand params---- * **New** :arrow_right_hook: [workspace/applyEdit](#workspace_applyEdit)--- | From 3.0-fmServerApplyWorkspaceEditRequest :: J.LspId -> J.ApplyWorkspaceEditParams -> J.ApplyWorkspaceEditRequest-fmServerApplyWorkspaceEditRequest rid params-  = J.RequestMessage  "2.0" rid J.WorkspaceApplyEdit params---- ----------------------------------------------------------------------- -- Document--- -------------------------------------------------------------------------- * :arrow_left: [textDocument/publishDiagnostics](#textDocument_publishDiagnostics)-fmServerPublishDiagnosticsNotification :: J.PublishDiagnosticsParams -> J.PublishDiagnosticsNotification-fmServerPublishDiagnosticsNotification params-  = J.NotificationMessage "2.0" J.TextDocumentPublishDiagnostics params---- * :arrow_right: [textDocument/didOpen](#textDocument_didOpen)-fmClientDidOpenTextDocumentNotification :: J.DidOpenTextDocumentParams -> J.DidOpenTextDocumentNotification-fmClientDidOpenTextDocumentNotification params-  = J.NotificationMessage "2.0" J.TextDocumentDidOpen params---- * :arrow_right: [textDocument/didChange](#textDocument_didChange)-fmClientDidChangeTextDocumentNotification :: J.DidChangeTextDocumentParams -> J.DidChangeTextDocumentNotification-fmClientDidChangeTextDocumentNotification params-  = J.NotificationMessage "2.0" J.TextDocumentDidChange params---- * :arrow_right: [textDocument/willSave](#textDocument_willSave)-fmClientWillSaveTextDocumentNotification :: J.WillSaveTextDocumentParams -> J.WillSaveTextDocumentNotification-fmClientWillSaveTextDocumentNotification params-  = J.NotificationMessage "2.0" J.TextDocumentWillSave params---- * **New** :leftwards_arrow_with_hook: [textDocument/willSaveWaitUntil](#textDocument_willSaveWaitUntil)--- | From 3.0-fmClientWillSaveWaitUntilRequest :: J.LspId -> J.WillSaveTextDocumentParams -> J.WillSaveWaitUntilTextDocumentRequest-fmClientWillSaveWaitUntilRequest rid params-  = J.RequestMessage "2.0" rid J.TextDocumentWillSaveWaitUntil params---- * **New** :arrow_right: [textDocument/didSave](#textDocument_didSave)--- | 3.0-fmClientDidSaveTextDocumentNotification :: J.DidSaveTextDocumentParams -> J.DidSaveTextDocumentNotification-fmClientDidSaveTextDocumentNotification params-  = J.NotificationMessage "2.0" J.TextDocumentDidSave params---- * :arrow_right: [textDocument/didClose](#textDocument_didClose)-fmClientDidCloseTextDocumentNotification :: J.DidCloseTextDocumentParams -> J.DidCloseTextDocumentNotification-fmClientDidCloseTextDocumentNotification params-  = J.NotificationMessage "2.0" J.TextDocumentDidClose params---- * :leftwards_arrow_with_hook: [textDocument/completion](#textDocument_completion)-fmClientCompletionRequest :: J.LspId -> J.TextDocumentPositionParams -> J.CompletionRequest-fmClientCompletionRequest rid params-  = J.RequestMessage "2.0" rid J.TextDocumentCompletion params---- * :leftwards_arrow_with_hook: [completionItem/resolve](#completionItem_resolve)-fmClientCompletionItemResolveRequest :: J.LspId -> J.CompletionItem -> J.CompletionItemResolveRequest-fmClientCompletionItemResolveRequest rid params-  = J.RequestMessage "2.0" rid J.CompletionItemResolve params---- * :leftwards_arrow_with_hook: [textDocument/hover](#textDocument_hover)-fmClientHoverRequest :: J.LspId -> J.TextDocumentPositionParams -> J.HoverRequest-fmClientHoverRequest rid params-  = J.RequestMessage "2.0" rid J.TextDocumentHover params---- * :leftwards_arrow_with_hook: [textDocument/signatureHelp](#textDocument_signatureHelp)-fmClientSignatureHelpRequest :: J.LspId -> J.TextDocumentPositionParams -> J.SignatureHelpRequest-fmClientSignatureHelpRequest rid params-  = J.RequestMessage "2.0" rid J.TextDocumentSignatureHelp params---- * :leftwards_arrow_with_hook: [textDocument/references](#textDocument_references)-fmClientReferencesRequest :: J.LspId -> J.ReferenceParams -> J.ReferencesRequest-fmClientReferencesRequest rid params-  = J.RequestMessage "2.0" rid J.TextDocumentReferences params---- * :leftwards_arrow_with_hook: [textDocument/documentHighlight](#textDocument_documentHighlight)-fmClientDocumentHighlightRequest :: J.LspId -> J.TextDocumentPositionParams -> J.DocumentHighlightRequest-fmClientDocumentHighlightRequest rid params-  = J.RequestMessage "2.0" rid J.TextDocumentDocumentHighlight params---- * :leftwards_arrow_with_hook: [textDocument/documentSymbol](#textDocument_documentSymbol)-fmClientDocumentSymbolRequest :: J.LspId -> J.DocumentSymbolParams -> J.DocumentSymbolRequest-fmClientDocumentSymbolRequest rid params-  = J.RequestMessage "2.0" rid J.TextDocumentDocumentSymbol params---- * :leftwards_arrow_with_hook: [textDocument/formatting](#textDocument_formatting)-fmClientDocumentFormattingRequest :: J.LspId -> J.DocumentFormattingParams -> J.DocumentFormattingRequest-fmClientDocumentFormattingRequest rid params-  = J.RequestMessage "2.0" rid J.TextDocumentFormatting params---- * :leftwards_arrow_with_hook: [textDocument/rangeFormatting](#textDocument_rangeFormatting)-fmClientDocumentRangeFormattingRequest :: J.LspId -> J.DocumentRangeFormattingParams -> J.DocumentRangeFormattingRequest-fmClientDocumentRangeFormattingRequest rid params-  = J.RequestMessage "2.0" rid J.TextDocumentRangeFormatting params---- * :leftwards_arrow_with_hook: [textDocument/onTypeFormatting](#textDocument_onTypeFormatting)-fmClientDocumentOnTypeFormattingRequest :: J.LspId -> J.DocumentOnTypeFormattingParams -> J.DocumentOnTypeFormattingRequest-fmClientDocumentOnTypeFormattingRequest rid params-  = J.RequestMessage "2.0" rid J.TextDocumentOnTypeFormatting params---- * :leftwards_arrow_with_hook: [textDocument/definition](#textDocument_definition)-fmClientDefinitionRequest :: J.LspId -> J.TextDocumentPositionParams -> J.DefinitionRequest-fmClientDefinitionRequest rid params-  = J.RequestMessage "2.0" rid J.TextDocumentDefinition params---- * :leftwards_arrow_with_hook: [textDocument/codeAction](#textDocument_codeAction)-fmClientCodeActionRequest :: J.LspId -> J.CodeActionParams -> J.CodeActionRequest-fmClientCodeActionRequest rid params-  = J.RequestMessage "2.0" rid J.TextDocumentCodeAction params---- * :leftwards_arrow_with_hook: [textDocument/codeLens](#textDocument_codeLens)-fmClientCodeLensRequest :: J.LspId -> J.CodeLensParams -> J.CodeLensRequest-fmClientCodeLensRequest rid params-  = J.RequestMessage "2.0" rid J.TextDocumentCodeLens params---- * :leftwards_arrow_with_hook: [codeLens/resolve](#codeLens_resolve)-fmClientCodeLensResolveRequest :: J.LspId -> J.CodeLens -> J.CodeLensResolveRequest-fmClientCodeLensResolveRequest rid params-  = J.RequestMessage "2.0" rid J.CodeLensResolve params---- * :leftwards_arrow_with_hook: [textDocument/documentLink](#textDocument_documentLink)-fmClientDocumentLinkRequest :: J.LspId -> J.DocumentLinkParams -> J.DocumentLinkRequest-fmClientDocumentLinkRequest rid params-  = J.RequestMessage "2.0" rid J.TextDocumentDocumentLink params---- * :leftwards_arrow_with_hook: [documentLink/resolve](#documentLink_resolve)-fmClientDocumentLinkResolveRequest :: J.LspId -> J.DocumentLink -> J.DocumentLinkResolveRequest-fmClientDocumentLinkResolveRequest rid params-  = J.RequestMessage "2.0" rid J.DocumentLinkResolve params---- * :leftwards_arrow_with_hook: [textDocument/rename](#textDocument_rename)-fmClientRenameRequest :: J.LspId -> J.RenameParams -> J.RenameRequest-fmClientRenameRequest rid params-  = J.RequestMessage "2.0" rid J.TextDocumentRename params-
+ src/Language/Haskell/LSP/TH/Symbol.hs view
@@ -0,0 +1,187 @@+{-# LANGUAGE TemplateHaskell            #-}+module Language.Haskell.LSP.TH.Symbol where++import           Data.Aeson+import           Data.Aeson.TH+import           Data.Text                                      (Text)+import           Language.Haskell.LSP.TH.Constants+import           Language.Haskell.LSP.TH.TextDocumentIdentifier+import           Language.Haskell.LSP.TH.List+import           Language.Haskell.LSP.TH.Location+import           Language.Haskell.LSP.TH.Message++-- ---------------------------------------------------------------------+{-+Document Symbols Request++https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#document-symbols-request++The document symbol request is sent from the client to the server to list all+symbols found in a given text document.++    Changed: In 2.0 the request uses DocumentSymbolParams instead of a single+             uri.++Request++    method: 'textDocument/documentSymbol'+    params: DocumentSymbolParams defined as follows:++interface DocumentSymbolParams {+    /**+     * The text document.+     */+    textDocument: TextDocumentIdentifier;+}++Response++    result: SymbolInformation[] defined as follows:++/**+ * Represents information about programming constructs like variables, classes,+ * interfaces etc.+ */+interface SymbolInformation {+    /**+     * The name of this symbol.+     */+    name: string;++    /**+     * The kind of this symbol.+     */+    kind: number;++    /**+     * The location of this symbol.+     */+    location: Location;++    /**+     * The name of the symbol containing this symbol.+     */+    containerName?: string;+}++Where the kind is defined like this:++/**+ * A symbol kind.+ */+export enum SymbolKind {+    File = 1,+    Module = 2,+    Namespace = 3,+    Package = 4,+    Class = 5,+    Method = 6,+    Property = 7,+    Field = 8,+    Constructor = 9,+    Enum = 10,+    Interface = 11,+    Function = 12,+    Variable = 13,+    Constant = 14,+    Text = 15,+    Number = 16,+    Boolean = 17,+    Array = 18,+}++    error: code and message set in case an exception happens during the document+           symbol request.++Registration Options: TextDocumentRegistrationOptions+-}++data DocumentSymbolParams =+  DocumentSymbolParams+    { _textDocument :: TextDocumentIdentifier+    } deriving (Read,Show,Eq)++deriveJSON lspOptions ''DocumentSymbolParams++-- -------------------------------------++data SymbolKind+    = SkFile+    | SkModule+    | SkNamespace+    | SkPackage+    | SkClass+    | SkMethod+    | SkProperty+    | SkField+    | SkConstructor+    | SkEnum+    | SkInterface+    | SkFunction+    | SkVariable+    | SkConstant+    | SkString+    | SkNumber+    | SkBoolean+    | SkArray+    deriving (Read,Show,Eq)++instance ToJSON SymbolKind where+  toJSON SkFile        = Number 1+  toJSON SkModule      = Number 2+  toJSON SkNamespace   = Number 3+  toJSON SkPackage     = Number 4+  toJSON SkClass       = Number 5+  toJSON SkMethod      = Number 6+  toJSON SkProperty    = Number 7+  toJSON SkField       = Number 8+  toJSON SkConstructor = Number 9+  toJSON SkEnum        = Number 10+  toJSON SkInterface   = Number 11+  toJSON SkFunction    = Number 12+  toJSON SkVariable    = Number 13+  toJSON SkConstant    = Number 14+  toJSON SkString      = Number 15+  toJSON SkNumber      = Number 16+  toJSON SkBoolean     = Number 17+  toJSON SkArray       = Number 18++instance FromJSON SymbolKind where+  parseJSON (Number  1) = pure SkFile+  parseJSON (Number  2) = pure SkModule+  parseJSON (Number  3) = pure SkNamespace+  parseJSON (Number  4) = pure SkPackage+  parseJSON (Number  5) = pure SkClass+  parseJSON (Number  6) = pure SkMethod+  parseJSON (Number  7) = pure SkProperty+  parseJSON (Number  8) = pure SkField+  parseJSON (Number  9) = pure SkConstructor+  parseJSON (Number 10) = pure SkEnum+  parseJSON (Number 11) = pure SkInterface+  parseJSON (Number 12) = pure SkFunction+  parseJSON (Number 13) = pure SkVariable+  parseJSON (Number 14) = pure SkConstant+  parseJSON (Number 15) = pure SkString+  parseJSON (Number 16) = pure SkNumber+  parseJSON (Number 17) = pure SkBoolean+  parseJSON (Number 18) = pure SkArray+  parseJSON _             = mempty+++-- ---------------------------------------------------------------------++data SymbolInformation =+  SymbolInformation+    { _name          :: Text+    , _kind          :: SymbolKind+    , _location      :: Location+    , _containerName :: Maybe Text -- ^The name of the symbol containing this+                                     -- symbol.+    } deriving (Read,Show,Eq)++deriveJSON lspOptions ''SymbolInformation++-- -------------------------------------++type DocumentSymbolRequest = RequestMessage ClientMethod DocumentSymbolParams (List SymbolInformation)+type DocumentSymbolsResponse = ResponseMessage (List SymbolInformation)
+ src/Language/Haskell/LSP/TH/TextDocumentIdentifier.hs view
@@ -0,0 +1,30 @@+{-# LANGUAGE DuplicateRecordFields      #-}+{-# LANGUAGE TemplateHaskell            #-}+module Language.Haskell.LSP.TH.TextDocumentIdentifier where++import           Data.Aeson.TH+import           Language.Haskell.LSP.TH.Constants+import           Language.Haskell.LSP.TH.Uri++-- ---------------------------------------------------------------------+{-+TextDocumentIdentifier++https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#textdocumentidentifier++Text documents are identified using a URI. On the protocol level, URIs are+passed as strings. The corresponding JSON structure looks like this:++interface TextDocumentIdentifier {+    /**+     * The text document's URI.+     */+    uri: string;+}+-}+data TextDocumentIdentifier =+  TextDocumentIdentifier+    { _uri :: Uri+    } deriving (Show, Read, Eq)++deriveJSON lspOptions ''TextDocumentIdentifier
+ src/Language/Haskell/LSP/TH/Uri.hs view
@@ -0,0 +1,62 @@+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+module Language.Haskell.LSP.TH.Uri where++import qualified Data.Aeson                                 as A+import           Data.Hashable+import           Data.Text                                  (Text)+import qualified Data.Text                                  as T+import           Network.URI+import qualified System.FilePath.Posix                      as FPP+import qualified System.FilePath.Windows                    as FPW+import qualified System.Info++newtype Uri = Uri { getUri :: Text }+  deriving (Eq,Ord,Read,Show,A.FromJSON,A.ToJSON,Hashable,A.ToJSONKey,A.FromJSONKey)++fileScheme :: String+fileScheme = "file:"++windowsOS :: String+windowsOS = "mingw32"++type SystemOS = String++uriToFilePath :: Uri -> Maybe FilePath+uriToFilePath = platformAwareUriToFilePath System.Info.os++platformAwareUriToFilePath :: String -> Uri -> Maybe FilePath+platformAwareUriToFilePath systemOS (Uri uri) = do+  parsedUri <- parseURI $ T.unpack uri+  if uriScheme parsedUri == fileScheme+    then return $ (platformAdjustFromUriPath systemOS . unEscapeString . uriPath) parsedUri+    else Nothing++platformAdjustFromUriPath :: SystemOS -> String -> FilePath+platformAdjustFromUriPath systemOS srcPath =+  if systemOS /= windowsOS then srcPath+    else let+      firstSegment:rest = (FPP.splitDirectories . tail) srcPath  -- Drop leading '/' for absolute Windows paths+      drive = if FPW.isDrive firstSegment then FPW.addTrailingPathSeparator firstSegment else firstSegment+      in FPW.joinDrive drive $ FPW.joinPath rest++filePathToUri :: FilePath -> Uri+filePathToUri = platformAwareFilePathToUri System.Info.os++platformAwareFilePathToUri :: SystemOS -> FilePath -> Uri+platformAwareFilePathToUri systemOS fp = Uri . T.pack . show $ URI+  { uriScheme = fileScheme+  , uriAuthority = Just $ URIAuth "" "" ""+  , uriPath = platformAdjustToUriPath systemOS fp+  , uriQuery = ""+  , uriFragment = ""+  }++platformAdjustToUriPath :: SystemOS -> FilePath -> String+platformAdjustToUriPath systemOS srcPath =+  if systemOS /= windowsOS then srcPath+    else let+      drive:rest = FPW.splitDirectories srcPath+      leaveCharUnescaped = (/= ':')+      removePathSeparator = filter (not . FPW.isPathSeparator)+      escapedDrive = removePathSeparator $ escapeURIString leaveCharUnescaped drive+      in '/' : FPP.joinPath (escapedDrive : rest)
+ src/Language/Haskell/LSP/TH/WorkspaceEdit.hs view
@@ -0,0 +1,160 @@+{-# LANGUAGE CPP                        #-}+{-# LANGUAGE DuplicateRecordFields      #-}+{-# LANGUAGE TemplateHaskell            #-}+module Language.Haskell.LSP.TH.WorkspaceEdit where++import           Data.Aeson.TH+import qualified Data.HashMap.Strict                        as H+-- For <= 8.2.2+import           Data.Monoid                                ((<>))+import           Data.Text                                  (Text)+import           Language.Haskell.LSP.TH.Constants+import           Language.Haskell.LSP.TH.List+import           Language.Haskell.LSP.TH.Location+import           Language.Haskell.LSP.TH.Uri++-- ---------------------------------------------------------------------+{-+TextEdit++https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#textedit++A textual edit applicable to a text document.++interface TextEdit {+    /**+     * The range of the text document to be manipulated. To insert+     * text into a document create a range where start === end.+     */+    range: Range;++    /**+     * The string to be inserted. For delete operations use an+     * empty string.+     */+    newText: string;+}+++-}++data TextEdit =+  TextEdit+    { _range   :: Range+    , _newText :: Text+    } deriving (Show,Read,Eq)++deriveJSON lspOptions ''TextEdit++-- ---------------------------------------------------------------------+{-+VersionedTextDocumentIdentifier++https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#versionedtextdocumentidentifier++    New: An identifier to denote a specific version of a text document.++interface VersionedTextDocumentIdentifier extends TextDocumentIdentifier {+    /**+	 * The version number of this document. If a versioned text document identifier+	 * is sent from the server to the client and the file is not open in the editor+	 * (the server has not received an open notification before) the server can send+	 * `null` to indicate that the version is known and the content on disk is the+	 * truth (as speced with document content ownership)+	 */+	version: number | null;+-}++type TextDocumentVersion = Maybe Int++data VersionedTextDocumentIdentifier =+  VersionedTextDocumentIdentifier+    { _uri     :: Uri+    , _version :: TextDocumentVersion+    } deriving (Show, Read, Eq)++deriveJSON lspOptions ''VersionedTextDocumentIdentifier++-- ---------------------------------------------------------------------+{-+New in 3.0+----------++TextDocumentEdit+https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#new-textdocumentedit++If multiple TextEdits are applied to a text document, all text edits describe+changes made to the initial document version. Execution wise text edits should+applied from the bottom to the top of the text document. Overlapping text edits+are not supported.++export interface TextDocumentEdit {+        /**+         * The text document to change.+         */+        textDocument: VersionedTextDocumentIdentifier;++        /**+         * The edits to be applied.+         */+        edits: TextEdit[];+}++-}++data TextDocumentEdit =+  TextDocumentEdit+    { _textDocument :: VersionedTextDocumentIdentifier+    , _edits        :: List TextEdit+    } deriving (Show, Read, Eq)++deriveJSON lspOptions ''TextDocumentEdit++-- ---------------------------------------------------------------------+{-+Changed in 3.0+--------------++WorkspaceEdit++https://github.com/Microsoft/language-server-protocol/blob/master/protocol.md#workspaceedit+++Changed A workspace edit represents changes to many resources managed in the+workspace. The edit should either provide changes or documentChanges. If+documentChanges are present they are preferred over changes if the client can+handle versioned document edits.++export interface WorkspaceEdit {+        /**+         * Holds changes to existing resources.+         */+        changes?: { [uri: string]: TextEdit[]; };++        /**+         * An array of `TextDocumentEdit`s to express changes to specific a specific+         * version of a text document. Whether a client supports versioned document+         * edits is expressed via `WorkspaceClientCapabilities.versionedWorkspaceEdit`.+         */+        documentChanges?: TextDocumentEdit[];+}+-}++type WorkspaceEditMap = H.HashMap Uri (List TextEdit)++data WorkspaceEdit =+  WorkspaceEdit+    { _changes         :: Maybe WorkspaceEditMap+    , _documentChanges :: Maybe (List TextDocumentEdit)+    } deriving (Show, Read, Eq)++instance Monoid WorkspaceEdit where+  mempty = WorkspaceEdit Nothing Nothing+  mappend (WorkspaceEdit a b) (WorkspaceEdit c d) = WorkspaceEdit (a <> c) (b <> d)++deriveJSON lspOptions ''WorkspaceEdit++#if __GLASGOW_HASKELL__ >= 804+instance Semigroup WorkspaceEdit where+  (<>) = mappend+#endif