@@ -65,6 +65,7 @@ import Language.LSP.Protocol.Types (MarkupContent (MarkupCont
65
65
ParameterInformation (ParameterInformation ),
66
66
Position (Position ),
67
67
SignatureHelp (SignatureHelp ),
68
+ SignatureHelpContext (SignatureHelpContext ),
68
69
SignatureHelpParams (SignatureHelpParams ),
69
70
SignatureInformation (SignatureInformation ),
70
71
TextDocumentIdentifier (TextDocumentIdentifier ),
@@ -84,7 +85,7 @@ descriptor _recorder pluginId =
84
85
}
85
86
86
87
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
88
89
nfp <- getNormalizedFilePathE uri
89
90
results <- runIdeActionE " signatureHelp.ast" (shakeExtras ideState) $ do
90
91
-- TODO(@linj) why HAR {hieAst} may have more than one AST?
@@ -110,16 +111,26 @@ signatureHelpProvider ideState _pluginId (SignatureHelpParams (TextDocumentIdent
110
111
case results of
111
112
[(_functionName, [] , _argumentNumber)] -> pure $ InR Null
112
113
[(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
114
115
-- TODO(@linj) what does non-singleton list mean?
115
116
_ -> pure $ InR Null
116
117
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 =
119
120
SignatureHelp
120
121
(mkSignatureInformation docMap argDocMap argumentNumber functionName <$> functionTypes)
121
- ( Just 0 )
122
+ activeSignature
122
123
(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
123
134
124
135
mkSignatureInformation :: DocMap -> ArgDocMap -> UInt -> Name -> Type -> SignatureInformation
125
136
mkSignatureInformation docMap argDocMap argumentNumber functionName functionType =
0 commit comments