scala.reflect.api

Printers

trait Printers extends AnyRef

EXPERIMENTAL

Utilities for nicely printing scala.reflect.api.Trees and scala.reflect.api.Types.

Printing Trees

The method show displays the "prettified" representation of reflection artifacts. This representation provides one with the desugared Java representation of Scala code. For example:

scala> import scala.reflect.runtime.universe._
import scala.reflect.runtime.universe._

scala> def tree = reify{ final class C { def x = 2 } }.tree
tree: reflect.runtime.universe.Tree

scala> show(tree)
res0: String =
{
  final class C extends AnyRef {
    def <init>() = {
      super.<init>();
      ()
    };
    def x = 2
  };
  ()
}

The method showRaw displays internal structure of a given reflection object as a Scala abstract syntax tree (AST), the representation that the Scala typechecker operates on.

Note, that while this representation appears to generate correct trees that one might think would be possible to use in a macro implementation, this is not usually the case. Symbols aren't fully represented (only their names are). Thus, this method is best-suited for use simply inspecting ASTs given some valid Scala code.

scala> showRaw(tree)
res1: String = Block(List(
  ClassDef(Modifiers(FINAL), newTypeName("C"), List(), Template(
    List(Ident(newTypeName("AnyRef"))),
    emptyValDef,
    List(
      DefDef(Modifiers(), nme.CONSTRUCTOR, List(), List(List()), TypeTree(),
        Block(List(
          Apply(Select(Super(This(tpnme.EMPTY), tpnme.EMPTY), nme.CONSTRUCTOR), List())),
          Literal(Constant(())))),
      DefDef(Modifiers(), newTermName("x"), List(), List(), TypeTree(),
        Literal(Constant(2))))))),
  Literal(Constant(())))

The method showRaw can also print scala.reflect.api.Types next to the artifacts being inspected

scala> import scala.tools.reflect.ToolBox // requires scala-compiler.jar
import scala.tools.reflect.ToolBox

scala> import scala.reflect.runtime.{currentMirror => cm}
import scala.reflect.runtime.{currentMirror=>cm}

scala> showRaw(cm.mkToolBox().typeCheck(tree), printTypes = true)
res2: String = Block[1](List(
  ClassDef[2](Modifiers(FINAL), newTypeName("C"), List(), Template[3](
    List(Ident[4](newTypeName("AnyRef"))),
    emptyValDef,
    List(
      DefDef[2](Modifiers(), nme.CONSTRUCTOR, List(), List(List()), TypeTree[3](),
        Block[1](List(
          Apply[4](Select[5](Super[6](This[3](newTypeName("C")), tpnme.EMPTY), ...))),
          Literal[1](Constant(())))),
      DefDef[2](Modifiers(), newTermName("x"), List(), List(), TypeTree[7](),
        Literal[8](Constant(2))))))),
  Literal[1](Constant(())))
[1] TypeRef(ThisType(scala), scala.Unit, List())
[2] NoType
[3] TypeRef(NoPrefix, newTypeName("C"), List())
[4] TypeRef(ThisType(java.lang), java.lang.Object, List())
[5] MethodType(List(), TypeRef(ThisType(java.lang), java.lang.Object, List()))
[6] SuperType(ThisType(newTypeName("C")), TypeRef(... java.lang.Object ...))
[7] TypeRef(ThisType(scala), scala.Int, List())
[8] ConstantType(Constant(2))
Printing Types

The method show

scala> import scala.reflect.runtime.universe._
import scala.reflect.runtime.universe._

scala> def tpe = typeOf[{ def x: Int; val y: List[Int] }]
tpe: reflect.runtime.universe.Type

scala> show(tpe)
res0: String = scala.AnyRef{def x: Int; val y: scala.List[Int]}

Like the method showRaw for scala.reflect.api.Trees, showRaw for scala.reflect.api.Types provides a visualization of the Scala AST operated on by the Scala typechecker.

// showRaw has already been discussed above
scala> showRaw(tpe)
res1: String = RefinedType(
  List(TypeRef(ThisType(scala), newTypeName("AnyRef"), List())),
  Scope(
    newTermName("x"),
    newTermName("y")))

printIds and/or printKinds can additionally be supplied as arguments in a call to showRaw which additionally shows the unique identifiers of symbols.

scala> showRaw(tpe, printIds = true, printKinds = true)
res2: String = RefinedType(
  List(TypeRef(ThisType(scala#2043#PK), newTypeName("AnyRef")#691#TPE, List())),
  Scope(
    newTermName("x")#2540#METH,
    newTermName("y")#2541#GET))

For more details about Printers and other aspects of Scala reflection, see the Reflection Guide

Self Type
Universe
Source
Printers.scala
Linear Supertypes
AnyRef, Any
Known Subclasses
Type Hierarchy Learn more about scaladoc diagrams
Ordering
  1. Grouped
  2. Alphabetic
  3. By inheritance
Inherited
  1. Printers
  2. AnyRef
  3. Any
Implicitly
  1. by StringAdd
  2. by StringFormat
  3. by Ensuring
  4. by ArrowAssoc
  1. Hide All
  2. Show all
Learn more about member selection
Visibility
  1. Public
  2. All

Type Members

  1. case class BooleanFlag(value: Option[Boolean]) extends Product with Serializable

  2. trait TreePrinter extends AnyRef

Abstract Value Members

  1. abstract def newRawTreePrinter(out: PrintWriter): Universe.TreePrinter

    Hook to define what showRaw(...) means.

    Hook to define what showRaw(...) means.

    Attributes
    protected
  2. abstract def newTreePrinter(out: PrintWriter): Universe.TreePrinter

    Hook to define what show(...) means.

    Hook to define what show(...) means.

    Attributes
    protected
  3. abstract def show(flags: Universe.FlagSet): String

    Renders a prettified representation of a flag set.

  4. abstract def show(name: Universe.Name): String

    Renders a prettified representation of a name.

Concrete Value Members

  1. final def !=(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  2. final def !=(arg0: Any): Boolean

    Definition Classes
    Any
  3. final def ##(): Int

    Definition Classes
    AnyRef → Any
  4. def +(other: String): String

    Implicit information
    This member is added by an implicit conversion from Printers to StringAdd[Printers] performed by method StringAdd in scala.Predef.
    Definition Classes
    StringAdd
  5. def ->[B](y: B): (Printers, B)

    Implicit information
    This member is added by an implicit conversion from Printers to ArrowAssoc[Printers] performed by method ArrowAssoc in scala.Predef.
    Definition Classes
    ArrowAssoc
    Annotations
    @inline()
  6. final def ==(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  7. final def ==(arg0: Any): Boolean

    Definition Classes
    Any
  8. object BooleanFlag extends Serializable

  9. final def asInstanceOf[T0]: T0

    Definition Classes
    Any
  10. def clone(): AnyRef

    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws()
  11. def ensuring(cond: (Printers) ⇒ Boolean, msg: ⇒ Any): Printers

    Implicit information
    This member is added by an implicit conversion from Printers to Ensuring[Printers] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  12. def ensuring(cond: (Printers) ⇒ Boolean): Printers

    Implicit information
    This member is added by an implicit conversion from Printers to Ensuring[Printers] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  13. def ensuring(cond: Boolean, msg: ⇒ Any): Printers

    Implicit information
    This member is added by an implicit conversion from Printers to Ensuring[Printers] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  14. def ensuring(cond: Boolean): Printers

    Implicit information
    This member is added by an implicit conversion from Printers to Ensuring[Printers] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  15. final def eq(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  16. def equals(arg0: Any): Boolean

    Definition Classes
    AnyRef → Any
  17. def finalize(): Unit

    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws()
  18. def formatted(fmtstr: String): String

    Returns string formatted according to given format string.

    Returns string formatted according to given format string. Format strings are as for String.format (@see java.lang.String.format).

    Implicit information
    This member is added by an implicit conversion from Printers to StringFormat[Printers] performed by method StringFormat in scala.Predef.
    Definition Classes
    StringFormat
    Annotations
    @inline()
  19. final def getClass(): Class[_]

    Definition Classes
    AnyRef → Any
  20. def hashCode(): Int

    Definition Classes
    AnyRef → Any
  21. final def isInstanceOf[T0]: Boolean

    Definition Classes
    Any
  22. final def ne(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  23. final def notify(): Unit

    Definition Classes
    AnyRef
  24. final def notifyAll(): Unit

    Definition Classes
    AnyRef
  25. def render(what: Any, mkPrinter: (PrintWriter) ⇒ Universe.TreePrinter, printTypes: Universe.BooleanFlag = None, printIds: Universe.BooleanFlag = None, printKinds: Universe.BooleanFlag = None, printMirrors: Universe.BooleanFlag = None, printPositions: Universe.BooleanFlag = None): String

    Attributes
    protected
  26. def show(any: Any, printTypes: Universe.BooleanFlag = None, printIds: Universe.BooleanFlag = None, printKinds: Universe.BooleanFlag = None, printMirrors: Universe.BooleanFlag = None, printPositions: Universe.BooleanFlag = None): String

    Renders a representation of a reflection artifact as desugared Scala code.

  27. def showRaw(flags: Universe.FlagSet): String

    Renders internal structure of a flag set.

  28. def showRaw(name: Universe.Name): String

    Renders internal structure of a name.

  29. def showRaw(any: Any, printTypes: Universe.BooleanFlag = None, printIds: Universe.BooleanFlag = None, printKinds: Universe.BooleanFlag = None, printMirrors: Universe.BooleanFlag = None, printPositions: Universe.BooleanFlag = None): String

    Renders internal structure of a reflection artifact as the visualization of a Scala syntax tree.

  30. final def synchronized[T0](arg0: ⇒ T0): T0

    Definition Classes
    AnyRef
  31. def toString(): String

    Definition Classes
    AnyRef → Any
  32. def treeToString(tree: Universe.Tree): String

    By default trees are printed with show

    By default trees are printed with show

    Attributes
    protected
  33. final def wait(): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws()
  34. final def wait(arg0: Long, arg1: Int): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws()
  35. final def wait(arg0: Long): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws()
  36. def [B](y: B): (Printers, B)

    Implicit information
    This member is added by an implicit conversion from Printers to ArrowAssoc[Printers] performed by method ArrowAssoc in scala.Predef.
    Definition Classes
    ArrowAssoc

Inherited from AnyRef

Inherited from Any

Inherited by implicit conversion StringAdd from Printers to StringAdd[Printers]

Inherited by implicit conversion StringFormat from Printers to StringFormat[Printers]

Inherited by implicit conversion Ensuring from Printers to Ensuring[Printers]

Inherited by implicit conversion ArrowAssoc from Printers to ArrowAssoc[Printers]

Printers

Ungrouped