diff --git a/core/src/main/scala/cats/syntax/package.scala b/core/src/main/scala/cats/syntax/package.scala index 3b2287fd9f..0a22e96745 100644 --- a/core/src/main/scala/cats/syntax/package.scala +++ b/core/src/main/scala/cats/syntax/package.scala @@ -10,7 +10,6 @@ package object syntax { object bifunctor extends BifunctorSyntax object bifoldable extends BifoldableSyntax object bitraverse extends BitraverseSyntax - object semigroupal extends SemigroupalSyntax object coflatMap extends CoflatMapSyntax object eitherK extends EitherKSyntax object comonad extends ComonadSyntax @@ -34,6 +33,7 @@ package object syntax { object profunctor extends ProfunctorSyntax object reducible extends ReducibleSyntax object semigroup extends SemigroupSyntax + object semigroupal extends SemigroupalSyntax object semigroupk extends SemigroupKSyntax object show extends ShowSyntax object strong extends StrongSyntax diff --git a/scalafix/README.md b/scalafix/README.md index 32a70de462..179ffe1a0e 100644 --- a/scalafix/README.md +++ b/scalafix/README.md @@ -50,3 +50,13 @@ sbt scalafix github:typelevel/cats/v1.0.0 - [ ] foldLeftM is removed from Free, use foldM on Foldable instead, see #1117 for detail. - [ ] iteratorFoldM was removed from Foldable due to #1716 + + +## To test scala fix + +```bash +sbt ;coreJVM/publishLocal;coreFree/publishLocal +cd scalafix +sbt test + +``` diff --git a/scalafix/input/src/main/scala/fix/v1_0_0/RenameCartesian.scala b/scalafix/input/src/main/scala/fix/v1_0_0/RenameCartesian.scala new file mode 100644 index 0000000000..4fc34fac8d --- /dev/null +++ b/scalafix/input/src/main/scala/fix/v1_0_0/RenameCartesian.scala @@ -0,0 +1,13 @@ +/* +rule = "scala:fix.v1_0_0.RenameCartesian" + */ +package fix +package to1_0_0 + +import cats.Cartesian + +object RenameCartesianTests { + import cats.syntax.cartesian._ + + def prod[F[_]: Cartesian, A, B](fa: F[A], fb: F[B]): F[(A, B)] = Cartesian[F].product(fa, fb) +} diff --git a/scalafix/output/src/main/scala/fix/v1_0_0/RenameCartesian.scala b/scalafix/output/src/main/scala/fix/v1_0_0/RenameCartesian.scala new file mode 100644 index 0000000000..a69653b405 --- /dev/null +++ b/scalafix/output/src/main/scala/fix/v1_0_0/RenameCartesian.scala @@ -0,0 +1,10 @@ +package fix +package to1_0_0 + +import cats.Semigroupal + +object RenameCartesianTests { + import cats.syntax.semigroupal._ + + def prod[F[_]: Semigroupal, A, B](fa: F[A], fb: F[B]): F[(A, B)] = Semigroupal[F].product(fa, fb) +} diff --git a/scalafix/rules/src/main/scala/fix/Cats_v1_0_0.scala b/scalafix/rules/src/main/scala/fix/Cats_v1_0_0.scala index cabb75d112..af51975403 100644 --- a/scalafix/rules/src/main/scala/fix/Cats_v1_0_0.scala +++ b/scalafix/rules/src/main/scala/fix/Cats_v1_0_0.scala @@ -225,4 +225,19 @@ case class RenameEitherTLiftT(index: SemanticdbIndex) "_root_.cats.data.EitherTFunctions.liftT." -> "liftF" ) -} \ No newline at end of file +} + +// ref: https://github.com/typelevel/cats/pull/1960 +case class RenameCartesian(index: SemanticdbIndex) + extends SemanticRule(index, "RenameCartesian") { + + override def fix(ctx: RuleCtx): Patch = { + ctx.replaceSymbols( + "_root_.cats.Cartesian." -> "_root_.cats.Semigroupal." + )+ ctx.tree.collect { + case t @ q"import cats.syntax.cartesian._" => + ctx.replaceTree(t, "import cats.syntax.semigroupal._") + }.asPatch + } + +}