treehugger DSL is an expanded version of TreeDSL in scalac to build Scala AST in code-like fashion. It is able to write all legal Scala expressions except for XML literals.
There are several conventions used throughout this document.
VAL(sym|"x")
In the above, sym|"x" denotes that either a Symbol or a String is accepted as a parameter to VAL(...).
TYPE_LIST(typ)
In the above, typ indicates that TYPE_LIST(...) accepts a Type.
DEF("x"|sym) withTypeParams(TYPEVAR(...), ...)
In the above, TYPEVAR(...), ... denotes that withTypeParams(...) can accept either a vararg list or an Iterable of TYPEVAR(...).
(DEF("get"|sym, [typ])
[withParams(PARAM("x"|sym, typ|"C")[ := arg], ...)]*
[withTypeParams(TYPEVAR(...), ...)]).tree
In the above, [typ] indicates that typ is optional; and [withParams(PARAM("x"|sym, typ|"C")[ := arg], ...)]* indicates that the withParams clause is optional and may be repeated.