diff --git a/lsp-types/src/Language/LSP/Types/Capabilities.hs b/lsp-types/src/Language/LSP/Types/Capabilities.hs index f20817ed2..92bf6d3d5 100644 --- a/lsp-types/src/Language/LSP/Types/Capabilities.hs +++ b/lsp-types/src/Language/LSP/Types/Capabilities.hs @@ -9,11 +9,11 @@ module Language.LSP.Types.Capabilities , capsForVersion ) where -import Prelude hiding (min) +import Language.LSP.Types import Language.LSP.Types.ClientCapabilities import Language.LSP.Types.ServerCapabilities import Language.LSP.Types.WorkspaceEdit -import Language.LSP.Types +import Prelude hiding (min) -- | Capabilities for full conformance to the current (v3.15) LSP specification. fullCaps :: ClientCapabilities @@ -168,6 +168,7 @@ capsForVersion (LSPVersion maj min) = ClientCapabilities (Just w) (Just td) (Jus (since 3 16 True) (since 3 16 (CompletionItemResolveClientCapabilities (List ["documentation", "details"]))) (since 3 16 (CompletionItemInsertTextModeClientCapabilities (List []))) + (since 3 17 True) completionItemKindCapabilities = CompletionItemKindClientCapabilities (Just ciKs) diff --git a/lsp-types/src/Language/LSP/Types/Completion.hs b/lsp-types/src/Language/LSP/Types/Completion.hs index e1f17f168..c7746a5e9 100644 --- a/lsp-types/src/Language/LSP/Types/Completion.hs +++ b/lsp-types/src/Language/LSP/Types/Completion.hs @@ -9,12 +9,12 @@ import Data.Scientific ( Scientific ) import Data.Text ( Text ) import Language.LSP.Types.Command import Language.LSP.Types.Common +import Language.LSP.Types.Location (Range) import Language.LSP.Types.MarkupContent import Language.LSP.Types.Progress import Language.LSP.Types.TextDocument import Language.LSP.Types.Utils import Language.LSP.Types.WorkspaceEdit -import Language.LSP.Types.Location (Range) data CompletionItemKind = CiText | CiMethod @@ -117,7 +117,6 @@ data CompletionItemTagsClientCapabilities = { -- | The tag supported by the client. _valueSet :: List CompletionItemTag } deriving (Show, Read, Eq) - deriveJSON lspOptions ''CompletionItemTagsClientCapabilities data CompletionItemResolveClientCapabilities = @@ -125,9 +124,19 @@ data CompletionItemResolveClientCapabilities = { -- | The properties that a client can resolve lazily. _properties :: List Text } deriving (Show, Read, Eq) - deriveJSON lspOptions ''CompletionItemResolveClientCapabilities +data ServerCompletionItemCapabilities = + ServerCompletionItemCapabilities + { -- | The server has support for completion item label + -- details (see also `CompletionItemLabelDetails`) when receiving + -- a completion item in a resolve call. + -- + -- @since 3.17.0 + labelDetailsSupport :: Maybe Bool + } deriving (Show, Read, Eq) +deriveJSON lspOptionsUntagged ''ServerCompletionItemCapabilities + {-| How whitespace and indentation is handled during completion item insertion. @@ -214,6 +223,11 @@ data CompletionItemClientCapabilities = -- -- @since 3.16.0 , _insertTextModeSupport :: Maybe CompletionItemInsertTextModeClientCapabilities + -- | The client has support for completion item label + -- details (see also `CompletionItemLabelDetails`). + -- + -- @since 3.17.0 + , labelDetailsSupport :: Maybe Bool } deriving (Show, Read, Eq) deriveJSON lspOptions ''CompletionItemClientCapabilities @@ -282,14 +296,22 @@ deriveJSON lspOptions ''InsertReplaceEdit data CompletionEdit = CompletionEditText TextEdit | CompletionEditInsertReplace InsertReplaceEdit deriving (Read,Show,Eq) - deriveJSON lspOptionsUntagged ''CompletionEdit +data CompletionItemLabelDetails = + CompletionItemLabelDetails + { _detail :: Text + , _description :: Maybe Text + } + deriving (Read, Show, Eq) +deriveJSON lspOptionsUntagged ''CompletionItemLabelDetails + data CompletionItem = CompletionItem { _label :: Text -- ^ The label of this completion item. By default also - -- the text that is inserted when selecting this - -- completion. + -- the text that is inserted when selecting this + -- completion. + , _labelDetails :: Maybe CompletionItemLabelDetails -- ^ Additional details for the label , _kind :: Maybe CompletionItemKind , _tags :: Maybe (List CompletionItemTag) -- ^ Tags for this completion item. , _detail :: Maybe Text -- ^ A human-readable string with additional @@ -387,6 +409,7 @@ makeExtendingDatatype "CompletionOptions" [''WorkDoneProgressOptions] [ ("_triggerCharacters", [t| Maybe [Text] |]) , ("_allCommitCharacters", [t| Maybe [Text] |]) , ("_resolveProvider", [t| Maybe Bool|]) + , ("_labelDetailsSupport", [t| Maybe ServerCompletionItemCapabilities |]) ] deriveJSON lspOptions ''CompletionOptions @@ -415,4 +438,3 @@ makeExtendingDatatype "CompletionParams" ] [ ("_context", [t| Maybe CompletionContext |]) ] deriveJSON lspOptions ''CompletionParams - diff --git a/lsp/src/Language/LSP/Server/Processing.hs b/lsp/src/Language/LSP/Server/Processing.hs index 6488030b3..8c4e8592e 100644 --- a/lsp/src/Language/LSP/Server/Processing.hs +++ b/lsp/src/Language/LSP/Server/Processing.hs @@ -36,7 +36,7 @@ import Language.LSP.Server.Core import Language.LSP.VFS as VFS import qualified Data.Functor.Product as P import qualified Control.Exception as E -import Data.Monoid +import Data.Monoid import Control.Monad import Control.Monad.IO.Class import Control.Monad.Except () @@ -50,7 +50,7 @@ import Data.Text.Prettyprint.Doc import System.Exit import Data.Default (def) import Control.Monad.State -import Control.Monad.Writer.Strict +import Control.Monad.Writer.Strict import Data.Foldable (traverse_) data LspProcessingLog = @@ -235,6 +235,7 @@ inferServerCapabilities clientCaps o h = (map T.singleton <$> completionTriggerCharacters o) (map T.singleton <$> completionAllCommitCharacters o) (supported SCompletionItemResolve) + (Just (ServerCompletionItemCapabilities Nothing)) | otherwise = Nothing clientSupportsCodeActionKinds = isJust $