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

Commit d498df3

Browse files
committed
Shorter way to initialize columns in a data source
1 parent a8bbc70 commit d498df3

File tree

2 files changed

+15
-6
lines changed

2 files changed

+15
-6
lines changed

bokeh/src/main/scala/models/Sources.scala

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ case class Selected(`0d`: Selected0d = Selected0d(),
1919

2020
object data extends Field[Map[Symbol, Js.Value]]
2121

22+
// TODO: M should be covariant? See Color vs. NamedColor.
2223
class Column[M[_]: ArrayLike, T:Json.Writer]
2324
(val name: Symbol, private var _value: M[T])
2425
(implicit fmt: Json.Writer[M[T]]) {
@@ -29,6 +30,7 @@ case class Selected(`0d`: Selected0d = Selected0d(),
2930
}
3031

3132
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]
3234
}
3335

3436
private[bokeh] object ColumnMacro {
@@ -37,12 +39,19 @@ private[bokeh] object ColumnMacro {
3739
def columnImpl[M[_], T](c: Context { type PrefixType = ColumnDataSource })(value: c.Expr[M[T]])
3840
(implicit ev1: c.WeakTypeTag[M[_]], ev2: c.WeakTypeTag[T]): c.Expr[c.prefix.value.Column[M, T]] = {
3941
import c.universe._
42+
c.Expr[c.prefix.value.Column[M, T]](q"new Column(Symbol(${columnName(c)}), $value)")
43+
}
4044

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 {
4253
c.abort(c.enclosingPosition, "column must be directly assigned to a val, such as `val x1 = column(List(1.0, 2.0, 3.0))`")
4354
}
44-
45-
c.Expr[c.prefix.value.Column[M, T]](q"new Column(Symbol($name), $value)")
4655
}
4756
}
4857

examples/src/main/scala/models/Maps.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,9 @@ object Maps extends Example {
7070
plot.tools <<= (pan :: zoom :: select :: _)
7171

7272
object source extends ColumnDataSource {
73-
val lat = column(Array(30.2861, 30.2855, 30.2869))
74-
val lon = column(Array(-97.7394, -97.7390, -97.7405))
75-
val fill = column(Array[Color](Color.Orange, Color.Blue, Color.Green))
73+
val lat = values(30.2861, 30.2855, 30.2869)
74+
val lon = values(-97.7394, -97.7390, -97.7405)
75+
val fill = values[Color](Color.Orange, Color.Blue, Color.Green)
7676
}
7777

7878
import source.{lat,lon,fill}

0 commit comments

Comments
 (0)