Object Definitions

Object definitions are written using OBJECTDEF(...):

import treehugger.forest._, definitions._, treehuggerDSL._

val tree = OBJECTDEF("Main") withParents("App") := BLOCK(
  LIT(0)
)
// tree: ModuleDef = ModuleDef(
//   Modifiers(0L, TypeName(""), List()),
//   TermName("Main"),
//   Template(
//     List(TypeTree()),
//     ValDef(Modifiers(4L, TypeName(""), List()), Ident(TermName("_")), EmptyTree),
//     List(Literal(Constant(0)))
//   )
// )

treeToString(tree)
// res0: String = """object Main extends App {
//   0
// }"""

Case object definitions

Case object definitions are written using CASEOBJECTDEF(...):

val tree2 = (CASEOBJECTDEF("C"): Tree)
// tree2: Tree = ModuleDef(
//   Modifiers(2048L, TypeName(""), List()),
//   TermName("C"),
//   Template(
//     List(),
//     ValDef(Modifiers(4L, TypeName(""), List()), Ident(TermName("_")), EmptyTree),
//     List()
//   )
// )

treeToString(tree2)
// res1: String = "case object C"