Skip to content

Commit da98dc1

Browse files
committed
Add an as(Unit) linter
1 parent 612f5a4 commit da98dc1

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

modules/cats/input/src/main/scala/fix/AsTests.scala

+9
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ rule = TypelevelAs
33
*/
44
package fix
55

6+
import cats.syntax.functor.toFunctorOps
7+
68
object AsTests {
79

810
def listMapLit = {
@@ -17,11 +19,18 @@ object AsTests {
1719
.map(_ => ()) can be replaced by .void */
1820
}
1921

22+
def listAsUnit = {
23+
List(1, 2, 3).as(()) /* assert: TypelevelAs.as
24+
^^^^^^^^^^^^^^^^^^^^
25+
.as(()) can be replaced by .void */
26+
}
27+
2028
def shouldBeIgnored = {
2129
def f = "a"
2230
List(1, 2, 3).map(_ => f)
2331
List(1, 2, 3).map(i => i)
2432
List(1, 2, 3).map(println(_))
33+
List(1, 2, 3).as(1)
2534
}
2635

2736
}

modules/cats/rules/src/main/scala/org/typelevel/fix/As.scala

+19
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ class As extends SemanticRule("TypelevelAs") {
2626
case tree @ AnonymousMap(Lit.Unit()) => Patch.lint(VoidDiagnostic(tree))
2727
// fa.map(_ => 1)
2828
case tree @ AnonymousMap(_: Lit) => Patch.lint(AsDiagnostic(tree))
29+
// fa.as(())
30+
case tree @ As(Lit.Unit()) => Patch.lint(AsUnitDiagnostic(tree))
2931
}.asPatch
3032

3133
}
@@ -41,6 +43,17 @@ object AnonymousMap {
4143
}
4244
}
4345

46+
object As {
47+
def unapply(term: Term): Option[Term] = term match {
48+
case Term.Apply.Initial(
49+
Term.Select(_, Term.Name("as")),
50+
List(value)
51+
) =>
52+
Some(value)
53+
case _ => None
54+
}
55+
}
56+
4457
final case class AsDiagnostic(t: Tree) extends Diagnostic {
4558
override def message: String = ".map(_ => f) can be replaced by .as(f)"
4659
override def position: Position = t.pos
@@ -52,3 +65,9 @@ final case class VoidDiagnostic(t: Tree) extends Diagnostic {
5265
override def position: Position = t.pos
5366
override def categoryID: String = "as"
5467
}
68+
69+
final case class AsUnitDiagnostic(t: Tree) extends Diagnostic {
70+
override def message: String = ".as(()) can be replaced by .void"
71+
override def position: Position = t.pos
72+
override def categoryID: String = "as"
73+
}

0 commit comments

Comments
 (0)