Skip to content

Commit 9919d03

Browse files
authored
Merge pull request #947 from ahoppen/ahoppen/skip-semantic-tokens-tests
Skip semantic tokens tests if sourcekitd doesn't support the semantic tokens request
2 parents 0c4f659 + ecc550e commit 9919d03

File tree

2 files changed

+17
-8
lines changed

2 files changed

+17
-8
lines changed

Sources/SourceKitLSP/Swift/SemanticTokens.swift

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,9 @@ extension SwiftLanguageServer {
5050
private func mergedAndSortedTokens(
5151
for snapshot: DocumentSnapshot,
5252
in range: Range<Position>? = nil
53-
) async -> [SyntaxHighlightingToken] {
53+
) async throws -> [SyntaxHighlightingToken] {
5454
async let tree = syntaxTreeManager.syntaxTree(for: snapshot)
55-
async let semanticTokens = await orLog("Loading semantic tokens") { try await semanticHighlightingTokens(for: snapshot) }
55+
async let semanticTokens = semanticHighlightingTokens(for: snapshot)
5656

5757
let range =
5858
if let range = range.flatMap({ $0.byteSourceRange(in: snapshot) }) {
@@ -64,7 +64,7 @@ extension SwiftLanguageServer {
6464
await tree
6565
.classifications(in: range)
6666
.flatMap({ $0.highlightingTokens(in: snapshot) })
67-
.mergingTokens(with: semanticTokens ?? [])
67+
.mergingTokens(with: try semanticTokens ?? [])
6868
.sorted { $0.start < $1.start }
6969
}
7070

@@ -73,7 +73,7 @@ extension SwiftLanguageServer {
7373
) async throws -> DocumentSemanticTokensResponse? {
7474
let snapshot = try self.documentManager.latestSnapshot(req.textDocument.uri)
7575

76-
let tokens = await mergedAndSortedTokens(for: snapshot)
76+
let tokens = try await mergedAndSortedTokens(for: snapshot)
7777
let encodedTokens = tokens.lspEncoded
7878

7979
return DocumentSemanticTokensResponse(data: encodedTokens)
@@ -89,8 +89,7 @@ extension SwiftLanguageServer {
8989
_ req: DocumentSemanticTokensRangeRequest
9090
) async throws -> DocumentSemanticTokensResponse? {
9191
let snapshot = try self.documentManager.latestSnapshot(req.textDocument.uri)
92-
93-
let tokens = await mergedAndSortedTokens(for: snapshot, in: req.range)
92+
let tokens = try await mergedAndSortedTokens(for: snapshot, in: req.range)
9493
let encodedTokens = tokens.lspEncoded
9594

9695
return DocumentSemanticTokensResponse(data: encodedTokens)

Tests/SourceKitLSPTests/SemanticTokensTests.swift

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import LSPTestSupport
1414
import LanguageServerProtocol
1515
import SKTestSupport
1616
import SourceKitLSP
17+
import SourceKitD
1718
import XCTest
1819

1920
private typealias Token = SyntaxHighlightingToken
@@ -29,7 +30,7 @@ final class SemanticTokensTests: XCTestCase {
2930
/// - Note: This URI is set to a unique value before each test case in `setUp`.
3031
private var uri: DocumentURI!
3132

32-
/// The current verion of the document being opened.
33+
/// The current version of the document being opened.
3334
///
3435
/// - Note: This gets reset to 0 in `setUp` and incremented on every call to
3536
/// `openDocument` and `editDocument`.
@@ -141,7 +142,16 @@ final class SemanticTokensTests: XCTestCase {
141142
range: Range<Position>? = nil
142143
) async throws -> [Token] {
143144
openDocument(text: text)
144-
return try await performSemanticTokensRequest(range: range)
145+
do {
146+
return try await performSemanticTokensRequest(range: range)
147+
} catch let error as ResponseError {
148+
// FIXME: Remove when the semantic tokens request is widely available in sourcekitd
149+
if error.message.contains("unknown request: source.request.semantic_tokens") {
150+
throw XCTSkip("semantic tokens request not supported by sourcekitd")
151+
} else {
152+
throw error
153+
}
154+
}
145155
}
146156

147157
func testIntArrayCoding() {

0 commit comments

Comments
 (0)