lsp-types-1.6.0.0: src/Language/LSP/Types/Method.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE MagicHash #-}
{-# 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
import Data.Type.Equality
import GHC.Exts (Int(..), dataToTag#)
import Unsafe.Coerce
-- ---------------------------------------------------------------------
data From = FromServer | FromClient
data MethodType = Notification | Request
data Method (f :: From) (t :: MethodType) where
-- Client Methods
-- General
Initialize :: Method FromClient Request
Initialized :: Method FromClient Notification
Shutdown :: Method FromClient Request
Exit :: Method FromClient Notification
-- Workspace
WorkspaceDidChangeWorkspaceFolders :: Method FromClient Notification
WorkspaceDidChangeConfiguration :: Method FromClient Notification
WorkspaceDidChangeWatchedFiles :: Method FromClient Notification
WorkspaceSymbol :: Method FromClient Request
WorkspaceExecuteCommand :: Method FromClient Request
-- Document
TextDocumentDidOpen :: Method FromClient Notification
TextDocumentDidChange :: Method FromClient Notification
TextDocumentWillSave :: Method FromClient Notification
TextDocumentWillSaveWaitUntil :: Method FromClient Request
TextDocumentDidSave :: Method FromClient Notification
TextDocumentDidClose :: Method FromClient Notification
-- Completion
TextDocumentCompletion :: Method FromClient Request
CompletionItemResolve :: Method FromClient Request
-- LanguageQueries
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
-- Code Action/Lens/Link
TextDocumentCodeAction :: Method FromClient Request
TextDocumentCodeLens :: Method FromClient Request
CodeLensResolve :: Method FromClient Request
TextDocumentDocumentLink :: Method FromClient Request
DocumentLinkResolve :: Method FromClient Request
-- Syntax highlighting/Coloring
TextDocumentDocumentColor :: Method FromClient Request
TextDocumentColorPresentation :: Method FromClient Request
-- Formatting
TextDocumentFormatting :: Method FromClient Request
TextDocumentRangeFormatting :: Method FromClient Request
TextDocumentOnTypeFormatting :: Method FromClient Request
-- Rename
TextDocumentRename :: Method FromClient Request
TextDocumentPrepareRename :: Method FromClient Request
-- FoldingRange
TextDocumentFoldingRange :: Method FromClient Request
TextDocumentSelectionRange :: Method FromClient Request
-- Call hierarchy
TextDocumentPrepareCallHierarchy :: Method FromClient Request
CallHierarchyIncomingCalls :: Method FromClient Request
CallHierarchyOutgoingCalls :: Method FromClient Request
-- SemanticTokens
TextDocumentSemanticTokens :: Method FromClient Request
TextDocumentSemanticTokensFull :: Method FromClient Request
TextDocumentSemanticTokensFullDelta :: Method FromClient Request
TextDocumentSemanticTokensRange :: Method FromClient Request
-- ServerMethods
-- Window
WindowShowMessage :: Method FromServer Notification
WindowShowMessageRequest :: Method FromServer Request
WindowShowDocument :: Method FromServer Request
WindowLogMessage :: Method FromServer Notification
WindowWorkDoneProgressCancel :: Method FromClient Notification
WindowWorkDoneProgressCreate :: Method FromServer Request
-- Progress
Progress :: Method FromServer Notification
-- Telemetry
TelemetryEvent :: Method FromServer Notification
-- Client
ClientRegisterCapability :: Method FromServer Request
ClientUnregisterCapability :: Method FromServer Request
-- Workspace
WorkspaceWorkspaceFolders :: Method FromServer Request
WorkspaceConfiguration :: Method FromServer Request
WorkspaceApplyEdit :: Method FromServer Request
WorkspaceSemanticTokensRefresh :: Method FromServer Request
-- Document
TextDocumentPublishDiagnostics :: Method FromServer Notification
-- Cancelling
CancelRequest :: Method f Notification
-- Custom
-- A custom message type. It is not enforced that this starts with $/.
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
STextDocumentPrepareCallHierarchy :: SMethod TextDocumentPrepareCallHierarchy
SCallHierarchyIncomingCalls :: SMethod CallHierarchyIncomingCalls
SCallHierarchyOutgoingCalls :: SMethod CallHierarchyOutgoingCalls
STextDocumentSemanticTokens :: SMethod TextDocumentSemanticTokens
STextDocumentSemanticTokensFull :: SMethod TextDocumentSemanticTokensFull
STextDocumentSemanticTokensFullDelta :: SMethod TextDocumentSemanticTokensFullDelta
STextDocumentSemanticTokensRange :: SMethod TextDocumentSemanticTokensRange
SWorkspaceSemanticTokensRefresh :: SMethod WorkspaceSemanticTokensRefresh
SWindowShowMessage :: SMethod WindowShowMessage
SWindowShowMessageRequest :: SMethod WindowShowMessageRequest
SWindowShowDocument :: SMethod WindowShowDocument
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
-- This instance is written manually rather than derived to avoid a dependency
-- on 'dependent-sum-template'.
instance GEq SMethod where
geq x y = case gcompare x y of
GLT -> Nothing
GEQ -> Just Refl
GGT -> Nothing
-- This instance is written manually rather than derived to avoid a dependency
-- on 'dependent-sum-template'.
instance GCompare SMethod where
gcompare (SCustomMethod x) (SCustomMethod y) = case x `compare` y of
LT -> GLT
EQ -> GEQ
GT -> GGT
-- This is much more compact than matching on every pair of constructors, which
-- is what we would need to do for GHC to 'see' that this is correct. Nonetheless
-- it is safe: since there is only one constructor of 'SMethod' for each 'Method',
-- the argument types can only be equal if the constructor tag is equal.
gcompare x y = case I# (dataToTag# x) `compare` I# (dataToTag# y) of
LT -> GLT
EQ -> unsafeCoerce GEQ
GT -> GGT
instance Eq (SMethod m) where
-- This defers to 'GEq', ensuring that this version is compatible.
(==) = defaultEq
instance Ord (SMethod m) where
-- This defers to 'GCompare', ensuring that this version is compatible.
compare = defaultCompare
deriving instance Show (SMethod m)
-- Some useful type synonyms
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"
-- ---------------------------------------------------------------------
-- From JSON
-- ---------------------------------------------------------------------
instance FromJSON SomeMethod where
parseJSON v = client <|> server
where
client = do
c <- parseJSON v
case c of
-- Don't parse the client custom method so that we can still
-- parse the server methods
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
-- General
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
-- Workspace
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
-- Document
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 STextDocumentSelectionRange
parseJSON (A.String "textDocument/prepareCallHierarchy") = pure $ SomeClientMethod STextDocumentPrepareCallHierarchy
parseJSON (A.String "callHierarchy/incomingCalls") = pure $ SomeClientMethod SCallHierarchyIncomingCalls
parseJSON (A.String "callHierarchy/outgoingCalls") = pure $ SomeClientMethod SCallHierarchyOutgoingCalls
parseJSON (A.String "textDocument/semanticTokens") = pure $ SomeClientMethod STextDocumentSemanticTokens
parseJSON (A.String "textDocument/semanticTokens/full") = pure $ SomeClientMethod STextDocumentSemanticTokensFull
parseJSON (A.String "textDocument/semanticTokens/full/delta") = pure $ SomeClientMethod STextDocumentSemanticTokensFullDelta
parseJSON (A.String "textDocument/semanticTokens/range") = pure $ SomeClientMethod STextDocumentSemanticTokensRange
parseJSON (A.String "window/workDoneProgress/cancel") = pure $ SomeClientMethod SWindowWorkDoneProgressCancel
-- Cancelling
parseJSON (A.String "$/cancelRequest") = pure $ SomeClientMethod SCancelRequest
-- Custom
parseJSON (A.String m) = pure $ SomeClientMethod (SCustomMethod m)
parseJSON _ = fail "SomeClientMethod"
instance A.FromJSON SomeServerMethod where
-- Server
-- Window
parseJSON (A.String "window/showMessage") = pure $ SomeServerMethod SWindowShowMessage
parseJSON (A.String "window/showMessageRequest") = pure $ SomeServerMethod SWindowShowMessageRequest
parseJSON (A.String "window/showDocument") = pure $ SomeServerMethod SWindowShowDocument
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
-- Client
parseJSON (A.String "client/registerCapability") = pure $ SomeServerMethod SClientRegisterCapability
parseJSON (A.String "client/unregisterCapability") = pure $ SomeServerMethod SClientUnregisterCapability
-- Workspace
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 "workspace/semanticTokens/refresh") = pure $ SomeServerMethod SWorkspaceSemanticTokensRefresh
-- Document
parseJSON (A.String "textDocument/publishDiagnostics") = pure $ SomeServerMethod STextDocumentPublishDiagnostics
-- Cancelling
parseJSON (A.String "$/cancelRequest") = pure $ SomeServerMethod SCancelRequest
-- Custom
parseJSON (A.String m) = pure $ SomeServerMethod (SCustomMethod m)
parseJSON _ = fail "SomeServerMethod"
-- instance FromJSON (SMethod m)
-- ---------------------------------------------------------------------
-- TO JSON
-- ---------------------------------------------------------------------
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
-- Client
-- General
toJSON SInitialize = A.String "initialize"
toJSON SInitialized = A.String "initialized"
toJSON SShutdown = A.String "shutdown"
toJSON SExit = A.String "exit"
-- Workspace
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"
-- Document
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 STextDocumentPrepareCallHierarchy = A.String "textDocument/prepareCallHierarchy"
toJSON SCallHierarchyIncomingCalls = A.String "callHierarchy/incomingCalls"
toJSON SCallHierarchyOutgoingCalls = A.String "callHierarchy/outgoingCalls"
toJSON STextDocumentSemanticTokens = A.String "textDocument/semanticTokens"
toJSON STextDocumentSemanticTokensFull = A.String "textDocument/semanticTokens/full"
toJSON STextDocumentSemanticTokensFullDelta = A.String "textDocument/semanticTokens/full/delta"
toJSON STextDocumentSemanticTokensRange = A.String "textDocument/semanticTokens/range"
toJSON STextDocumentDocumentLink = A.String "textDocument/documentLink"
toJSON SDocumentLinkResolve = A.String "documentLink/resolve"
toJSON SWindowWorkDoneProgressCancel = A.String "window/workDoneProgress/cancel"
-- Server
-- Window
toJSON SWindowShowMessage = A.String "window/showMessage"
toJSON SWindowShowMessageRequest = A.String "window/showMessageRequest"
toJSON SWindowShowDocument = A.String "window/showDocument"
toJSON SWindowLogMessage = A.String "window/logMessage"
toJSON SWindowWorkDoneProgressCreate = A.String "window/workDoneProgress/create"
toJSON SProgress = A.String "$/progress"
toJSON STelemetryEvent = A.String "telemetry/event"
-- Client
toJSON SClientRegisterCapability = A.String "client/registerCapability"
toJSON SClientUnregisterCapability = A.String "client/unregisterCapability"
-- Workspace
toJSON SWorkspaceWorkspaceFolders = A.String "workspace/workspaceFolders"
toJSON SWorkspaceConfiguration = A.String "workspace/configuration"
toJSON SWorkspaceApplyEdit = A.String "workspace/applyEdit"
toJSON SWorkspaceSemanticTokensRefresh = A.String "workspace/semanticTokens/refresh"
-- Document
toJSON STextDocumentPublishDiagnostics = A.String "textDocument/publishDiagnostics"
-- Cancelling
toJSON SCancelRequest = A.String "$/cancelRequest"
-- Custom
toJSON (SCustomMethod m) = A.String m
makeSingletonFromJSON 'SomeMethod ''SMethod