@@ -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
8687signatureHelpProvider :: 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
124135mkSignatureInformation :: DocMap -> ArgDocMap -> UInt -> Name -> Type -> SignatureInformation
125136mkSignatureInformation docMap argDocMap argumentNumber functionName functionType =
0 commit comments