@@ -191,6 +191,49 @@ final class WorkspaceTests: XCTestCase {
191
191
XCTAssertEqual ( diags, . full( RelatedFullDocumentDiagnosticReport ( items: [ ] ) ) )
192
192
}
193
193
194
+ func testCorrectWorkspaceForPackageSwiftInMultiSwiftPMWorkspaceSetup( ) async throws {
195
+ let project = try await MultiFileTestProject (
196
+ files: [
197
+ // PackageA
198
+ " PackageA/Sources/MyLibrary/libA.swift " : " " ,
199
+ " PackageA/Package.swift " : SwiftPMTestProject . defaultPackageManifest,
200
+
201
+ // PackageB
202
+ " PackageB/Sources/MyLibrary/libB.swift " : " " ,
203
+ " PackageB/Package.swift " : SwiftPMTestProject . defaultPackageManifest,
204
+ ] ,
205
+ workspaces: { scratchDir in
206
+ return [
207
+ WorkspaceFolder ( uri: DocumentURI ( scratchDir) ) ,
208
+ WorkspaceFolder ( uri: DocumentURI ( scratchDir. appendingPathComponent ( " PackageA " ) ) ) ,
209
+ WorkspaceFolder ( uri: DocumentURI ( scratchDir. appendingPathComponent ( " PackageB " ) ) ) ,
210
+ ]
211
+ }
212
+ )
213
+
214
+ let pkgA = DocumentURI (
215
+ project. scratchDirectory
216
+ . appendingPathComponent ( " PackageA " )
217
+ . appendingPathComponent ( " Package.swift " )
218
+ )
219
+
220
+ let pkgB = DocumentURI (
221
+ project. scratchDirectory
222
+ . appendingPathComponent ( " PackageB " )
223
+ . appendingPathComponent ( " Package.swift " )
224
+ )
225
+
226
+ assertEqual (
227
+ await project. testClient. server. workspaceForDocument ( uri: pkgA) ? . rootUri,
228
+ DocumentURI ( project. scratchDirectory. appendingPathComponent ( " PackageA " ) )
229
+ )
230
+
231
+ assertEqual (
232
+ await project. testClient. server. workspaceForDocument ( uri: pkgB) ? . rootUri,
233
+ DocumentURI ( project. scratchDirectory. appendingPathComponent ( " PackageB " ) )
234
+ )
235
+ }
236
+
194
237
func testSwiftPMPackageInSubfolder( ) async throws {
195
238
let packageManifest = """
196
239
// swift-tools-version: 5.7
0 commit comments