Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix CI pipeline #13

Merged
merged 31 commits into from
Mar 13, 2024
Merged
Show file tree
Hide file tree
Changes from 21 commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
ed2f6a9
Set scala-3 dialect to Scala 3.
zainab-ali Mar 8, 2024
1d8fb1b
Remove unused imports.
zainab-ali Mar 8, 2024
6cd0eb1
Remove unused dummy parameter.
zainab-ali Mar 8, 2024
f6eccd9
Remove unused code.
zainab-ali Mar 8, 2024
2b4f6aa
Refactor code to remove unreachable case warning.
zainab-ali Mar 8, 2024
1a0ff99
Remove unused imports for Scala 3 Test JVM.
zainab-ali Mar 8, 2024
a9f2460
Remove unused integer from LazyAccessSequential.
zainab-ali Mar 8, 2024
62c64c5
Use msg instead of cat for Scala 2/3 warnings.
zainab-ali Mar 8, 2024
e921362
Use recoverWith with partial function.
zainab-ali Mar 8, 2024
b1cd2ec
Use runner.
zainab-ali Mar 8, 2024
8b8c045
Add a None case for comprehensive matching.
zainab-ali Mar 8, 2024
b24746d
Remove unused implicit numeric widening annotation.
zainab-ali Mar 8, 2024
d8ceb05
Remove unused private var.
zainab-ali Mar 8, 2024
936d593
Mark cls as unused (broken for 2.12).
zainab-ali Mar 8, 2024
0c24b5d
Reformat.
zainab-ali Mar 8, 2024
0865492
Mark RunWith as unused.
zainab-ali Mar 8, 2024
d1ac0c4
Add newline to scalafmt.conf.
zainab-ali Mar 11, 2024
12cca52
Use scalacCompatAnnotation.
zainab-ali Mar 11, 2024
50ff96a
Add type parameters for Scala 2.12 compiler subtype warning.
zainab-ali Mar 11, 2024
5fde5d4
Fix doc for 2.13
zainab-ali Mar 11, 2024
6721c4d
Experiment: remove RunWith annotation.
zainab-ali Mar 11, 2024
5374b60
Add unused Reader.pt, WeaverRunner.dummy, LazyAccessSequential.index
zainab-ali Mar 12, 2024
98dd492
Add WeaverRunner constructor back.
zainab-ali Mar 12, 2024
482bd81
Use nowarn2 annotation.
zainab-ali Mar 12, 2024
705c833
Mark runner in DogFoodCompat as unused.
zainab-ali Mar 12, 2024
901504e
Use tupleLeft.
zainab-ali Mar 12, 2024
13400cb
Add `RunWith` annotation (and fail CI pipeline).
zainab-ali Mar 12, 2024
3fe2d7b
Add optional JUnit dependency to cats-core.
zainab-ali Mar 13, 2024
6b0fd1c
Use ScalaDocTool configuration.
zainab-ali Mar 13, 2024
bcc7d34
Remove unused index from LazyAccessSequential test.
zainab-ali Mar 13, 2024
03d98b2
Use GlobalResourceF.Read in scaladoc.
zainab-ali Mar 13, 2024
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
6 changes: 6 additions & 0 deletions .scalafmt.conf
Original file line number Diff line number Diff line change
Expand Up @@ -31,3 +31,9 @@ project.git = true
project.excludeFilters = [
".*-scala-3.*"
]

fileOverride {
"glob:**/scala-3/**" {
runner.dialect = scala3
}
}
28 changes: 15 additions & 13 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -25,18 +25,19 @@ ThisBuild / crossScalaVersions := Seq(scala212, scala213, "3.3.1")
ThisBuild / scalaVersion := scala213 // the default Scala

val Version = new {
val catsEffect = "3.5.2"
val catsLaws = "2.9.0"
val discipline = "1.5.1"
val expecty = "0.16.0"
val fs2 = "3.5.0"
val junit = "4.13.2"
val portableReflect = "1.1.2"
val scalaJavaTime = "2.4.0"
val scalacheck = "1.17.0"
val scalajsMacroTask = "1.1.1"
val scalajsStubs = "1.1.0"
val testInterface = "1.0"
val catsEffect = "3.5.2"
val catsLaws = "2.9.0"
val discipline = "1.5.1"
val expecty = "0.16.0"
val fs2 = "3.5.0"
val junit = "4.13.2"
val portableReflect = "1.1.2"
val scalaJavaTime = "2.4.0"
val scalacheck = "1.17.0"
val scalajsMacroTask = "1.1.1"
val scalajsStubs = "1.1.0"
val testInterface = "1.0"
val scalacCompatAnnotation = "0.1.4"
}

lazy val root = tlCrossRootProject.aggregate(core,
Expand All @@ -55,7 +56,8 @@ lazy val core = crossProject(JVMPlatform, JSPlatform, NativePlatform)
"org.typelevel" %%% "cats-effect" % Version.catsEffect,
"com.eed3si9n.expecty" %%% "expecty" % Version.expecty,
// https://github.com/portable-scala/portable-scala-reflect/issues/23
"org.portable-scala" %%% "portable-scala-reflect" % Version.portableReflect cross CrossVersion.for3Use2_13
"org.portable-scala" %%% "portable-scala-reflect" % Version.portableReflect cross CrossVersion.for3Use2_13,
"org.typelevel" %% "scalac-compat-annotation" % Version.scalacCompatAnnotation
)
)

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package org.junit.runner

import org.typelevel.scalaccompat.annotation.unused

/**
* Stub used for cross-compilation
*/
class RunWith[T](cls: Class[T]) extends scala.annotation.StaticAnnotation
class RunWith[T](@unused cls: Class[T])
extends scala.annotation.StaticAnnotation
4 changes: 2 additions & 2 deletions modules/core/js/src/main/scala/weaver/PlatformCompat.scala
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package weaver

import org.typelevel.scalaccompat.annotation.unused
private[weaver] object PlatformCompat {
val platform: Platform = Platform.JS

def getClassLoader(clazz: java.lang.Class[_]): ClassLoader =
def getClassLoader(@unused clazz: java.lang.Class[_]): ClassLoader =
new ClassLoader() {}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,11 @@ import weaver.internals.Reflection
import org.junit.runner.Description
import org.junit.runner.notification.RunNotifier

class WeaverRunner(cls: Class[_], dummy: Boolean)
class WeaverRunner(cls: Class[_])
extends org.junit.runner.Runner {

type F[A] = Any

def this(cls: Class[_]) = this(cls, true)

lazy val suite: RunnableSuite[F] = {
Reflection.loadRunnableSuite(cls.getName(), getClass().getClassLoader())
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package org.junit.runner
import org.typelevel.scalaccompat.annotation.unused

/**
* Stub used for cross-compilation
*/
class RunWith[T](cls: Class[T]) extends scala.annotation.StaticAnnotation
class RunWith[T](@unused cls: Class[T])
extends scala.annotation.StaticAnnotation
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package weaver
import org.typelevel.scalaccompat.annotation.unused

private[weaver] object PlatformCompat {
val platform: Platform = Platform.Native

def getClassLoader(clazz: java.lang.Class[_]): ClassLoader =
def getClassLoader(@unused clazz: java.lang.Class[_]): ClassLoader =
new ClassLoader() {}
}
3 changes: 0 additions & 3 deletions modules/core/shared/src/main/scala-3/weaver/Expect.scala
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
package weaver

import cats.data.{ NonEmptyList, ValidatedNel }
import cats.syntax.all._

import com.eed3si9n.expecty._
import internals._

Expand Down
2 changes: 1 addition & 1 deletion modules/core/shared/src/main/scala/weaver/Test.scala
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,6 @@ object Test {

def apply[F[_]](name: String, f: F[Expectations])(
implicit F: EffectCompat[F]
): F[TestOutcome] = apply(name, (_: Log[F]) => f)
): F[TestOutcome] = apply[F](name, (_: Log[F]) => f)
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We get the following error in 2.12, resolved by adding these type parameters:

[warn] compiler bug: Unexpected code path: testing two type variables for subtype relation:
[warn]   ?F <:< ?F
[warn] Please report bug at https://github.com/scala/bug/issues


}
6 changes: 2 additions & 4 deletions modules/core/shared/src/main/scala/weaver/suites.scala
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import cats.effect.{ Async, Resource }
import cats.syntax.all._

import fs2.Stream
import org.junit.runner.RunWith
import org.portablescala.reflect.annotation.EnableReflectiveInstantiation

// Just a non-parameterized marker trait to help SBT's test detection logic.
Expand Down Expand Up @@ -60,7 +59,6 @@ object EffectSuite {

}

@RunWith(classOf[weaver.junit.WeaverRunner])
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mmm this annotation has a pretty significant importance (despite the fact that there's no test associated to it): it's what allows IntelliJ to run test suites by clicking on them.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I thought it was important, but wanted to get to a green build before fixing it.

Our doc generation fails in Scala 3:

sbt:cats-core> doc
[error] -- Error: modules/core/shared/src/main/scala/weaver/suites.scala:63:0 ----------
[error] 63 |@RunWith(classOf[weaver.junit.WeaverRunner])
[error]    |^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[error]    |undefined: new org.junit.runner.RunWith # -1: TermRef(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class junit)),object runner),RunWith),<init>) at readTasty
[error] one error found

I haven't dug deep into it yet, but it seems like a bug in dottydoc or the tasty reader. Possibly, it can't read the the tasty generated by suites.scala.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's probably because the dependency is tagged as Optional in this module.

We could make the dependency required in the scope of the task that requires it maybe ? Not gonna lie, my SBT skills are not good enough to know how to do that from the top of my head

Copy link
Contributor Author

@zainab-ali zainab-ali Mar 13, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That seems to be the problem.

  • junit is an Optional dependency of core.
  • coreJVM / doc has the junit jar on the classpath.
  • coreCats depends on core. However coreCatsJVM / doc doesn't have the junit jar.

The classpath rules are the same for Scala 2.13 and 3, but dottydoc uses the tasty reader, which seems to need all jars to be present.

We can resolve this by adding the junit dependency with a ScalaDocTool configuration.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

that's great, thank you !

abstract class RunnableSuite[F[_]] extends EffectSuite[F] {
implicit protected def effectCompat: UnsafeRun[EffectType]
private[weaver] def getEffectCompat: UnsafeRun[EffectType] = effectCompat
Expand Down Expand Up @@ -131,13 +129,13 @@ abstract class MutableFSuite[F[_]] extends RunnableSuite[F] {
}

def pureTest(name: TestName)(run : => Expectations) : Unit = registerTest(name)(_ => Test(name.name, effectCompat.effect.delay(run)))
def loggedTest(name: TestName)(run: Log[F] => F[Expectations]) : Unit = registerTest(name)(_ => Test(name.name, log => run(log)))
def loggedTest(name: TestName)(run: Log[F] => F[Expectations]) : Unit = registerTest(name)(_ => Test[F](name.name, log => run(log)))
def test(name: TestName) : PartiallyAppliedTest = new PartiallyAppliedTest(name)

class PartiallyAppliedTest(name : TestName) {
def apply(run: => F[Expectations]) : Unit = registerTest(name)(_ => Test(name.name, run))
def apply(run : Res => F[Expectations]) : Unit = registerTest(name)(res => Test(name.name, run(res)))
def apply(run : (Res, Log[F]) => F[Expectations]) : Unit = registerTest(name)(res => Test(name.name, log => run(res, log)))
def apply(run : (Res, Log[F]) => F[Expectations]) : Unit = registerTest(name)(res => Test[F](name.name, log => run(res, log)))

// this alias helps using pattern matching on `Res`
def usingRes(run : Res => F[Expectations]) : Unit = apply(run)
Expand Down
8 changes: 4 additions & 4 deletions modules/framework-cats/jvm/src/test/scala/MetaJVM.scala
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ object MetaJVM {
}
}

abstract class LazyAccessSequential(global: GlobalRead, index: Int)
abstract class LazyAccessSequential(global: GlobalRead)
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This index stopped being used as of this commit to improve the sequential access tests. We can safely get rid of it.

extends IOSuite {
type Res = LazyState
def sharedResource: Resource[IO, Res] = {
Expand All @@ -157,10 +157,10 @@ object MetaJVM {

// Using sleeps to force sequential runs of suites
class LazyAccessSequential0(global: GlobalRead)
extends LazyAccessSequential(global, 0)
extends LazyAccessSequential(global)
class LazyAccessSequential1(global: GlobalRead)
extends LazyAccessSequential(global, 1)
extends LazyAccessSequential(global)
class LazyAccessSequential2(global: GlobalRead)
extends LazyAccessSequential(global, 2)
extends LazyAccessSequential(global)

}
4 changes: 2 additions & 2 deletions modules/framework-cats/shared/src/test/scala/Meta.scala
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ object Meta {

object Boom extends Error("Boom") with scala.util.control.NoStackTrace

@nowarn("cat=w-flag-dead-code")
@nowarn("msg=dead code following this construct")
object CrashingSuite extends SimpleIOSuite {
throw Boom
}
Expand Down Expand Up @@ -102,7 +102,7 @@ object Meta {
override implicit protected def effectCompat: UnsafeRun[IO] =
SetTimeUnsafeRun

loggedTest("erroring with causes") { log =>
loggedTest("erroring with causes") { _ =>
throw CustomException(
"surfaced error",
CustomException("first cause",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ package framework
import cats.data.Chain
import cats.effect.Resource
import cats.syntax.all._
import org.typelevel.scalaccompat.annotation.unused

private[weaver] trait DogFoodCompat[F[_]] { self: DogFood[F] =>

Expand All @@ -15,7 +16,7 @@ private[weaver] trait DogFoodCompat[F[_]] { self: DogFood[F] =>
runner: WeaverRunner[F],
eventHandler: sbt.testing.EventHandler,
logger: sbt.testing.Logger,
maxParallelism: Int)(tasks: List[sbt.testing.Task]): F[Unit] = {
@unused maxParallelism: Int)(tasks: List[sbt.testing.Task]): F[Unit] = {
tasks.traverse { task =>
self.framework.unsafeRun.fromFuture {
task.asInstanceOf[AsyncTask].executeFuture(eventHandler, Array(logger))
Expand Down
7 changes: 4 additions & 3 deletions modules/framework/js-native/src/main/scala/RunnerCompat.scala
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package weaver
package framework

import java.nio.ByteBuffer
import org.typelevel.scalaccompat.annotation.unused

import scala.collection.mutable.ListBuffer
import scala.concurrent.Future
Expand Down Expand Up @@ -138,7 +139,7 @@ trait RunnerCompat[F[_]] { self: sbt.testing.Runner =>
}
}

def finaliseError(outcomes: Ref[
def finaliseError(@unused outcomes: Ref[
F,
Chain[TestOutcome]]): Throwable => F[Unit] = { error =>
val outcome =
Expand Down Expand Up @@ -177,7 +178,7 @@ trait RunnerCompat[F[_]] { self: sbt.testing.Runner =>
}

private[weaver] object ReadWriter {
class Reader(bytes: ByteBuffer, private var pt: Int) {
class Reader(bytes: ByteBuffer) {
def readString() = {
val stringSize = bytes.getInt()
val ar = new Array[Byte](stringSize)
Expand All @@ -201,7 +202,7 @@ private[weaver] object ReadWriter {

def reader[A](s: String)(f: Reader => A) = {
val buf = ByteBuffer.wrap(s.getBytes)
f(new Reader(buf, 0))
f(new Reader(buf))
}

def writer(f: Writer => Unit): String = {
Expand Down
3 changes: 1 addition & 2 deletions modules/framework/jvm/src/main/scala/DogFoodCompat.scala
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,8 @@ private[weaver] trait DogFoodCompat[F[_]] { self: DogFood[F] =>
eventHandler: EventHandler,
logger: Logger,
maxParallelism: Int)(tasks: List[sbt.testing.Task]): F[Unit] = {

val _ = runner
effect.void {
@scala.annotation.nowarn("msg=implicit numeric widening")
val r = tasks.toVector.parTraverseN[F, Unit](maxParallelism) { task =>
blocker.block(discard[Array[Task]](task.execute(eventHandler,
Array(logger))))
Expand Down
11 changes: 6 additions & 5 deletions modules/framework/jvm/src/main/scala/RunnerCompat.scala
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package weaver
package framework
import org.typelevel.scalaccompat.annotation.unused

import java.io.PrintStream
import java.util.concurrent.ConcurrentLinkedQueue
Expand Down Expand Up @@ -37,7 +38,7 @@ trait RunnerCompat[F[_]] { self: sbt.testing.Runner =>
}

// Required on js
def receiveMessage(msg: String): Option[String] = None
def receiveMessage(@unused msg: String): Option[String] = None

// Flag meant to be raised if build-tool call `done`
protected val isDone: AtomicBoolean = new AtomicBoolean(false)
Expand All @@ -57,9 +58,9 @@ trait RunnerCompat[F[_]] { self: sbt.testing.Runner =>
val stillRunning = new AtomicInteger(0)
val waitForResourcesShutdown = new java.util.concurrent.Semaphore(0)

val tasksAndSuites = taskDefs.toList.map { taskDef =>
taskDef -> suiteLoader(taskDef)
}.collect { case (taskDef, Some(suite)) => (taskDef, suite) }
val tasksAndSuites = (taskDefs.toList.mapFilter { taskDef =>
suiteLoader(taskDef).map(loader => (taskDef, loader))
})
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The previous code flags up an unreachable case warning in Scala 3, although I'm not sure why:

[warn] 63 |    }.collect { case (taskDef, Some(suite)) => (taskDef, suite) }
[warn]    |                     ^^^^^^^^^^^^^^^^^^^^^^
[warn]    |                     Unreachable case

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Til about mapFilter !


def makeTasks(
taskDef: TaskDef,
Expand Down Expand Up @@ -240,7 +241,7 @@ trait RunnerCompat[F[_]] { self: sbt.testing.Runner =>
.productR(broker.send(TestFinished(outcome))),
finalizer)
}
)).handleErrorWith { case scala.util.control.NonFatal(_) =>
)).recoverWith { case scala.util.control.NonFatal(_) =>
effect.unit // avoid non-fatal errors propagating up
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ abstract class DogFood[F[_]](
for {
eventHandler <- effect.delay(new MemoryEventHandler())
logger <- effect.delay(new MemoryLogger())
_ <- getTasks(suites, logger).use { case (runner, tasks) =>
_ <- getTasks(suites).use { case (runner, tasks) =>
runTasks(runner, eventHandler, logger, maxParallelism)(tasks.toList)
}
_ <- patience.fold(effect.unit)(framework.unsafeRun.sleep)
Expand Down Expand Up @@ -71,8 +71,8 @@ abstract class DogFood[F[_]](
}

private def getTasks(
suites: Seq[Fingerprinted],
logger: Logger): Resource[F, (WeaverRunner[F], Array[sbt.testing.Task])] = {
suites: Seq[Fingerprinted]
): Resource[F, (WeaverRunner[F], Array[sbt.testing.Task])] = {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This logger looked safe enough to remove.

val acquire = Sync[F].delay {
val cl = PlatformCompat.getClassLoader(this.getClass())
framework.weaverRunner(Array(), Array(), cl, None)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import scala.reflect.ClassTag
import cats.effect.Sync

import weaver.internals.Reflection._
import weaver.{ EffectSuite, GlobalResourceF }

import sbt.testing.{ Fingerprint, SubclassFingerprint, TaskDef }

Expand Down Expand Up @@ -59,6 +58,7 @@ abstract class WeaverFingerprints[F[_]](implicit F: Sync[F]) {
loadModule(taskDef.fullyQualifiedName(), classLoader)
val init = cast(module)(GlobalResourcesInitClass)
Some(GlobalResourcesRef(init))
case _ => None
}

}
Expand All @@ -76,7 +76,7 @@ abstract class WeaverFingerprints[F[_]](implicit F: Sync[F]) {
/**
* A fingerprint that searches only for classes extending
* [[weaver.EffectSuite]]. that have a constructor that takes a single
* [[weaver.GlobalResources.Read]] parameter.
* `weaver.GlobalResources.Read` parameter.
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

scaladoc can't find this symbol:

[warn] 81 |  object ResourceSharingSuiteFingerprint extends WeaverFingerprint {
[warn]    |         ^
[warn]    |         No DRI found for query: weaver.GlobalResources.Read

Should this be weaver.GlobalRead?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think so, indeed

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As far as I'm concerned, this is the last outstanding item for this PR to be merged 🎉

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

GlobalRead came from the cats module, so I went for weaver.GlobalResourceF.Read instead.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hah, good call, always mix them for one another

*/
object ResourceSharingSuiteFingerprint extends WeaverFingerprint {
def isModule() = false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ package framework

import java.io.PrintStream

import weaver.{ Platform, discard }

import sbt.testing.{ Framework => BaseFramework, Runner => BaseRunner, _ }

class WeaverFramework[F[_]](
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,6 @@ import scala.concurrent.duration._
import cats.effect.Outcome._
import cats.effect.testkit.TestControl
import cats.effect.{ IO, Ref }
import cats.syntax.all._

import weaver.TestStatus

import org.scalacheck.Gen

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ package scalacheck
import scala.concurrent.duration._

import cats.effect.IO
import cats.syntax.all._

import org.scalacheck.Gen

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ package scalacheck
import scala.concurrent.duration._

import cats.effect.{ IO, Resource }
import cats.syntax.all._

import weaver.framework._

Expand Down