@@ -12,46 +12,78 @@ lazy val scoverageSettings = Seq(
12
12
13
13
organization in ThisBuild := " org.typelevel"
14
14
15
- lazy val kernelSettings = Seq (
16
- scalacOptions ++= commonScalacOptions,
15
+ lazy val commonSettings = Seq (
16
+ scalacOptions ++= commonScalacOptions(scalaVersion.value),
17
+ Compile / unmanagedSourceDirectories ++= {
18
+ val bd = baseDirectory.value
19
+ def extraDirs (suffix : String ) =
20
+ CrossType .Pure .sharedSrcDir(bd, " main" ).toList map (f => file(f.getPath + suffix))
21
+ CrossVersion .partialVersion(scalaVersion.value) match {
22
+ case Some ((2 , y)) if y <= 12 =>
23
+ extraDirs(" -2.12-" )
24
+ case Some ((2 , y)) if y >= 13 =>
25
+ extraDirs(" -2.13+" )
26
+ case _ => Nil
27
+ }
28
+ },
29
+ coverageEnabled := {
30
+ if (priorTo2_13(scalaVersion.value))
31
+ coverageEnabled.value
32
+ else
33
+ false
34
+ } ,
17
35
resolvers ++= Seq (
18
36
Resolver .sonatypeRepo(" releases" ),
19
37
Resolver .sonatypeRepo(" snapshots" )),
20
38
fork in test := true ,
39
+ libraryDependencies ++= Seq (
40
+ " org.scala-lang.modules" %% " scala-collection-compat" % " 0.1.1" ),
21
41
parallelExecution in Test := false ,
22
- scalacOptions in (Compile , doc) := (scalacOptions in (Compile , doc)).value.filter(_ != " -Xfatal-warnings" )
42
+ scalacOptions in (Compile , doc) := (scalacOptions in (Compile , doc)).value.filter(_ != " -Xfatal-warnings" ),
43
+ // todo: reenable doctests on 2.13 once it's officially released. it's disabled for now due to changes to the `toString` impl of collections
44
+ doctestGenTests := {
45
+ val unchanged = doctestGenTests.value
46
+ if (priorTo2_13(scalaVersion.value)) unchanged else Nil
47
+ }
23
48
) ++ warnUnusedImport ++ update2_12 ++ xlint
24
49
25
- lazy val commonSettings = Seq (
50
+
51
+
52
+ def macroDependencies (scalaVersion : String ) =
53
+ CrossVersion .partialVersion(scalaVersion) match {
54
+ case Some ((2 , minor)) if minor < 13 => Seq (
55
+ compilerPlugin(" org.scalamacros" %% " paradise" % " 2.1.0" cross CrossVersion .patch)
56
+ )
57
+ case _ => Seq ()
58
+ }
59
+
60
+
61
+ lazy val catsSettings = Seq (
26
62
incOptions := incOptions.value.withLogRecompileOnMacro(false ),
27
- scalacOptions ++= commonScalacOptions,
28
63
resolvers ++= Seq (
29
- " bintray/non" at " http://dl.bintray.com/non/maven" ,
30
- Resolver .sonatypeRepo(" releases" ),
31
- Resolver .sonatypeRepo(" snapshots" )
64
+ " bintray/non" at " http://dl.bintray.com/non/maven"
32
65
),
33
66
libraryDependencies ++= Seq (
34
- " com.github.mpilquist" %%% " simulacrum" % " 0.12.0" % Provided ,
35
- " org.typelevel" %%% " machinist" % " 0.6.4" ,
36
- compilerPlugin(" org.scalamacros" %% " paradise" % " 2.1.0" cross CrossVersion .patch),
37
- compilerPlugin(" org.spire-math" %% " kind-projector" % " 0.9.6" )
38
- ),
67
+ " org.typelevel" %%% " machinist" % " 0.6.5" ,
68
+ compilerPlugin(" org.spire-math" %% " kind-projector" % " 0.9.7" )) ++ macroDependencies(scalaVersion.value),
69
+
70
+ ) ++ commonSettings ++ publishSettings ++ scoverageSettings ++ simulacrumSettings
71
+
72
+
73
+ lazy val simulacrumSettings = Seq (
74
+ libraryDependencies += " com.github.mpilquist" %%% " simulacrum" % " 0.13.0" % Provided ,
39
75
pomPostProcess := { (node : xml.Node ) =>
40
76
new RuleTransformer (new RewriteRule {
41
77
override def transform (node : xml.Node ): Seq [xml.Node ] = node match {
42
78
case e : xml.Elem
43
79
if e.label == " dependency" &&
44
- e.child.exists(child => child.label == " groupId" && child.text == " com.github.mpilquist" ) &&
45
- e.child.exists(child => child.label == " artifactId" && child.text.startsWith(" simulacrum_" )) => Nil
80
+ e.child.exists(child => child.label == " groupId" && child.text == " com.github.mpilquist" ) &&
81
+ e.child.exists(child => child.label == " artifactId" && child.text.startsWith(" simulacrum_" )) => Nil
46
82
case _ => Seq (node)
47
83
}
48
84
}).transform(node).head
49
- },
50
- fork in test := true ,
51
- parallelExecution in Test := false ,
52
- scalacOptions in (Compile , doc) := (scalacOptions in (Compile , doc)).value.filter(_ != " -Xfatal-warnings" )
53
- ) ++ warnUnusedImport ++ update2_12 ++ xlint
54
-
85
+ }
86
+ )
55
87
56
88
lazy val tagName = Def .setting{
57
89
s " v ${if (releaseUseGlobalVersion.value) (version in ThisBuild ).value else version.value}"
@@ -93,28 +125,28 @@ lazy val includeGeneratedSrc: Setting[_] = {
93
125
}
94
126
}
95
127
96
- lazy val catsSettings = commonSettings ++ publishSettings ++ scoverageSettings
97
128
98
- lazy val scalaCheckVersion = " 1.13.5"
99
- // 2.13.0-M3 workaround
100
- // lazy val scalaTestVersion = "3.0.5"
101
- lazy val disciplineVersion = " 0.9.0"
102
- lazy val catalystsVersion = " 0.6"
103
129
104
- // 2.13.0-M3 workaround
130
+ // 2.13.0-M4 workarounds
131
+ def catalystsVersion (scalaVersion : String ): String =
132
+ if (priorTo2_13(scalaVersion)) " 0.6" else " 0.7"
133
+
105
134
def scalatestVersion (scalaVersion : String ): String =
106
- CrossVersion .partialVersion(scalaVersion) match {
107
- case Some ((2 , 13 )) => " 3.0.5-M1"
108
- case _ => " 3.0.5"
109
- }
135
+ if (priorTo2_13(scalaVersion)) " 3.0.5" else " 3.0.6-SNAP1"
136
+
137
+ def scalaCheckVersion (scalaVersion : String ): String =
138
+ if (priorTo2_13(scalaVersion)) " 1.13.5" else " 1.14.0"
139
+
140
+ def disciplineVersion (scalaVersion : String ): String =
141
+ if (priorTo2_13(scalaVersion)) " 0.9.0" else " 0.10.0"
110
142
111
143
lazy val disciplineDependencies = Seq (
112
- libraryDependencies += " org.scalacheck" %%% " scalacheck" % scalaCheckVersion,
113
- libraryDependencies += " org.typelevel" %%% " discipline" % disciplineVersion)
144
+ libraryDependencies += " org.scalacheck" %%% " scalacheck" % scalaCheckVersion(scalaVersion.value) ,
145
+ libraryDependencies += " org.typelevel" %%% " discipline" % disciplineVersion(scalaVersion.value) )
114
146
115
147
lazy val testingDependencies = Seq (
116
- libraryDependencies += " org.typelevel" %%% " catalysts-platform" % catalystsVersion,
117
- libraryDependencies += " org.typelevel" %%% " catalysts-macros" % catalystsVersion % " test" ,
148
+ libraryDependencies += " org.typelevel" %%% " catalysts-platform" % catalystsVersion(scalaVersion.value) ,
149
+ libraryDependencies += " org.typelevel" %%% " catalysts-macros" % catalystsVersion(scalaVersion.value) % " test" ,
118
150
// 2.13.0-M3 workaround
119
151
// libraryDependencies += "org.scalatest" %%% "scalatest" % scalaTestVersion % "test")
120
152
libraryDependencies += " org.scalatest" %%% " scalatest" % scalatestVersion(scalaVersion.value) % " test" )
@@ -215,9 +247,29 @@ def mimaSettings(moduleName: String) = {
215
247
lazy val extraVersions : Set [String ] = Set ()
216
248
217
249
Seq (
218
- mimaPreviousArtifacts := (mimaVersions(version.value) ++ extraVersions)
219
- .filterNot(excludedVersions.contains(_))
220
- .map(v => " org.typelevel" %% moduleName % v)
250
+ mimaPreviousArtifacts := { if (priorTo2_13(scalaVersion.value)) {
251
+ (mimaVersions(version.value) ++ extraVersions)
252
+ .filterNot(excludedVersions.contains(_))
253
+ .map(v => " org.typelevel" %% moduleName % v)
254
+ } else Set () },
255
+
256
+ mimaBinaryIssueFilters ++= {
257
+ import com .typesafe .tools .mima .core ._
258
+ import com .typesafe .tools .mima .core .ProblemFilters ._
259
+ // Only sealed abstract classes that provide implicit instances to companion objects are allowed here, since they don't affect usage outside of the file.
260
+ Seq (
261
+ exclude[DirectMissingMethodProblem ](" cats.data.OptionTInstances.catsDataMonadForOptionT" ),
262
+ exclude[DirectMissingMethodProblem ](" cats.data.OptionTInstances2.catsDataTraverseForOptionT" ),
263
+ exclude[DirectMissingMethodProblem ](" cats.data.KleisliInstances1.catsDataCommutativeArrowForKleisliId" ),
264
+ exclude[DirectMissingMethodProblem ](" cats.data.OptionTInstances1.catsDataMonoidKForOptionT" ),
265
+ exclude[DirectMissingMethodProblem ](" cats.data.OptionTInstances0.catsDataMonoidForOptionT" ),
266
+ exclude[DirectMissingMethodProblem ](" cats.data.KleisliInstances0.catsDataMonadForKleisliId" ),
267
+ exclude[DirectMissingMethodProblem ](" cats.data.KleisliInstances1.catsDataCommutativeArrowForKleisli" ),
268
+ exclude[DirectMissingMethodProblem ](" cats.data.KleisliInstances4.catsDataCommutativeFlatMapForKleisli" ),
269
+ exclude[DirectMissingMethodProblem ](" cats.data.IRWSTInstances1.catsDataStrongForIRWST" ),
270
+ exclude[DirectMissingMethodProblem ](" cats.data.OptionTInstances1.catsDataMonadErrorMonadForOptionT" )
271
+ )
272
+ }
221
273
)
222
274
}
223
275
@@ -273,7 +325,7 @@ lazy val kernel = crossProject(JSPlatform, JVMPlatform, NativePlatform)
273
325
.crossType(CrossType .Pure )
274
326
.in(file(" kernel" ))
275
327
.settings(moduleName := " cats-kernel" , name := " Cats kernel" )
276
- .settings(kernelSettings )
328
+ .settings(commonSettings )
277
329
.settings(publishSettings)
278
330
.settings(scoverageSettings)
279
331
.settings(sourceGenerators in Compile += (sourceManaged in Compile ).map(KernelBoiler .gen).taskValue)
@@ -290,7 +342,7 @@ lazy val kernelLaws = crossProject(JSPlatform, JVMPlatform)
290
342
.crossType(CrossType .Pure )
291
343
.in(file(" kernel-laws" ))
292
344
.settings(moduleName := " cats-kernel-laws" , name := " Cats kernel laws" )
293
- .settings(kernelSettings )
345
+ .settings(commonSettings )
294
346
.settings(publishSettings)
295
347
.settings(scoverageSettings)
296
348
.settings(disciplineDependencies)
@@ -310,9 +362,7 @@ lazy val core = crossProject(JSPlatform, JVMPlatform)
310
362
.settings(catsSettings)
311
363
.settings(sourceGenerators in Compile += (sourceManaged in Compile ).map(Boilerplate .gen).taskValue)
312
364
.settings(includeGeneratedSrc)
313
- .configureCross(disableScoverage210Jvm)
314
- .configureCross(disableScoverage210Js)
315
- .settings(libraryDependencies += " org.scalacheck" %%% " scalacheck" % scalaCheckVersion % " test" )
365
+ .settings(libraryDependencies += " org.scalacheck" %%% " scalacheck" % scalaCheckVersion(scalaVersion.value) % " test" )
316
366
.jsSettings(commonJsSettings)
317
367
.jvmSettings(commonJvmSettings ++ mimaSettings(" cats-core" ) )
318
368
@@ -325,7 +375,6 @@ lazy val laws = crossProject(JSPlatform, JVMPlatform)
325
375
.settings(moduleName := " cats-laws" , name := " Cats laws" )
326
376
.settings(catsSettings)
327
377
.settings(disciplineDependencies)
328
- .configureCross(disableScoverage210Jvm)
329
378
.settings(testingDependencies)
330
379
.jsSettings(commonJsSettings)
331
380
.jvmSettings(commonJvmSettings)
@@ -443,7 +492,6 @@ lazy val js = project
443
492
.settings(moduleName := " cats-js" )
444
493
.settings(catsSettings)
445
494
.settings(commonJsSettings)
446
- .configure(disableScoverage210Js)
447
495
.enablePlugins(ScalaJSPlugin )
448
496
449
497
@@ -593,22 +641,31 @@ lazy val crossVersionSharedSources: Seq[Setting[_]] =
593
641
}
594
642
}
595
643
596
- lazy val commonScalacOptions = Seq (
597
- " -deprecation" ,
644
+ def commonScalacOptions (scalaVersion : String ) = Seq (
598
645
" -encoding" , " UTF-8" ,
599
646
" -feature" ,
600
647
" -language:existentials" ,
601
648
" -language:higherKinds" ,
602
649
" -language:implicitConversions" ,
603
650
" -language:experimental.macros" ,
604
651
" -unchecked" ,
605
- " -Xfatal-warnings" ,
606
- " -Yno-adapted-args" ,
607
652
" -Ywarn-dead-code" ,
608
653
" -Ywarn-numeric-widen" ,
609
654
" -Ywarn-value-discard" ,
610
655
" -Xfuture"
611
- )
656
+ ) ++ (if (priorTo2_13(scalaVersion)) Seq (
657
+ " -Yno-adapted-args" ,
658
+ " -Xfatal-warnings" , // todo: add the following two back to 2.13
659
+ " -deprecation"
660
+ ) else Seq (
661
+ " -Ymacro-annotations"
662
+ ))
663
+
664
+ def priorTo2_13 (scalaVersion : String ): Boolean =
665
+ CrossVersion .partialVersion(scalaVersion) match {
666
+ case Some ((2 , minor)) if minor < 13 => true
667
+ case _ => false
668
+ }
612
669
613
670
lazy val sharedPublishSettings = Seq (
614
671
releaseCrossBuild := true ,
@@ -645,14 +702,7 @@ lazy val sharedReleaseProcess = Seq(
645
702
)
646
703
647
704
lazy val warnUnusedImport = Seq (
648
- scalacOptions ++= {
649
- CrossVersion .partialVersion(scalaVersion.value) match {
650
- case Some ((2 , 10 )) =>
651
- Seq ()
652
- case Some ((2 , n)) if n >= 11 =>
653
- Seq (" -Ywarn-unused-import" )
654
- }
655
- },
705
+ scalacOptions ++= Seq (" -Ywarn-unused-import" ),
656
706
scalacOptions in (Compile , console) ~= {_.filterNot(" -Ywarn-unused-import" == _)},
657
707
scalacOptions in (Test , console) := (scalacOptions in (Compile , console)).value
658
708
)
@@ -665,37 +715,6 @@ lazy val credentialSettings = Seq(
665
715
} yield Credentials (" Sonatype Nexus Repository Manager" , " oss.sonatype.org" , username, password)).toSeq
666
716
)
667
717
668
- def disableScoverage210Js (crossProject : CrossProject ) =
669
- crossProject
670
- .jsSettings(
671
- coverageEnabled := {
672
- CrossVersion .partialVersion(scalaVersion.value) match {
673
- case Some ((2 , 10 )) => false
674
- case _ => coverageEnabled.value
675
- }
676
- }
677
- )
678
-
679
- def disableScoverage210Js : Project ⇒ Project = p =>
680
- p.settings(
681
- coverageEnabled := {
682
- CrossVersion .partialVersion(scalaVersion.value) match {
683
- case Some ((2 , 10 )) => false
684
- case _ => coverageEnabled.value
685
- }
686
- }
687
- )
688
-
689
- def disableScoverage210Jvm (crossProject : CrossProject ) =
690
- crossProject
691
- .jvmSettings(
692
- coverageEnabled := {
693
- CrossVersion .partialVersion(scalaVersion.value) match {
694
- case Some ((2 , 10 )) => false
695
- case _ => coverageEnabled.value
696
- }
697
- }
698
- )
699
718
700
719
lazy val update2_12 = Seq (
701
720
scalacOptions -= {
0 commit comments