@@ -780,6 +780,8 @@ extension SourceKitLSPServer: QueueBasedMessageHandler {
780780 await self . handleRequest ( for: request, requestHandler: self . completion)
781781 case let request as RequestAndReply < CompletionItemResolveRequest > :
782782 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)
783785 case let request as RequestAndReply < DeclarationRequest > :
784786 await self . handleRequest ( for: request, requestHandler: self . declaration)
785787 case let request as RequestAndReply < DefinitionRequest > :
@@ -1075,6 +1077,15 @@ extension SourceKitLSPServer {
10751077 triggerCharacters: [ " . " , " ( " ]
10761078 )
10771079
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+
10781089 let onTypeFormattingOptions =
10791090 options. hasExperimentalFeature ( . onTypeFormatting)
10801091 ? DocumentOnTypeFormattingOptions ( triggerCharacters: [ " \n " , " \r \n " , " \r " , " { " , " } " , " ; " , " . " , " : " , " # " ] )
@@ -1129,6 +1140,7 @@ extension SourceKitLSPServer {
11291140 ) ,
11301141 hoverProvider: . bool( true ) ,
11311142 completionProvider: completionOptions,
1143+ signatureHelpProvider: signatureHelpOptions,
11321144 definitionProvider: . bool( true ) ,
11331145 implementationProvider: . bool( true ) ,
11341146 referencesProvider: . bool( true ) ,
@@ -1177,6 +1189,9 @@ extension SourceKitLSPServer {
11771189 if let completionOptions = server. completionProvider {
11781190 await registry. registerCompletionIfNeeded ( options: completionOptions, for: languages, server: self )
11791191 }
1192+ if let signatureHelpOptions = server. signatureHelpProvider {
1193+ await registry. registerSignatureHelpIfNeeded ( options: signatureHelpOptions, for: languages, server: self )
1194+ }
11801195 if server. foldingRangeProvider? . isSupported == true {
11811196 await registry. registerFoldingRangeIfNeeded ( options: FoldingRangeOptions ( ) , for: languages, server: self )
11821197 }
@@ -1638,6 +1653,14 @@ extension SourceKitLSPServer {
16381653 return try await languageService. hover ( req)
16391654 }
16401655
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+
16411664 /// Handle a workspace/symbol request, returning the SymbolInformation.
16421665 /// - returns: An array with SymbolInformation for each matching symbol in the workspace.
16431666 func workspaceSymbols( _ req: WorkspaceSymbolsRequest ) async throws -> [ WorkspaceSymbolItem ] ? {
0 commit comments