From 71e5e7433851c30774601b004ce8da9ea6e60fce Mon Sep 17 00:00:00 2001 From: Tom McLaughlin Date: Mon, 15 Jul 2019 16:05:45 -0700 Subject: [PATCH 1/2] Add support CodeActionOptions (added in LSP spec 3.11.0) --- .../Language/Haskell/LSP/Types/CodeAction.hs | 2 +- .../Haskell/LSP/Types/DataTypesJSON.hs | 33 +++++++++++++++++-- src/Language/Haskell/LSP/Core.hs | 5 +-- 3 files changed, 34 insertions(+), 6 deletions(-) diff --git a/haskell-lsp-types/src/Language/Haskell/LSP/Types/CodeAction.hs b/haskell-lsp-types/src/Language/Haskell/LSP/Types/CodeAction.hs index 8f972959f..23ec37fe5 100644 --- a/haskell-lsp-types/src/Language/Haskell/LSP/Types/CodeAction.hs +++ b/haskell-lsp-types/src/Language/Haskell/LSP/Types/CodeAction.hs @@ -23,7 +23,7 @@ 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 +The code action request is sent from the client to the server to compute 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 diff --git a/haskell-lsp-types/src/Language/Haskell/LSP/Types/DataTypesJSON.hs b/haskell-lsp-types/src/Language/Haskell/LSP/Types/DataTypesJSON.hs index 053db722c..6bffe1799 100644 --- a/haskell-lsp-types/src/Language/Haskell/LSP/Types/DataTypesJSON.hs +++ b/haskell-lsp-types/src/Language/Haskell/LSP/Types/DataTypesJSON.hs @@ -18,6 +18,7 @@ import Data.Aeson.Types import Data.Text (Text) import qualified Data.Text as T import Language.Haskell.LSP.Types.ClientCapabilities +import Language.Haskell.LSP.Types.CodeAction import Language.Haskell.LSP.Types.Command import Language.Haskell.LSP.Types.Constants import Language.Haskell.LSP.Types.Diagnostic @@ -259,6 +260,30 @@ data CodeLensOptions = deriveJSON lspOptions ''CodeLensOptions +-- --------------------------------------------------------------------- +{- +/** + * Code Action options. + */ +export interface CodeActionOptions { + /** + * CodeActionKinds that this server may return. + * + * The list of kinds may be generic, such as `CodeActionKind.Refactor`, or the server + * may list out every specific kind they provide. + */ + codeActionKinds?: CodeActionKind[]; +} +-} + +data CodeActionOptions = + CodeActionOptionsStatic Bool + | CodeActionOptions + { _codeActionKinds :: [CodeActionKind] + } deriving (Read,Show,Eq) + +deriveJSON (lspOptions { sumEncoding = A.UntaggedValue }) ''CodeActionOptions + -- --------------------------------------------------------------------- {- /** @@ -463,9 +488,11 @@ interface ServerCapabilities { */ workspaceSymbolProvider?: boolean; /** - * The server provides code actions. + * The server provides code actions. The `CodeActionOptions` return type is only + * valid if the client signals code action literal support via the property + * `textDocument.codeAction.codeActionLiteralSupport`. */ - codeActionProvider?: boolean; + codeActionProvider?: boolean | CodeActionOptions; /** * The server provides code lens. */ @@ -662,7 +689,7 @@ data InitializeResponseCapabilitiesInner = -- | The server provides workspace symbol support. , _workspaceSymbolProvider :: Maybe Bool -- | The server provides code actions. - , _codeActionProvider :: Maybe Bool + , _codeActionProvider :: Maybe CodeActionOptions -- | The server provides code lens. , _codeLensProvider :: Maybe CodeLensOptions -- | The server provides document formatting. diff --git a/src/Language/Haskell/LSP/Core.hs b/src/Language/Haskell/LSP/Core.hs index 9a6b6b335..83dec9434 100644 --- a/src/Language/Haskell/LSP/Core.hs +++ b/src/Language/Haskell/LSP/Core.hs @@ -105,6 +105,7 @@ data Options = , signatureHelpProvider :: Maybe J.SignatureHelpOptions , typeDefinitionProvider :: Maybe J.GotoOptions , implementationProvider :: Maybe J.GotoOptions + , codeActionProvider :: Maybe J.CodeActionOptions , codeLensProvider :: Maybe J.CodeLensOptions , documentOnTypeFormattingProvider :: Maybe J.DocumentOnTypeFormattingOptions , documentLinkProvider :: Maybe J.DocumentLinkOptions @@ -116,7 +117,7 @@ data Options = instance Default Options where def = Options Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing - Nothing + Nothing Nothing -- | A function to publish diagnostics. It aggregates all diagnostics pertaining -- to a particular version of a document, by source, and sends a @@ -846,7 +847,7 @@ initializeRequestHandler' onStartup mHandler tvarCtx req@(J.RequestMessage _ ori , J._documentHighlightProvider = supported (documentHighlightHandler h) , J._documentSymbolProvider = supported (documentSymbolHandler h) , J._workspaceSymbolProvider = supported (workspaceSymbolHandler h) - , J._codeActionProvider = supported (codeActionHandler h) + , J._codeActionProvider = codeActionProvider o , J._codeLensProvider = codeLensProvider o , J._documentFormattingProvider = supported (documentFormattingHandler h) , J._documentRangeFormattingProvider = supported (documentRangeFormattingHandler h) From 3043c6866f9b99e483db9030a011aeac28aa49b5 Mon Sep 17 00:00:00 2001 From: Tom McLaughlin Date: Tue, 16 Jul 2019 16:39:33 -0700 Subject: [PATCH 2/2] Add Maybe to [CodeActionKind] Co-Authored-By: Luke Lau --- .../src/Language/Haskell/LSP/Types/DataTypesJSON.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/haskell-lsp-types/src/Language/Haskell/LSP/Types/DataTypesJSON.hs b/haskell-lsp-types/src/Language/Haskell/LSP/Types/DataTypesJSON.hs index 6bffe1799..c656f0a09 100644 --- a/haskell-lsp-types/src/Language/Haskell/LSP/Types/DataTypesJSON.hs +++ b/haskell-lsp-types/src/Language/Haskell/LSP/Types/DataTypesJSON.hs @@ -279,7 +279,7 @@ export interface CodeActionOptions { data CodeActionOptions = CodeActionOptionsStatic Bool | CodeActionOptions - { _codeActionKinds :: [CodeActionKind] + { _codeActionKinds :: Maybe [CodeActionKind] } deriving (Read,Show,Eq) deriveJSON (lspOptions { sumEncoding = A.UntaggedValue }) ''CodeActionOptions