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
2 changes: 1 addition & 1 deletion .scalafmt.conf
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
version=2.0.1
version=2.1.0
align.openParenCallSite = true
align.openParenDefnSite = true
maxColumn = 120
Expand Down
41 changes: 19 additions & 22 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -17,17 +17,15 @@ val isTravisBuild = settingKey[Boolean]("Flag indicating whether the current bui
val crossScalaVersionsFromTravis = settingKey[Seq[String]]("Scala versions set in .travis.yml as scala_version_XXX")
isTravisBuild in Global := sys.env.get("TRAVIS").isDefined

val scalatestVersion = "3.1.0-SNAP13"
val scalatestplusScalaCheckVersion = "3.1.0.0-RC2"

val scalatestplusScalaCheckVersion = "1.0.0-SNAP8"
val scalaCheckVersion = "1.14.2"

val scalaCheckVersion = "1.14.0"
val disciplineVersion = "1.0.1"

val disciplineVersion = "1.0.0"
val disciplineScalatestVersion = "1.0.0-RC1"

val disciplineScalatestVersion = "1.0.0-M1"

val kindProjectorVersion = "0.10.3"
val kindProjectorVersion = "0.11.0"

lazy val commonScalaVersionSettings = Seq(scalaVersion := "2.11.12")

Expand All @@ -52,21 +50,21 @@ def macroDependencies(scalaVersion: String) =
lazy val catsSettings = Seq(
incOptions := incOptions.value.withLogRecompileOnMacro(false),
libraryDependencies ++= Seq(
compilerPlugin("org.typelevel" %% "kind-projector" % kindProjectorVersion)
compilerPlugin(("org.typelevel" %% "kind-projector" % kindProjectorVersion).cross(CrossVersion.full))
) ++ macroDependencies(scalaVersion.value)
) ++ commonSettings ++ publishSettings ++ scoverageSettings ++ simulacrumSettings

lazy val simulacrumSettings = Seq(
libraryDependencies ++= Seq(
scalaOrganization.value % "scala-reflect" % scalaVersion.value % Provided,
"com.github.mpilquist" %%% "simulacrum" % "0.19.0" % Provided
"org.typelevel" %%% "simulacrum" % "1.0.0" % Provided
),
pomPostProcess := { (node: xml.Node) =>
new RuleTransformer(new RewriteRule {
override def transform(node: xml.Node): Seq[xml.Node] = node match {
case e: xml.Elem
if e.label == "dependency" &&
e.child.exists(child => child.label == "groupId" && child.text == "com.github.mpilquist") &&
e.child.exists(child => child.label == "groupId" && child.text == "org.typelevel") &&
e.child.exists(child => child.label == "artifactId" && child.text.startsWith("simulacrum_")) =>
Nil
case _ => Seq(node)
Expand Down Expand Up @@ -129,7 +127,6 @@ lazy val disciplineDependencies = Seq(

lazy val testingDependencies = Seq(
libraryDependencies ++= Seq(
"org.scalatest" %%% "scalatest" % scalatestVersion % "test",
"org.scalatestplus" %%% "scalatestplus-scalacheck" % scalatestplusScalaCheckVersion % "test",
"org.typelevel" %%% "discipline-scalatest" % disciplineScalatestVersion % "test"
)
Expand Down Expand Up @@ -199,7 +196,7 @@ lazy val docSettings = Seq(
includeFilter in Jekyll := (includeFilter in makeSite).value
)

def mimaPrevious(moduleName: String, scalaVer: String, ver: String): List[ModuleID] = {
def mimaPrevious(moduleName: String, scalaVer: String, ver: String, includeCats1: Boolean = true): List[ModuleID] = {
import sbtrelease.Version

def semverBinCompatVersions(major: Int, minor: Int, patch: Int): List[(Int, Int, Int)] = {
Expand Down Expand Up @@ -235,15 +232,15 @@ def mimaPrevious(moduleName: String, scalaVer: String, ver: String): List[Module
// Safety Net for Inclusions
lazy val extraVersions: List[String] = List("1.0.1", "1.1.0", "1.2.0", "1.3.1", "1.4.0", "1.5.0", "1.6.1")

(mimaVersions ++ extraVersions)
(mimaVersions ++ (if (includeCats1) extraVersions else Nil))
.filterNot(excludedVersions.contains(_))
.map(v => "org.typelevel" %% moduleName % v)

}

def mimaSettings(moduleName: String) =
def mimaSettings(moduleName: String, includeCats1: Boolean = true) =
Seq(
mimaPreviousArtifacts := mimaPrevious(moduleName, scalaVersion.value, version.value).toSet,
mimaPreviousArtifacts := mimaPrevious(moduleName, scalaVersion.value, version.value, includeCats1).toSet,
mimaBinaryIssueFilters ++= {
import com.typesafe.tools.mima.core._
import com.typesafe.tools.mima.core.ProblemFilters._
Expand Down Expand Up @@ -491,7 +488,7 @@ lazy val kernelLaws = crossProject(JSPlatform, JVMPlatform)
.settings(testingDependencies)
.settings(scalacOptions in Test := (scalacOptions in Test).value.filter(_ != "-Xfatal-warnings"))
.jsSettings(commonJsSettings)
.jvmSettings(commonJvmSettings)
.jvmSettings(commonJvmSettings ++ mimaSettings("cats-kernel-laws", includeCats1 = false))
.jsSettings(coverageEnabled := false)
.dependsOn(kernel)

Expand All @@ -514,7 +511,7 @@ lazy val laws = crossProject(JSPlatform, JVMPlatform)
.settings(disciplineDependencies)
.settings(testingDependencies)
.jsSettings(commonJsSettings)
.jvmSettings(commonJvmSettings)
.jvmSettings(commonJvmSettings ++ mimaSettings("cats-laws", includeCats1 = false))
.jsSettings(coverageEnabled := false)

lazy val free = crossProject(JSPlatform, JVMPlatform)
Expand Down Expand Up @@ -555,7 +552,7 @@ lazy val testkit = crossProject(JSPlatform, JVMPlatform)
)
)
.jsSettings(commonJsSettings)
.jvmSettings(commonJvmSettings)
.jvmSettings(commonJvmSettings ++ mimaSettings("cats-testkit", includeCats1 = false))
.settings(scalacOptions := scalacOptions.value.filter(_ != "-Xfatal-warnings"))

lazy val alleycatsCore = crossProject(JSPlatform, JVMPlatform)
Expand All @@ -568,7 +565,7 @@ lazy val alleycatsCore = crossProject(JSPlatform, JVMPlatform)
.settings(scoverageSettings)
.settings(includeGeneratedSrc)
.jsSettings(commonJsSettings)
.jvmSettings(commonJvmSettings)
.jvmSettings(commonJvmSettings ++ mimaSettings("alleycats-core", includeCats1 = false))

lazy val alleycatsLaws = crossProject(JSPlatform, JVMPlatform)
.crossType(CrossType.Pure)
Expand All @@ -581,7 +578,7 @@ lazy val alleycatsLaws = crossProject(JSPlatform, JVMPlatform)
.settings(disciplineDependencies)
.settings(testingDependencies)
.jsSettings(commonJsSettings)
.jvmSettings(commonJvmSettings)
.jvmSettings(commonJvmSettings ++ mimaSettings("alleycats-laws", includeCats1 = false))
.jsSettings(coverageEnabled := false)

lazy val alleycatsTests = crossProject(JSPlatform, JVMPlatform)
Expand Down Expand Up @@ -623,10 +620,10 @@ lazy val binCompatTest = project
// see https://github.com/typelevel/cats/pull/3026#discussion_r321984342
useCoursier := false,
commonScalaVersionSettings,
addCompilerPlugin("org.typelevel" %% "kind-projector" % kindProjectorVersion),
addCompilerPlugin(("org.typelevel" %% "kind-projector" % kindProjectorVersion).cross(CrossVersion.full)),
libraryDependencies ++= List(
mimaPrevious("cats-core", scalaVersion.value, version.value).last % Provided,
"org.scalatest" %%% "scalatest" % scalatestVersion % Test
"org.scalatestplus" %%% "scalatestplus-scalacheck" % scalatestplusScalaCheckVersion % Test
)
)
.dependsOn(core.jvm % Test)
Expand Down
6 changes: 4 additions & 2 deletions core/src/main/scala/cats/data/NonEmptyList.scala
Original file line number Diff line number Diff line change
Expand Up @@ -511,8 +511,10 @@ sealed abstract private[data] class NonEmptyListInstances extends NonEmptyListIn

implicit val catsDataInstancesForNonEmptyList
: SemigroupK[NonEmptyList] with Bimonad[NonEmptyList] with NonEmptyTraverse[NonEmptyList] =
new NonEmptyReducible[NonEmptyList, List] with SemigroupK[NonEmptyList] with Bimonad[NonEmptyList]
with NonEmptyTraverse[NonEmptyList] {
new NonEmptyReducible[NonEmptyList, List]
with SemigroupK[NonEmptyList]
with Bimonad[NonEmptyList]
with NonEmptyTraverse[NonEmptyList] {

def combineK[A](a: NonEmptyList[A], b: NonEmptyList[A]): NonEmptyList[A] =
a.concatNel(b)
Expand Down
6 changes: 4 additions & 2 deletions core/src/main/scala/cats/data/NonEmptyVector.scala
Original file line number Diff line number Diff line change
Expand Up @@ -240,8 +240,10 @@ sealed abstract private[data] class NonEmptyVectorInstances {

implicit val catsDataInstancesForNonEmptyVector
: SemigroupK[NonEmptyVector] with Bimonad[NonEmptyVector] with NonEmptyTraverse[NonEmptyVector] =
new NonEmptyReducible[NonEmptyVector, Vector] with SemigroupK[NonEmptyVector] with Bimonad[NonEmptyVector]
with NonEmptyTraverse[NonEmptyVector] {
new NonEmptyReducible[NonEmptyVector, Vector]
with SemigroupK[NonEmptyVector]
with Bimonad[NonEmptyVector]
with NonEmptyTraverse[NonEmptyVector] {

def combineK[A](a: NonEmptyVector[A], b: NonEmptyVector[A]): NonEmptyVector[A] =
a.concatNev(b)
Expand Down
7 changes: 5 additions & 2 deletions core/src/main/scala/cats/instances/option.scala
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,11 @@ trait OptionInstances extends cats.kernel.instances.OptionInstances {
with Alternative[Option]
with CommutativeMonad[Option]
with CoflatMap[Option] =
new Traverse[Option] with MonadError[Option, Unit] with Alternative[Option] with CommutativeMonad[Option]
with CoflatMap[Option] {
new Traverse[Option]
with MonadError[Option, Unit]
with Alternative[Option]
with CommutativeMonad[Option]
with CoflatMap[Option] {

def empty[A]: Option[A] = None

Expand Down
24 changes: 1 addition & 23 deletions core/src/main/scala/cats/instances/parallel.scala
Original file line number Diff line number Diff line change
Expand Up @@ -3,32 +3,10 @@ package instances

import cats.data._
import cats.kernel.Semigroup
import cats.syntax.either._
import cats.{~>, Applicative, Monad, Parallel}

private[instances] trait ParallelInstances1 {
@deprecated("Use EitherT.catsDataParallelForEitherTWithSequentialEffect", "2.0.0")
def catsParallelForEitherTNestedValidated[M[_]: Monad, E: Semigroup]
: Parallel.Aux[EitherT[M, E, *], Nested[M, Validated[E, *], *]] =
new Parallel[EitherT[M, E, *]] {
type F[x] = Nested[M, Validated[E, *], x]

implicit val appValidated: Applicative[Validated[E, *]] = Validated.catsDataApplicativeErrorForValidated
implicit val monadEither: Monad[Either[E, *]] = cats.instances.either.catsStdInstancesForEither

def applicative: Applicative[Nested[M, Validated[E, *], *]] =
cats.data.Nested.catsDataApplicativeForNested[M, Validated[E, *]]

def monad: Monad[EitherT[M, E, *]] = cats.data.EitherT.catsDataMonadErrorForEitherT

def sequential: Nested[M, Validated[E, *], *] ~> EitherT[M, E, *] =
λ[Nested[M, Validated[E, *], *] ~> EitherT[M, E, *]] { nested =>
EitherT(Monad[M].map(nested.value)(_.toEither))
}

def parallel: EitherT[M, E, *] ~> Nested[M, Validated[E, *], *] =
λ[EitherT[M, E, *] ~> Nested[M, Validated[E, *], *]] { eitherT =>
Nested(Monad[M].map(eitherT.value)(_.toValidated))
}
}
EitherT.catsDataParallelForEitherTWithSequentialEffect
}
16 changes: 8 additions & 8 deletions core/src/main/scala/cats/instances/sortedMap.scala
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@ import scala.collection.immutable.SortedMap

trait SortedMapInstances extends SortedMapInstances2 {

@deprecated("2.0.0-RC2", "Use cats.kernel.instances.sortedMap.catsKernelStdHashForSortedMap")
@deprecated("Use cats.kernel.instances.sortedMap.catsKernelStdHashForSortedMap", "2.0.0-RC2")
def catsStdHashForSortedMap[K: Hash: Order, V: Hash]: Hash[SortedMap[K, V]] =
cats.kernel.instances.sortedMap.catsKernelStdHashForSortedMap[K, V]

@deprecated("2.0.0-RC2", "Use cats.kernel.instances.sortedMap.catsKernelStdCommutativeMonoidForSortedMap")
@deprecated("Use cats.kernel.instances.sortedMap.catsKernelStdCommutativeMonoidForSortedMap", "2.0.0-RC2")
def catsStdCommutativeMonoidForSortedMap[K: Order, V: CommutativeSemigroup] =
cats.kernel.instances.sortedMap.catsKernelStdCommutativeMonoidForSortedMap[K, V]

Expand Down Expand Up @@ -114,37 +114,37 @@ trait SortedMapInstances extends SortedMapInstances2 {
}

private[instances] trait SortedMapInstances1 {
@deprecated("2.0.0-RC2", "Use cats.kernel.instances.sortedMap.catsKernelStdEqForSortedMap")
@deprecated("Use cats.kernel.instances.sortedMap.catsKernelStdEqForSortedMap", "2.0.0-RC2")
def catsStdEqForSortedMap[K: Order, V: Eq]: Eq[SortedMap[K, V]] =
new SortedMapEq[K, V]
}

private[instances] trait SortedMapInstances2 extends SortedMapInstances1 {
@deprecated("2.0.0-RC2", "Use cats.kernel.instances.sortedMap.catsKernelStdMonoidForSortedMap")
@deprecated("Use cats.kernel.instances.sortedMap.catsKernelStdMonoidForSortedMap", "2.0.0-RC2")
def catsStdMonoidForSortedMap[K: Order, V: Semigroup]: Monoid[SortedMap[K, V]] =
new SortedMapMonoid[K, V]
}

@deprecated("2.0.0-RC2", "Use cats.kernel.instances.SortedMapHash")
@deprecated("Use cats.kernel.instances.SortedMapHash", "2.0.0-RC2")
class SortedMapHash[K, V](implicit V: Hash[V], O: Order[K], K: Hash[K])
extends SortedMapEq[K, V]
with Hash[SortedMap[K, V]] {
private[this] val underlying: Hash[SortedMap[K, V]] = new cats.kernel.instances.SortedMapHash[K, V]
def hash(x: SortedMap[K, V]): Int = underlying.hash(x)
}

@deprecated("2.0.0-RC2", "Use cats.kernel.instances.SortedMapEq")
@deprecated("Use cats.kernel.instances.SortedMapEq", "2.0.0-RC2")
class SortedMapEq[K, V](implicit V: Eq[V], O: Order[K]) extends cats.kernel.instances.SortedMapEq[K, V]

@deprecated("2.0.0-RC2", "Use cats.kernel.instances.SortedMapCommutativeMonoid")
@deprecated("Use cats.kernel.instances.SortedMapCommutativeMonoid", "2.0.0-RC2")
class SortedMapCommutativeMonoid[K, V](implicit V: CommutativeSemigroup[V], O: Order[K])
extends SortedMapMonoid[K, V]
with CommutativeMonoid[SortedMap[K, V]] {
private[this] val underlying: CommutativeMonoid[SortedMap[K, V]] =
new cats.kernel.instances.SortedMapCommutativeMonoid[K, V]
}

@deprecated("2.0.0-RC2", "Use cats.kernel.instances.SortedMapMonoid")
@deprecated("Use cats.kernel.instances.SortedMapMonoid", "2.0.0-RC2")
class SortedMapMonoid[K, V](implicit V: Semigroup[V], O: Order[K]) extends cats.kernel.instances.SortedMapMonoid[K, V]

private[instances] trait SortedMapInstancesBinCompat0 {
Expand Down
12 changes: 6 additions & 6 deletions core/src/main/scala/cats/instances/sortedSet.scala
Original file line number Diff line number Diff line change
Expand Up @@ -65,17 +65,17 @@ trait SortedSetInstances extends SortedSetInstances1 {
fa.iterator.map(Show[A].show).mkString("SortedSet(", ", ", ")")
}

@deprecated("2.0.0-RC2", "Use cats.kernel.instances.sortedSet.catsKernelStdOrderForSortedSet")
@deprecated("Use cats.kernel.instances.sortedSet.catsKernelStdOrderForSortedSet", "2.0.0-RC2")
private[instances] def catsKernelStdOrderForSortedSet[A: Order]: Order[SortedSet[A]] =
cats.kernel.instances.sortedSet.catsKernelStdOrderForSortedSet[A]
}

private[instances] trait SortedSetInstances1 {
@deprecated("2.0.0-RC2", "Use cats.kernel.instances.sortedSet.catsKernelStdHashForSortedSet")
@deprecated("Use cats.kernel.instances.sortedSet.catsKernelStdHashForSortedSet", "2.0.0-RC2")
private[instances] def catsKernelStdHashForSortedSet[A: Order: Hash]: Hash[SortedSet[A]] =
cats.kernel.instances.sortedSet.catsKernelStdHashForSortedSet[A]

@deprecated("2.0.0-RC2", "Use cats.kernel.instances.sortedSet.catsKernelStdSemilatticeForSortedSet")
@deprecated("Use cats.kernel.instances.sortedSet.catsKernelStdSemilatticeForSortedSet", "2.0.0-RC2")
def catsKernelStdSemilatticeForSortedSet[A: Order]: BoundedSemilattice[SortedSet[A]] =
cats.kernel.instances.sortedSet.catsKernelStdBoundedSemilatticeForSortedSet[A]
}
Expand Down Expand Up @@ -107,11 +107,11 @@ private[instances] trait LowPrioritySortedSetInstancesBinCompat1
cats.kernel.instances.sortedSet.catsKernelStdHashForSortedSet[A]
}

@deprecated("2.0.0-RC2", "Use cats.kernel.instances.SortedSetHash")
@deprecated("Use cats.kernel.instances.SortedSetHash", "2.0.0-RC2")
class SortedSetHash[A: Order: Hash] extends cats.kernel.instances.SortedSetHash[A]

@deprecated("2.0.0-RC2", "Use cats.kernel.instances.SortedSetOrder")
@deprecated("Use cats.kernel.instances.SortedSetOrder", "2.0.0-RC2")
class SortedSetOrder[A: Order] extends cats.kernel.instances.SortedSetOrder[A]

@deprecated("2.0.0-RC2", "Use cats.kernel.instances.SortedSetSemilattice")
@deprecated("Use cats.kernel.instances.SortedSetSemilattice", "2.0.0-RC2")
class SortedSetSemilattice[A: Order] extends cats.kernel.instances.SortedSetSemilattice[A]
10 changes: 5 additions & 5 deletions laws/src/main/scala/cats/laws/discipline/MiniInt.scala
Original file line number Diff line number Diff line change
Expand Up @@ -51,12 +51,12 @@ object MiniInt {

val allValues: List[MiniInt] = (minIntValue to maxIntValue).map(unsafeFromInt).toList

implicit val catsLawsEqInstancesForMiniInt: Order[MiniInt] with Hash[MiniInt] = new Order[MiniInt]
with Hash[MiniInt] {
def hash(x: MiniInt): Int = Hash[Int].hash(x.intBits)
implicit val catsLawsEqInstancesForMiniInt: Order[MiniInt] with Hash[MiniInt] =
new Order[MiniInt] with Hash[MiniInt] {
def hash(x: MiniInt): Int = Hash[Int].hash(x.intBits)

def compare(x: MiniInt, y: MiniInt): Int = Order[Int].compare(x.toInt, y.toInt)
}
def compare(x: MiniInt, y: MiniInt): Int = Order[Int].compare(x.toInt, y.toInt)
}

implicit val catsLawsExhaustiveCheckForMiniInt: ExhaustiveCheck[MiniInt] =
ExhaustiveCheck.instance(allValues)
Expand Down
14 changes: 7 additions & 7 deletions project/plugins.sbt
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
addSbtPlugin("com.eed3si9n" % "sbt-unidoc" % "0.4.2")
addSbtPlugin("com.github.gseitz" %% "sbt-release" % "1.0.11")
addSbtPlugin("com.jsuereth" % "sbt-pgp" % "2.0.0-M2")
addSbtPlugin("com.github.gseitz" %% "sbt-release" % "1.0.12")
addSbtPlugin("com.jsuereth" % "sbt-pgp" % "2.0.0")
addSbtPlugin("com.typesafe" % "sbt-mima-plugin" % "0.6.1")
addSbtPlugin("pl.project13.scala" % "sbt-jmh" % "0.3.7")
addSbtPlugin("org.scoverage" % "sbt-scoverage" % "1.6.0")
addSbtPlugin("com.typesafe.sbt" % "sbt-git" % "1.0.0")
addSbtPlugin("com.github.tkawachi" % "sbt-doctest" % "0.9.5")
addSbtPlugin("org.xerial.sbt" % "sbt-sonatype" % "3.6")
addSbtPlugin("com.47deg" % "sbt-microsites" % "0.9.4")
addSbtPlugin("org.xerial.sbt" % "sbt-sonatype" % "3.8")
addSbtPlugin("com.47deg" % "sbt-microsites" % "0.9.7")
addSbtPlugin("org.lyranthe.sbt" % "partial-unification" % "1.1.2")
addSbtPlugin("org.tpolecat" % "tut-plugin" % "0.6.12")
addSbtPlugin("org.tpolecat" % "tut-plugin" % "0.6.13")
addSbtPlugin("org.portable-scala" % "sbt-scalajs-crossproject" % "0.6.1")
addSbtPlugin("org.portable-scala" % "sbt-scala-native-crossproject" % "0.6.1")
addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.28")
addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.29")
addSbtPlugin("org.scala-native" % "sbt-scala-native" % "0.3.9")
addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.0.4")
addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.2.1")
addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.9.0")

/* Temporarily disabling sbt-hydra, see #2870.
Expand Down
5 changes: 3 additions & 2 deletions tests/src/test/scala/cats/tests/SemigroupSuite.scala
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@ package cats
package tests

import org.scalatest._
import org.scalatest.matchers.should.Matchers
import org.scalatest.funsuite._
import org.scalatest.prop.GeneratorDrivenPropertyChecks
import org.scalatestplus.scalacheck.ScalaCheckDrivenPropertyChecks

class SemigroupSuite extends AnyFunSuiteLike with Matchers with GeneratorDrivenPropertyChecks {
class SemigroupSuite extends AnyFunSuiteLike with Matchers with ScalaCheckDrivenPropertyChecks {
{
import cats.implicits._
Invariant[Semigroup]
Expand Down