Skip to content

Commit

Permalink
Merge branch 'develop' into wip/cross-building
Browse files Browse the repository at this point in the history
  • Loading branch information
adpi2 committed Sep 26, 2024
2 parents 01d5f9c + 1a4cdf4 commit aa28083
Show file tree
Hide file tree
Showing 16 changed files with 83 additions and 89 deletions.
56 changes: 26 additions & 30 deletions main-settings/src/main/scala/sbt/Def.scala
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,32 @@ import xsbti.{ HashedVirtualFileRef, VirtualFile, VirtualFileRef }
import sjsonnew.JsonFormat
import scala.reflect.ClassTag

trait BuildSyntax:
inline def settingKey[A1](inline description: String): SettingKey[A1] =
${ std.KeyMacro.settingKeyImpl[A1]('description) }

inline def taskKey[A1](inline description: String): TaskKey[A1] =
${ std.KeyMacro.taskKeyImpl[A1]('description) }

inline def inputKey[A1](inline description: String): InputKey[A1] =
${ std.KeyMacro.inputKeyImpl[A1]('description) }

import sbt.std.ParserInput
extension [A1](inline in: Task[A1])
inline def value: A1 = std.InputWrapper.`wrapTask_\u2603\u2603`[A1](in)

// implicit def macroValueIn[T](@deprecated("unused", "") in: InputTask[T]): std.InputEvaluated[T] =
// ???

extension [A1](inline in: Parser[A1])
inline def parsed: A1 = ParserInput.`parser_\u2603\u2603`[A1](Def.toSParser(in))

extension [A1](inline in: State => Parser[A1])
inline def parsed: A1 = ParserInput.`parser_\u2603\u2603`[A1](in)
end BuildSyntax

/** A concrete settings system that uses `sbt.Scope` for the scope type. */
object Def extends Init[Scope] with TaskMacroExtra with InitializeImplicits:
object Def extends BuildSyntax with Init[Scope] with InitializeImplicits:
type Classpath = Seq[Attributed[HashedVirtualFileRef]]

def settings(ss: SettingsDefinition*): Seq[Setting[_]] = ss.flatMap(_.settings)
Expand Down Expand Up @@ -404,15 +428,6 @@ object Def extends Init[Scope] with TaskMacroExtra with InitializeImplicits:
)
)

inline def settingKey[A1](inline description: String): SettingKey[A1] =
${ std.KeyMacro.settingKeyImpl[A1]('description) }

inline def taskKey[A1](inline description: String): TaskKey[A1] =
${ std.KeyMacro.taskKeyImpl[A1]('description) }

inline def inputKey[A1](inline description: String): InputKey[A1] =
${ std.KeyMacro.inputKeyImpl[A1]('description) }

class InitOps[T](private val x: Initialize[T]) extends AnyVal {
def toTaskable: Taskable[T] = x
}
Expand Down Expand Up @@ -449,28 +464,9 @@ object Def extends Init[Scope] with TaskMacroExtra with InitializeImplicits:
t.info.attributes.get(isDummyTask) getOrElse false
end Def

// these need to be mixed into the sbt package object
// because the target doesn't involve Initialize or anything in Def
trait TaskMacroExtra:
import sbt.std.ParserInput
extension [A1](inline in: Task[A1])
inline def value: A1 = std.InputWrapper.`wrapTask_\u2603\u2603`[A1](in)

// implicit def macroValueIn[T](@deprecated("unused", "") in: InputTask[T]): std.InputEvaluated[T] =
// ???

extension [A1](inline in: Parser[A1])
inline def parsed: A1 = ParserInput.`parser_\u2603\u2603`[A1](Def.toSParser(in))

extension [A1](inline in: State => Parser[A1])
inline def parsed: A1 = ParserInput.`parser_\u2603\u2603`[A1](in)
end TaskMacroExtra

sealed trait InitializeImplicits0 { self: Def.type =>
sealed trait InitializeImplicits { self: Def.type =>
implicit def initOps[T](x: Def.Initialize[T]): Def.InitOps[T] = new Def.InitOps(x)
}

sealed trait InitializeImplicits extends InitializeImplicits0 { self: Def.type =>
implicit def initTaskOps[T](x: Def.Initialize[Task[T]]): Def.InitTaskOps[T] =
new Def.InitTaskOps(x)
}
2 changes: 2 additions & 0 deletions main-settings/src/main/scala/sbt/Structure.scala
Original file line number Diff line number Diff line change
Expand Up @@ -382,6 +382,8 @@ object Scoped:
protected def onTask[A2](f: Task[A1] => Task[A2]): Initialize[Task[A2]] =
init.apply(f)

def dependsOn(tasks: Initialize[? <: Task[?]]*): Initialize[Task[A1]] =
init.zipWith(tasks.asInstanceOf[Seq[Initialize[Task[?]]]].join)(_.dependsOn(_*))
def flatMapTaskValue[T](f: A1 => Task[T]): Initialize[Task[T]] =
onTask(_.result flatMap (f compose successM))
def map[A2](f: A1 => A2): Initialize[Task[A2]] =
Expand Down
23 changes: 23 additions & 0 deletions main/src/main/scala/sbt/BareBuildSyntax.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/*
* sbt
* Copyright 2023, Scala center
* Copyright 2011 - 2022, Lightbend, Inc.
* Copyright 2008 - 2010, Mark Harrah
* Licensed under Apache License 2.0 (see LICENSE)
*/

package sbt

import sbt.internal.DslEntry
import sbt.librarymanagement.Configuration

trait BareBuildSyntax:
def enablePlugins(ps: AutoPlugin*): DslEntry = DslEntry.DslEnablePlugins(ps)
def disablePlugins(ps: AutoPlugin*): DslEntry = DslEntry.DslDisablePlugins(ps)
def configs(cs: Configuration*): DslEntry = DslEntry.DslConfigs(cs)
def dependsOn(deps: ClasspathDep[ProjectReference]*): DslEntry = DslEntry.DslDependsOn(deps)
// avoid conflict with `sbt.Keys.aggregate`
def aggregateProjects(refs: ProjectReference*): DslEntry = DslEntry.DslAggregate(refs)
end BareBuildSyntax

object BareBuildSyntax extends BareBuildSyntax
41 changes: 0 additions & 41 deletions main/src/main/scala/sbt/BuildSyntax.scala

This file was deleted.

15 changes: 14 additions & 1 deletion main/src/main/scala/sbt/Defaults.scala
Original file line number Diff line number Diff line change
Expand Up @@ -2899,6 +2899,9 @@ object Classpaths {
import Defaults._
import Keys._

def analyzed[A](data: A, analysisFile: VirtualFile): Attributed[A] =
Attributed.blank(data).put(Keys.analysis, analysisFile.id)

def concatDistinct[A](
a: Taskable[Seq[A]],
b: Taskable[Seq[A]]
Expand Down Expand Up @@ -4773,11 +4776,18 @@ object Classpaths {
}
}

private[sbt] object Build0 extends BuildExtra
private[sbt] object BuildExtra extends BuildExtra

trait BuildExtra extends BuildCommon with DefExtra {
import Defaults._

/**
* Creates a new Project. This is a macro that expects to be assigned directly to a val.
* The name of the val is used as the project ID and the name of the base directory of the project.
*/
inline def project: Project = ${ std.KeyMacro.projectImpl }
inline def projectMatrix: ProjectMatrix = ${ ProjectMatrix.projectMatrixImpl }

/**
* Defines an alias given by `name` that expands to `value`.
* This alias is defined globally after projects are loaded.
Expand Down Expand Up @@ -5048,6 +5058,9 @@ trait BuildExtra extends BuildCommon with DefExtra {
f: ScopedKey[_] => Boolean
): Seq[Setting[_]] =
ss filter (s => f(s.key) && (!transitive || s.dependencies.forall(f)))

implicit def sbtStateToUpperStateOps(s: State): UpperStateOps =
new UpperStateOps.UpperStateOpsImpl(s)
}

trait DefExtra {
Expand Down
2 changes: 1 addition & 1 deletion main/src/main/scala/sbt/EvaluateTask.scala
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import java.util.concurrent.atomic.AtomicReference

import sbt.Def.{ ScopedKey, Setting, dummyState }
import sbt.Keys.{ TaskProgress => _, name => _, _ }
import sbt.BuildExtra.*
import sbt.ProjectExtra.*
import sbt.Scope.Global
import sbt.SlashSyntax0._
Expand All @@ -24,7 +25,6 @@ import sbt.internal.util.{ Terminal => ITerminal, _ }
import sbt.librarymanagement.{ Resolver, UpdateReport }
import sbt.std.Transform.DummyTaskMap
import sbt.util.{ Logger, Show }
import sbt.BuildSyntax._
import sbt.internal.bsp.BuildTargetIdentifier

import scala.annotation.nowarn
Expand Down
3 changes: 1 addition & 2 deletions main/src/main/scala/sbt/Keys.scala
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,7 @@ import lmcoursier.{ CoursierConfiguration, FallbackDependency }
import org.apache.ivy.core.module.descriptor.ModuleDescriptor
import org.apache.ivy.core.module.id.ModuleRevisionId
import org.apache.logging.log4j.core.{ Appender => XAppender }
import sbt.BuildSyntax._
import sbt.Def.ScopedKey
import sbt.Def.*
import sbt.KeyRanks._
import sbt.internal.InMemoryCacheStore.CacheStoreFactoryFactory
import sbt.internal._
Expand Down
1 change: 1 addition & 0 deletions main/src/main/scala/sbt/internal/BuildUtil.scala
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ object BuildUtil {
("import _root_.scala.xml.{TopScope=>$scope}"
:: "import _root_.sbt.*"
:: "import _root_.sbt.given"
:: "import _root_.sbt.BareBuildSyntax.*"
:: "import _root_.sbt.Keys.*"
:: "import _root_.sbt.nio.Keys.*"
:: Nil)
Expand Down
9 changes: 3 additions & 6 deletions main/src/main/scala/sbt/internal/ClasspathImpl.scala
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ private[sbt] object ClasspathImpl {
val xs = products.map(_ -> analysis)
for (f, analysis) <- xs
yield APIMappings
.store(analyzed(f, analysisFile), apiURL.value)
.store(Classpaths.analyzed(f, analysisFile), apiURL.value)
.put(Keys.moduleIDStr, Classpaths.moduleIdJsonKeyFormat.write(module))
.put(Keys.configurationStr, config.name)
else exportedProducts.value
Expand All @@ -57,7 +57,7 @@ private[sbt] object ClasspathImpl {
val config = configuration.value
for (f, analysis) <- trackedExportedProductsImplTask(track).value
yield APIMappings
.store(analyzed(f, analysis), apiURL.value)
.store(Classpaths.analyzed(f, analysis), apiURL.value)
.put(Keys.artifactStr, RemoteCache.artifactToStr(art))
.put(Keys.moduleIDStr, Classpaths.moduleIdJsonKeyFormat.write(module))
.put(Keys.configurationStr, config.name)
Expand All @@ -71,7 +71,7 @@ private[sbt] object ClasspathImpl {
val config = configuration.value
for (f, analysis) <- trackedJarProductsImplTask(track).value
yield APIMappings
.store(analyzed(f, analysis), apiURL.value)
.store(Classpaths.analyzed(f, analysis), apiURL.value)
.put(Keys.artifactStr, RemoteCache.artifactToStr(art))
.put(Keys.moduleIDStr, Classpaths.moduleIdJsonKeyFormat.write(module))
.put(Keys.configurationStr, config.name)
Expand Down Expand Up @@ -344,9 +344,6 @@ private[sbt] object ClasspathImpl {
(tasks.toSeq.join).map(_.flatten.distinct)
}

def analyzed[A](data: A, analysisFile: VirtualFile): Attributed[A] =
Attributed.blank(data).put(Keys.analysis, analysisFile.id)

def interSort(
projectRef: ProjectRef,
conf: Configuration,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ package internal
package server

import java.net.URI
import sbt.BuildExtra.*
import sbt.BuildPaths.{ configurationSources, projectStandard }
import sbt.BuildSyntax._
import sbt.Def._
import sbt.Keys._
import sbt.Project._
Expand Down
2 changes: 1 addition & 1 deletion main/src/main/scala/sbt/nio/Keys.scala
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import java.io.InputStream
import java.nio.file.Path
import java.util.concurrent.atomic.AtomicBoolean

import sbt.BuildSyntax.{ settingKey, taskKey }
import sbt.Def.{ settingKey, taskKey }
import sbt.KeyRanks.{ BMinusSetting, DSetting, Invisible }
import sbt.internal.DynamicInput
import sbt.internal.nio.FileTreeRepository
Expand Down
2 changes: 1 addition & 1 deletion main/src/main/scala/sbt/plugins/DependencyTreeKeys.scala
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ package plugins
import java.io.File
import java.net.URI
import sbt.internal.graph._
import sbt.BuildSyntax._
import sbt.Def._
import sbt.librarymanagement.{ ModuleID, UpdateReport }

trait MiniDependencyTreeKeys {
Expand Down
2 changes: 1 addition & 1 deletion main/src/main/scala/sbt/plugins/SemanticdbPlugin.scala
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ object SemanticdbPlugin extends AutoPlugin {
val sdb = semanticdbEnabled.value
val m = semanticdbCompilerPlugin.value
val sv = scalaVersion.value
if (sdb && !ScalaInstance.isDotty(sv)) List(Build0.compilerPlugin(m))
if (sdb && !ScalaInstance.isDotty(sv)) List(BuildExtra.compilerPlugin(m))
else Nil
},
semanticdbOptions += {
Expand Down
2 changes: 1 addition & 1 deletion main/src/test/scala/ProjectMacro.scala
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ package sbt
import scala.util.control.NonFatal
import org.scalacheck._
import Prop._
import sbt.BuildSyntax.project
import sbt.BuildExtra.project
import java.io.File

class ProjectDefs {
Expand Down
3 changes: 1 addition & 2 deletions sbt-app/src/main/scala/package.scala
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,8 @@ package object sbt
with sbt.librarymanagement.DependencyFilterExtra
with sbt.librarymanagement.LibraryManagementSyntax
with sbt.BuildExtra
with sbt.TaskMacroExtra
with sbt.ScopeFilter.Make
with sbt.BuildSyntax
with sbt.ScopeFilter.Make
with sbt.OptionSyntax
with sbt.SlashSyntax
with sbt.Import:
Expand Down
7 changes: 6 additions & 1 deletion sbt-app/src/main/scala/sbt/Import.scala
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,10 @@ trait Import {
val CustomOutput = sbt.OutputStrategy.CustomOutput
val AllRequirements = sbt.PluginTrigger.AllRequirements
val NoTrigger = sbt.PluginTrigger.NoTrigger

val ClasspathDependency = ClasspathDep.ClasspathDependency
type ClasspathDependency = ClasspathDep.ClasspathDependency
val ResolvedClasspathDependency = ClasspathDep.ResolvedClasspathDependency
type ResolvedClasspathDependency = ClasspathDep.ResolvedClasspathDependency
// sbt.testing
type TestResult = sbt.protocol.testing.TestResult
val TestResult = sbt.protocol.testing.TestResult
Expand Down Expand Up @@ -197,6 +200,8 @@ trait Import {
type SimpleReader = sbt.internal.util.SimpleReader
type SourcePosition = sbt.internal.util.SourcePosition
val StackTrace = sbt.internal.util.StackTrace
val StringAttributeKey = sbt.internal.util.StringAttributeKey
type StringAttributeKey = sbt.internal.util.StringAttributeKey
type SuppressedTraceContext = sbt.internal.util.SuppressedTraceContext
type TranslatedException = sbt.internal.util.TranslatedException
type TranslatedIOException = sbt.internal.util.TranslatedIOException
Expand Down

0 comments on commit aa28083

Please sign in to comment.