================================ Package ================================ package a.b package c { object A } --- (compilation_unit (package_clause (package_identifier (identifier) (identifier))) (package_clause (package_identifier (identifier)) (template_body (object_definition (identifier))))) ================================ Package object ================================ package object d extends A { val hello: String = "there" } --- (compilation_unit (package_object (identifier) (extends_clause (type_identifier)) (template_body (val_definition (identifier) (type_identifier) (string))))) ================================ Imports ================================ import PartialFunction.condOpt import a.b, c.e import reflect.io.{Directory, File, Path} --- (compilation_unit (import_declaration (stable_identifier (identifier) (identifier))) (import_declaration (stable_identifier (identifier) (identifier)) (stable_identifier (identifier) (identifier))) (import_declaration (stable_identifier (identifier) (identifier)) (import_selectors (identifier) (identifier) (identifier)))) ================================ Imports: Wildcard ================================ import tools.nsc.classpath._ --- (compilation_unit (import_declaration (stable_identifier (stable_identifier (identifier) (identifier)) (identifier)) (wildcard))) ================================ Imports: Rename ================================ import lang.System.{lineSeparator => EOL} --- (compilation_unit (import_declaration (stable_identifier (identifier) (identifier)) (import_selectors (renamed_identifier (identifier) (identifier))))) ================================= Object definitions ================================= // o1 object O1 { } case object O2 { } object O3 extends A { } --- (compilation_unit (comment) (object_definition (identifier) (template_body)) (object_definition (identifier) (template_body)) (object_definition (identifier) (extends_clause (type_identifier)) (template_body))) ======================================= Class definitions ======================================= class C[T, U] { } --- (compilation_unit (class_definition (identifier) (type_parameters (identifier) (identifier)) (template_body))) ======================================= Subclass definitions ======================================= class A extends B.C[D, E] { } class A(b: B) extends C(b || ok) { } --- (compilation_unit (class_definition (identifier) (extends_clause (generic_type (stable_type_identifier (identifier) (type_identifier)) (type_arguments (type_identifier) (type_identifier)))) (template_body)) (class_definition (identifier) (class_parameters (class_parameter (identifier) (type_identifier))) (extends_clause (type_identifier) (arguments (infix_expression (identifier) (operator_identifier) (identifier)))) (template_body))) ======================================= Class definitions with parameters ======================================= class Point(val x: Int, val y: Int)(implicit coord: Coord) --- (compilation_unit (class_definition (identifier) (class_parameters (class_parameter (identifier) (type_identifier)) (class_parameter (identifier) (type_identifier))) (class_parameters (class_parameter (identifier) (type_identifier))))) ======================================= Modifiers ======================================= implicit final sealed class Point { private override def getX() = 1 } --- (compilation_unit (class_definition (modifiers) (identifier) (template_body (function_definition (modifiers) (identifier) (parameters) (number))))) ======================================= Trait definitions ======================================= trait A extends B trait A extends B with C trait T[U] { } trait T[U] extends V.W[U] { } --- (compilation_unit (trait_definition (identifier) (extends_clause (type_identifier))) (trait_definition (identifier) (extends_clause (compound_type (type_identifier) (type_identifier)))) (trait_definition (identifier) (type_parameters (identifier)) (template_body)) (trait_definition (identifier) (type_parameters (identifier)) (extends_clause (generic_type (stable_type_identifier (identifier) (type_identifier)) (type_arguments (type_identifier)))) (template_body))) ======================================= Value declarations ======================================= class A { val b, c : Int val d : String } --- (compilation_unit (class_definition (identifier) (template_body (val_declaration (identifier) (identifier) (type_identifier)) (val_declaration (identifier) (type_identifier))))) ======================================= Value definitions ======================================= class A { val b = 1 val c : String = "d" } --- (compilation_unit (class_definition (identifier) (template_body (val_definition (identifier) (number)) (val_definition (identifier) (type_identifier) (string))))) ======================================= Variable declarations ======================================= class A { var b, c : Int var d : String } --- (compilation_unit (class_definition (identifier) (template_body (var_declaration (identifier) (identifier) (type_identifier)) (var_declaration (identifier) (type_identifier))))) ======================================= Variable definitions ======================================= class A { var b : Int = 1 } --- (compilation_unit (class_definition (identifier) (template_body (var_definition (identifier) (type_identifier) (number))))) ======================================= Type definitions ======================================= class A { type B = C type D[E] = F } --- (compilation_unit (class_definition (identifier) (template_body (type_definition (type_identifier) (type_identifier)) (type_definition (type_identifier) (type_parameters (identifier)) (type_identifier))))) ======================================= Function declarations ======================================= class A { def b(c: D) : E } --- (compilation_unit (class_definition (identifier) (template_body (function_declaration (identifier) (parameters (parameter (identifier) (type_identifier))) (type_identifier))))) ======================================= Function definitions ======================================= class A { def b(c: D, e: F) = 1 def g[H](i) { j } def h(x: T)(implicit ev: Reads[T]) } --- (compilation_unit (class_definition (identifier) (template_body (function_definition (identifier) (parameters (parameter (identifier) (type_identifier)) (parameter (identifier) (type_identifier))) (number)) (function_definition (identifier) (type_parameters (identifier)) (parameters (parameter (identifier))) (block (identifier))) (function_declaration (identifier) (parameters (parameter (identifier) (type_identifier))) (parameters (parameter (identifier) (generic_type (type_identifier) (type_arguments (type_identifier))))))))) ======================================= Initialization expressions ======================================= class A(val x: Int, val y: Int) { assert(x != 0) } --- (compilation_unit (class_definition (identifier) (class_parameters (class_parameter (identifier) (type_identifier)) (class_parameter (identifier) (type_identifier))) (template_body (call_expression (identifier) (arguments (infix_expression (identifier) (operator_identifier) (number))))))) ======================================= Optional parameters ======================================= def mkLines(header: String, indented: Boolean = false, embraced: Boolean = false): String = {} --- (compilation_unit (function_definition (identifier) (parameters (parameter (identifier) (type_identifier)) (parameter (identifier) (type_identifier) (identifier)) (parameter (identifier) (type_identifier) (identifier))) (type_identifier) (block)))