From 0bd736be2a5e1a048124cd1bc134454af12fb0ec Mon Sep 17 00:00:00 2001 From: Jason Zaugg Date: Sat, 26 Jun 2021 16:18:06 +1000 Subject: [PATCH] Record build sources in PluginData for BSP --- main/src/main/scala/sbt/EvaluateTask.scala | 6 ++++-- main/src/main/scala/sbt/internal/Load.scala | 10 ++++++++-- .../sbt/internal/server/BuildServerProtocol.scala | 13 +++++++++---- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/main/src/main/scala/sbt/EvaluateTask.scala b/main/src/main/scala/sbt/EvaluateTask.scala index 3557b6b30..58f1e1740 100644 --- a/main/src/main/scala/sbt/EvaluateTask.scala +++ b/main/src/main/scala/sbt/EvaluateTask.scala @@ -143,14 +143,16 @@ final case class PluginData( definitionClasspath: Seq[Attributed[File]], resolvers: Option[Vector[Resolver]], report: Option[UpdateReport], - scalacOptions: Seq[String] + scalacOptions: Seq[String], + unmanagedSources: Seq[File], + managedSources: Seq[File] ) { val classpath: Seq[Attributed[File]] = definitionClasspath ++ dependencyClasspath } object PluginData { private[sbt] def apply(dependencyClasspath: Def.Classpath): PluginData = - PluginData(dependencyClasspath, Nil, None, None, Nil) + PluginData(dependencyClasspath, Nil, None, None, Nil, Nil, Nil) } object EvaluateTask { diff --git a/main/src/main/scala/sbt/internal/Load.scala b/main/src/main/scala/sbt/internal/Load.scala index ef6e08149..6830d6749 100755 --- a/main/src/main/scala/sbt/internal/Load.scala +++ b/main/src/main/scala/sbt/internal/Load.scala @@ -1164,12 +1164,16 @@ private[sbt] object Load { val prod = (Configurations.Runtime / exportedProducts).value val cp = (Configurations.Runtime / fullClasspath).value val opts = (Configurations.Compile / scalacOptions).value + val managedSrcs = (Configurations.Compile / managedSources).value + val unmanagedSrcs = (Configurations.Compile / unmanagedSources).value PluginData( removeEntries(cp, prod), prod, Some(fullResolvers.value.toVector), Some(update.value), - opts + opts, + unmanagedSrcs, + managedSrcs ) }, scalacOptions += "-Wconf:cat=unused-nowarn:s", @@ -1225,7 +1229,7 @@ private[sbt] object Load { loadPluginDefinition( dir, config, - PluginData(config.globalPluginClasspath, Nil, None, None, Nil) + PluginData(config.globalPluginClasspath, Nil, None, None, Nil, Nil, Nil) ) def buildPlugins(dir: File, s: State, config: LoadBuildConfiguration): LoadedPlugins = @@ -1417,6 +1421,8 @@ final case class LoadBuildConfiguration( data.internalClasspath, Some(data.resolvers), Some(data.updateReport), + Nil, + Nil, Nil ) case None => PluginData(globalPluginClasspath) diff --git a/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala b/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala index 9bd78f513..bbb5c2b65 100644 --- a/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala +++ b/main/src/main/scala/sbt/internal/server/BuildServerProtocol.scala @@ -131,11 +131,16 @@ object BuildServerProtocol { case (id, loadedBuildUnit) => val base = loadedBuildUnit.localBase val sbtFiles = configurationSources(base) - val defDir = projectStandard(base) + val pluginData = loadedBuildUnit.unit.plugins.pluginData + val unmanagedSources = pluginData.unmanagedSources.map( + f => SourceItem(f.toURI, SourceItemKind.File, generated = false) + ) + val managedSources = pluginData.managedSources.map( + f => SourceItem(f.toURI, SourceItemKind.File, generated = true) + ) val sbtFilesItems = sbtFiles.map(f => SourceItem(f.toURI, SourceItemKind.File, generated = false)) - val defDirItem = SourceItem(defDir.toURI, SourceItemKind.Directory, generated = false) - SourcesItem(id, (defDirItem +: sbtFilesItems).toVector) + SourcesItem(id, (unmanagedSources ++ managedSources ++ sbtFilesItems).toVector) } val result = SourcesResult((items ++ buildItems).toVector) s.respondEvent(result) @@ -874,7 +879,7 @@ object BuildServerProtocol { } def warnIfBuildsNonEmpty(method: String, log: Logger): Unit = { if (builds.nonEmpty) - log.warn(s"$method is a no-op for SBT targets: ${builds.keys.mkString("[", ",", "]")}") + log.warn(s"$method is a no-op for build.sbt targets: ${builds.keys.mkString("[", ",", "]")}") } } }