@@ -780,6 +780,8 @@ extension SourceKitLSPServer: QueueBasedMessageHandler {
780
780
await self . handleRequest ( for: request, requestHandler: self . completion)
781
781
case let request as RequestAndReply < CompletionItemResolveRequest > :
782
782
await request. reply { try await completionItemResolve ( request: request. params) }
783
+ case let request as RequestAndReply < SignatureHelpRequest > :
784
+ await self . handleRequest ( for: request, requestHandler: self . signatureHelp)
783
785
case let request as RequestAndReply < DeclarationRequest > :
784
786
await self . handleRequest ( for: request, requestHandler: self . declaration)
785
787
case let request as RequestAndReply < DefinitionRequest > :
@@ -1075,6 +1077,15 @@ extension SourceKitLSPServer {
1075
1077
triggerCharacters: [ " . " , " ( " ]
1076
1078
)
1077
1079
1080
+ let signatureHelpOptions =
1081
+ await registry. clientHasDynamicSignatureHelpRegistration
1082
+ ? nil
1083
+ : LanguageServerProtocol . SignatureHelpOptions (
1084
+ triggerCharacters: [ " ( " , " [ " ] ,
1085
+ // We retrigger on `:` as it's potentially after an argument label which can change the active parameter or signature.
1086
+ retriggerCharacters: [ " , " , " : " ]
1087
+ )
1088
+
1078
1089
let onTypeFormattingOptions =
1079
1090
options. hasExperimentalFeature ( . onTypeFormatting)
1080
1091
? DocumentOnTypeFormattingOptions ( triggerCharacters: [ " \n " , " \r \n " , " \r " , " { " , " } " , " ; " , " . " , " : " , " # " ] )
@@ -1129,6 +1140,7 @@ extension SourceKitLSPServer {
1129
1140
) ,
1130
1141
hoverProvider: . bool( true ) ,
1131
1142
completionProvider: completionOptions,
1143
+ signatureHelpProvider: signatureHelpOptions,
1132
1144
definitionProvider: . bool( true ) ,
1133
1145
implementationProvider: . bool( true ) ,
1134
1146
referencesProvider: . bool( true ) ,
@@ -1177,6 +1189,9 @@ extension SourceKitLSPServer {
1177
1189
if let completionOptions = server. completionProvider {
1178
1190
await registry. registerCompletionIfNeeded ( options: completionOptions, for: languages, server: self )
1179
1191
}
1192
+ if let signatureHelpOptions = server. signatureHelpProvider {
1193
+ await registry. registerSignatureHelpIfNeeded ( options: signatureHelpOptions, for: languages, server: self )
1194
+ }
1180
1195
if server. foldingRangeProvider? . isSupported == true {
1181
1196
await registry. registerFoldingRangeIfNeeded ( options: FoldingRangeOptions ( ) , for: languages, server: self )
1182
1197
}
@@ -1638,6 +1653,14 @@ extension SourceKitLSPServer {
1638
1653
return try await languageService. hover ( req)
1639
1654
}
1640
1655
1656
+ func signatureHelp(
1657
+ _ req: SignatureHelpRequest ,
1658
+ workspace: Workspace ,
1659
+ languageService: LanguageService
1660
+ ) async throws -> SignatureHelp ? {
1661
+ return try await languageService. signatureHelp ( req)
1662
+ }
1663
+
1641
1664
/// Handle a workspace/symbol request, returning the SymbolInformation.
1642
1665
/// - returns: An array with SymbolInformation for each matching symbol in the workspace.
1643
1666
func workspaceSymbols( _ req: WorkspaceSymbolsRequest ) async throws -> [ WorkspaceSymbolItem ] ? {
0 commit comments