Skip to content

Commit 1418b7d

Browse files
authored
Merge branch 'master' into add-swarm
2 parents d0f5f5a + 2221206 commit 1418b7d

File tree

13 files changed

+240
-50
lines changed

13 files changed

+240
-50
lines changed

lsp-test/src/Language/LSP/Test/Parsing.hs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,7 @@ loggingNotification = named "Logging notification" $ satisfy shouldSkip
198198
shouldSkip (FromServerMess SWindowLogMessage _) = True
199199
shouldSkip (FromServerMess SWindowShowMessage _) = True
200200
shouldSkip (FromServerMess SWindowShowMessageRequest _) = True
201+
shouldSkip (FromServerMess SWindowShowDocument _) = True
201202
shouldSkip _ = False
202203

203204
-- | Matches a 'Language.LSP.Types.TextDocumentPublishDiagnostics'

lsp-test/src/Language/LSP/Test/Session.hs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,7 @@ runSessionMonad context state (Session session) = runReaderT (runStateT conduit
231231

232232
isLogNotification (ServerMessage (FromServerMess SWindowShowMessage _)) = True
233233
isLogNotification (ServerMessage (FromServerMess SWindowLogMessage _)) = True
234+
isLogNotification (ServerMessage (FromServerMess SWindowShowDocument _)) = True
234235
isLogNotification _ = False
235236

236237
watchdog :: ConduitM SessionMessage FromServerMessage (StateT SessionState (ReaderT SessionContext IO)) ()

lsp-types/src/Language/LSP/Types/Capabilities.hs

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ data LSPVersion = LSPVersion Int Int -- ^ Construct a major.minor version
3535
-- * 3.4 extended completion item and symbol item kinds
3636
-- * 3.0 dynamic registration
3737
capsForVersion :: LSPVersion -> ClientCapabilities
38-
capsForVersion (LSPVersion maj min) = ClientCapabilities (Just w) (Just td) (Just window) Nothing
38+
capsForVersion (LSPVersion maj min) = ClientCapabilities (Just w) (Just td) (Just window) (since 3 16 general) Nothing
3939
where
4040
w = WorkspaceClientCapabilities
4141
(Just True)
@@ -223,14 +223,7 @@ capsForVersion (LSPVersion maj min) = ClientCapabilities (Just w) (Just td) (Jus
223223
(since 3 16 (CodeActionResolveClientCapabilities (List [])))
224224
(since 3 16 True)
225225
caKs = CodeActionKindClientCapabilities
226-
(List [ CodeActionQuickFix
227-
, CodeActionRefactor
228-
, CodeActionRefactorExtract
229-
, CodeActionRefactorInline
230-
, CodeActionRefactorRewrite
231-
, CodeActionSource
232-
, CodeActionSourceOrganizeImports
233-
])
226+
(List specCodeActionKinds)
234227

235228
signatureHelpCapability =
236229
SignatureHelpClientCapabilities
@@ -285,4 +278,13 @@ capsForVersion (LSPVersion maj min) = ClientCapabilities (Just w) (Just td) (Jus
285278
| maj >= x && min >= y = Just a
286279
| otherwise = Nothing
287280

288-
window = WindowClientCapabilities (since 3 15 True)
281+
window =
282+
WindowClientCapabilities
283+
(since 3 15 True)
284+
(since 3 16 $ ShowMessageRequestClientCapabilities Nothing)
285+
(since 3 16 $ ShowDocumentClientCapabilities True)
286+
287+
general = GeneralClientCapabilities
288+
(since 3 16 $ StaleRequestClientCapabilities True (List []))
289+
(since 3 16 $ RegularExpressionsClientCapabilities "" Nothing)
290+
(since 3 16 $ MarkdownClientCapabilities "" Nothing)

lsp-types/src/Language/LSP/Types/ClientCapabilities.hs

Lines changed: 102 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ module Language.LSP.Types.ClientCapabilities where
66
import Data.Aeson.TH
77
import qualified Data.Aeson as A
88
import Data.Default
9+
import Data.Text (Text)
10+
911
import Language.LSP.Types.CallHierarchy
1012
import Language.LSP.Types.CodeAction
1113
import Language.LSP.Types.CodeLens
@@ -34,6 +36,8 @@ import Language.LSP.Types.Utils
3436
import Language.LSP.Types.WatchedFiles
3537
import Language.LSP.Types.WorkspaceEdit
3638
import Language.LSP.Types.WorkspaceSymbol
39+
import Language.LSP.Types.MarkupContent (MarkdownClientCapabilities)
40+
import Language.LSP.Types.Common (List)
3741

3842

3943
data WorkspaceClientCapabilities =
@@ -170,30 +174,122 @@ instance Default TextDocumentClientCapabilities where
170174

171175
-- ---------------------------------------------------------------------
172176

177+
-- | Capabilities specific to the `MessageActionItem` type.
178+
data MessageActionItemClientCapabilities =
179+
MessageActionItemClientCapabilities
180+
{
181+
-- | Whether the client supports additional attributes which
182+
-- are preserved and sent back to the server in the
183+
-- request's response.
184+
_additionalPropertiesSupport :: Maybe Bool
185+
} deriving (Show, Read, Eq)
186+
187+
deriveJSON lspOptions ''MessageActionItemClientCapabilities
188+
189+
-- | Show message request client capabilities
190+
data ShowMessageRequestClientCapabilities =
191+
ShowMessageRequestClientCapabilities
192+
{ -- | Capabilities specific to the `MessageActionItem` type.
193+
_messageActionItem :: Maybe MessageActionItemClientCapabilities
194+
} deriving (Show, Read, Eq)
195+
196+
deriveJSON lspOptions ''ShowMessageRequestClientCapabilities
197+
198+
-- | Client capabilities for the show document request.
199+
--
200+
-- @since 3.16.0
201+
data ShowDocumentClientCapabilities =
202+
ShowDocumentClientCapabilities
203+
{ -- | The client has support for the show document request
204+
_support :: Bool
205+
} deriving (Show, Read, Eq)
206+
207+
deriveJSON lspOptions ''ShowDocumentClientCapabilities
208+
173209
-- | Window specific client capabilities.
174210
data WindowClientCapabilities =
175211
WindowClientCapabilities
176212
{ -- | Whether client supports handling progress notifications.
213+
--
214+
-- @since 3.15.0
177215
_workDoneProgress :: Maybe Bool
216+
-- | Capabilities specific to the showMessage request
217+
--
218+
-- @since 3.16.0
219+
, _showMessage :: Maybe ShowMessageRequestClientCapabilities
220+
-- | Capabilities specific to the showDocument request
221+
--
222+
-- @since 3.16.0
223+
, _showDocument :: Maybe ShowDocumentClientCapabilities
178224
} deriving (Show, Read, Eq)
179225

180226
deriveJSON lspOptions ''WindowClientCapabilities
181227

182228
instance Default WindowClientCapabilities where
183-
def = WindowClientCapabilities def
229+
def = WindowClientCapabilities def def def
230+
231+
-- ---------------------------------------------------------------------
232+
233+
-- | Client capability that signals how the client
234+
-- handles stale requests (e.g. a request
235+
-- for which the client will not process the response
236+
-- anymore since the information is outdated).
237+
-- @since 3.17.0
238+
data StaleRequestClientCapabilities =
239+
StaleRequestClientCapabilities
240+
{ _cancel :: Bool
241+
, _retryOnContentModified :: List Text
242+
} deriving (Show, Read, Eq)
243+
244+
deriveJSON lspOptions ''StaleRequestClientCapabilities
245+
246+
-- | Client capabilities specific to the used markdown parser.
247+
-- @since 3.16.0
248+
data RegularExpressionsClientCapabilities =
249+
RegularExpressionsClientCapabilities
250+
{ _engine :: Text
251+
, _version :: Maybe Text
252+
} deriving (Show, Read, Eq)
253+
254+
deriveJSON lspOptions ''RegularExpressionsClientCapabilities
255+
256+
-- | General client capabilities.
257+
-- @since 3.16.0
258+
data GeneralClientCapabilities =
259+
GeneralClientCapabilities
260+
{
261+
_staleRequestSupport :: Maybe StaleRequestClientCapabilities
262+
-- | Client capabilities specific to regular expressions.
263+
-- @since 3.16.0
264+
, _regularExpressions :: Maybe RegularExpressionsClientCapabilities
265+
-- | Client capabilities specific to the client's markdown parser.
266+
-- @since 3.16.0
267+
, _markdown :: Maybe MarkdownClientCapabilities
268+
} deriving (Show, Read, Eq)
269+
270+
deriveJSON lspOptions ''GeneralClientCapabilities
271+
272+
instance Default GeneralClientCapabilities where
273+
def = GeneralClientCapabilities def def def
274+
275+
-- ---------------------------------------------------------------------
184276

185277
data ClientCapabilities =
186278
ClientCapabilities
187-
{ _workspace :: Maybe WorkspaceClientCapabilities
279+
{ -- | Workspace specific client capabilities
280+
_workspace :: Maybe WorkspaceClientCapabilities
281+
-- | Text document specific client capabilities
188282
, _textDocument :: Maybe TextDocumentClientCapabilities
189-
-- | Capabilities specific to `window/progress` requests. Experimental.
190-
--
191-
-- @since 0.10.0.0
283+
-- | Window specific client capabilities.
192284
, _window :: Maybe WindowClientCapabilities
285+
-- | General client capabilities.
286+
-- @since 3.16.0
287+
, _general :: Maybe GeneralClientCapabilities
288+
-- | Experimental client capabilities.
193289
, _experimental :: Maybe A.Object
194290
} deriving (Show, Read, Eq)
195291

196292
deriveJSON lspOptions ''ClientCapabilities
197293

198294
instance Default ClientCapabilities where
199-
def = ClientCapabilities def def def def
295+
def = ClientCapabilities def def def def def

lsp-types/src/Language/LSP/Types/CodeAction.hs

Lines changed: 51 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ module Language.LSP.Types.CodeAction where
66
import Data.Aeson.TH
77
import Data.Aeson.Types
88
import Data.Default
9+
import Data.String
910
import Data.Text ( Text )
11+
import qualified Data.Text as T
1012
import Language.LSP.Types.Command
1113
import Language.LSP.Types.Diagnostic
1214
import Language.LSP.Types.Common
@@ -62,29 +64,57 @@ data CodeActionKind
6264
| CodeActionUnknown Text
6365
deriving (Read, Show, Eq)
6466

67+
fromHierarchicalString :: Text -> CodeActionKind
68+
fromHierarchicalString t = case t of
69+
"" -> CodeActionEmpty
70+
"quickfix" -> CodeActionQuickFix
71+
"refactor" -> CodeActionRefactor
72+
"refactor.extract" -> CodeActionRefactorExtract
73+
"refactor.inline" -> CodeActionRefactorInline
74+
"refactor.rewrite" -> CodeActionRefactorRewrite
75+
"source" -> CodeActionSource
76+
"source.organizeImports" -> CodeActionSourceOrganizeImports
77+
s -> CodeActionUnknown s
78+
79+
toHierarchicalString :: CodeActionKind -> Text
80+
toHierarchicalString k = case k of
81+
CodeActionEmpty -> ""
82+
CodeActionQuickFix -> "quickfix"
83+
CodeActionRefactor -> "refactor"
84+
CodeActionRefactorExtract -> "refactor.extract"
85+
CodeActionRefactorInline -> "refactor.inline"
86+
CodeActionRefactorRewrite -> "refactor.rewrite"
87+
CodeActionSource -> "source"
88+
CodeActionSourceOrganizeImports -> "source.organizeImports"
89+
(CodeActionUnknown s) -> s
90+
91+
instance IsString CodeActionKind where
92+
fromString = fromHierarchicalString . T.pack
93+
6594
instance ToJSON CodeActionKind where
66-
toJSON CodeActionEmpty = String ""
67-
toJSON CodeActionQuickFix = String "quickfix"
68-
toJSON CodeActionRefactor = String "refactor"
69-
toJSON CodeActionRefactorExtract = String "refactor.extract"
70-
toJSON CodeActionRefactorInline = String "refactor.inline"
71-
toJSON CodeActionRefactorRewrite = String "refactor.rewrite"
72-
toJSON CodeActionSource = String "source"
73-
toJSON CodeActionSourceOrganizeImports = String "source.organizeImports"
74-
toJSON (CodeActionUnknown s) = String s
95+
toJSON = String . toHierarchicalString
7596

7697
instance FromJSON CodeActionKind where
77-
parseJSON (String "") = pure CodeActionEmpty
78-
parseJSON (String "quickfix") = pure CodeActionQuickFix
79-
parseJSON (String "refactor") = pure CodeActionRefactor
80-
parseJSON (String "refactor.extract") = pure CodeActionRefactorExtract
81-
parseJSON (String "refactor.inline") = pure CodeActionRefactorInline
82-
parseJSON (String "refactor.rewrite") = pure CodeActionRefactorRewrite
83-
parseJSON (String "source") = pure CodeActionSource
84-
parseJSON (String "source.organizeImports") = pure CodeActionSourceOrganizeImports
85-
parseJSON (String s) = pure (CodeActionUnknown s)
86-
parseJSON _ = fail "CodeActionKind"
87-
98+
parseJSON (String s) = pure $ fromHierarchicalString s
99+
parseJSON _ = fail "CodeActionKind"
100+
101+
-- | Does the first 'CodeActionKind' subsume the other one, hierarchically. Reflexive.
102+
codeActionKindSubsumes :: CodeActionKind -> CodeActionKind -> Bool
103+
-- Simple but ugly implementation: prefix on the string representation
104+
codeActionKindSubsumes parent child = toHierarchicalString parent `T.isPrefixOf` toHierarchicalString child
105+
106+
-- | The 'CodeActionKind's listed in the LSP spec specifically.
107+
specCodeActionKinds :: [CodeActionKind]
108+
specCodeActionKinds = [
109+
CodeActionQuickFix
110+
, CodeActionRefactor
111+
, CodeActionRefactorExtract
112+
, CodeActionRefactorInline
113+
, CodeActionRefactorRewrite
114+
, CodeActionSource
115+
, CodeActionSourceOrganizeImports
116+
]
117+
88118
-- -------------------------------------
89119

90120
data CodeActionKindClientCapabilities =
@@ -99,15 +129,7 @@ data CodeActionKindClientCapabilities =
99129
deriveJSON lspOptions ''CodeActionKindClientCapabilities
100130

101131
instance Default CodeActionKindClientCapabilities where
102-
def = CodeActionKindClientCapabilities (List allKinds)
103-
where allKinds = [ CodeActionQuickFix
104-
, CodeActionRefactor
105-
, CodeActionRefactorExtract
106-
, CodeActionRefactorInline
107-
, CodeActionRefactorRewrite
108-
, CodeActionSource
109-
, CodeActionSourceOrganizeImports
110-
]
132+
def = CodeActionKindClientCapabilities (List specCodeActionKinds)
111133

112134
data CodeActionLiteralSupport =
113135
CodeActionLiteralSupport

lsp-types/src/Language/LSP/Types/Lens.hs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,12 @@ import Control.Lens.TH
5757
-- TODO: This is out of date and very unmantainable, use TH to call all these!!
5858

5959
-- client capabilities
60+
makeFieldsNoPrefix ''MessageActionItemClientCapabilities
61+
makeFieldsNoPrefix ''ShowMessageRequestClientCapabilities
62+
makeFieldsNoPrefix ''ShowDocumentClientCapabilities
63+
makeFieldsNoPrefix ''StaleRequestClientCapabilities
64+
makeFieldsNoPrefix ''RegularExpressionsClientCapabilities
65+
makeFieldsNoPrefix ''GeneralClientCapabilities
6066
makeFieldsNoPrefix ''WorkspaceClientCapabilities
6167
makeFieldsNoPrefix ''WindowClientCapabilities
6268
makeFieldsNoPrefix ''ClientCapabilities
@@ -115,6 +121,7 @@ makeFieldsNoPrefix ''LocationLink
115121

116122
-- Markup
117123
makeFieldsNoPrefix ''MarkupContent
124+
makeFieldsNoPrefix ''MarkdownClientCapabilities
118125

119126
-- Completion
120127
makeFieldsNoPrefix ''CompletionDoc
@@ -335,6 +342,8 @@ makeFieldsNoPrefix ''TypeDefinitionClientCapabilities
335342
makeFieldsNoPrefix ''ShowMessageParams
336343
makeFieldsNoPrefix ''MessageActionItem
337344
makeFieldsNoPrefix ''ShowMessageRequestParams
345+
makeFieldsNoPrefix ''ShowDocumentParams
346+
makeFieldsNoPrefix ''ShowDocumentResult
338347
makeFieldsNoPrefix ''LogMessageParams
339348
makeFieldsNoPrefix ''ProgressParams
340349
makeFieldsNoPrefix ''WorkDoneProgressBeginParams

lsp-types/src/Language/LSP/Types/MarkupContent.hs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,3 +100,12 @@ instance Monoid MarkupContent where
100100

101101
-- ---------------------------------------------------------------------
102102

103+
-- | Client capabilities specific to the used markdown parser.
104+
-- @since 3.16.0
105+
data MarkdownClientCapabilities =
106+
MarkdownClientCapabilities
107+
{ _parser :: Text
108+
, _version :: Maybe Text
109+
} deriving (Show, Read, Eq)
110+
111+
deriveJSON lspOptions ''MarkdownClientCapabilities

lsp-types/src/Language/LSP/Types/Message.hs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ type family MessageParams (m :: Method f t) :: Type where
136136
-- Window
137137
MessageParams WindowShowMessage = ShowMessageParams
138138
MessageParams WindowShowMessageRequest = ShowMessageRequestParams
139+
MessageParams WindowShowDocument = ShowDocumentParams
139140
MessageParams WindowLogMessage = LogMessageParams
140141
-- Progress
141142
MessageParams WindowWorkDoneProgressCreate = WorkDoneProgressCreateParams
@@ -219,6 +220,7 @@ type family ResponseResult (m :: Method f Request) :: Type where
219220
-- Server
220221
-- Window
221222
ResponseResult WindowShowMessageRequest = Maybe MessageActionItem
223+
ResponseResult WindowShowDocument = ShowDocumentResult
222224
ResponseResult WindowWorkDoneProgressCreate = Empty
223225
-- Capability
224226
ResponseResult ClientRegisterCapability = Empty

lsp-types/src/Language/LSP/Types/Method.hs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ data Method (f :: From) (t :: MethodType) where
9090
-- Window
9191
WindowShowMessage :: Method FromServer Notification
9292
WindowShowMessageRequest :: Method FromServer Request
93+
WindowShowDocument :: Method FromServer Request
9394
WindowLogMessage :: Method FromServer Notification
9495
WindowWorkDoneProgressCancel :: Method FromClient Notification
9596
WindowWorkDoneProgressCreate :: Method FromServer Request
@@ -167,6 +168,7 @@ data SMethod (m :: Method f t) where
167168

168169
SWindowShowMessage :: SMethod WindowShowMessage
169170
SWindowShowMessageRequest :: SMethod WindowShowMessageRequest
171+
SWindowShowDocument :: SMethod WindowShowDocument
170172
SWindowLogMessage :: SMethod WindowLogMessage
171173
SWindowWorkDoneProgressCreate :: SMethod WindowWorkDoneProgressCreate
172174
SWindowWorkDoneProgressCancel :: SMethod WindowWorkDoneProgressCancel
@@ -307,6 +309,7 @@ instance A.FromJSON SomeServerMethod where
307309
-- Window
308310
parseJSON (A.String "window/showMessage") = pure $ SomeServerMethod SWindowShowMessage
309311
parseJSON (A.String "window/showMessageRequest") = pure $ SomeServerMethod SWindowShowMessageRequest
312+
parseJSON (A.String "window/showDocument") = pure $ SomeServerMethod SWindowShowDocument
310313
parseJSON (A.String "window/logMessage") = pure $ SomeServerMethod SWindowLogMessage
311314
parseJSON (A.String "window/workDoneProgress/create") = pure $ SomeServerMethod SWindowWorkDoneProgressCreate
312315
parseJSON (A.String "$/progress") = pure $ SomeServerMethod SProgress
@@ -400,6 +403,7 @@ instance A.ToJSON (SMethod m) where
400403
-- Window
401404
toJSON SWindowShowMessage = A.String "window/showMessage"
402405
toJSON SWindowShowMessageRequest = A.String "window/showMessageRequest"
406+
toJSON SWindowShowDocument = A.String "window/showDocument"
403407
toJSON SWindowLogMessage = A.String "window/logMessage"
404408
toJSON SWindowWorkDoneProgressCreate = A.String "window/workDoneProgress/create"
405409
toJSON SProgress = A.String "$/progress"

0 commit comments

Comments
 (0)