Skip to content

Commit 601d604

Browse files
committed
Add defaultLibrary modifier to tokens with is_system
1 parent cca6828 commit 601d604

File tree

3 files changed

+17
-6
lines changed

3 files changed

+17
-6
lines changed

Sources/SourceKitD/sourcekitd_uids.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ public struct sourcekitd_keys {
4141
public let filepath: sourcekitd_uid_t
4242
public let fixits: sourcekitd_uid_t
4343
public let id: sourcekitd_uid_t
44+
public let is_system: sourcekitd_uid_t
4445
public let kind: sourcekitd_uid_t
4546
public let length: sourcekitd_uid_t
4647
public let line: sourcekitd_uid_t
@@ -113,6 +114,7 @@ public struct sourcekitd_keys {
113114
filepath = api.uid_get_from_cstr("key.filepath")!
114115
fixits = api.uid_get_from_cstr("key.fixits")!
115116
id = api.uid_get_from_cstr("key.id")!
117+
is_system = api.uid_get_from_cstr("key.is_system")!
116118
kind = api.uid_get_from_cstr("key.kind")!
117119
length = api.uid_get_from_cstr("key.length")!
118120
line = api.uid_get_from_cstr("key.line")!

Sources/SourceKitLSP/Swift/SyntaxHighlightingTokenParser.swift

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,12 @@ struct SyntaxHighlightingTokenParser {
3737
var length: Int = useName ? response[keys.namelength] : response[keys.length],
3838
let start: Position = snapshot.positionOf(utf8Offset: offset),
3939
let skKind: sourcekitd_uid_t = response[keys.kind],
40-
let (kind, modifiers) = parseKindAndModifiers(skKind) {
40+
let kindAndModifiers = parseKindAndModifiers(skKind) {
41+
42+
// We destructure separately since Swift doesn't support mixed var-let
43+
// bindings in patterns (yet)
44+
let (kind, _) = kindAndModifiers
45+
var (_, modifiers) = kindAndModifiers
4146

4247
// We treat function declaration and enum member name tokens as a special
4348
// case, e.g. SourceKit returns `f(x: Int, y: Int)` as a name instead of just `f`.
@@ -55,6 +60,10 @@ struct SyntaxHighlightingTokenParser {
5560
length += 2
5661
}
5762

63+
if let isSystem: Bool = response[keys.is_system], isSystem {
64+
modifiers.insert(.defaultLibrary)
65+
}
66+
5867
if let end: Position = snapshot.positionOf(utf8Offset: offset + length) {
5968
let multiLineRange = start..<end
6069
let ranges = multiLineRange.splitToSingleLineRanges(in: snapshot)

Tests/SourceKitLSPTests/SemanticTokensTests.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -362,9 +362,9 @@ final class SemanticTokensTests: XCTestCase {
362362
makeToken(line: 0, utf16index: 5, length: 1, kind: .function, modifiers: .declaration),
363363
// Parameter labels use .function as a kind, see parseKindAndModifiers for rationale
364364
makeToken(line: 0, utf16index: 7, length: 1, kind: .function, modifiers: .declaration),
365-
makeToken(line: 0, utf16index: 10, length: 3, kind: .struct),
365+
makeToken(line: 0, utf16index: 10, length: 3, kind: .struct, modifiers: .defaultLibrary),
366366
makeToken(line: 0, utf16index: 15, length: 1, kind: .keyword),
367-
makeToken(line: 0, utf16index: 20, length: 6, kind: .struct),
367+
makeToken(line: 0, utf16index: 20, length: 6, kind: .struct, modifiers: .defaultLibrary),
368368
])
369369
}
370370

@@ -438,7 +438,7 @@ final class SemanticTokensTests: XCTestCase {
438438
makeToken(line: 5, utf16index: 0, length: 3, kind: .keyword),
439439
makeToken(line: 5, utf16index: 4, length: 1, kind: .variable, modifiers: .declaration),
440440
makeToken(line: 5, utf16index: 8, length: 5, kind: .enum),
441-
makeToken(line: 5, utf16index: 14, length: 6, kind: .struct),
441+
makeToken(line: 5, utf16index: 14, length: 6, kind: .struct, modifiers: .defaultLibrary),
442442
makeToken(line: 5, utf16index: 22, length: 4, kind: .enumMember),
443443
// let y: Maybe = .some(42)
444444
makeToken(line: 6, utf16index: 0, length: 3, kind: .keyword),
@@ -498,7 +498,7 @@ final class SemanticTokensTests: XCTestCase {
498498

499499
let before = performSemanticTokensRequest(text: text)
500500
XCTAssertEqual(before, [
501-
makeToken(line: 0, utf16index: 0, length: 10, kind: .function),
501+
makeToken(line: 0, utf16index: 0, length: 10, kind: .function, modifiers: .defaultLibrary),
502502
makeToken(line: 0, utf16index: 11, length: 5, kind: .string),
503503
])
504504

@@ -508,7 +508,7 @@ final class SemanticTokensTests: XCTestCase {
508508

509509
let after = performSemanticTokensRequest(text: text)
510510
XCTAssertEqual(after, [
511-
makeToken(line: 0, utf16index: 0, length: 10, kind: .function),
511+
makeToken(line: 0, utf16index: 0, length: 10, kind: .function, modifiers: .defaultLibrary),
512512
makeToken(line: 0, utf16index: 11, length: 6, kind: .string),
513513
])
514514
}

0 commit comments

Comments
 (0)