Skip to content

Commit e6702b7

Browse files
committed
Remember previous active signature
1 parent e0a7e8b commit e6702b7

File tree

1 file changed

+16
-5
lines changed

1 file changed

+16
-5
lines changed

plugins/hls-signature-help-plugin/src/Ide/Plugin/SignatureHelp.hs

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ import Language.LSP.Protocol.Types (MarkupContent (MarkupCont
6565
ParameterInformation (ParameterInformation),
6666
Position (Position),
6767
SignatureHelp (SignatureHelp),
68+
SignatureHelpContext (SignatureHelpContext),
6869
SignatureHelpParams (SignatureHelpParams),
6970
SignatureInformation (SignatureInformation),
7071
TextDocumentIdentifier (TextDocumentIdentifier),
@@ -84,7 +85,7 @@ descriptor _recorder pluginId =
8485
}
8586

8687
signatureHelpProvider :: PluginMethodHandler IdeState Method_TextDocumentSignatureHelp
87-
signatureHelpProvider ideState _pluginId (SignatureHelpParams (TextDocumentIdentifier uri) position _mProgreeToken _mContext) = do
88+
signatureHelpProvider ideState _pluginId (SignatureHelpParams (TextDocumentIdentifier uri) position _mProgreeToken mSignatureHelpContext) = do
8889
nfp <- getNormalizedFilePathE uri
8990
results <- runIdeActionE "signatureHelp.ast" (shakeExtras ideState) $ do
9091
-- TODO(@linj) why HAR {hieAst} may have more than one AST?
@@ -110,16 +111,26 @@ signatureHelpProvider ideState _pluginId (SignatureHelpParams (TextDocumentIdent
110111
case results of
111112
[(_functionName, [], _argumentNumber)] -> pure $ InR Null
112113
[(functionName, functionTypes, argumentNumber)] ->
113-
pure $ InL $ mkSignatureHelp docMap argDocMap (fromIntegral argumentNumber - 1) functionName functionTypes
114+
pure $ InL $ mkSignatureHelp mSignatureHelpContext docMap argDocMap (fromIntegral argumentNumber - 1) functionName functionTypes
114115
-- TODO(@linj) what does non-singleton list mean?
115116
_ -> pure $ InR Null
116117

117-
mkSignatureHelp :: DocMap -> ArgDocMap -> UInt -> Name -> [Type] -> SignatureHelp
118-
mkSignatureHelp docMap argDocMap argumentNumber functionName functionTypes =
118+
mkSignatureHelp :: Maybe SignatureHelpContext -> DocMap -> ArgDocMap -> UInt -> Name -> [Type] -> SignatureHelp
119+
mkSignatureHelp mSignatureHelpContext docMap argDocMap argumentNumber functionName functionTypes =
119120
SignatureHelp
120121
(mkSignatureInformation docMap argDocMap argumentNumber functionName <$> functionTypes)
121-
(Just 0)
122+
activeSignature
122123
(Just $ InL argumentNumber)
124+
where
125+
activeSignature = case mSignatureHelpContext of
126+
Just
127+
( SignatureHelpContext
128+
_triggerKind
129+
_triggerCharacter
130+
True
131+
(Just (SignatureHelp _signatures oldActivateSignature _activeParameter))
132+
) -> oldActivateSignature
133+
_ -> Just 0
123134

124135
mkSignatureInformation :: DocMap -> ArgDocMap -> UInt -> Name -> Type -> SignatureInformation
125136
mkSignatureInformation docMap argDocMap argumentNumber functionName functionType =

0 commit comments

Comments
 (0)