Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 10 additions & 7 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,17 @@ jobs:
strategy:
matrix:
include:
- scala-version: '2.12.20'
sbt-version: '1.5.5'
- scala-version: '2.12.x'
java-version: 8
- scala-version: '2.12.20'
sbt-version: '1.5.5'
- scala-version: '3.x'
java-version: 8
- scala-version: '2.12.x'
java-version: 11
- scala-version: '3.x'
java-version: 11
- scala-version: '2.12.20'
sbt-version: '1.5.5'
- scala-version: '2.12.x'
java-version: 17
- scala-version: '3.x'
java-version: 17

steps:
Expand All @@ -35,4 +38,4 @@ jobs:
env:
SCALA_VERSION: ${{ matrix.scala-version }}
SBT_VERSION: ${{ matrix.sbt-version }}
run: sbt "++${SCALA_VERSION} ; ^^${SBT_VERSION} ; test ; scripted"
run: sbt "++${SCALA_VERSION} ; test ; scripted"
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name: Release
on:
push:
tags: ["*"]
tags: ["**"]
jobs:
publish:
runs-on: ubuntu-20.04
Expand Down
34 changes: 19 additions & 15 deletions build.sbt
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
ThisBuild / scalaVersion := "2.12.20"
lazy val scala212 = "2.12.20"
lazy val scala3 = "3.7.2"
ThisBuild / crossScalaVersions := Seq(scala212, scala3)
ThisBuild / scalaVersion := scala212
ThisBuild / version := {
val orig = (ThisBuild / version).value
if (orig.endsWith("-SNAPSHOT")) "0.5.0-SNAPSHOT"
Expand All @@ -11,16 +14,26 @@ lazy val root = (project in file("."))
name := "sbt-unidoc",
scriptedLaunchOpts ++= Seq("-Xmx1024M", "-Dplugin.version=" + version.value),
scriptedBufferLog := false,
// sbt-unidoc requires sbt 1.5.0 and up
pluginCrossBuild / sbtVersion := "1.5.0",
(pluginCrossBuild / sbtVersion) := {
scalaBinaryVersion.value match {
case "2.12" => "1.5.8"
case _ => "2.0.0-RC3"
}
},
scriptedSbt := {
scalaBinaryVersion.value match {
case "2.12" => "1.11.4"
case _ => (pluginCrossBuild / sbtVersion).value
}
},
)

Global / onChangedBuildSource := ReloadOnSourceChanges
ThisBuild / description := "sbt plugin to create a unified API document across projects"
ThisBuild / organization := "com.github.sbt"
ThisBuild / homepage := Some(url("https://github.com/sbt/sbt-unidoc"))
ThisBuild / Compile / scalacOptions := Seq("-feature", "-deprecation", "-Xlint")
ThisBuild / licenses := List("Apache License v2" -> url("http://www.apache.org/licenses/LICENSE-2.0.html"))
ThisBuild / Compile / scalacOptions ++= Seq("-feature", "-deprecation", "-Xlint")
ThisBuild / licenses := List(License.Apache2)
ThisBuild / developers := List(
Developer(
"eed3si9n",
Expand All @@ -29,17 +42,8 @@ ThisBuild / developers := List(
url("https://github.com/eed3si9n")
)
)
ThisBuild / pomIncludeRepository := { _ =>
false
}
ThisBuild / publishTo := {
val nexus = "https://oss.sonatype.org/"
if (isSnapshot.value) Some("snapshots" at nexus + "content/repositories/snapshots")
else Some("releases" at nexus + "service/local/staging/deploy/maven2")
}
ThisBuild / publishMavenStyle := true
ThisBuild / dynverSonatypeSnapshots := true
scalacOptions ++= {
Compile / scalacOptions ++= {
// https://github.com/sbt/sbt/issues/8220
if (scalaBinaryVersion.value == "2.12")
Seq("-Wconf:cat=unused-nowarn:s")
Expand Down
2 changes: 1 addition & 1 deletion project/build.properties
Original file line number Diff line number Diff line change
@@ -1 +1 @@
sbt.version=2.0.0-RC3
sbt.version=1.11.4
20 changes: 20 additions & 0 deletions src/main/scala-2.12/PluginCompat.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package sbtunidoc

import sbt.*
import java.io.File
import java.nio.file.{ Path => NioPath }
import xsbti.{ FileConverter }

object PluginCompat {
type URI = java.net.URL
type FileRef = java.io.File
def getName(file: FileRef): String = file.getName()
def toFile(file: FileRef): java.io.File = file
def toNioPath(a: Attributed[File])(implicit conv: FileConverter): NioPath =
a.data.toPath()

// This adds `Def.uncached(...)`
implicit class DefOp(singleton: Def.type) {
def uncached[A1](a: A1): A1 = a
}
}
18 changes: 18 additions & 0 deletions src/main/scala-3/PluginCompat.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package sbtunidoc

import sbt.*
import java.io.File
import java.nio.file.{ Path => NioPath }
import xsbti.{ FileConverter, HashedVirtualFileRef }

object PluginCompat:
type URI = java.net.URI
type FileRef = HashedVirtualFileRef
def getName(file: HashedVirtualFileRef): String = file.name
def toNioPath(a: Attributed[HashedVirtualFileRef])(using conv: FileConverter): NioPath =
conv.toPath(a.data)
def toNioPath(file: HashedVirtualFileRef)(using conv: FileConverter): NioPath =
conv.toPath(file)
inline def toFile(file: HashedVirtualFileRef)(using conv: FileConverter): File =
toNioPath(file).toFile()
end PluginCompat
52 changes: 33 additions & 19 deletions src/main/scala/sbtunidoc/BaseUnidocPlugin.scala
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package sbtunidoc

import sbt.Keys._
import sbt._
import sbt.Keys.*
import sbt.*
import sbt.plugins.JvmPlugin
import PluginCompat.*

/** Provides default settings for unidoc plugins.
*
Expand All @@ -13,32 +14,45 @@ object BaseUnidocPlugin extends AutoPlugin {
import autoImport._

override def projectSettings = Seq(
Compile / unidoc := Seq.empty,
Test / unidoc := Seq.empty
Compile / unidoc := Def.uncached(Seq.empty),
Test / unidoc := Def.uncached(Seq.empty),
)

override def requires = JvmPlugin

def baseUnidocSettings(sc: Configuration): Seq[sbt.Def.Setting[?]] = Seq(
doc := Unidoc(streams.value.cacheDirectory, (unidoc / compilers).value, (unidoc / sources).value, (unidoc / fullClasspath).value,
(unidoc / scalacOptions).value, (unidoc / javacOptions).value, (unidoc / apiMappings).value, (unidoc / maxErrors).value,
(unidoc / target).value, configuration.value, streams.value, (unidoc / sourcePositionMappers).value, fileConverter.value),
unidoc / compilers := (sc / compilers).value,
unidoc / sources := (unidoc / unidocAllSources).value.flatten.sortBy { _.getAbsolutePath },
unidoc / scalacOptions := (sc / doc / scalacOptions).value,
unidoc / javacOptions := (sc / doc / javacOptions).value,
unidoc / fullClasspath := (unidoc / unidocAllClasspaths).value.flatten.distinct.sortBy { _.data.getName },
unidoc / unidocAllClasspaths := allClasspathsTask.value,
unidoc / apiMappings := {
doc := Def.uncached {
Unidoc(
streams.value.cacheDirectory,
(unidoc / compilers).value,
(unidoc / sources).value,
(unidoc / fullClasspath).value,
(unidoc / scalacOptions).value,
(unidoc / javacOptions).value,
(unidoc / apiMappings).value,
(unidoc / maxErrors).value,
(unidoc / target).value,
configuration.value,
streams.value,
(unidoc / sourcePositionMappers).value,
fileConverter.value)
},
unidoc / compilers := Def.uncached((sc / compilers).value),
unidoc / sources := Def.uncached((unidoc / unidocAllSources).value.flatten.sortBy { _.getAbsolutePath }),
unidoc / scalacOptions := Def.uncached((sc / doc / scalacOptions).value),
unidoc / javacOptions := Def.uncached((sc / doc / javacOptions).value),
unidoc / fullClasspath := Def.uncached((unidoc / unidocAllClasspaths).value.flatten.distinct.sortBy { x => getName(x.data) }),
unidoc / unidocAllClasspaths := Def.uncached(allClasspathsTask.value),
unidoc / apiMappings := Def.uncached {
val all = (unidoc / unidocAllAPIMappings).value
val allList = all map { _.toList }
allList.flatten.distinct.toMap
},
unidoc / unidocAllAPIMappings := allAPIMappingsTask.value,
unidoc / maxErrors := (sc / doc / maxErrors).value,
unidoc / unidocScopeFilter := ScopeFilter((unidoc / unidocProjectFilter).value, (unidoc / unidocConfigurationFilter).value),
unidoc / unidocProjectFilter := inAnyProject,
unidoc / unidocConfigurationFilter := inConfigurations(sc)
unidoc / unidocAllAPIMappings := Def.uncached(allAPIMappingsTask.value),
unidoc / maxErrors := Def.uncached((sc / doc / maxErrors).value),
unidoc / unidocScopeFilter := Def.uncached(ScopeFilter((unidoc / unidocProjectFilter).value, (unidoc / unidocConfigurationFilter).value)),
unidoc / unidocProjectFilter := Def.uncached(inAnyProject),
unidoc / unidocConfigurationFilter := Def.uncached(inConfigurations(sc))
)

lazy val allClasspathsTask = Def.taskDyn {
Expand Down
8 changes: 5 additions & 3 deletions src/main/scala/sbtunidoc/GenJavadocPlugin.scala
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package sbtunidoc

import sbt._
import sbt.Keys._
import sbt.*
import sbt.Keys.*
import sbt.plugins.JvmPlugin
import PluginCompat.*

object GenJavadocPlugin extends AutoPlugin {
object autoImport extends GenJavadocKeys {
Expand All @@ -16,5 +17,6 @@ object GenJavadocPlugin extends AutoPlugin {

override def projectSettings = Seq(
libraryDependencies += compilerPlugin("com.typesafe.genjavadoc" %% "genjavadoc-plugin" % unidocGenjavadocVersion.value cross CrossVersion.full),
scalacOptions += ("-P:genjavadoc:out=" + (target.value / "java")))
scalacOptions += Def.uncached(("-P:genjavadoc:out=" + (target.value / "java"))),
)
}
11 changes: 6 additions & 5 deletions src/main/scala/sbtunidoc/JavaUnidocPlugin.scala
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package sbtunidoc

import sbt._
import Keys._
import BaseUnidocPlugin.autoImport._
import sbt.*
import Keys.*
import BaseUnidocPlugin.autoImport.*
import PluginCompat.*

/** Generates unified javadoc documentation.
*
Expand All @@ -27,12 +28,12 @@ object JavaUnidocPlugin extends AutoPlugin {

def javaUnidocTask(c: Configuration, sc: Configuration): Seq[sbt.Def.Setting[?]] =
inConfig(c)(Defaults.configSettings ++ baseJavaUnidocTasks(sc)) ++ Seq(
sc / unidoc ++= Seq((c / doc).value)
sc / unidoc ++= Def.uncached(Seq((c / doc).value))
)

def baseJavaUnidocTasks(sc: Configuration): Seq[sbt.Def.Setting[?]] = BaseUnidocPlugin.baseUnidocSettings(sc) ++ Seq(
unidoc / target := target.value / "javaunidoc",
unidoc / unidocAllSources := allJavaSourcesTask.value
unidoc / unidocAllSources := Def.uncached(allJavaSourcesTask.value),
)

lazy val javaSources: sbt.Def.Initialize[Task[Seq[File]]] = Def.task {
Expand Down
11 changes: 6 additions & 5 deletions src/main/scala/sbtunidoc/PublishJavadocPlugin.scala
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package sbtunidoc

import sbt._
import sbt.Keys._
import sbt.*
import sbt.Keys.*
import PluginCompat.*

/** Publishes javadoc artifacts rather than scaladoc ones. */
object PublishJavadocPlugin extends AutoPlugin {
Expand All @@ -11,15 +12,15 @@ object PublishJavadocPlugin extends AutoPlugin {

def genjavadocExtraTask(c: Configuration, sc: Configuration): Seq[sbt.Def.Setting[?]] =
inConfig(c)(Defaults.configSettings ++ baseGenjavadocExtraTasks(sc)) ++ Seq(
sc / packageDoc := (c / packageDoc).value
sc / packageDoc := Def.uncached((c / packageDoc).value),
)

def baseGenjavadocExtraTasks(sc: Configuration): Seq[sbt.Def.Setting[?]] = Seq(
packageDoc / artifactName := { (sv, mod, art) => "" + mod.name + "_" + sv.binary + "-" + mod.revision + "-javadoc.jar" },
sources := {
sources := Def.uncached {
(sc / compile).value
(target.value / "java" ** "*.java").get() ++ (sc / sources).value.filter(_.getName.endsWith(".java"))
},
doc / javacOptions := (sc / doc / javacOptions).value
doc / javacOptions := Def.uncached((sc / doc / javacOptions).value),
)
}
13 changes: 7 additions & 6 deletions src/main/scala/sbtunidoc/ScalaUnidocPlugin.scala
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package sbtunidoc

import sbt._
import Keys._
import BaseUnidocPlugin.autoImport._
import sbt.*
import Keys.*
import BaseUnidocPlugin.autoImport.*
import PluginCompat.*

/** Generates unified scaladoc documentation. */
object ScalaUnidocPlugin extends AutoPlugin {
Expand All @@ -12,7 +13,7 @@ object ScalaUnidocPlugin extends AutoPlugin {
lazy val ScalaUnidoc = config("scalaunidoc") extend Compile
lazy val TestScalaUnidoc = config("testscalaunidoc") extend Test
}
import autoImport._
import autoImport.*

override def projectSettings =
scalaUnidocTask(ScalaUnidoc, Compile) ++
Expand All @@ -23,12 +24,12 @@ object ScalaUnidocPlugin extends AutoPlugin {

def scalaUnidocTask(c: Configuration, sc: Configuration): Seq[sbt.Def.Setting[?]] =
inConfig(c)(Defaults.configSettings ++ baseScalaUnidocTasks(sc)) ++ Seq(
sc / unidoc ++= Seq((c / doc).value)
sc / unidoc ++= Def.uncached(Seq((c / doc).value))
)

def baseScalaUnidocTasks(sc: Configuration): Seq[sbt.Def.Setting[?]] = BaseUnidocPlugin.baseUnidocSettings(sc) ++ Seq(
unidoc / target := crossTarget.value / "unidoc",
unidoc / unidocAllSources := allScalaSources.value
unidoc / unidocAllSources := Def.uncached(allScalaSources.value)
)

lazy val allScalaSources = Def.taskDyn {
Expand Down
Loading