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..c656f0a09 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 :: Maybe [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)