Skip to content

Commit 3991fae

Browse files
committed
Define methods on SourceKitD to create arrays and dictionaries instead of using skd postfix syntax
1 parent f901cc9 commit 3991fae

12 files changed

+67
-67
lines changed

Sources/SourceKitD/SKDRequestArray.swift

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@ import Musl
2020
import CRT
2121
#endif
2222

23-
extension Array<SKDValue> {
24-
/// Create an `SKDRequestArray` from this array.
25-
public func skd(_ sourcekitd: SourceKitD) -> SKDRequestArray {
26-
let result = SKDRequestArray(sourcekitd: sourcekitd)
27-
for element in self {
23+
extension SourceKitD {
24+
/// Create a `SKDRequestArray` from the given array.
25+
public func array(_ array: [SKDValue]) -> SKDRequestArray {
26+
let result = SKDRequestArray(sourcekitd: self)
27+
for element in array {
2828
result.append(element)
2929
}
3030
return result
@@ -57,9 +57,9 @@ public final class SKDRequestArray {
5757
case let newValue as SKDRequestArray:
5858
sourcekitd.api.request_array_set_value(array, -1, newValue.array)
5959
case let newValue as Array<SKDValue>:
60-
self.append(newValue.skd(sourcekitd))
60+
self.append(sourcekitd.array(newValue))
6161
case let newValue as Dictionary<sourcekitd_uid_t, SKDValue>:
62-
self.append(newValue.skd(sourcekitd))
62+
self.append(sourcekitd.dictionary(newValue))
6363
case let newValue as Optional<SKDValue>:
6464
if let newValue {
6565
self.append(newValue)

Sources/SourceKitD/SKDRequestDictionary.swift

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,11 @@ extension Array<SKDValue>: SKDValue {}
3838
extension Dictionary<sourcekitd_uid_t, SKDValue>: SKDValue {}
3939
extension Optional: SKDValue where Wrapped: SKDValue {}
4040

41-
extension Dictionary<sourcekitd_uid_t, SKDValue> {
42-
/// Create an `SKDRequestDictionary` from this dictionary.
43-
///
44-
/// If a value is `nil`, the corresponding key will not be added
45-
public func skd(_ sourcekitd: SourceKitD) -> SKDRequestDictionary {
46-
let result = SKDRequestDictionary(sourcekitd: sourcekitd)
47-
for (key, value) in self {
41+
extension SourceKitD {
42+
/// Create a `SKDRequestDictionary` from the given dictionary.
43+
public func dictionary(_ dict: [sourcekitd_uid_t: SKDValue]) -> SKDRequestDictionary {
44+
let result = SKDRequestDictionary(sourcekitd: self)
45+
for (key, value) in dict {
4846
result.set(key, to: value)
4947
}
5048
return result
@@ -77,9 +75,9 @@ public final class SKDRequestDictionary {
7775
case let newValue as SKDRequestArray:
7876
sourcekitd.api.request_dictionary_set_value(dict, key, newValue.array)
7977
case let newValue as Array<SKDValue>:
80-
self.set(key, to: newValue.skd(sourcekitd))
78+
self.set(key, to: sourcekitd.array(newValue))
8179
case let newValue as Dictionary<sourcekitd_uid_t, SKDValue>:
82-
self.set(key, to: newValue.skd(sourcekitd))
80+
self.set(key, to: sourcekitd.dictionary(newValue))
8381
case let newValue as Optional<SKDValue>:
8482
if let newValue {
8583
self.set(key, to: newValue)

Sources/SourceKitLSP/Rename.swift

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -383,26 +383,28 @@ extension SwiftLanguageServer {
383383
oldName: String,
384384
in snapshot: DocumentSnapshot
385385
) async throws -> [SyntacticRenameName] {
386-
let locations = renameLocations.map { renameLocation in
387-
[
388-
keys.line: renameLocation.line,
389-
keys.column: renameLocation.utf8Column,
390-
keys.nameType: renameLocation.usage.uid(keys: keys),
391-
].skd(sourcekitd)
392-
}.skd(sourcekitd)
393-
let renameLocation = [
386+
let locations = sourcekitd.array(
387+
renameLocations.map { renameLocation in
388+
sourcekitd.dictionary([
389+
keys.line: renameLocation.line,
390+
keys.column: renameLocation.utf8Column,
391+
keys.nameType: renameLocation.usage.uid(keys: keys),
392+
])
393+
}
394+
)
395+
let renameLocation = sourcekitd.dictionary([
394396
keys.locations: locations,
395397
keys.name: oldName,
396-
].skd(sourcekitd)
398+
])
397399

398-
let skreq = [
400+
let skreq = sourcekitd.dictionary([
399401
keys.request: requests.find_syntactic_rename_ranges,
400402
keys.sourcefile: snapshot.uri.pseudoPath,
401403
// find-syntactic-rename-ranges is a syntactic sourcekitd request that doesn't use the in-memory file snapshot.
402404
// We need to send the source text again.
403405
keys.sourcetext: snapshot.text,
404406
keys.renamelocations: [renameLocation],
405-
].skd(sourcekitd)
407+
])
406408

407409
let syntacticRenameRangesResponse = try await sourcekitd.send(skreq, fileContents: snapshot.text)
408410
guard let categorizedRanges: SKDResponseArray = syntacticRenameRangesResponse[keys.categorizedranges] else {

Sources/SourceKitLSP/Swift/CodeCompletionSession.swift

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -191,15 +191,15 @@ class CodeCompletionSession {
191191
throw ResponseError(code: .invalidRequest, message: "open must use the original snapshot")
192192
}
193193

194-
let req = [
194+
let req = sourcekitd.dictionary([
195195
keys.request: sourcekitd.requests.codecomplete_open,
196196
keys.offset: utf8StartOffset,
197197
keys.name: uri.pseudoPath,
198198
keys.sourcefile: uri.pseudoPath,
199199
keys.sourcetext: snapshot.text,
200200
keys.codecomplete_options: optionsDictionary(filterText: filterText, options: options),
201201
keys.compilerargs: compileCommand?.compilerArgs as [SKDValue]?,
202-
].skd(sourcekitd)
202+
])
203203

204204
let dict = try await sourcekitd.send(req, fileContents: snapshot.text)
205205
self.state = .open
@@ -228,12 +228,12 @@ class CodeCompletionSession {
228228
// FIXME: Assertion for prefix of snapshot matching what we started with.
229229

230230
logger.info("Updating code completion session: \(self, privacy: .private) filter=\(filterText)")
231-
let req = [
231+
let req = sourcekitd.dictionary([
232232
keys.request: sourcekitd.requests.codecomplete_update,
233233
keys.offset: utf8StartOffset,
234234
keys.name: uri.pseudoPath,
235235
keys.codecomplete_options: optionsDictionary(filterText: filterText, options: options),
236-
].skd(sourcekitd)
236+
])
237237

238238
let dict = try await sourcekitd.send(req, fileContents: snapshot.text)
239239
guard let completions: SKDResponseArray = dict[keys.results] else {
@@ -253,7 +253,7 @@ class CodeCompletionSession {
253253
filterText: String,
254254
options: SKCompletionOptions
255255
) -> SKDRequestDictionary {
256-
let dict = [
256+
let dict = sourcekitd.dictionary([
257257
// Sorting and priority options.
258258
keys.codecomplete_hideunderscores: 0,
259259
keys.codecomplete_hidelowpriority: 0,
@@ -264,7 +264,7 @@ class CodeCompletionSession {
264264
// Filtering options.
265265
keys.codecomplete_filtertext: filterText,
266266
keys.codecomplete_requestlimit: options.maxResults,
267-
].skd(sourcekitd)
267+
])
268268
return dict
269269
}
270270

@@ -274,11 +274,11 @@ class CodeCompletionSession {
274274
// Already closed, nothing to do.
275275
break
276276
case .open:
277-
let req = [
277+
let req = sourcekitd.dictionary([
278278
keys.request: sourcekitd.requests.codecomplete_close,
279279
keys.offset: utf8StartOffset,
280280
keys.name: snapshot.uri.pseudoPath,
281-
].skd(sourcekitd)
281+
])
282282
logger.info("Closing code completion session: \(self, privacy: .private)")
283283
_ = try? await sourcekitd.send(req, fileContents: nil)
284284
self.state = .closed

Sources/SourceKitLSP/Swift/CursorInfo.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,14 +92,14 @@ extension SwiftLanguageServer {
9292

9393
let keys = self.keys
9494

95-
let skreq = [
95+
let skreq = sourcekitd.dictionary([
9696
keys.request: requests.cursorinfo,
9797
keys.cancelOnSubsequentRequest: 0,
9898
keys.offset: offsetRange.lowerBound,
9999
keys.length: offsetRange.upperBound != offsetRange.lowerBound ? offsetRange.count : nil,
100100
keys.sourcefile: snapshot.uri.pseudoPath,
101101
keys.compilerargs: await self.buildSettings(for: uri)?.compilerArgs as [SKDValue]?,
102-
].skd(sourcekitd)
102+
])
103103

104104
appendAdditionalParameters?(skreq)
105105

Sources/SourceKitLSP/Swift/OpenInterface.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,14 +70,14 @@ extension SwiftLanguageServer {
7070
interfaceURI: DocumentURI
7171
) async throws -> InterfaceInfo {
7272
let keys = self.keys
73-
let skreq = [
73+
let skreq = sourcekitd.dictionary([
7474
keys.request: requests.editor_open_interface,
7575
keys.modulename: name,
7676
keys.groupname: request.groupNames.isEmpty ? nil : request.groupNames as [SKDValue],
7777
keys.name: interfaceURI.pseudoPath,
7878
keys.synthesizedextensions: 1,
7979
keys.compilerargs: await self.buildSettings(for: uri)?.compilerArgs as [SKDValue]?,
80-
].skd(sourcekitd)
80+
])
8181

8282
let dict = try await self.sourcekitd.send(skreq, fileContents: nil)
8383
return InterfaceInfo(contents: dict[keys.sourcetext] ?? "")
@@ -94,11 +94,11 @@ extension SwiftLanguageServer {
9494
return InterfaceDetails(uri: uri, position: nil)
9595
}
9696
let keys = self.keys
97-
let skreq = [
97+
let skreq = sourcekitd.dictionary([
9898
keys.request: requests.find_usr,
9999
keys.sourcefile: uri.pseudoPath,
100100
keys.usr: symbol,
101-
].skd(sourcekitd)
101+
])
102102

103103
let dict = try await self.sourcekitd.send(skreq, fileContents: snapshot.text)
104104
if let offset: Int = dict[keys.offset],

Sources/SourceKitLSP/Swift/RelatedIdentifiers.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,14 +66,14 @@ extension SwiftLanguageServer {
6666
throw ResponseError.unknown("invalid position \(position)")
6767
}
6868

69-
let skreq = [
69+
let skreq = sourcekitd.dictionary([
7070
keys.request: requests.relatedidents,
7171
keys.cancelOnSubsequentRequest: 0,
7272
keys.offset: offset,
7373
keys.sourcefile: snapshot.uri.pseudoPath,
7474
keys.includeNonEditableBaseNames: includeNonEditableBaseNames ? 1 : 0,
7575
keys.compilerargs: await self.buildSettings(for: snapshot.uri)?.compilerArgs as [SKDValue]?,
76-
].skd(sourcekitd)
76+
])
7777

7878
let dict = try await self.sourcekitd.send(skreq, fileContents: snapshot.text)
7979

Sources/SourceKitLSP/Swift/SemanticRefactoring.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ extension SwiftLanguageServer {
138138
throw SemanticRefactoringError.invalidRange(refactorCommand.positionRange)
139139
}
140140

141-
let skreq = [
141+
let skreq = sourcekitd.dictionary([
142142
keys.request: self.requests.semantic_refactoring,
143143
// Preferred name for e.g. an extracted variable.
144144
// Empty string means sourcekitd chooses a name automatically.
@@ -150,7 +150,7 @@ extension SwiftLanguageServer {
150150
keys.length: offsetRange.count,
151151
keys.actionuid: self.sourcekitd.api.uid_get_from_cstr(refactorCommand.actionString)!,
152152
keys.compilerargs: await self.buildSettings(for: snapshot.uri)?.compilerArgs as [SKDValue]?,
153-
].skd(sourcekitd)
153+
])
154154

155155
let dict = try await self.sourcekitd.send(skreq, fileContents: snapshot.text)
156156
guard let refactor = SemanticRefactoring(refactorCommand.title, dict, snapshot, self.keys) else {

Sources/SourceKitLSP/Swift/SemanticTokens.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@ extension SwiftLanguageServer {
2424
return nil
2525
}
2626

27-
let skreq = [
27+
let skreq = sourcekitd.dictionary([
2828
keys.request: requests.semantic_tokens,
2929
keys.sourcefile: snapshot.uri.pseudoPath,
3030
keys.compilerargs: buildSettings.compilerArgs as [SKDValue],
31-
].skd(sourcekitd)
31+
])
3232

3333
let dict = try await sourcekitd.send(skreq, fileContents: snapshot.text)
3434

Sources/SourceKitLSP/Swift/SwiftLanguageServer.swift

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -260,9 +260,9 @@ extension SwiftLanguageServer {
260260

261261
/// Tell sourcekitd to crash itself. For testing purposes only.
262262
public func _crash() async {
263-
let req = [
263+
let req = sourcekitd.dictionary([
264264
keys.request: sourcekitd.requests.crash_exit
265-
].skd(sourcekitd)
265+
])
266266
_ = try? await sourcekitd.send(req, fileContents: nil)
267267
}
268268

@@ -274,18 +274,18 @@ extension SwiftLanguageServer {
274274
let keys = self.keys
275275
let path = snapshot.uri.pseudoPath
276276

277-
let closeReq = [
277+
let closeReq = sourcekitd.dictionary([
278278
keys.request: requests.editor_close,
279279
keys.name: path,
280-
].skd(sourcekitd)
280+
])
281281
_ = try? await self.sourcekitd.send(closeReq, fileContents: nil)
282282

283-
let openReq = [
283+
let openReq = sourcekitd.dictionary([
284284
keys.request: self.requests.editor_open,
285285
keys.name: path,
286286
keys.sourcetext: snapshot.text,
287287
keys.compilerargs: compileCmd?.compilerArgs as [SKDValue]?,
288-
].skd(sourcekitd)
288+
])
289289

290290
_ = try? await self.sourcekitd.send(openReq, fileContents: snapshot.text)
291291

@@ -325,13 +325,13 @@ extension SwiftLanguageServer {
325325
return
326326
}
327327

328-
let req = [
328+
let req = sourcekitd.dictionary([
329329
keys.request: self.requests.editor_open,
330330
keys.name: note.textDocument.uri.pseudoPath,
331331
keys.sourcetext: snapshot.text,
332332
keys.syntactic_only: 1,
333333
keys.compilerargs: await self.buildSettings(for: snapshot.uri)?.compilerArgs as [SKDValue]?,
334-
].skd(sourcekitd)
334+
])
335335

336336
_ = try? await self.sourcekitd.send(req, fileContents: snapshot.text)
337337
publishDiagnosticsIfNeeded(for: note.textDocument.uri)
@@ -347,10 +347,10 @@ extension SwiftLanguageServer {
347347

348348
let uri = note.textDocument.uri
349349

350-
let req = [
350+
let req = sourcekitd.dictionary([
351351
keys.request: self.requests.editor_close,
352352
keys.name: uri.pseudoPath,
353-
].skd(sourcekitd)
353+
])
354354

355355
_ = try? await self.sourcekitd.send(req, fileContents: nil)
356356
}
@@ -454,14 +454,14 @@ extension SwiftLanguageServer {
454454
}
455455
}
456456
for edit in edits {
457-
let req = [
457+
let req = sourcekitd.dictionary([
458458
keys.request: self.requests.editor_replacetext,
459459
keys.name: note.textDocument.uri.pseudoPath,
460460
keys.syntactic_only: 1,
461461
keys.offset: edit.offset,
462462
keys.length: edit.length,
463463
keys.sourcetext: edit.replacement,
464-
].skd(sourcekitd)
464+
])
465465
do {
466466
_ = try await self.sourcekitd.send(req, fileContents: nil)
467467
} catch {
@@ -826,11 +826,11 @@ extension SwiftLanguageServer {
826826

827827
let keys = self.keys
828828

829-
let skreq = [
829+
let skreq = sourcekitd.dictionary([
830830
keys.request: requests.diagnostics,
831831
keys.sourcefile: snapshot.uri.pseudoPath,
832832
keys.compilerargs: buildSettings.compilerArgs as [SKDValue],
833-
].skd(sourcekitd)
833+
])
834834

835835
let dict = try await self.sourcekitd.send(skreq, fileContents: snapshot.text)
836836

Sources/SourceKitLSP/Swift/VariableTypeInfo.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,11 +87,11 @@ extension SwiftLanguageServer {
8787
) async throws -> [VariableTypeInfo] {
8888
let snapshot = try documentManager.latestSnapshot(uri)
8989

90-
let skreq = [
90+
let skreq = sourcekitd.dictionary([
9191
keys.request: requests.variable_type,
9292
keys.sourcefile: snapshot.uri.pseudoPath,
9393
keys.compilerargs: await self.buildSettings(for: uri)?.compilerArgs as [SKDValue]?,
94-
].skd(sourcekitd)
94+
])
9595

9696
if let range = range,
9797
let start = snapshot.utf8Offset(of: range.lowerBound),

Tests/SourceKitDTests/SourceKitDTests.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,23 +80,23 @@ final class SourceKitDTests: XCTestCase {
8080
}
8181
args.append(path)
8282

83-
let req = [
83+
let req = sourcekitd.dictionary([
8484
keys.request: sourcekitd.requests.editor_open,
8585
keys.name: path,
8686
keys.sourcetext: """
8787
func foo() {}
8888
""",
8989
keys.compilerargs: args,
90-
].skd(sourcekitd)
90+
])
9191

9292
_ = try await sourcekitd.send(req, fileContents: nil)
9393

9494
try await fulfillmentOfOrThrow([expectation1, expectation2])
9595

96-
let close = [
96+
let close = sourcekitd.dictionary([
9797
keys.request: sourcekitd.requests.editor_close,
9898
keys.name: path,
99-
].skd(sourcekitd)
99+
])
100100
_ = try await sourcekitd.send(close, fileContents: nil)
101101
}
102102
}

0 commit comments

Comments
 (0)