@@ -263,7 +263,20 @@ class CodeCompletionSession {
263
263
self . clientSupportsDocumentationResolve =
264
264
clientCapabilities. textDocument? . completion? . completionItem? . resolveSupport? . properties. contains ( " documentation " )
265
265
?? false
266
+ }
266
267
268
+ private func send(
269
+ sourceKitDRequest requestUid: KeyPath < sourcekitd_api_requests , sourcekitd_api_uid_t > & Sendable ,
270
+ _ request: SKDRequestDictionary ,
271
+ snapshot: DocumentSnapshot ?
272
+ ) async throws -> SKDResponseDictionary {
273
+ try await sourcekitd. send (
274
+ requestUid,
275
+ request,
276
+ timeout: options. sourcekitdRequestTimeoutOrDefault,
277
+ documentUrl: snapshot? . uri. arbitrarySchemeURL,
278
+ fileContents: snapshot? . text
279
+ )
267
280
}
268
281
269
282
private func open(
@@ -278,7 +291,6 @@ class CodeCompletionSession {
278
291
279
292
let sourcekitdPosition = snapshot. sourcekitdPosition ( of: self . position)
280
293
let req = sourcekitd. dictionary ( [
281
- keys. request: sourcekitd. requests. codeCompleteOpen,
282
294
keys. line: sourcekitdPosition. line,
283
295
keys. column: sourcekitdPosition. utf8Column,
284
296
keys. name: uri. pseudoPath,
@@ -287,11 +299,7 @@ class CodeCompletionSession {
287
299
keys. codeCompleteOptions: optionsDictionary ( filterText: filterText) ,
288
300
] )
289
301
290
- let dict = try await sourcekitd. send (
291
- req,
292
- timeout: options. sourcekitdRequestTimeoutOrDefault,
293
- fileContents: snapshot. text
294
- )
302
+ let dict = try await send ( sourceKitDRequest: \. codeCompleteOpen, req, snapshot: snapshot)
295
303
self . state = . open
296
304
297
305
guard let completions: SKDResponseArray = dict [ keys. results] else {
@@ -317,19 +325,14 @@ class CodeCompletionSession {
317
325
logger. info ( " Updating code completion session: \( self . description) filter= \( filterText) " )
318
326
let sourcekitdPosition = snapshot. sourcekitdPosition ( of: self . position)
319
327
let req = sourcekitd. dictionary ( [
320
- keys. request: sourcekitd. requests. codeCompleteUpdate,
321
328
keys. line: sourcekitdPosition. line,
322
329
keys. column: sourcekitdPosition. utf8Column,
323
330
keys. name: uri. pseudoPath,
324
331
keys. sourceFile: uri. pseudoPath,
325
332
keys. codeCompleteOptions: optionsDictionary ( filterText: filterText) ,
326
333
] )
327
334
328
- let dict = try await sourcekitd. send (
329
- req,
330
- timeout: options. sourcekitdRequestTimeoutOrDefault,
331
- fileContents: snapshot. text
332
- )
335
+ let dict = try await send ( sourceKitDRequest: \. codeCompleteUpdate, req, snapshot: snapshot)
333
336
guard let completions: SKDResponseArray = dict [ keys. results] else {
334
337
return CompletionList ( isIncomplete: false , items: [ ] )
335
338
}
@@ -370,15 +373,14 @@ class CodeCompletionSession {
370
373
case . open:
371
374
let sourcekitdPosition = snapshot. sourcekitdPosition ( of: self . position)
372
375
let req = sourcekitd. dictionary ( [
373
- keys. request: sourcekitd. requests. codeCompleteClose,
374
376
keys. line: sourcekitdPosition. line,
375
377
keys. column: sourcekitdPosition. utf8Column,
376
378
keys. sourceFile: snapshot. uri. pseudoPath,
377
379
keys. name: snapshot. uri. pseudoPath,
378
380
keys. codeCompleteOptions: [ keys. useNewAPI: 1 ] ,
379
381
] )
380
382
logger. info ( " Closing code completion session: \( self . description) " )
381
- _ = try ? await sourcekitd . send ( req , timeout : options . sourcekitdRequestTimeoutOrDefault , fileContents : nil )
383
+ _ = try ? await send ( sourceKitDRequest : \ . codeCompleteClose , req , snapshot : nil )
382
384
self . state = . closed
383
385
}
384
386
}
@@ -548,11 +550,16 @@ class CodeCompletionSession {
548
550
var item = item
549
551
if let itemId = CompletionItemData ( fromLSPAny: item. data) ? . itemId {
550
552
let req = sourcekitd. dictionary ( [
551
- sourcekitd. keys. request: sourcekitd. requests. codeCompleteDocumentation,
552
- sourcekitd. keys. identifier: itemId,
553
+ sourcekitd. keys. identifier: itemId
553
554
] )
554
555
let documentationResponse = await orLog ( " Retrieving documentation for completion item " ) {
555
- try await sourcekitd. send ( req, timeout: timeout, fileContents: nil )
556
+ try await sourcekitd. send (
557
+ \. codeCompleteDocumentation,
558
+ req,
559
+ timeout: timeout,
560
+ documentUrl: nil ,
561
+ fileContents: nil
562
+ )
556
563
}
557
564
if let docString: String = documentationResponse ? [ sourcekitd. keys. docBrief] {
558
565
item. documentation = . markupContent( MarkupContent ( kind: . markdown, value: docString) )
0 commit comments