File tree Expand file tree Collapse file tree 2 files changed +28
-0
lines changed
rules/src/main/scala/org/typelevel/fix Expand file tree Collapse file tree 2 files changed +28
-0
lines changed Original file line number Diff line number Diff line change @@ -3,6 +3,8 @@ rule = TypelevelAs
33 */
44package fix
55
6+ import cats .syntax .functor .toFunctorOps
7+
68object 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}
Original file line number Diff line number Diff 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+
4457final 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+ }
You can’t perform that action at this time.
0 commit comments