@@ -66,6 +66,13 @@ public final class Workspace {
6666 " Can't find workspace. "
6767 }
6868 }
69+
70+ public struct CantFindFileError : Error , LocalizedError {
71+ public var fileURL : URL
72+ public var errorDescription : String ? {
73+ " Can't find \( fileURL) . "
74+ }
75+ }
6976
7077 private var additionalProperties = WorkspacePropertyValues ( )
7178 public internal( set) var plugins = [ ObjectIdentifier: WorkspacePlugin] ( )
@@ -107,7 +114,7 @@ public final class Workspace {
107114 let openedFiles = openedFileRecoverableStorage. openedFiles
108115 Task { @WorkspaceActor in
109116 for fileURL in openedFiles {
110- _ = createFilespaceIfNeeded ( fileURL: fileURL)
117+ _ = try ? createFilespaceIfNeeded ( fileURL: fileURL)
111118 }
112119 }
113120 }
@@ -117,7 +124,19 @@ public final class Workspace {
117124 }
118125
119126 @WorkspaceActor
120- public func createFilespaceIfNeeded( fileURL: URL ) -> Filespace {
127+ public func createFilespaceIfNeeded( fileURL: URL ) throws -> Filespace {
128+ let extensionName = fileURL. pathExtension
129+ if [ " xcworkspace " , " xcodeproj " ] . contains ( extensionName) {
130+ throw UnsupportedFileError ( extensionName: extensionName)
131+ }
132+ var isDirectory : ObjCBool = false
133+ if !FileManager. default. fileExists ( atPath: fileURL. path, isDirectory: & isDirectory) {
134+ throw CantFindFileError ( fileURL: fileURL)
135+ }
136+ if isDirectory. boolValue {
137+ throw UnsupportedFileError ( extensionName: extensionName)
138+ }
139+
121140 let existedFilespace = filespaces [ fileURL]
122141 let filespace = existedFilespace ?? . init(
123142 fileURL: fileURL,
0 commit comments