{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeInType #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# OPTIONS_GHC -Wno-unticked-promoted-constructors #-}
module Language.LSP.Types.Method where
import qualified Data.Aeson as A
import Data.Aeson.Types
import Data.Text (Text)
import Language.LSP.Types.Utils
import Data.Function (on)
import Control.Applicative
import Data.GADT.Compare.TH
data From = FromServer | FromClient
data MethodType = Notification | Request
data Method (f :: From) (t :: MethodType) where
Initialize :: Method FromClient Request
Initialized :: Method FromClient Notification
Shutdown :: Method FromClient Request
Exit :: Method FromClient Notification
WorkspaceDidChangeWorkspaceFolders :: Method FromClient Notification
WorkspaceDidChangeConfiguration :: Method FromClient Notification
WorkspaceDidChangeWatchedFiles :: Method FromClient Notification
WorkspaceSymbol :: Method FromClient Request
WorkspaceExecuteCommand :: Method FromClient Request
TextDocumentDidOpen :: Method FromClient Notification
TextDocumentDidChange :: Method FromClient Notification
TextDocumentWillSave :: Method FromClient Notification
TextDocumentWillSaveWaitUntil :: Method FromClient Request
TextDocumentDidSave :: Method FromClient Notification
TextDocumentDidClose :: Method FromClient Notification
TextDocumentCompletion :: Method FromClient Request
CompletionItemResolve :: Method FromClient Request
TextDocumentHover :: Method FromClient Request
TextDocumentSignatureHelp :: Method FromClient Request
TextDocumentDeclaration :: Method FromClient Request
TextDocumentDefinition :: Method FromClient Request
TextDocumentTypeDefinition :: Method FromClient Request
TextDocumentImplementation :: Method FromClient Request
TextDocumentReferences :: Method FromClient Request
TextDocumentDocumentHighlight :: Method FromClient Request
TextDocumentDocumentSymbol :: Method FromClient Request
TextDocumentCodeAction :: Method FromClient Request
TextDocumentCodeLens :: Method FromClient Request
CodeLensResolve :: Method FromClient Request
TextDocumentDocumentLink :: Method FromClient Request
DocumentLinkResolve :: Method FromClient Request
TextDocumentDocumentColor :: Method FromClient Request
TextDocumentColorPresentation :: Method FromClient Request
TextDocumentFormatting :: Method FromClient Request
TextDocumentRangeFormatting :: Method FromClient Request
TextDocumentOnTypeFormatting :: Method FromClient Request
TextDocumentRename :: Method FromClient Request
TextDocumentPrepareRename :: Method FromClient Request
TextDocumentFoldingRange :: Method FromClient Request
TextDocumentSelectionRange :: Method FromClient Request
WindowShowMessage :: Method FromServer Notification
WindowShowMessageRequest :: Method FromServer Request
WindowLogMessage :: Method FromServer Notification
WindowWorkDoneProgressCancel :: Method FromClient Notification
WindowWorkDoneProgressCreate :: Method FromServer Request
Progress :: Method FromServer Notification
TelemetryEvent :: Method FromServer Notification
ClientRegisterCapability :: Method FromServer Request
ClientUnregisterCapability :: Method FromServer Request
WorkspaceWorkspaceFolders :: Method FromServer Request
WorkspaceConfiguration :: Method FromServer Request
WorkspaceApplyEdit :: Method FromServer Request
TextDocumentPublishDiagnostics :: Method FromServer Notification
CancelRequest :: Method f Notification
CustomMethod :: Method f t
data SMethod (m :: Method f t) where
SInitialize :: SMethod Initialize
SInitialized :: SMethod Initialized
SShutdown :: SMethod Shutdown
SExit :: SMethod Exit
SWorkspaceDidChangeWorkspaceFolders :: SMethod WorkspaceDidChangeWorkspaceFolders
SWorkspaceDidChangeConfiguration :: SMethod WorkspaceDidChangeConfiguration
SWorkspaceDidChangeWatchedFiles :: SMethod WorkspaceDidChangeWatchedFiles
SWorkspaceSymbol :: SMethod WorkspaceSymbol
SWorkspaceExecuteCommand :: SMethod WorkspaceExecuteCommand
STextDocumentDidOpen :: SMethod TextDocumentDidOpen
STextDocumentDidChange :: SMethod TextDocumentDidChange
STextDocumentWillSave :: SMethod TextDocumentWillSave
STextDocumentWillSaveWaitUntil :: SMethod TextDocumentWillSaveWaitUntil
STextDocumentDidSave :: SMethod TextDocumentDidSave
STextDocumentDidClose :: SMethod TextDocumentDidClose
STextDocumentCompletion :: SMethod TextDocumentCompletion
SCompletionItemResolve :: SMethod CompletionItemResolve
STextDocumentHover :: SMethod TextDocumentHover
STextDocumentSignatureHelp :: SMethod TextDocumentSignatureHelp
STextDocumentDeclaration :: SMethod TextDocumentDeclaration
STextDocumentDefinition :: SMethod TextDocumentDefinition
STextDocumentTypeDefinition :: SMethod TextDocumentTypeDefinition
STextDocumentImplementation :: SMethod TextDocumentImplementation
STextDocumentReferences :: SMethod TextDocumentReferences
STextDocumentDocumentHighlight :: SMethod TextDocumentDocumentHighlight
STextDocumentDocumentSymbol :: SMethod TextDocumentDocumentSymbol
STextDocumentCodeAction :: SMethod TextDocumentCodeAction
STextDocumentCodeLens :: SMethod TextDocumentCodeLens
SCodeLensResolve :: SMethod CodeLensResolve
STextDocumentDocumentLink :: SMethod TextDocumentDocumentLink
SDocumentLinkResolve :: SMethod DocumentLinkResolve
STextDocumentDocumentColor :: SMethod TextDocumentDocumentColor
STextDocumentColorPresentation :: SMethod TextDocumentColorPresentation
STextDocumentFormatting :: SMethod TextDocumentFormatting
STextDocumentRangeFormatting :: SMethod TextDocumentRangeFormatting
STextDocumentOnTypeFormatting :: SMethod TextDocumentOnTypeFormatting
STextDocumentRename :: SMethod TextDocumentRename
STextDocumentPrepareRename :: SMethod TextDocumentPrepareRename
STextDocumentFoldingRange :: SMethod TextDocumentFoldingRange
STextDocumentSelectionRange :: SMethod TextDocumentSelectionRange
SWindowShowMessage :: SMethod WindowShowMessage
SWindowShowMessageRequest :: SMethod WindowShowMessageRequest
SWindowLogMessage :: SMethod WindowLogMessage
SWindowWorkDoneProgressCreate :: SMethod WindowWorkDoneProgressCreate
SWindowWorkDoneProgressCancel :: SMethod WindowWorkDoneProgressCancel
SProgress :: SMethod Progress
STelemetryEvent :: SMethod TelemetryEvent
SClientRegisterCapability :: SMethod ClientRegisterCapability
SClientUnregisterCapability :: SMethod ClientUnregisterCapability
SWorkspaceWorkspaceFolders :: SMethod WorkspaceWorkspaceFolders
SWorkspaceConfiguration :: SMethod WorkspaceConfiguration
SWorkspaceApplyEdit :: SMethod WorkspaceApplyEdit
STextDocumentPublishDiagnostics :: SMethod TextDocumentPublishDiagnostics
SCancelRequest :: SMethod CancelRequest
SCustomMethod :: Text -> SMethod CustomMethod
deriveGEq ''SMethod
deriveGCompare ''SMethod
deriving instance Eq (SMethod m)
deriving instance Ord (SMethod m)
deriving instance Show (SMethod m)
type SClientMethod (m :: Method FromClient t) = SMethod m
type SServerMethod (m :: Method FromServer t) = SMethod m
data SomeClientMethod = forall t (m :: Method FromClient t). SomeClientMethod (SMethod m)
data SomeServerMethod = forall t (m :: Method FromServer t). SomeServerMethod (SMethod m)
data SomeMethod where
SomeMethod :: forall m. SMethod m -> SomeMethod
deriving instance Show SomeMethod
instance Eq SomeMethod where
(==) = (==) `on` toJSON
instance Ord SomeMethod where
compare = compare `on` (getString . toJSON)
where
getString (A.String t) = t
getString _ = error "ToJSON instance for some method isn't string"
deriving instance Show SomeClientMethod
instance Eq SomeClientMethod where
(==) = (==) `on` toJSON
instance Ord SomeClientMethod where
compare = compare `on` (getString . toJSON)
where
getString (A.String t) = t
getString _ = error "ToJSON instance for some method isn't string"
deriving instance Show SomeServerMethod
instance Eq SomeServerMethod where
(==) = (==) `on` toJSON
instance Ord SomeServerMethod where
compare = compare `on` (getString . toJSON)
where
getString (A.String t) = t
getString _ = error "ToJSON instance for some method isn't string"
instance FromJSON SomeMethod where
parseJSON v = client <|> server
where
client = do
c <- parseJSON v
case c of
SomeClientMethod (SCustomMethod _) -> mempty
SomeClientMethod m -> pure $ SomeMethod m
server = do
c <- parseJSON v
case c of
SomeServerMethod m -> pure $ SomeMethod m
instance FromJSON SomeClientMethod where
parseJSON (A.String "initialize") = pure $ SomeClientMethod SInitialize
parseJSON (A.String "initialized") = pure $ SomeClientMethod SInitialized
parseJSON (A.String "shutdown") = pure $ SomeClientMethod SShutdown
parseJSON (A.String "exit") = pure $ SomeClientMethod SExit
parseJSON (A.String "workspace/didChangeWorkspaceFolders") = pure $ SomeClientMethod SWorkspaceDidChangeWorkspaceFolders
parseJSON (A.String "workspace/didChangeConfiguration") = pure $ SomeClientMethod SWorkspaceDidChangeConfiguration
parseJSON (A.String "workspace/didChangeWatchedFiles") = pure $ SomeClientMethod SWorkspaceDidChangeWatchedFiles
parseJSON (A.String "workspace/symbol") = pure $ SomeClientMethod SWorkspaceSymbol
parseJSON (A.String "workspace/executeCommand") = pure $ SomeClientMethod SWorkspaceExecuteCommand
parseJSON (A.String "textDocument/didOpen") = pure $ SomeClientMethod STextDocumentDidOpen
parseJSON (A.String "textDocument/didChange") = pure $ SomeClientMethod STextDocumentDidChange
parseJSON (A.String "textDocument/willSave") = pure $ SomeClientMethod STextDocumentWillSave
parseJSON (A.String "textDocument/willSaveWaitUntil") = pure $ SomeClientMethod STextDocumentWillSaveWaitUntil
parseJSON (A.String "textDocument/didSave") = pure $ SomeClientMethod STextDocumentDidSave
parseJSON (A.String "textDocument/didClose") = pure $ SomeClientMethod STextDocumentDidClose
parseJSON (A.String "textDocument/completion") = pure $ SomeClientMethod STextDocumentCompletion
parseJSON (A.String "completionItem/resolve") = pure $ SomeClientMethod SCompletionItemResolve
parseJSON (A.String "textDocument/hover") = pure $ SomeClientMethod STextDocumentHover
parseJSON (A.String "textDocument/signatureHelp") = pure $ SomeClientMethod STextDocumentSignatureHelp
parseJSON (A.String "textDocument/declaration") = pure $ SomeClientMethod STextDocumentDeclaration
parseJSON (A.String "textDocument/definition") = pure $ SomeClientMethod STextDocumentDefinition
parseJSON (A.String "textDocument/typeDefinition") = pure $ SomeClientMethod STextDocumentTypeDefinition
parseJSON (A.String "textDocument/implementation") = pure $ SomeClientMethod STextDocumentImplementation
parseJSON (A.String "textDocument/references") = pure $ SomeClientMethod STextDocumentReferences
parseJSON (A.String "textDocument/documentHighlight") = pure $ SomeClientMethod STextDocumentDocumentHighlight
parseJSON (A.String "textDocument/documentSymbol") = pure $ SomeClientMethod STextDocumentDocumentSymbol
parseJSON (A.String "textDocument/codeAction") = pure $ SomeClientMethod STextDocumentCodeAction
parseJSON (A.String "textDocument/codeLens") = pure $ SomeClientMethod STextDocumentCodeLens
parseJSON (A.String "codeLens/resolve") = pure $ SomeClientMethod SCodeLensResolve
parseJSON (A.String "textDocument/documentLink") = pure $ SomeClientMethod STextDocumentDocumentLink
parseJSON (A.String "documentLink/resolve") = pure $ SomeClientMethod SDocumentLinkResolve
parseJSON (A.String "textDocument/documentColor") = pure $ SomeClientMethod STextDocumentDocumentColor
parseJSON (A.String "textDocument/colorPresentation") = pure $ SomeClientMethod STextDocumentColorPresentation
parseJSON (A.String "textDocument/formatting") = pure $ SomeClientMethod STextDocumentFormatting
parseJSON (A.String "textDocument/rangeFormatting") = pure $ SomeClientMethod STextDocumentRangeFormatting
parseJSON (A.String "textDocument/onTypeFormatting") = pure $ SomeClientMethod STextDocumentOnTypeFormatting
parseJSON (A.String "textDocument/rename") = pure $ SomeClientMethod STextDocumentRename
parseJSON (A.String "textDocument/prepareRename") = pure $ SomeClientMethod STextDocumentPrepareRename
parseJSON (A.String "textDocument/foldingRange") = pure $ SomeClientMethod STextDocumentFoldingRange
parseJSON (A.String "textDocument/selectionRange") = pure $ SomeClientMethod STextDocumentFoldingRange
parseJSON (A.String "window/workDoneProgress/cancel") = pure $ SomeClientMethod SWindowWorkDoneProgressCancel
parseJSON (A.String "$/cancelRequest") = pure $ SomeClientMethod SCancelRequest
parseJSON (A.String m) = pure $ SomeClientMethod (SCustomMethod m)
parseJSON _ = mempty
instance A.FromJSON SomeServerMethod where
parseJSON (A.String "window/showMessage") = pure $ SomeServerMethod SWindowShowMessage
parseJSON (A.String "window/showMessageRequest") = pure $ SomeServerMethod SWindowShowMessageRequest
parseJSON (A.String "window/logMessage") = pure $ SomeServerMethod SWindowLogMessage
parseJSON (A.String "window/workDoneProgress/create") = pure $ SomeServerMethod SWindowWorkDoneProgressCreate
parseJSON (A.String "$/progress") = pure $ SomeServerMethod SProgress
parseJSON (A.String "telemetry/event") = pure $ SomeServerMethod STelemetryEvent
parseJSON (A.String "client/registerCapability") = pure $ SomeServerMethod SClientRegisterCapability
parseJSON (A.String "client/unregisterCapability") = pure $ SomeServerMethod SClientUnregisterCapability
parseJSON (A.String "workspace/workspaceFolders") = pure $ SomeServerMethod SWorkspaceWorkspaceFolders
parseJSON (A.String "workspace/configuration") = pure $ SomeServerMethod SWorkspaceConfiguration
parseJSON (A.String "workspace/applyEdit") = pure $ SomeServerMethod SWorkspaceApplyEdit
parseJSON (A.String "textDocument/publishDiagnostics") = pure $ SomeServerMethod STextDocumentPublishDiagnostics
parseJSON (A.String "$/cancelRequest") = pure $ SomeServerMethod SCancelRequest
parseJSON (A.String m) = pure $ SomeServerMethod (SCustomMethod m)
parseJSON _ = mempty
makeSingletonFromJSON 'SomeMethod ''SMethod
instance ToJSON SomeMethod where
toJSON (SomeMethod m) = toJSON m
instance ToJSON SomeClientMethod where
toJSON (SomeClientMethod m) = toJSON m
instance ToJSON SomeServerMethod where
toJSON (SomeServerMethod m) = toJSON m
instance A.ToJSON (SMethod m) where
toJSON SInitialize = A.String "initialize"
toJSON SInitialized = A.String "initialized"
toJSON SShutdown = A.String "shutdown"
toJSON SExit = A.String "exit"
toJSON SWorkspaceDidChangeWorkspaceFolders = A.String "workspace/didChangeWorkspaceFolders"
toJSON SWorkspaceDidChangeConfiguration = A.String "workspace/didChangeConfiguration"
toJSON SWorkspaceDidChangeWatchedFiles = A.String "workspace/didChangeWatchedFiles"
toJSON SWorkspaceSymbol = A.String "workspace/symbol"
toJSON SWorkspaceExecuteCommand = A.String "workspace/executeCommand"
toJSON STextDocumentDidOpen = A.String "textDocument/didOpen"
toJSON STextDocumentDidChange = A.String "textDocument/didChange"
toJSON STextDocumentWillSave = A.String "textDocument/willSave"
toJSON STextDocumentWillSaveWaitUntil = A.String "textDocument/willSaveWaitUntil"
toJSON STextDocumentDidSave = A.String "textDocument/didSave"
toJSON STextDocumentDidClose = A.String "textDocument/didClose"
toJSON STextDocumentCompletion = A.String "textDocument/completion"
toJSON SCompletionItemResolve = A.String "completionItem/resolve"
toJSON STextDocumentHover = A.String "textDocument/hover"
toJSON STextDocumentSignatureHelp = A.String "textDocument/signatureHelp"
toJSON STextDocumentReferences = A.String "textDocument/references"
toJSON STextDocumentDocumentHighlight = A.String "textDocument/documentHighlight"
toJSON STextDocumentDocumentSymbol = A.String "textDocument/documentSymbol"
toJSON STextDocumentDeclaration = A.String "textDocument/declaration"
toJSON STextDocumentDefinition = A.String "textDocument/definition"
toJSON STextDocumentTypeDefinition = A.String "textDocument/typeDefinition"
toJSON STextDocumentImplementation = A.String "textDocument/implementation"
toJSON STextDocumentCodeAction = A.String "textDocument/codeAction"
toJSON STextDocumentCodeLens = A.String "textDocument/codeLens"
toJSON SCodeLensResolve = A.String "codeLens/resolve"
toJSON STextDocumentDocumentColor = A.String "textDocument/documentColor"
toJSON STextDocumentColorPresentation = A.String "textDocument/colorPresentation"
toJSON STextDocumentFormatting = A.String "textDocument/formatting"
toJSON STextDocumentRangeFormatting = A.String "textDocument/rangeFormatting"
toJSON STextDocumentOnTypeFormatting = A.String "textDocument/onTypeFormatting"
toJSON STextDocumentRename = A.String "textDocument/rename"
toJSON STextDocumentPrepareRename = A.String "textDocument/prepareRename"
toJSON STextDocumentFoldingRange = A.String "textDocument/foldingRange"
toJSON STextDocumentSelectionRange = A.String "textDocument/selectionRange"
toJSON STextDocumentDocumentLink = A.String "textDocument/documentLink"
toJSON SDocumentLinkResolve = A.String "documentLink/resolve"
toJSON SWindowWorkDoneProgressCancel = A.String "window/workDoneProgress/cancel"
toJSON SWindowShowMessage = A.String "window/showMessage"
toJSON SWindowShowMessageRequest = A.String "window/showMessageRequest"
toJSON SWindowLogMessage = A.String "window/logMessage"
toJSON SWindowWorkDoneProgressCreate = A.String "window/workDoneProgress/create"
toJSON SProgress = A.String "$/progress"
toJSON STelemetryEvent = A.String "telemetry/event"
toJSON SClientRegisterCapability = A.String "client/registerCapability"
toJSON SClientUnregisterCapability = A.String "client/unregisterCapability"
toJSON SWorkspaceWorkspaceFolders = A.String "workspace/workspaceFolders"
toJSON SWorkspaceConfiguration = A.String "workspace/configuration"
toJSON SWorkspaceApplyEdit = A.String "workspace/applyEdit"
toJSON STextDocumentPublishDiagnostics = A.String "textDocument/publishDiagnostics"
toJSON SCancelRequest = A.String "$/cancelRequest"
toJSON (SCustomMethod m) = A.String m