@@ -69,12 +69,14 @@ module Language.LSP.Test
69
69
, executeCommand
70
70
-- ** Code Actions
71
71
, getCodeActions
72
+ , getAndResolveCodeActions
72
73
, getAllCodeActions
73
74
, executeCodeAction
74
75
, resolveCodeAction
75
76
, resolveAndExecuteCodeAction
76
77
-- ** Completions
77
78
, getCompletions
79
+ , getAndResolveCompletions
78
80
-- ** References
79
81
, getReferences
80
82
-- ** Definitions
@@ -95,6 +97,7 @@ module Language.LSP.Test
95
97
, applyEdit
96
98
-- ** Code lenses
97
99
, getCodeLenses
100
+ , getAndResolveCodeLenses
98
101
, resolveCodeLens
99
102
-- ** Call hierarchy
100
103
, prepareCallHierarchy
@@ -533,6 +536,17 @@ getCodeActions doc range = do
533
536
Right (InR _) -> return []
534
537
Left error -> throw (UnexpectedResponseError (SomeLspId $ fromJust $ rsp ^. L. id ) error )
535
538
539
+ -- | Returns the Returns the code actions in the specified range, resolving any with
540
+ -- a non empty _data_ field.
541
+ getAndResolveCodeActions :: TextDocumentIdentifier -> Range -> Session [Command |? CodeAction ]
542
+ getAndResolveCodeActions doc range = do
543
+ items <- getCodeActions doc range
544
+ forM items leaveCommandResolveCodeAction
545
+ where leaveCommandResolveCodeAction l@ (InL _) = pure l
546
+ leaveCommandResolveCodeAction (InR r) | isJust (r ^. L. data_) =
547
+ InR <$> resolveCodeAction r
548
+ leaveCommandResolveCodeAction r@ (InR _) = pure r
549
+
536
550
-- | Returns all the code actions in a document by
537
551
-- querying the code actions at each of the current
538
552
-- diagnostics' positions.
@@ -667,6 +681,21 @@ getCompletions doc pos = do
667
681
InR (InL c) -> return $ c ^. L. items
668
682
InR (InR _) -> return []
669
683
684
+ -- | Returns the completions for the position in the document, resolving any with
685
+ -- a non empty _data_ field.
686
+ getAndResolveCompletions :: TextDocumentIdentifier -> Position -> Session [CompletionItem ]
687
+ getAndResolveCompletions doc pos = do
688
+ items <- getCompletions doc pos
689
+ forM items (\ item -> if isJust (item ^. L. data_) then resolveCompletion item else pure item)
690
+
691
+ -- | Resolves the provided completion item.
692
+ resolveCompletion :: CompletionItem -> Session CompletionItem
693
+ resolveCompletion ci = do
694
+ rsp <- request SMethod_CompletionItemResolve ci
695
+ case rsp ^. L. result of
696
+ Right ci -> return ci
697
+ Left error -> throw (UnexpectedResponseError (SomeLspId $ fromJust $ rsp ^. L. id ) error )
698
+
670
699
-- | Returns the references for the position in the document.
671
700
getReferences :: TextDocumentIdentifier -- ^ The document to lookup in.
672
701
-> Position -- ^ The position to lookup.
@@ -768,6 +797,13 @@ getCodeLenses tId = do
768
797
rsp <- request SMethod_TextDocumentCodeLens (CodeLensParams Nothing Nothing tId)
769
798
pure $ absorbNull $ getResponseResult rsp
770
799
800
+ -- | RReturns the code lenses for the specified document, resolving any with
801
+ -- a non empty _data_ field.
802
+ getAndResolveCodeLenses :: TextDocumentIdentifier -> Session [CodeLens ]
803
+ getAndResolveCodeLenses tId = do
804
+ codeLenses <- getCodeLenses tId
805
+ forM codeLenses (\ codeLens -> if isJust (codeLens ^. L. data_) then resolveCodeLens codeLens else pure codeLens)
806
+
771
807
-- | Resolves the provided code lens.
772
808
resolveCodeLens :: CodeLens -> Session CodeLens
773
809
resolveCodeLens cl = do
0 commit comments