Skip to content
This repository was archived by the owner on Oct 11, 2023. It is now read-only.

Commit f30223f

Browse files
committed
Allow to expand prefix-less include[Mixin]
1 parent 9015617 commit f30223f

File tree

1 file changed

+24
-15
lines changed

1 file changed

+24
-15
lines changed

core/src/main/scala/Model.scala

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,23 +11,32 @@ private object ModelImpl {
1111
case ClassDef(mods, name, tparams, tpl @ Template(parents, sf, body)) :: companion =>
1212
val bokeh = q"io.continuum.bokeh"
1313

14+
def expandInclude(prefix: Option[Tree], mixin: Tree) = {
15+
val fields =
16+
c.typecheck(tq"$mixin", c.TYPEmode)
17+
.tpe
18+
.members
19+
.filter(_.isModule)
20+
.map(_.asModule)
21+
.filter(_.typeSignature <:< typeOf[AbstractField])
22+
23+
fields.map { field =>
24+
val name = prefix match {
25+
case Some(prefix) => TermName(s"${prefix}_${field.name}")
26+
case None => field.name
27+
}
28+
val sig = field.typeSignature
29+
val tpe = sig.member(TypeName("ValueType")).typeSignatureIn(sig)
30+
// TODO: add support for precise field type (Vectorized, NonNegative, etc.)
31+
q"object $name extends this.Field[$tpe]"
32+
}
33+
}
34+
1435
val expandedBody = body.flatMap {
36+
case q"include[$mixin]" =>
37+
expandInclude(None, mixin)
1538
case q"$prefix = include[$mixin]" =>
16-
val fields =
17-
c.typecheck(tq"$mixin", c.TYPEmode)
18-
.tpe
19-
.members
20-
.filter(_.isModule)
21-
.map(_.asModule)
22-
.filter(_.typeSignature <:< typeOf[AbstractField])
23-
24-
fields.map { field =>
25-
val name = TermName(s"${prefix}_${field.name}")
26-
val sig = field.typeSignature
27-
val tpe = sig.member(TypeName("ValueType")).typeSignatureIn(sig)
28-
// TODO: add support for precise field type (Vectorized, NonNegative, etc.)
29-
q"object $name extends this.Field[$tpe]"
30-
}
39+
expandInclude(Some(prefix), mixin)
3140
case field => field :: Nil
3241
}
3342

0 commit comments

Comments
 (0)