diff --git a/Sources/LanguageServerProtocol/DocumentURI.swift b/Sources/LanguageServerProtocol/DocumentURI.swift index b52e3f4c..3d38a6d7 100644 --- a/Sources/LanguageServerProtocol/DocumentURI.swift +++ b/Sources/LanguageServerProtocol/DocumentURI.swift @@ -12,9 +12,17 @@ import Foundation -public enum DocumentURI: Codable, Hashable { - case url(URL) - case other(String) +public struct DocumentURI: Codable, Hashable { + /// The URL that store the URIs value + private let storage: URL + + public var fileURL: URL? { + if storage.isFileURL { + return storage + } else { + return nil + } + } /// Returns a filepath if the URI is a URL. If the URI is not a URL, returns /// the full URI as a fallback. @@ -22,39 +30,30 @@ public enum DocumentURI: Codable, Hashable { /// expects a file path but is able to handle arbitrary strings as well in a /// fallback mode that drops semantic functionality. public var pseudoPath: String { - switch self { - case .url(let url): - return url.path - case .other(let string): - return string + if storage.isFileURL { + return storage.path + } else { + return storage.absoluteString } } /// Returns the URI as a string. public var stringValue: String { - switch self { - case .url(let url): - return url.absoluteString - case .other(let string): - return string - } + return storage.absoluteString } /// Construct a DocumentURI from the given URI string, automatically parsing /// it either as a URL or an opaque URI. public init(string: String) { - if string.starts(with: "file:"), let url = URL(string: string) { - // URL with a 'file:' protocol. Parse using URL(string:) - self = .url(url) - } else if string.starts(with: "/") { - // Absolute path. Technically this not part of the LSP specification - // but we want to support it anyway. - // Parse it using URL(fileURLWithPath:) - self = .url(URL(fileURLWithPath: string)) - } else { - // Can't parse URI as URL. Use it as an opaque value. - self = .other(string) + guard let url = URL(string: string) else { + fatalError("Failed to construct DocumentURI from '\(string)'") } + self.init(url) + } + + public init(_ url: URL) { + self.storage = url + assert(self.storage.scheme != nil, "Received invalid URI without a scheme '\(self.storage.absoluteString)'") } public init(from decoder: Decoder) throws { @@ -62,11 +61,6 @@ public enum DocumentURI: Codable, Hashable { } public func encode(to encoder: Encoder) throws { - switch self { - case .url(let url): - try url.absoluteString.encode(to: encoder) - case .other(let string): - try string.encode(to: encoder) - } + try storage.absoluteString.encode(to: encoder) } } diff --git a/Sources/LanguageServerProtocol/WorkspaceFolder.swift b/Sources/LanguageServerProtocol/WorkspaceFolder.swift index 0852e55d..9276930a 100644 --- a/Sources/LanguageServerProtocol/WorkspaceFolder.swift +++ b/Sources/LanguageServerProtocol/WorkspaceFolder.swift @@ -22,13 +22,8 @@ public struct WorkspaceFolder: ResponseType, Hashable, Codable { public init(uri: DocumentURI, name: String? = nil) { self.uri = uri - switch uri { - case .url(let url): - self.name = name ?? url.lastPathComponent - case .other(_): - self.name = name ?? "unknown_workspace" - } - + self.name = name ?? uri.fileURL?.lastPathComponent ?? "unknown_workspace" + if self.name.isEmpty { self.name = "unknown_workspace" } diff --git a/Sources/SKCore/BuildServerBuildSystem.swift b/Sources/SKCore/BuildServerBuildSystem.swift index 307bfeb6..22d5d3a2 100644 --- a/Sources/SKCore/BuildServerBuildSystem.swift +++ b/Sources/SKCore/BuildServerBuildSystem.swift @@ -170,7 +170,7 @@ extension BuildServerBuildSystem: BuildSystem { } public func settings(for uri: DocumentURI, _ language: Language) -> FileBuildSettings? { - guard case .url(let url) = uri else { + guard let url = uri.fileURL else { // We can't determine build settings for non-file URIs. return nil } diff --git a/Sources/SKCore/CompilationDatabaseBuildSystem.swift b/Sources/SKCore/CompilationDatabaseBuildSystem.swift index eae75e49..690fcfb5 100644 --- a/Sources/SKCore/CompilationDatabaseBuildSystem.swift +++ b/Sources/SKCore/CompilationDatabaseBuildSystem.swift @@ -45,7 +45,7 @@ extension CompilationDatabaseBuildSystem: BuildSystem { public var indexDatabasePath: AbsolutePath? { return nil } public func settings(for uri: DocumentURI, _ language: Language) -> FileBuildSettings? { - guard case .url(let url) = uri else { + guard let url = uri.fileURL else { // We can't determine build settings for non-file URIs. return nil } diff --git a/Sources/SKSwiftPMWorkspace/SwiftPMWorkspace.swift b/Sources/SKSwiftPMWorkspace/SwiftPMWorkspace.swift index 54d560c6..7c43f9b1 100644 --- a/Sources/SKSwiftPMWorkspace/SwiftPMWorkspace.swift +++ b/Sources/SKSwiftPMWorkspace/SwiftPMWorkspace.swift @@ -199,7 +199,7 @@ extension SwiftPMWorkspace: BuildSystem { for uri: DocumentURI, _ language: Language) -> FileBuildSettings? { - guard case .url(let url) = uri else { + guard let url = uri.fileURL else { // We can't determine build settings for non-file URIs. return nil } diff --git a/Sources/SKTestSupport/Extensions.swift b/Sources/SKTestSupport/Extensions.swift index 9c6bff78..bfa811d6 100644 --- a/Sources/SKTestSupport/Extensions.swift +++ b/Sources/SKTestSupport/Extensions.swift @@ -15,12 +15,12 @@ import TSCBasic public extension TextDocumentIdentifier { init(_ url: URL) { - self.init(.url(url)) + self.init(DocumentURI(url)) } } public extension AbsolutePath { var asURI: DocumentURI { - return .url(asURL) + return DocumentURI(asURL) } } diff --git a/Sources/SKTestSupport/SKSwiftPMTestWorkspace.swift b/Sources/SKTestSupport/SKSwiftPMTestWorkspace.swift index 91f1e495..948b1551 100644 --- a/Sources/SKTestSupport/SKSwiftPMTestWorkspace.swift +++ b/Sources/SKTestSupport/SKSwiftPMTestWorkspace.swift @@ -85,7 +85,7 @@ public final class SKSwiftPMTestWorkspace { listenToUnitEvents: false) testServer.server!.workspace = Workspace( - rootUri: .url(sources.rootDirectory), + rootUri: DocumentURI(sources.rootDirectory), clientCapabilities: ClientCapabilities(), buildSettings: swiftpm, index: index, @@ -121,7 +121,7 @@ extension SKSwiftPMTestWorkspace { extension SKSwiftPMTestWorkspace { public func openDocument(_ url: URL, language: Language) throws { sk.send(DidOpenTextDocument(textDocument: TextDocumentItem( - uri: .url(url), + uri: DocumentURI(url), language: language, version: 1, text: try sources.sourceCache.get(url)))) diff --git a/Sources/SKTestSupport/SKTibsTestWorkspace.swift b/Sources/SKTestSupport/SKTibsTestWorkspace.swift index c0177f9d..4dd02c7e 100644 --- a/Sources/SKTestSupport/SKTibsTestWorkspace.swift +++ b/Sources/SKTestSupport/SKTibsTestWorkspace.swift @@ -62,7 +62,7 @@ public final class SKTibsTestWorkspace { func initWorkspace(clientCapabilities: ClientCapabilities) { let buildPath = AbsolutePath(builder.buildRoot.path) testServer.server!.workspace = Workspace( - rootUri: .url(sources.rootDirectory), + rootUri: DocumentURI(sources.rootDirectory), clientCapabilities: clientCapabilities, buildSettings: CompilationDatabaseBuildSystem(projectRoot: buildPath), index: index, @@ -82,7 +82,7 @@ extension SKTibsTestWorkspace { extension SKTibsTestWorkspace { public func openDocument(_ url: URL, language: Language) throws { sk.send(DidOpenTextDocument(textDocument: TextDocumentItem( - uri: .url(url), + uri: DocumentURI(url), language: language, version: 1, text: try sources.sourceCache.get(url)))) @@ -134,13 +134,13 @@ extension Position { extension Location { public init(_ loc: TestLocation) { - self.init(uri: .url(loc.url), range: Range(Position(loc))) + self.init(uri: DocumentURI(loc.url), range: Range(Position(loc))) } /// Incorrectly use the UTF-8 column index in place of the UTF-16 one, to match the incorrect /// implementation in SourceKitServer when using the index. public init(badUTF16 loc: TestLocation) { - self.init(uri: .url(loc.url), range: Range(Position(badUTF16: loc))) + self.init(uri: DocumentURI(loc.url), range: Range(Position(badUTF16: loc))) } } @@ -162,5 +162,5 @@ extension TibsToolchain { } extension TestLocation { - public var docIdentifier: TextDocumentIdentifier { TextDocumentIdentifier(.url(url)) } + public var docIdentifier: TextDocumentIdentifier { TextDocumentIdentifier(url) } } diff --git a/Sources/SourceKit/SourceKitServer.swift b/Sources/SourceKit/SourceKitServer.swift index 32c9e11f..979d1bd3 100644 --- a/Sources/SourceKit/SourceKitServer.swift +++ b/Sources/SourceKit/SourceKitServer.swift @@ -288,7 +288,7 @@ extension SourceKitServer { indexOptions: indexOptions) } else if let path = req.params.rootPath { self.workspace = try? Workspace( - rootUri: .url(URL(fileURLWithPath: path)), + rootUri: DocumentURI(URL(fileURLWithPath: path)), clientCapabilities: req.params.capabilities, toolchainRegistry: self.toolchainRegistry, buildSetup: self.options.buildSetup, @@ -444,7 +444,7 @@ extension SourceKitServer { utf16index: symbolOccurrence.location.utf8Column - 1) let symbolLocation = Location( - uri: .url(URL(fileURLWithPath: symbolOccurrence.location.path)), + uri: DocumentURI(URL(fileURLWithPath: symbolOccurrence.location.path)), range: Range(symbolPosition)) return SymbolInformation( @@ -565,7 +565,7 @@ extension SourceKitServer { return nil } return Location( - uri: .url(URL(fileURLWithPath: occur.location.path)), + uri: DocumentURI(URL(fileURLWithPath: occur.location.path)), range: Range(Position( line: occur.location.line - 1, // 1-based -> 0-based // FIXME: we need to convert the utf8/utf16 column, which may require reading the file! @@ -612,7 +612,7 @@ extension SourceKitServer { return nil } return Location( - uri: .url(URL(fileURLWithPath: occur.location.path)), + uri: DocumentURI(URL(fileURLWithPath: occur.location.path)), range: Range(Position( line: occur.location.line - 1, // 1-based -> 0-based // FIXME: we need to convert the utf8/utf16 column, which may require reading the file! @@ -665,7 +665,7 @@ extension SourceKitServer { return nil } return Location( - uri: .url(URL(fileURLWithPath: occur.location.path)), + uri: DocumentURI(URL(fileURLWithPath: occur.location.path)), range: Range(Position( line: occur.location.line - 1, // 1-based -> 0-based // FIXME: we need to convert the utf8/utf16 column, which may require reading the file! diff --git a/Sources/SourceKit/Workspace.swift b/Sources/SourceKit/Workspace.swift index 342efc2e..3f5857f2 100644 --- a/Sources/SourceKit/Workspace.swift +++ b/Sources/SourceKit/Workspace.swift @@ -83,7 +83,7 @@ public final class Workspace { let settings = BuildSystemList() self.buildSettings = settings - if case .url(let rootUrl) = rootUri, let rootPath = try? AbsolutePath(validating: rootUrl.path) { + if let rootUrl = rootUri.fileURL, let rootPath = try? AbsolutePath(validating: rootUrl.path) { if let buildServer = BuildServerBuildSystem(projectRoot: rootPath, buildSetup: buildSetup) { settings.providers.insert(buildServer, at: 0) } else { diff --git a/Sources/SourceKit/clangd/ClangLanguageServer.swift b/Sources/SourceKit/clangd/ClangLanguageServer.swift index 34324e5e..c9643388 100644 --- a/Sources/SourceKit/clangd/ClangLanguageServer.swift +++ b/Sources/SourceKit/clangd/ClangLanguageServer.swift @@ -107,7 +107,7 @@ extension ClangLanguageServerShim { } public func documentUpdatedBuildSettings(_ uri: DocumentURI, language: Language) { - guard case .url(let url) = uri else { + guard let url = uri.fileURL else { // FIXME: The clang workspace can probably be reworked to support non-file URIs. log("Received updated build settings for non-file URI '\(uri)'. Ignoring the update.") return diff --git a/Sources/SourceKit/sourcekitd/CursorInfo.swift b/Sources/SourceKit/sourcekitd/CursorInfo.swift index 51c11965..f28ca855 100644 --- a/Sources/SourceKit/sourcekitd/CursorInfo.swift +++ b/Sources/SourceKit/sourcekitd/CursorInfo.swift @@ -120,7 +120,7 @@ extension SwiftLanguageServer { let offset: Int = dict[keys.offset], let pos = snapshot.positionOf(utf8Offset: offset) { - location = Location(uri: .url(URL(fileURLWithPath: filepath)), range: Range(pos)) + location = Location(uri: DocumentURI(URL(fileURLWithPath: filepath)), range: Range(pos)) } let refactorActionsArray: SKResponseArray? = dict[keys.refactor_actions] diff --git a/Sources/SourceKit/sourcekitd/SwiftLanguageServer.swift b/Sources/SourceKit/sourcekitd/SwiftLanguageServer.swift index 7b1b0adb..c74b4d69 100644 --- a/Sources/SourceKit/sourcekitd/SwiftLanguageServer.swift +++ b/Sources/SourceKit/sourcekitd/SwiftLanguageServer.swift @@ -125,7 +125,14 @@ extension SwiftLanguageServer { let name: String = dict[self.keys.name] { self.queue.async { - self.handleDocumentUpdate(uri: DocumentURI(string: name)) + let uri: DocumentURI + if name.starts(with: "/") { + // If sourcekitd returns us a path, translate it back into a URL + uri = DocumentURI(URL(fileURLWithPath: name)) + } else { + uri = DocumentURI(string: name) + } + self.handleDocumentUpdate(uri: uri) } } } diff --git a/Tests/LanguageServerProtocolTests/CodingTests.swift b/Tests/LanguageServerProtocolTests/CodingTests.swift index b4894de2..fb99474f 100644 --- a/Tests/LanguageServerProtocolTests/CodingTests.swift +++ b/Tests/LanguageServerProtocolTests/CodingTests.swift @@ -18,7 +18,7 @@ final class CodingTests: XCTestCase { func testValueCoding() { let url = URL(fileURLWithPath: "/foo.swift") - let uri = DocumentURI.url(url) + let uri = DocumentURI(url) // The \\/\\/\\/ is escaping file:// + /foo.swift, which is silly but allowed by json. let urljson = "file:\\/\\/\\/foo.swift" diff --git a/Tests/SKCoreTests/BuildServerBuildSystemTests.swift b/Tests/SKCoreTests/BuildServerBuildSystemTests.swift index 883cd72e..aa54aad1 100644 --- a/Tests/SKCoreTests/BuildServerBuildSystemTests.swift +++ b/Tests/SKCoreTests/BuildServerBuildSystemTests.swift @@ -39,14 +39,14 @@ final class BuildServerBuildSystemTests: XCTestCase { // test settings with a response let fileURL = URL(fileURLWithPath: "/path/to/some/file.swift") - let settings = buildSystem.settings(for: .url(fileURL), Language.swift) + let settings = buildSystem.settings(for: DocumentURI(fileURL), Language.swift) XCTAssertNotNil(settings) XCTAssertEqual(settings?.compilerArguments, ["-a", "-b"]) XCTAssertEqual(settings?.workingDirectory, fileURL.deletingLastPathComponent().path) // test error let missingFileURL = URL(fileURLWithPath: "/path/to/some/missingfile.missing") - XCTAssertNil(buildSystem.settings(for: .url(missingFileURL), Language.swift)) + XCTAssertNil(buildSystem.settings(for: DocumentURI(missingFileURL), Language.swift)) } func testFileRegistration() throws { @@ -57,9 +57,9 @@ final class BuildServerBuildSystemTests: XCTestCase { let fileUrl = URL(fileURLWithPath: "/some/file/path") let expectation = XCTestExpectation(description: "\(fileUrl) settings updated") - let buildSystemDelegate = TestDelegate(fileExpectations: [.url(fileUrl): expectation]) + let buildSystemDelegate = TestDelegate(fileExpectations: [DocumentURI(fileUrl): expectation]) buildSystem.delegate = buildSystemDelegate - buildSystem.registerForChangeNotifications(for: .url(fileUrl)) + buildSystem.registerForChangeNotifications(for: DocumentURI(fileUrl)) XCTAssertEqual(XCTWaiter.wait(for: [expectation], timeout: 15), .completed) } @@ -174,7 +174,7 @@ final class BuildServerBuildSystemTests: XCTestCase { data: .dictionary(["key": "value"])): expectation, ]) buildSystem.delegate = buildSystemDelegate - buildSystem.registerForChangeNotifications(for: .url(fileUrl)) + buildSystem.registerForChangeNotifications(for: DocumentURI(fileUrl)) let result = XCTWaiter.wait(for: [expectation], timeout: 15) if result != .completed { diff --git a/Tests/SKCoreTests/CompilationDatabaseTests.swift b/Tests/SKCoreTests/CompilationDatabaseTests.swift index b629b61b..7fa10751 100644 --- a/Tests/SKCoreTests/CompilationDatabaseTests.swift +++ b/Tests/SKCoreTests/CompilationDatabaseTests.swift @@ -10,6 +10,7 @@ // //===----------------------------------------------------------------------===// +import LanguageServerProtocol import LSPTestSupport import SKCore import TSCBasic @@ -200,7 +201,7 @@ final class CompilationDatabaseTests: XCTestCase { let buildSystem: BuildSystem = CompilationDatabaseBuildSystem( projectRoot: AbsolutePath("/a"), fileSystem: fs) - let settings = buildSystem.settings(for: .url(URL(fileURLWithPath: "/a/a.swift")), .swift) + let settings = buildSystem.settings(for: DocumentURI(URL(fileURLWithPath: "/a/a.swift")), .swift) XCTAssertNotNil(settings) XCTAssertEqual(settings?.workingDirectory, "/a") XCTAssertEqual(settings?.compilerArguments, ["-swift-version", "4", "/a/a.swift"]) diff --git a/Tests/SKSwiftPMWorkspaceTests/SwiftPMWorkspaceTests.swift b/Tests/SKSwiftPMWorkspaceTests/SwiftPMWorkspaceTests.swift index b047df67..5b9756db 100644 --- a/Tests/SKSwiftPMWorkspaceTests/SwiftPMWorkspaceTests.swift +++ b/Tests/SKSwiftPMWorkspaceTests/SwiftPMWorkspaceTests.swift @@ -11,6 +11,7 @@ //===----------------------------------------------------------------------===// import Build +import LanguageServerProtocol import SKCore import SKSwiftPMWorkspace import SKTestSupport @@ -301,7 +302,7 @@ final class SwiftPMWorkspaceTests: XCTestCase { let bswift = packageRoot.appending(components: "Sources", "libB", "b.swift") XCTAssertNotNil(ws.settings(for: aswift.asURI, .swift)) XCTAssertNil(ws.settings(for: bswift.asURI, .swift)) - XCTAssertNil(ws.settings(for: .url(URL(string: "https://www.apple.com")!), .swift)) + XCTAssertNil(ws.settings(for: DocumentURI(URL(string: "https://www.apple.com")!), .swift)) } } diff --git a/Tests/SourceKitTests/BuildSystemTests.swift b/Tests/SourceKitTests/BuildSystemTests.swift index d9a47e7f..72cc0d2e 100644 --- a/Tests/SourceKitTests/BuildSystemTests.swift +++ b/Tests/SourceKitTests/BuildSystemTests.swift @@ -132,29 +132,29 @@ final class BuildSystemTests: XCTestCase { } """ - buildSystem.buildSettingsByFile[.url(url)] = FileBuildSettings(compilerArguments: args) + buildSystem.buildSettingsByFile[DocumentURI(url)] = FileBuildSettings(compilerArguments: args) sk.allowUnexpectedNotification = false sk.sendNoteSync(DidOpenTextDocument(textDocument: TextDocumentItem( - uri: .url(url), + uri: DocumentURI(url), language: .objective_c, version: 12, text: text )), { (note: Notification) in XCTAssertEqual(note.params.diagnostics.count, 1) - XCTAssertEqual(text, self.workspace.documentManager.latestSnapshot(.url(url))!.text) + XCTAssertEqual(text, self.workspace.documentManager.latestSnapshot(DocumentURI(url))!.text) }) // Modify the build settings and inform the delegate. // This should trigger a new publish diagnostics and we should no longer have errors. - buildSystem.buildSettingsByFile[.url(url)] = FileBuildSettings(compilerArguments: args + ["-DFOO"]) - testServer.server?.fileBuildSettingsChanged([.url(url)]) + buildSystem.buildSettingsByFile[DocumentURI(url)] = FileBuildSettings(compilerArguments: args + ["-DFOO"]) + testServer.server?.fileBuildSettingsChanged([DocumentURI(url)]) let expectation = XCTestExpectation(description: "refresh") sk.handleNextNotification { (note: Notification) in XCTAssertEqual(note.params.diagnostics.count, 0) - XCTAssertEqual(text, self.workspace.documentManager.latestSnapshot(.url(url))!.text) + XCTAssertEqual(text, self.workspace.documentManager.latestSnapshot(DocumentURI(url))!.text) expectation.fulfill() } @@ -166,9 +166,9 @@ final class BuildSystemTests: XCTestCase { func testSwiftDocumentUpdatedBuildSettings() { let url = URL(fileURLWithPath: "/a.swift") - let args = FallbackBuildSystem().settings(for: .url(url), .swift)!.compilerArguments + let args = FallbackBuildSystem().settings(for: DocumentURI(url), .swift)!.compilerArguments - buildSystem.buildSettingsByFile[.url(url)] = FileBuildSettings(compilerArguments: args) + buildSystem.buildSettingsByFile[DocumentURI(url)] = FileBuildSettings(compilerArguments: args) let text = """ #if FOO @@ -181,14 +181,14 @@ final class BuildSystemTests: XCTestCase { sk.allowUnexpectedNotification = false sk.sendNoteSync(DidOpenTextDocument(textDocument: TextDocumentItem( - uri: .url(url), + uri: DocumentURI(url), language: .swift, version: 12, text: text )), { (note: Notification) in // Syntactic analysis - no expected errors here. XCTAssertEqual(note.params.diagnostics.count, 0) - XCTAssertEqual(text, self.workspace.documentManager.latestSnapshot(.url(url))!.text) + XCTAssertEqual(text, self.workspace.documentManager.latestSnapshot(DocumentURI(url))!.text) }, { (note: Notification) in // Semantic analysis - expect one error here. XCTAssertEqual(note.params.diagnostics.count, 1) @@ -196,7 +196,7 @@ final class BuildSystemTests: XCTestCase { // Modify the build settings and inform the delegate. // This should trigger a new publish diagnostics and we should no longer have errors. - buildSystem.buildSettingsByFile[.url(url)] = FileBuildSettings(compilerArguments: args + ["-DFOO"]) + buildSystem.buildSettingsByFile[DocumentURI(url)] = FileBuildSettings(compilerArguments: args + ["-DFOO"]) let expectation = XCTestExpectation(description: "refresh") expectation.expectedFulfillmentCount = 2 @@ -210,7 +210,7 @@ final class BuildSystemTests: XCTestCase { XCTAssertEqual(note.params.diagnostics.count, 0) expectation.fulfill() } - testServer.server?.fileBuildSettingsChanged([.url(url)]) + testServer.server?.fileBuildSettingsChanged([DocumentURI(url)]) let result = XCTWaiter.wait(for: [expectation], timeout: 5) if result != .completed { @@ -224,7 +224,7 @@ final class BuildSystemTests: XCTestCase { sk.allowUnexpectedNotification = false sk.sendNoteSync(DidOpenTextDocument(textDocument: TextDocumentItem( - uri: .url(url), + uri: DocumentURI(url), language: .swift, version: 12, text: """ @@ -232,18 +232,18 @@ final class BuildSystemTests: XCTestCase { """ )), { (note: Notification) in XCTAssertEqual(note.params.diagnostics.count, 1) - XCTAssertEqual("func", self.workspace.documentManager.latestSnapshot(.url(url))!.text) + XCTAssertEqual("func", self.workspace.documentManager.latestSnapshot(DocumentURI(url))!.text) }) // Modify the build settings and inform the SourceKitServer. // This shouldn't trigger new diagnostics since nothing actually changed (false alarm). - testServer.server?.fileBuildSettingsChanged([.url(url)]) + testServer.server?.fileBuildSettingsChanged([DocumentURI(url)]) let expectation = XCTestExpectation(description: "refresh doesn't occur") expectation.isInverted = true sk.handleNextNotification { (note: Notification) in XCTAssertEqual(note.params.diagnostics.count, 1) - XCTAssertEqual("func", self.workspace.documentManager.latestSnapshot(.url(url))!.text) + XCTAssertEqual("func", self.workspace.documentManager.latestSnapshot(DocumentURI(url))!.text) expectation.fulfill() } diff --git a/Tests/SourceKitTests/DocumentColorTests.swift b/Tests/SourceKitTests/DocumentColorTests.swift index c7772521..3c1038f0 100644 --- a/Tests/SourceKitTests/DocumentColorTests.swift +++ b/Tests/SourceKitTests/DocumentColorTests.swift @@ -52,7 +52,7 @@ final class DocumentColorTests: XCTestCase { let url = URL(fileURLWithPath: "/a.swift") sk.send(DidOpenTextDocument(textDocument: TextDocumentItem( - uri: .url(url), + uri: DocumentURI(url), language: .swift, version: 12, text: text))) @@ -65,7 +65,7 @@ final class DocumentColorTests: XCTestCase { let url = URL(fileURLWithPath: "/a.swift") sk.send(DidOpenTextDocument(textDocument: TextDocumentItem( - uri: .url(url), + uri: DocumentURI(url), language: .swift, version: 12, text: text))) diff --git a/Tests/SourceKitTests/DocumentSymbolTests.swift b/Tests/SourceKitTests/DocumentSymbolTests.swift index 6c8965cb..b8ce9de3 100644 --- a/Tests/SourceKitTests/DocumentSymbolTests.swift +++ b/Tests/SourceKitTests/DocumentSymbolTests.swift @@ -55,7 +55,7 @@ func initialize(capabilities: DocumentSymbolCapabilities) { let url = URL(fileURLWithPath: "/a.swift") sk.send(DidOpenTextDocument(textDocument: TextDocumentItem( - uri: .url(url), + uri: DocumentURI(url), language: .swift, version: 17, text: text diff --git a/Tests/SourceKitTests/ExecuteCommandTests.swift b/Tests/SourceKitTests/ExecuteCommandTests.swift index 38014c25..09074e87 100644 --- a/Tests/SourceKitTests/ExecuteCommandTests.swift +++ b/Tests/SourceKitTests/ExecuteCommandTests.swift @@ -79,7 +79,7 @@ final class ExecuteCommandTests: XCTestCase { } XCTAssertEqual(WorkspaceEdit(fromLSPDictionary: resultDict), WorkspaceEdit(changes: [ - .url(loc.url): [ + DocumentURI(loc.url): [ TextEdit(range: Position(line: 1, utf16index: 29).. String {\n/*sr:extractStart*/var a = \"/*sr:string*/\"\n return a\n}\n\n"), TextEdit(range: Position(line: 1, utf16index: 2)..