@@ -19,6 +19,7 @@ case class Selected(`0d`: Selected0d = Selected0d(),
19
19
20
20
object data extends Field [Map [Symbol , Js .Value ]]
21
21
22
+ // TODO: M should be covariant? See Color vs. NamedColor.
22
23
class Column [M [_]: ArrayLike , T : Json .Writer ]
23
24
(val name : Symbol , private var _value : M [T ])
24
25
(implicit fmt : Json .Writer [M [T ]]) {
@@ -29,6 +30,7 @@ case class Selected(`0d`: Selected0d = Selected0d(),
29
30
}
30
31
31
32
def column [M [_], T ](value : M [T ]): Column [M , T ] = macro ColumnMacro .columnImpl[M , T ]
33
+ def values [T ](values : T * ): Column [Seq , T ] = macro ColumnMacro .valuesImpl[T ]
32
34
}
33
35
34
36
private [bokeh] object ColumnMacro {
@@ -37,12 +39,19 @@ private[bokeh] object ColumnMacro {
37
39
def columnImpl [M [_], T ](c : Context { type PrefixType = ColumnDataSource })(value : c.Expr [M [T ]])
38
40
(implicit ev1 : c.WeakTypeTag [M [_]], ev2 : c.WeakTypeTag [T ]): c.Expr [c.prefix.value.Column [M , T ]] = {
39
41
import c .universe ._
42
+ c.Expr [c.prefix.value.Column [M , T ]](q " new Column(Symbol( ${columnName(c)}), $value) " )
43
+ }
40
44
41
- val name = Macros .definingValName(c) getOrElse {
45
+ def valuesImpl [T : c.WeakTypeTag ](c : Context { type PrefixType = ColumnDataSource })
46
+ (values : c.Expr [T ]* ): c.Expr [c.prefix.value.Column [Seq , T ]] = {
47
+ import c .universe ._
48
+ c.Expr [c.prefix.value.Column [Seq , T ]](q " new Column(Symbol( ${columnName(c)}), Seq(.. $values)) " )
49
+ }
50
+
51
+ private def columnName (c : Context ): String = {
52
+ Macros .definingValName(c) getOrElse {
42
53
c.abort(c.enclosingPosition, " column must be directly assigned to a val, such as `val x1 = column(List(1.0, 2.0, 3.0))`" )
43
54
}
44
-
45
- c.Expr [c.prefix.value.Column [M , T ]](q " new Column(Symbol( $name), $value) " )
46
55
}
47
56
}
48
57
0 commit comments