func reloadPackage()

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)
  }