in Sources/SKSwiftPMWorkspace/SwiftPMWorkspace.swift [172:231]
func reloadPackage() throws {
let observabilitySystem = ObservabilitySystem({ scope, diagnostic in
log(diagnostic.description, level: diagnostic.severity.asLogLevel)
})
let packageGraph = try self.workspace.loadPackageGraph(
rootInput: PackageGraphRootInput(packages: [packageRoot]),
observabilityScope: observabilitySystem.topScope
)
let plan = try BuildPlan(
buildParameters: buildParameters,
graph: packageGraph,
fileSystem: fileSystem,
observabilityScope: observabilitySystem.topScope
)
/// Make sure to execute any throwing statements before setting any
/// properties because otherwise we might end up in an inconsistent state
/// with only some properties modified.
self.packageGraph = packageGraph
self.fileToTarget = [AbsolutePath: TargetBuildDescription](
packageGraph.allTargets.flatMap { target in
return target.sources.paths.compactMap {
guard let td = plan.targetMap[target] else {
return nil
}
return (key: $0, value: td)
}
}, uniquingKeysWith: { td, _ in
// FIXME: is there a preferred target?
return td
})
self.sourceDirToTarget = [AbsolutePath: TargetBuildDescription](
packageGraph.allTargets.compactMap { target in
guard let td = plan.targetMap[target] else {
return nil
}
return (key: target.sources.root, value: td)
}, uniquingKeysWith: { td, _ in
// FIXME: is there a preferred target?
return td
})
guard let delegate = self.delegate else { return }
var changedFiles: [DocumentURI: FileBuildSettingsChange] = [:]
for (uri, language) in self.watchedFiles {
orLog {
if let settings = try self.settings(for: uri, language) {
changedFiles[uri] = FileBuildSettingsChange(settings)
} else {
changedFiles[uri] = .removedOrUnavailable
}
}
}
delegate.fileBuildSettingsChanged(changedFiles)
}