@@ -15,7 +15,7 @@ package import Basics
1515@preconcurrency import Build
1616package import BuildServerProtocol
1717import Dispatch
18- import Foundation
18+ package import Foundation
1919package import LanguageServerProtocol
2020@preconcurrency import PackageGraph
2121import PackageLoading
@@ -33,12 +33,10 @@ package import ToolchainRegistry
3333package import struct Basics. AbsolutePath
3434package import struct Basics. IdentifiableSet
3535package import struct Basics. TSCAbsolutePath
36- import struct Foundation. URL
37- package import struct TSCBasic. AbsolutePath
38- package import protocol TSCBasic. FileSystem
39- package import class TSCBasic. Process
40- package import var TSCBasic. localFileSystem
41- package import func TSCBasic. resolveSymlinks
36+ import struct TSCBasic. AbsolutePath
37+ import protocol TSCBasic. FileSystem
38+ import class TSCBasic. Process
39+ import var TSCBasic. localFileSystem
4240package import class ToolchainRegistry. Toolchain
4341#else
4442import Basics
@@ -68,7 +66,6 @@ import struct TSCBasic.AbsolutePath
6866import protocol TSCBasic. FileSystem
6967import class TSCBasic. Process
7068import var TSCBasic. localFileSystem
71- import func TSCBasic. resolveSymlinks
7269import class ToolchainRegistry. Toolchain
7370#endif
7471
@@ -240,26 +237,18 @@ package actor SwiftPMBuildSystem: BuiltInBuildSystem {
240237
241238 private var targetDependencies : [ BuildTargetIdentifier : Set < BuildTargetIdentifier > ] = [ : ]
242239
243- static package func projectRoot(
244- for path: TSCBasic . AbsolutePath ,
245- options: SourceKitLSPOptions
246- ) -> TSCBasic . AbsolutePath ? {
247- guard var path = try ? resolveSymlinks ( path) else {
248- return nil
249- }
240+ static package func projectRoot( for path: URL , options: SourceKitLSPOptions ) -> URL ? {
241+ var path = path. realpath
250242 while true {
251243 let packagePath = path. appending ( component: " Package.swift " )
252- if localFileSystem. isFile ( packagePath) {
253- let contents = try ? localFileSystem. readFileContents ( packagePath)
254- if contents? . cString. contains ( " PackageDescription " ) == true {
255- return path
256- }
244+ if ( try ? String ( contentsOf: packagePath, encoding: . utf8) ) ? . contains ( " PackageDescription " ) ?? false {
245+ return path
257246 }
258247
259- if path. isRoot {
260- return nil
248+ if ( try ? AbsolutePath ( validating : path. path ) ) ? . isRoot ?? true {
249+ break
261250 }
262- path = path . parentDirectory
251+ path. deleteLastPathComponent ( )
263252 }
264253 return nil
265254 }
@@ -611,7 +600,7 @@ package actor SwiftPMBuildSystem: BuiltInBuildSystem {
611600 let buildSettings = FileBuildSettings (
612601 compilerArguments: try await compilerArguments ( for: DocumentURI ( substituteFile) , in: swiftPMTarget) ,
613602 workingDirectory: projectRoot. pathString
614- ) . patching ( newFile: DocumentURI ( try resolveSymlinks ( path) . asURL) , originalFile: DocumentURI ( substituteFile) )
603+ ) . patching ( newFile: DocumentURI ( path. asURL. realpath ) , originalFile: DocumentURI ( substituteFile) )
615604 return TextDocumentSourceKitOptionsResponse (
616605 compilerArguments: buildSettings. compilerArguments,
617606 workingDirectory: buildSettings. workingDirectory
0 commit comments