mirror of https://github.com/sbt/sbt.git
Fixes #899. `.join` on a `Seq[Initialize[Task[T]]]` could resolve through the generic `Initialize.joinInitialize` conversion (yielding `Initialize[Seq[Task[T]]]`) instead of the task-flattening `Initialize[Task[Seq[T]]]`, whenever the task-specialized `Scoped.richTaskSeq` was not in scope. Add the task join as an extension method on `Seq[Def.Initialize[Task[A]]]` in `object Def`. Member resolution tries extension methods before implicit conversions, so it is selected ahead of the generic conversion regardless of whether `sbt.Scoped` is in scope -- and, being in a different resolution phase than the existing `Scoped.richTaskSeq` conversion, it does not become a second ambiguous candidate for `TaskKey`/`SettingKey` seqs (where `Scoped` is a base type). `Scoped.richTaskSeq` is left unchanged as the existing public implicit. Also: - Drop the now-unnecessary `import sbt.Scoped.richTaskSeq` from `BuildServerProtocol` and simplify `ScopeFilter.all`'s `.join(_.join)` to `.join`. - Make the two `dependsOn(Initialize[? <: Task[?]]*)` overloads delegate to `dependsOnSeq`, which uses the explicit `Initialize.joinAny[Task]` raw-task form, instead of relying on `.join` resolving to the generic conversion. - Add a compile-only regression test pinning resolution for both a plain `Seq[Initialize[Task[Int]]]` and a `Seq[TaskKey[Int]]`, inferring the result with no expected type. |
||
|---|---|---|
| .github | ||
| buildfile/src | ||
| client | ||
| contributing-docs | ||
| core-macros/src | ||
| internal | ||
| launch | ||
| launcher-package | ||
| licenses | ||
| lm-core | ||
| lm-coursier | ||
| lm-ivy/src | ||
| main | ||
| main-actions/src | ||
| main-command/src | ||
| main-settings/src | ||
| notes | ||
| project | ||
| protocol/src | ||
| run | ||
| sbt-app/src | ||
| sbt-ivy/src/main/scala/sbt | ||
| sbt-remote-cache/src | ||
| sbtw | ||
| scripted-sbt | ||
| scripts | ||
| server-test/src | ||
| src | ||
| tasks | ||
| tasks-standard | ||
| testing | ||
| util-cache | ||
| util-collection | ||
| util-tracking | ||
| worker/src | ||
| zinc-lm-integration/src | ||
| .git-blame-ignore-revs | ||
| .gitattributes | ||
| .gitignore | ||
| .gitmodules | ||
| .java-version | ||
| .jvmopts | ||
| .mailmap | ||
| .sbtopts | ||
| .scala-steward.conf | ||
| .scalafix.conf | ||
| .scalafmt.conf | ||
| AGENTS.md | ||
| CONTRIBUTING.md | ||
| LICENSE | ||
| NOTICE | ||
| PROFILING.md | ||
| README.md | ||
| SUPPORT.md | ||
| build.sbt | ||
| sbt | ||
| sbt-allsources.sh | ||
| sbt.sh | ||
| server.md | ||
README.md
sbt
sbt is a build tool for Scala, Java, and more.
For general documentation, see https://www.scala-sbt.org/.
sbt 2.x
This is the 2.x series of sbt. The source code of sbt is split across several GitHub repositories, including this one.
- sbt/io hosts
sbt.iomodule. - sbt/zinc hosts Zinc, an incremental compiler for Scala.
- sbt/sbt, this repository hosts modules that implement the build tool.
Other links
- Setup: Describes getting started with the latest binary release.
- FAQ: Explains how to get help and more.
- sbt/sbt-zero-seven: hosts sbt 0.7.7 and earlier versions
Issues and Pull Requests
Please read CONTRIBUTING carefully before opening a GitHub Issue or a pull request.
If you're looking for an idea for a contribution, issues labeled with good first issue or help wanted might be good starting points.
If you would like to ask questions about sbt, there's sbt channel on Scala Discord, but it would be good to gather questions on Stackoverflow.
license
See LICENSE.