Skip to content

Commit 7fb81de

Browse files
authored
Merge pull request #1015 from ahoppen/ahoppen/no-rename-failures
Ensure rename tests don’t fail if running with a sourcekitd that doesn’t support rename yet
2 parents ca47033 + 03a122d commit 7fb81de

File tree

2 files changed

+55
-17
lines changed

2 files changed

+55
-17
lines changed

Sources/SourceKitLSP/Rename.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -592,8 +592,10 @@ extension SwiftLanguageServer {
592592
in: snapshot,
593593
includeNonEditableBaseNames: true
594594
)
595-
guard let name = response.name,
596-
let range = response.relatedIdentifiers.first(where: { $0.range.contains(request.position) })?.range
595+
guard let name = response.name else {
596+
throw ResponseError.unknown("Running sourcekit-lsp with a version of sourcekitd that does not support rename")
597+
}
598+
guard let range = response.relatedIdentifiers.first(where: { $0.range.contains(request.position) })?.range
597599
else {
598600
return nil
599601
}

Tests/SourceKitLSPTests/RenameTests.swift

Lines changed: 51 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,22 @@ private func assertSingleFileRename(
4646
let uri = DocumentURI.for(.swift, testName: testName)
4747
let positions = testClient.openDocument(markedSource, uri: uri)
4848
for marker in positions.allMarkers {
49-
let response = try await testClient.send(
50-
RenameRequest(
51-
textDocument: TextDocumentIdentifier(uri),
52-
position: positions[marker],
53-
newName: newName
49+
let response: WorkspaceEdit?
50+
do {
51+
response = try await testClient.send(
52+
RenameRequest(
53+
textDocument: TextDocumentIdentifier(uri),
54+
position: positions[marker],
55+
newName: newName
56+
)
5457
)
55-
)
58+
} catch let error as ResponseError {
59+
if error.message == "Running sourcekit-lsp with a version of sourcekitd that does not support rename" {
60+
throw XCTSkip(error.message)
61+
} else {
62+
throw error
63+
}
64+
}
5665
let edits = try XCTUnwrap(response?.changes?[uri], "while performing rename at \(marker)", file: file, line: line)
5766
let source = extractMarkers(markedSource).textWithoutMarkers
5867
let renamed = apply(edits: edits, to: source)
@@ -127,9 +136,18 @@ private func assertMultiFileRename(
127136
ws.testClient.send(DidCloseTextDocumentNotification(textDocument: TextDocumentIdentifier(uri)))
128137
}
129138
for marker in markers {
130-
let response = try await ws.testClient.send(
131-
RenameRequest(textDocument: TextDocumentIdentifier(uri), position: positions[marker], newName: newName)
132-
)
139+
let response: WorkspaceEdit?
140+
do {
141+
response = try await ws.testClient.send(
142+
RenameRequest(textDocument: TextDocumentIdentifier(uri), position: positions[marker], newName: newName)
143+
)
144+
} catch let error as ResponseError {
145+
if error.message == "Running sourcekit-lsp with a version of sourcekitd that does not support rename" {
146+
throw XCTSkip(error.message)
147+
} else {
148+
throw error
149+
}
150+
}
133151
let changes = try XCTUnwrap(response?.changes)
134152
try assertRenamedSourceMatches(
135153
originalFiles: files,
@@ -696,9 +714,18 @@ final class RenameTests: XCTestCase {
696714
""",
697715
uri: uri
698716
)
699-
let response = try await testClient.send(
700-
PrepareRenameRequest(textDocument: TextDocumentIdentifier(uri), position: positions["1️⃣"])
701-
)
717+
let response: PrepareRenameResponse?
718+
do {
719+
response = try await testClient.send(
720+
PrepareRenameRequest(textDocument: TextDocumentIdentifier(uri), position: positions["1️⃣"])
721+
)
722+
} catch let error as ResponseError {
723+
if error.message == "Running sourcekit-lsp with a version of sourcekitd that does not support rename" {
724+
throw XCTSkip(error.message)
725+
} else {
726+
throw error
727+
}
728+
}
702729
let range = try XCTUnwrap(response?.range)
703730
let placeholder = try XCTUnwrap(response?.placeholder)
704731
XCTAssertEqual(range, positions["1️⃣"]..<positions["2️⃣"])
@@ -715,9 +742,18 @@ final class RenameTests: XCTestCase {
715742
""",
716743
uri: uri
717744
)
718-
let response = try await testClient.send(
719-
PrepareRenameRequest(textDocument: TextDocumentIdentifier(uri), position: positions["1️⃣"])
720-
)
745+
let response: PrepareRenameResponse?
746+
do {
747+
response = try await testClient.send(
748+
PrepareRenameRequest(textDocument: TextDocumentIdentifier(uri), position: positions["1️⃣"])
749+
)
750+
} catch let error as ResponseError {
751+
if error.message == "Running sourcekit-lsp with a version of sourcekitd that does not support rename" {
752+
throw XCTSkip(error.message)
753+
} else {
754+
throw error
755+
}
756+
}
721757
let range = try XCTUnwrap(response?.range)
722758
let placeholder = try XCTUnwrap(response?.placeholder)
723759
XCTAssertEqual(range, positions["1️⃣"]..<positions["2️⃣"])

0 commit comments

Comments
 (0)