Skip to content

Commit c9a53d7

Browse files
authored
Disable recompilation trigger functionality on Scala 3 completely due to bug scala/scala3#15976 (#1788)
* Revert parentheses * Implement ForcedRecompilation token macro for Scala 3 * Disable recompilation trigger functionality on Scala 3 completely due to bug scala/scala3#15976
1 parent 547faf7 commit c9a53d7

File tree

34 files changed

+185
-37
lines changed

34 files changed

+185
-37
lines changed

distage/distage-extension-plugins/src/main/scala/izumi/distage/plugins/BootstrapPluginDef.scala renamed to distage/distage-extension-plugins/src/main/scala-2/izumi/distage/plugins/BootstrapPluginDef.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ import izumi.distage.model.definition.BootstrapModuleDef
44
import scala.annotation.unused
55

66
/** @see [[izumi.distage.plugins.PluginDef]] */
7-
abstract class BootstrapPluginDef[T]()(implicit @unused recompilationToken: ForcedRecompilationToken[T]) extends BootstrapPlugin with BootstrapModuleDef
7+
abstract class BootstrapPluginDef[T](implicit @unused recompilationToken: ForcedRecompilationToken[T]) extends BootstrapPlugin with BootstrapModuleDef

distage/distage-extension-plugins/src/main/scala-2/izumi/distage/plugins/ForcedRecompilationToken.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ final abstract class ForcedRecompilationToken[T]
2727
object ForcedRecompilationToken {
2828
implicit def materialize[T]: ForcedRecompilationToken[T] = macro UniqueRecompilationTokenMacro.whiteboxMaterializeImpl
2929

30+
object disabled {
31+
implicit def disable: ForcedRecompilationToken[Unit] = null
32+
}
33+
3034
object UniqueRecompilationTokenMacro {
3135
final val compilerLaunchId = java.util.UUID.randomUUID().toString
3236
var cachedTypedTree: Universe#Tree = null
@@ -68,10 +72,6 @@ object ForcedRecompilationToken {
6872
}
6973
}
7074

71-
object disabled {
72-
implicit def disable: ForcedRecompilationToken[Unit] = null
73-
}
74-
7575
// an implementation for better days!
7676
// As of IDEA 2020.3 EAP, Intellij "Incrementality type: IDEA" doesn't regard changes in singleton types as "real",
7777
// so instead we have to use the trick above to encode the UUID as Eithers.

distage/distage-extension-plugins/src/main/scala/izumi/distage/plugins/PluginDef.scala renamed to distage/distage-extension-plugins/src/main/scala-2/izumi/distage/plugins/PluginDef.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,4 @@ import scala.annotation.unused
2424
* @see [[https://izumi.7mind.io/distage/distage-framework#plugins Plugins]]
2525
* @see [[https://izumi.7mind.io/distage/distage-framework#compile-time-checks Compile-time checks]]
2626
*/
27-
abstract class PluginDef[T]()(implicit @unused recompilationToken: ForcedRecompilationToken[T]) extends PluginBase with ModuleDef
27+
abstract class PluginDef[T](implicit @unused recompilationToken: ForcedRecompilationToken[T]) extends PluginBase with ModuleDef
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package izumi.distage.plugins
2+
3+
package object load {
4+
private[load] type PluginDefType = PluginDef[?]
5+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package distage.plugins
2+
3+
import izumi.distage.plugins
4+
import izumi.distage.plugins.{StaticPluginLoader, load}
5+
6+
trait DistagePlugins {
7+
8+
type PluginBase = plugins.PluginBase
9+
val PluginBase: plugins.PluginBase.type = plugins.PluginBase
10+
11+
type PluginDef = plugins.PluginDef
12+
13+
type BootstrapPlugin = plugins.BootstrapPlugin
14+
val BootstrapPlugin: plugins.BootstrapPlugin.type = plugins.BootstrapPlugin
15+
16+
type BootstrapPluginDef = plugins.BootstrapPluginDef
17+
18+
type PluginLoader = load.PluginLoader
19+
val PluginLoader: load.PluginLoader.type = load.PluginLoader
20+
21+
val StaticPlugingLoader: StaticPluginLoader.type = plugins.StaticPluginLoader
22+
23+
type PluginLoaderDefaultImpl = load.PluginLoaderDefaultImpl
24+
val PluginLoaderDefaultImpl: load.PluginLoaderDefaultImpl.type = load.PluginLoaderDefaultImpl
25+
26+
type PluginConfig = plugins.PluginConfig
27+
val PluginConfig: plugins.PluginConfig.type = plugins.PluginConfig
28+
29+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package distage
2+
3+
import izumi.distage.plugins.load
4+
5+
package object plugins extends DistagePlugins {
6+
7+
override type PluginBase = izumi.distage.plugins.PluginBase
8+
override val PluginBase: izumi.distage.plugins.PluginBase.type = izumi.distage.plugins.PluginBase
9+
10+
override type PluginDef = izumi.distage.plugins.PluginDef
11+
12+
override type BootstrapPlugin = izumi.distage.plugins.BootstrapPlugin
13+
override val BootstrapPlugin: izumi.distage.plugins.BootstrapPlugin.type = izumi.distage.plugins.BootstrapPlugin
14+
15+
override type BootstrapPluginDef = izumi.distage.plugins.BootstrapPluginDef
16+
17+
override type PluginLoader = load.PluginLoader
18+
override val PluginLoader: load.PluginLoader.type = load.PluginLoader
19+
20+
override val StaticPlugingLoader: izumi.distage.plugins.StaticPluginLoader.type = izumi.distage.plugins.StaticPluginLoader
21+
22+
override type PluginLoaderDefaultImpl = load.PluginLoaderDefaultImpl
23+
override val PluginLoaderDefaultImpl: load.PluginLoaderDefaultImpl.type = load.PluginLoaderDefaultImpl
24+
25+
override type PluginConfig = izumi.distage.plugins.PluginConfig
26+
override val PluginConfig: izumi.distage.plugins.PluginConfig.type = izumi.distage.plugins.PluginConfig
27+
28+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package izumi.distage.plugins
2+
3+
import izumi.distage.model.definition.BootstrapModuleDef
4+
import scala.annotation.unused
5+
6+
/** @see [[izumi.distage.plugins.PluginDef]] */
7+
abstract class BootstrapPluginDef(implicit @unused recompilationToken: ForcedRecompilationToken[?]) extends BootstrapPlugin with BootstrapModuleDef

distage/distage-extension-plugins/src/main/scala-3/izumi/distage/plugins/ForcedRecompilationToken.scala

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package izumi.distage.plugins
22

33
import scala.annotation.implicitNotFound
4+
import scala.quoted.{Expr, Quotes, Type}
45

56
/**
67
* This macro allows `distage`'s compile-time checks to cooperate with Scala's incremental compilation:
@@ -22,9 +23,25 @@ in which case you'll have to put a dummy implicit in scope, such as by using:
2223
final abstract class ForcedRecompilationToken[T]
2324

2425
object ForcedRecompilationToken {
25-
implicit def materialize[T]: ForcedRecompilationToken[T] = ???
26+
27+
transparent inline implicit def materialize[T]: ForcedRecompilationToken[T] = ${ UniqueRecompilationTokenMacro.materializeImpl }
2628

2729
object disabled {
2830
implicit def disable: ForcedRecompilationToken[Unit] = null
2931
}
32+
33+
object UniqueRecompilationTokenMacro {
34+
final val compilerLaunchId = java.util.UUID.randomUUID().toString
35+
36+
// TODO: research if caching typed trees optimization is possible and meaningful in Dotty
37+
def materializeImpl[T](using quotes: Quotes): Expr[ForcedRecompilationToken[T]] = {
38+
import quotes.reflect.*
39+
val typeTree = ConstantType(StringConstant("abc"))
40+
typeTree.asType.asInstanceOf[Type[T]] match {
41+
case given Type[uuid] =>
42+
'{ null.asInstanceOf[ForcedRecompilationToken[uuid]] }
43+
}
44+
}
45+
}
46+
3047
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,21 @@
11
package izumi.distage.plugins
22

3+
import scala.compiletime.error
34

45
trait PluginConfigStatic {
6+
/** Scan the specified package *at compile-time* for classes and objects that inherit [[PluginBase]]
7+
*
8+
* WARN: may interact badly with incremental compilation
9+
* WARN: will _not_ find plugins defined in the current module, only those defined in dependency modules
10+
* (similarly to how you cannot call Scala macros defined in the current module)
11+
*/
12+
inline def compileTime(pluginsPackage: String): PluginConfig = error("unimplemented")
513

14+
/** Scan the the current source file's package *at compile-time* for classes and objects that inherit [[PluginBase]]
15+
*
16+
* WARN: may interact badly with incremental compilation
17+
* WARN: will _not_ find plugins defined in the current module, only those defined in dependency modules
18+
* (similarly to how you cannot call Scala macros defined in the current module)
19+
*/
20+
inline def compileTimeThisPkg: PluginConfig = error("unimplemented")
621
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package izumi.distage.plugins
2+
3+
import izumi.distage.model.definition.ModuleDef
4+
import scala.annotation.unused
5+
6+
/**
7+
* Use it to define Plugins using [[izumi.distage.model.definition.dsl.ModuleDefDSL]] syntax
8+
*
9+
* {{{
10+
* object MyPlugin extends PluginDef {
11+
* include(myModule[F])
12+
*
13+
* make[Xa[F]].from[Xa.Impl[F]]
14+
* }
15+
* }}}
16+
*
17+
* @note Since this is an abstract class, you cannot mix it with other classes or use it as a mixin.
18+
* Instead, you may inherit from [[PluginBase]], which is a trait – but in that case compile-time checks will not
19+
* re-run when the class is updated in that case. Alternatively, you may use [[izumi.distage.model.definition.dsl.IncludesDSL#include]]
20+
* to compose modules as values instead of using inheritance.
21+
*
22+
* @param recompilationToken Makes compile-time checks re-run when the source code of this `PluginDef` is changed, if it's used in the checked role.
23+
*
24+
* @see [[https://izumi.7mind.io/distage/distage-framework#plugins Plugins]]
25+
* @see [[https://izumi.7mind.io/distage/distage-framework#compile-time-checks Compile-time checks]]
26+
*/
27+
abstract class PluginDef(implicit @unused recompilationToken: ForcedRecompilationToken[?]) extends PluginBase with ModuleDef

distage/distage-extension-plugins/src/main/scala-3/izumi/distage/plugins/StaticPluginLoader.scala

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package izumi.distage.plugins
22

3+
import scala.compiletime.error
4+
35
/** Scan the specified package *at compile-time* for classes and objects that inherit [[PluginBase]]
46
*
57
* WARN: may interact badly with incremental compilation
@@ -10,4 +12,6 @@ package izumi.distage.plugins
1012
*/
1113
object StaticPluginLoader {
1214

15+
inline def scanCompileTime(pluginsPackage: String): List[PluginBase] = error("unimplemented")
16+
1317
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package izumi.distage.plugins
2+
3+
package object load {
4+
private[load] type PluginDefType = PluginDef
5+
}

distage/distage-extension-plugins/src/main/scala/izumi/distage/plugins/load/PluginLoaderDefaultImpl.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package izumi.distage.plugins.load
22

33
import io.github.classgraph.ClassGraph
4-
import izumi.distage.plugins.{PluginBase, PluginConfig, PluginDef}
4+
import izumi.distage.plugins.{PluginBase, PluginConfig}
55
import izumi.fundamentals.platform.cache.SyncCache
66
import izumi.fundamentals.reflection.TypeUtil
77

@@ -25,7 +25,7 @@ class PluginLoaderDefaultImpl extends PluginLoader {
2525
val disabledPackages = config.packagesDisabled
2626

2727
val pluginBase = classOf[PluginBase]
28-
val pluginDef = classOf[PluginDef[?]]
28+
val pluginDef = classOf[PluginDefType]
2929
val whitelistedClasses = Seq(pluginDef.getName)
3030

3131
def loadPkgs(pkgs: Seq[String]): Seq[PluginBase] = {

distage/distage-extension-plugins/src/test/scala/com/github/pshirshov/test/sneaky/SneakyPlugin.scala renamed to distage/distage-extension-plugins/src/test/scala-2/com/github/pshirshov/test/sneaky/SneakyPlugin.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,4 @@ import izumi.fundamentals.platform.build.ExposedTestScope
88
* This is just to verify that plugin enumerator picks up transitively inherited plugins
99
*/
1010
@ExposedTestScope
11-
abstract class SneakyPlugin[T]()(implicit val ev: ForcedRecompilationToken[T]) extends PluginBase with ModuleDef
11+
abstract class SneakyPlugin[T](implicit val ev: ForcedRecompilationToken[T]) extends PluginBase with ModuleDef
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.github.pshirshov.test.sneaky
2+
3+
import izumi.distage.model.definition.ModuleDef
4+
import izumi.distage.plugins.{ForcedRecompilationToken, PluginBase}
5+
import izumi.fundamentals.platform.build.ExposedTestScope
6+
7+
/**
8+
* This is just to verify that plugin enumerator picks up transitively inherited plugins
9+
*/
10+
@ExposedTestScope
11+
abstract class SneakyPlugin(implicit val ev: ForcedRecompilationToken[?]) extends PluginBase with ModuleDef

distage/distage-extension-plugins/src/test/scala/com/github/pshirshov/test/plugins/DependingPlugin.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@ import com.github.pshirshov.test.sneaky.SneakyPlugin
44
import izumi.fundamentals.platform.build.ExposedTestScope
55

66
@ExposedTestScope
7-
class DependingPlugin extends SneakyPlugin() {
7+
class DependingPlugin extends SneakyPlugin {
88
make[String].from((_: TestDep, _: TestDep3, _: TestService) => "abc")
99
}
1010

1111
@ExposedTestScope
1212
object DependingPlugin extends App {
13-
class NestedDoublePlugin extends SneakyPlugin()
14-
object NestedDoublePlugin extends SneakyPlugin() {
13+
class NestedDoublePlugin extends SneakyPlugin
14+
object NestedDoublePlugin extends SneakyPlugin {
1515
make[TestDepending]
1616
}
1717
}

distage/distage-extension-plugins/src/test/scala/com/github/pshirshov/test/plugins/EmptyTestPlugin.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ package com.github.pshirshov.test.plugins
22

33
import com.github.pshirshov.test.sneaky.SneakyPlugin
44

5-
object EmptyTestPlugin extends SneakyPlugin()
5+
object EmptyTestPlugin extends SneakyPlugin

distage/distage-extension-plugins/src/test/scala/com/github/pshirshov/test/plugins/ObjectTestPlugin.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@ package com.github.pshirshov.test.plugins
22

33
import com.github.pshirshov.test.sneaky.SneakyPlugin
44

5-
object ObjectTestPlugin extends SneakyPlugin() {
5+
object ObjectTestPlugin extends SneakyPlugin {
66
make[TestDep3]
77
}

distage/distage-extension-plugins/src/test/scala/com/github/pshirshov/test/plugins/StaticTestPlugin.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ object Test extends Axis {
1111
}
1212

1313
@ExposedTestScope
14-
class StaticTestPlugin extends SneakyPlugin() with ConfigModuleDef {
14+
class StaticTestPlugin extends SneakyPlugin with ConfigModuleDef {
1515
make[TestDep].tagged(Test.X).from[TestDep1]
1616
make[TestDep].tagged(Test.Y).from[TestDep2]
1717
make[TestService]

distage/distage-framework-docker/src/test/scala/izumi/distage/testkit/docker/fixtures/DockerPlugin.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class PgSvcExample(
2929
}
3030
}
3131

32-
object DockerPlugin extends PluginDef() {
32+
object DockerPlugin extends PluginDef {
3333
include(DockerSupportModule[Task])
3434
make[DynamoDocker.Container].fromResource {
3535
DynamoDocker.make[Task]

distage/distage-framework/src/main/scala/izumi/distage/roles/RoleAppMain.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ abstract class RoleAppMain[F[_]](
6262
*
6363
* {{{
6464
* override def pluginConfig: PluginConfig = {
65-
* super.pluginConfig overriddenBy new PluginDef() {
65+
* super.pluginConfig overriddenBy new PluginDef {
6666
* make[MyComponentX]]
6767
* }
6868
* }

distage/distage-framework/src/test/scala/com/github/pshirshov/test/plugins/StaticTestMain.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class StaticTestMainLogIO2[F[+_, +_]: TagKK: Async2: DefaultModule2] extends Rol
3333
PluginConfig
3434
.cached("com.github.pshirshov.test.plugins")
3535
.++(staticTestMainPlugin[F[Throwable, _], F[Throwable, _]])
36-
.++(new PluginDef() {
36+
.++(new PluginDef {
3737
modify[StaticTestRole[F[Throwable, _]]]
3838
.addDependency[LogIO2[F]]
3939
})

distage/distage-framework/src/test/scala/com/github/pshirshov/test2/plugins/Fixture2.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ object Fixture2 {
1414
override protected def pluginConfig: PluginConfig = PluginConfig.cached("com.github.pshirshov.test2.plugins")
1515
}
1616

17-
final class TestPlugin extends PluginDef() with RoleModuleDef {
17+
final class TestPlugin extends PluginDef with RoleModuleDef {
1818
make[Dep].tagged(Mode.Prod, Repo.Prod).from[DepGood]
1919
make[Dep].tagged(Mode.Prod, Repo.Dummy).from[DepGood]
2020

distage/distage-framework/src/test/scala/com/github/pshirshov/test3/plugins/Fixture3.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@ object Fixture3 {
1717

1818
object TestRoleAppMainFailing extends RoleAppMain.LauncherIdentity {
1919
override protected def pluginConfig: PluginConfig = PluginConfig.cachedThisPkg
20-
override protected def bootstrapPluginConfig: PluginConfig = PluginConfig.cached("com.github.pshirshov.test3.bootstrap") overriddenBy new PluginDef() {
20+
override protected def bootstrapPluginConfig: PluginConfig = PluginConfig.cached("com.github.pshirshov.test3.bootstrap") overriddenBy new PluginDef {
2121
modify[BootstrapComponent].addDependency[UnsatisfiedDep]
2222
}
2323
}
2424

25-
final class TestPlugin extends PluginDef() with RoleModuleDef {
25+
final class TestPlugin extends PluginDef with RoleModuleDef {
2626
makeRole[Fixture3Role]
2727
}
2828

distage/distage-framework/src/test/scala/izumi/distage/roles/test/RoleAppTest.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ class RoleAppTest extends AnyWordSpec with WithProperties {
3939
"testservice.systemPropList.1" -> "222",
4040
)
4141

42-
class XXX_TestWhiteboxProbe extends PluginDef() {
42+
class XXX_TestWhiteboxProbe extends PluginDef {
4343
val resources = new XXX_ResourceEffectsRecorder[IO]
4444
private var locator0: LocatorRef = null
4545
lazy val locator: Locator = locator0.get
@@ -89,7 +89,7 @@ class RoleAppTest extends AnyWordSpec with WithProperties {
8989
new TestPluginCatsIO,
9090
new AdaptedAutocloseablesCasePlugin,
9191
probe,
92-
new PluginDef() {
92+
new PluginDef {
9393
make[TestResource[IO]].from[IntegrationResource0[IO]]
9494
many[TestResource[IO]]
9595
.ref[TestResource[IO]]

distage/distage-framework/src/test/scala/izumi/distage/roles/test/fixtures/AdaptedAutocloseablesCasePlugin.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import izumi.fundamentals.platform.cli.model.raw.RawEntrypointParams
99
import izumi.logstage.api.Log
1010
import izumi.logstage.api.logger.LogSink
1111

12-
class AdaptedAutocloseablesCasePlugin extends PluginDef() {
12+
class AdaptedAutocloseablesCasePlugin extends PluginDef {
1313
make[AdaptedAutocloseablesCase]
1414
many[LogSink].add[BrokenSink]
1515
many[LogSink].add[BrokenSink2]

distage/distage-framework/src/test/scala/izumi/distage/roles/test/fixtures/ResourcesPlugin.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import izumi.distage.roles.test.fixtures.Fixture._
1010
import izumi.distage.roles.test.fixtures.ResourcesPlugin._
1111
import izumi.fundamentals.platform.functional.Identity
1212

13-
class ConflictPlugin extends PluginDef() {
13+
class ConflictPlugin extends PluginDef {
1414
make[Conflict].tagged(Mode.Prod).from[Conflict1]
1515
make[Conflict].tagged(Mode.Test).from[Conflict2]
1616
make[Conflict].from[Conflict3]
@@ -49,7 +49,7 @@ trait ResourcesPluginBase extends ModuleDef {
4949
.ref[JustResource3[IO]]
5050
}
5151

52-
class ResourcesPlugin extends PluginDef() with ResourcesPluginBase {
52+
class ResourcesPlugin extends PluginDef with ResourcesPluginBase {
5353
make[XXX_ResourceEffectsRecorder[IO]]
5454

5555
make[IntegrationResource0[IO]]

distage/distage-framework/src/test/scala/izumi/distage/roles/test/fixtures/TestPlugin.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import izumi.distage.roles.test.fixtures.roles.TestRole00.{IntegrationOnlyCfg, I
1414
import izumi.fundamentals.platform.resources.ArtifactVersion
1515
import izumi.reflect.TagK
1616

17-
class TestPluginBase[F[_]: TagK] extends PluginDef() with ConfigModuleDef with RoleModuleDef {
17+
class TestPluginBase[F[_]: TagK] extends PluginDef with ConfigModuleDef with RoleModuleDef {
1818
tag(Mode.Prod)
1919

2020
include(BundledRolesModule[F] overriddenBy new ModuleDef {

0 commit comments

Comments
 (0)