11package join_patterns
22
3- import java .util .concurrent .{LinkedTransferQueue => Queue }
4-
5- import scala .quoted .{Expr , Type , Quotes , Varargs }
3+ import java .util .concurrent .LinkedTransferQueue as Queue
4+ import scala .quoted .{Expr , Quotes , Type , Varargs }
65import scala .collection .mutable .ListBuffer
7- import scala .collection .mutable .{Map => mutMap }
6+ import scala .collection .mutable .Map as mutMap
7+ import scala .language .postfixOps
88
99case class JoinPattern [M , T ](
10- val extract : List [M ] => (List [M ], Map [String , Any ]),
11- val guard : Map [String , Any ] => Boolean ,
12- val rhs : Map [String , Any ] => T ,
13- val size : Int
10+ extract : List [M ] => (List [M ], Map [String , Any ]),
11+ guard : Map [String , Any ] => Boolean ,
12+ rhs : Map [String , Any ] => T ,
13+ size : Int
1414)
1515
1616class Matcher [M , T ](val patterns : List [JoinPattern [M , T ]]) {
1717 // Messages extracted from the queue are saved here to survive across apply() calls
18- private var messages = ListBuffer [M ]()
18+ private val messages = ListBuffer [M ]()
1919
2020 def apply (q : Queue [M ]): T =
2121 import collection .convert .ImplicitConversions ._
@@ -25,12 +25,12 @@ class Matcher[M, T](val patterns: List[JoinPattern[M, T]]) {
2525 while (result.isEmpty)
2626 for
2727 pattern <- patterns
28- if ! result.isDefined
28+ if result.isEmpty
2929 do
3030 if messages.size >= pattern.size then
3131 val (matchedMessages, substs) = pattern.extract(messages.toList)
3232
33- if ! matchedMessages.isEmpty && pattern.guard(substs) then
33+ if matchedMessages.nonEmpty && pattern.guard(substs) then
3434 result = Some (pattern.rhs(substs))
3535 messages.subtractAll(matchedMessages)
3636
@@ -59,7 +59,7 @@ private def extractInner(using quotes: Quotes)(
5959 case typed @ Typed (Wildcard (), TypeIdent (_)) => (" _" , typed.tpt.tpe.dealias.simplified)
6060 // add support for Wildcard !!! : (_)
6161 // add support for Bind(String, WildCard) : (name: _)
62- case default =>
62+ case _ =>
6363 errorTree(" Unsupported bottom-level pattern" , t)
6464 (" " , TypeRepr .of[Nothing ])
6565
@@ -103,9 +103,9 @@ private def generateExtractor(using
103103 Lambda (
104104 owner = Symbol .spliceOwner,
105105 tpe = MethodType (List (" " ))(_ => List (outerType), _ => TypeRepr .of[Map [String , Any ]]),
106- rhsFn = (sym : Symbol , params : List [Tree ]) =>
106+ rhsFn = (_ : Symbol , params : List [Tree ]) =>
107107 val p0 = params.head.asInstanceOf [Ident ]
108- val isMemberName : ( Symbol => Boolean ) =
108+ val isMemberName : Symbol => Boolean =
109109 (p : Symbol ) => p.name.head == '_' && p.name.tail.toIntOption.isDefined
110110 val memberSymbols : List [Symbol ] = outerType.typeSymbol.methodMembers
111111 .filter(isMemberName(_))
@@ -137,13 +137,13 @@ private def generateGuard(using quotes: Quotes)(
137137 override def transformTerm (term : Term )(owner : Symbol ): Term = super .transformTerm(term)(owner)
138138 }
139139
140- var _rhsFn = (sym : Symbol , params : List [Tree ]) =>
141- _transform.transformTerm(( ' { true }) .asExprOf[Boolean ].asTerm.changeOwner(sym))(sym)
140+ var _rhsFn = (sym : Symbol , _ : List [Tree ]) =>
141+ _transform.transformTerm(' { true }.asExprOf[Boolean ].asTerm.changeOwner(sym))(sym)
142142
143143 guard match
144144 case Some (apply : Apply ) =>
145145 if inners.isEmpty then
146- _rhsFn = (sym : Symbol , params : List [Tree ]) =>
146+ _rhsFn = (sym : Symbol , _ : List [Tree ]) =>
147147 _transform.transformTerm(apply.changeOwner(sym))(sym)
148148 else
149149 _rhsFn = (sym : Symbol , params : List [Tree ]) =>
@@ -152,7 +152,7 @@ private def generateGuard(using quotes: Quotes)(
152152 val transform = new TreeMap {
153153 override def transformTerm (term : Term )(owner : Symbol ): Term = term match
154154 case Ident (n) if inners.exists(_._1 == n) =>
155- val inner = ' { $ { p0.asExprOf[Map [String , Any ]] }($ { Expr (n) }) }
155+ val inner = ' { ( $ { p0.asExprOf[Map [String , Any ]] }) ($ { Expr (n) }) }
156156
157157 inners.find(_._1 == n).get._2.asType match
158158 case ' [innerType] => (' { $ { inner }.asInstanceOf [innerType] }).asTerm
@@ -195,7 +195,7 @@ private def generateRhs[T](using
195195 val transform = new TreeMap {
196196 override def transformTerm (term : Term )(owner : Symbol ): Term = term match
197197 case Ident (n) if inners.exists(_._1 == n) =>
198- val inner = ' { $ { p0.asExprOf[Map [String , Any ]] }($ { Expr (n) }) }
198+ val inner = ' { ( $ { p0.asExprOf[Map [String , Any ]] }) ($ { Expr (n) }) }
199199
200200 inners.find(_._1 == n).get._2.asType match
201201 case ' [innerType] => (' { $ { inner }.asInstanceOf [innerType] }).asTerm
@@ -243,7 +243,7 @@ private def generate[M, T](using quotes: Quotes, tm: Type[M], tt: Type[T])(
243243 m.find(_.isInstanceOf [ot]) match
244244 case None => (List (), Map ())
245245 case Some (message) =>
246- (List (message), $ { extractor } (message.asInstanceOf [ot]))
246+ (List (message), $extractor(message.asInstanceOf [ot]))
247247 }
248248 (List (outer), inners)
249249 // (A, B, C ...)
@@ -319,7 +319,7 @@ private def getCases[M, T](
319319
320320 expr.asTerm match
321321 case Inlined (_, _, Block (_, Block (stmts, _))) =>
322- stmts( 0 ) match
322+ stmts.head match
323323 case DefDef (_, _, _, Some (Block (_, Match (_, cases)))) =>
324324 val code = cases.map { generate[M , T ](_) }
325325 /*
0 commit comments