aboutsummaryrefslogtreecommitdiff
path: root/compiler/src/dotty/tools/dotc/printing/Printer.scala
diff options
context:
space:
mode:
authorFelix Mulder <felix.mulder@gmail.com>2016-11-02 11:08:28 +0100
committerGuillaume Martres <smarter@ubuntu.com>2016-11-22 01:35:07 +0100
commit8a61ff432543a29234193cd1f7c14abd3f3d31a0 (patch)
treea8147561d307af862c295cfc8100d271063bb0dd /compiler/src/dotty/tools/dotc/printing/Printer.scala
parent6a455fe6da5ff9c741d91279a2dc6fe2fb1b472f (diff)
downloaddotty-8a61ff432543a29234193cd1f7c14abd3f3d31a0.tar.gz
dotty-8a61ff432543a29234193cd1f7c14abd3f3d31a0.tar.bz2
dotty-8a61ff432543a29234193cd1f7c14abd3f3d31a0.zip
Move compiler and compiler tests to compiler dir
Diffstat (limited to 'compiler/src/dotty/tools/dotc/printing/Printer.scala')
-rw-r--r--compiler/src/dotty/tools/dotc/printing/Printer.scala105
1 files changed, 105 insertions, 0 deletions
diff --git a/compiler/src/dotty/tools/dotc/printing/Printer.scala b/compiler/src/dotty/tools/dotc/printing/Printer.scala
new file mode 100644
index 000000000..14b63012e
--- /dev/null
+++ b/compiler/src/dotty/tools/dotc/printing/Printer.scala
@@ -0,0 +1,105 @@
+package dotty.tools.dotc
+package printing
+
+import core._
+import Texts._, ast.Trees._
+import Types.Type, Symbols.Symbol, Contexts.Context, Scopes.Scope, Constants.Constant,
+ Names.Name, Denotations._, Annotations.Annotation
+
+/** The base class of all printers
+ */
+abstract class Printer {
+
+ private[this] var prec: Precedence = GlobalPrec
+
+ /** The current precedence level */
+ def currentPrecedence = prec
+
+ /** Generate text using `op`, assuming a given precedence level `prec`. */
+ def atPrec(prec: Precedence)(op: => Text): Text = {
+ val outerPrec = this.prec
+ this.prec = prec
+ try op
+ finally this.prec = outerPrec
+ }
+
+ /** Generate text using `op`, assuming a given precedence level `prec`.
+ * If new level `prec` is lower than previous level, put text in parentheses.
+ */
+ def changePrec(prec: Precedence)(op: => Text): Text =
+ if (prec < this.prec) atPrec(prec) ("(" ~ op ~ ")") else atPrec(prec)(op)
+
+ /** The name, possibley with with namespace suffix if debugNames is set:
+ * /L for local names, /V for other term names, /T for type names
+ */
+ def nameString(name: Name): String
+
+ /** The name of the given symbol.
+ * If !settings.debug, the original name where
+ * expansions of operators are translated back to operator symbol.
+ * E.g. $eq => =.
+ * If settings.uniqid, adds id.
+ */
+ def nameString(sym: Symbol): String
+
+ /** The fully qualified name of the symbol */
+ def fullNameString(sym: Symbol): String
+
+ /** The kind of the symbol */
+ def kindString(sym: Symbol): String
+
+ /** The name as a text */
+ def toText(name: Name): Text
+
+ /** Textual representation, including symbol's kind e.g., "class Foo", "method Bar".
+ * If hasMeaninglessName is true, uses the owner's name to disambiguate identity.
+ */
+ def toText(sym: Symbol): Text
+
+ /** Textual representation of symbol's declaration */
+ def dclText(sym: Symbol): Text
+
+ /** Textual representation of single denotation's declaration */
+ def dclText(sd: SingleDenotation): Text
+
+ /** If symbol's owner is a printable class C, the text "in C", otherwise "" */
+ def locationText(sym: Symbol): Text
+
+ /** Textual representation of symbol and its location */
+ def locatedText(sym: Symbol): Text
+
+ /** A description of sym's location */
+ def extendedLocationText(sym: Symbol): Text
+
+ /** Textual representation of denotation */
+ def toText(denot: Denotation): Text
+
+ /** Textual representation of constant */
+ def toText(const: Constant): Text
+
+ /** Textual representation of annotation */
+ def toText(annot: Annotation): Text
+
+ /** Textual representation of type */
+ def toText(tp: Type): Text
+
+ /** Textual representation of all symbols in given list,
+ * using `dclText` for displaying each.
+ */
+ def dclsText(syms: List[Symbol], sep: String = "\n"): Text
+
+ /** Textual representation of all definitions in a scope using `dclText` for each */
+ def toText(sc: Scope): Text
+
+ /** Textual representation of tree */
+ def toText[T >: Untyped](tree: Tree[T]): Text
+
+ /** Perform string or text-producing operation `op` so that only a
+ * summarized text with given recursion depth is shown
+ */
+ def summarized[T](depth: Int)(op: => T): T
+
+ /** A plain printer without any embellishments */
+ def plain: Printer
+}
+