ReplPrinter

class ReplPrinter(_ctx: Context) extends DecompilerPrinter
class Printer
class Object
trait Matchable
class Any

Value members

Concrete methods

override def coloredStr(text: String, color: String): String
Definition Classes
override def coloredText(text: Text, color: String): Text
Definition Classes
override def dclText(sym: Symbol): Text
Definition Classes
override def nameString(name: Name): String
Definition Classes
override def toText(sym: Symbol): Text
Definition Classes
override def toText(const: Constant): Text
Definition Classes
Definition Classes

Inherited methods

def Str(str: String, lineRange: LineRange): Str
Inherited from
PlainPrinter
def addParamssText[T >: Untyped](leading: Text, paramss: List[ParamClause[T]]): Text
Inherited from
RefinedPrinter
override def annotsText(sym: Symbol): Text
Definition Classes
Inherited from
RefinedPrinter
def atPrec(prec: Precedence)(op: => Text): Text

Generate text using op, assuming a given precedence level prec.

Generate text using op, assuming a given precedence level prec.

atPrec vs changePrec

This is to be used when changing precedence inside some sort of parentheses: for instance, to print T[A]usetoText(T) ~ '[' ~ atPrec(GlobalPrec) { toText(A) } ~ ']'`.

If the presence of the parentheses depends on precedence, inserting them manually is most certainly a bug. Use changePrec instead to generate them exactly when needed.

Inherited from
Printer
override protected def blockToText[T >: Untyped](block: Block[T]): Text
Definition Classes
Inherited from
DecompilerPrinter
def changePrec(prec: Precedence)(op: => Text): Text

Generate text using op, assuming a given precedence level prec. If new level prec is lower than previous level, put text in parentheses.

Generate text using op, assuming a given precedence level prec. If new level prec is lower than previous level, put text in parentheses.

atPrec vs changePrec

To pretty-print A op B, you need something like changePrec(parsing.precedence(op, isType)) { toText(a) ~ op ~ toText(b) } // BUGGY that will insert parentheses around A op B if, for instance, the preceding operator has higher precedence.

But that does not handle infix operators with left- or right- associativity.

If op and op' have the same precedence and associativity, A op B op' C parses as (A op B) op' C if op and op' are left-associative, and as A op (B op' C) if they're right-associative, so we need respectively

val isType = ??? // is this a term or type operator?
val prec = parsing.precedence(op, isType)
// either:
changePrec(prec) { toText(a) ~ op ~ atPrec(prec + 1) { toText(b) } } // for left-associative op and op'
// or:
changePrec(prec) { atPrec(prec + 1) { toText(a) } ~ op ~ toText(b) } // for right-associative op and op'
Inherited from
Printer

The current precedence level. When pretty-printing arguments of operator op, currentPrecedence must equal op's precedence level, so that pretty-printing expressions using lower-precedence operators can insert parentheses automatically by calling changePrec.

The current precedence level. When pretty-printing arguments of operator op, currentPrecedence must equal op's precedence level, so that pretty-printing expressions using lower-precedence operators can insert parentheses automatically by calling changePrec.

Inherited from
Printer
Inherited from
PlainPrinter
def dclsText(syms: List[Symbol], sep: String): Text
Inherited from
PlainPrinter
override protected def dropAnnotForModText(sym: Symbol): Boolean
Definition Classes
Inherited from
DecompilerPrinter
Inherited from
PlainPrinter
override def fullNameString(sym: Symbol): String
Definition Classes
Inherited from
RefinedPrinter
def homogenize(tp: Type): Type
Inherited from
PlainPrinter
def inPattern(op: => Text): Text
Inherited from
RefinedPrinter
override def kindString(sym: Symbol): String

String representation of symbol's kind.

String representation of symbol's kind.

Definition Classes
Inherited from
RefinedPrinter
def locatedText(sym: Symbol): Text
Inherited from
PlainPrinter
Inherited from
PlainPrinter
Inherited from
PlainPrinter
def optText[T >: Untyped](tree: List[Tree[T]])(encl: Text => Text): Text
Inherited from
RefinedPrinter
def optText[T >: Untyped](tree: Tree[T])(encl: Text => Text): Text
Inherited from
RefinedPrinter
def optText(name: Name)(encl: Text => Text): Text
Inherited from
RefinedPrinter
override protected def packageDefText(tree: PackageDef): Text
Definition Classes
Inherited from
DecompilerPrinter
def paramsText[T >: Untyped](params: ParamClause[T]): Text
Inherited from
RefinedPrinter
override def plain: PlainPrinter
Definition Classes
Inherited from
RefinedPrinter
override protected def templateText(tree: TypeDef, impl: Template): Text
Definition Classes
Inherited from
DecompilerPrinter
override def toText(denot: Denotation): Text
Definition Classes
Inherited from
RefinedPrinter
override def toText[T >: Untyped](tree: Tree[T]): Text
Definition Classes
Inherited from
RefinedPrinter
override def toText(tp: Type): Text
Definition Classes
Inherited from
RefinedPrinter
def toText(importInfo: ImportInfo): Text
Inherited from
PlainPrinter
def toText(result: SearchResult): Text
Inherited from
PlainPrinter
Inherited from
PlainPrinter
def toText(sc: Scope): Text
Inherited from
PlainPrinter
def toText(annot: Annotation): Text
Inherited from
PlainPrinter
def toText(name: Name): Text
Inherited from
PlainPrinter
def toText(elems: Iterable[Showable], sep: String): Text

Render elements alternating with sep string

Render elements alternating with sep string

Inherited from
Printer
override def toTextFlags(sym: Symbol): Text
Definition Classes
Inherited from
RefinedPrinter

Render elements within lowest precedence

Render elements within lowest precedence

Inherited from
Printer

Render element within lowest precedence

Render element within lowest precedence

Inherited from
Printer
def toTextLocal(elems: Iterable[Showable], sep: String): Text

Render elements within highest precedence

Render elements within highest precedence

Inherited from
Printer

Render element within highest precedence

Render element within highest precedence

Inherited from
Printer
override def toTextPrefix(tp: Type): Text
Definition Classes
Inherited from
RefinedPrinter
override def toTextRef(tp: SingletonType): Text
Definition Classes
Inherited from
RefinedPrinter
override protected def toTextTemplate(impl: Template, ofNew: Boolean): Text
Definition Classes
Inherited from
DecompilerPrinter
override protected def typeApplyText[T >: Untyped](tree: TypeApply[T]): Text
Definition Classes
Inherited from
DecompilerPrinter
def withEnclosingDef(enclDef: Tree[_ >: Untyped])(op: => Text): Text
Inherited from
RefinedPrinter
def withoutPos(op: => Text): Text
Inherited from
RefinedPrinter

Concrete fields

Inherited fields

Inherited from
PlainPrinter

Extensions

Inherited extensions

extension (mdef: DefTree)

Print modifiers from symbols if tree has type, overriding the behavior in Trees.

Print modifiers from symbols if tree has type, overriding the behavior in Trees.

Inherited from
RefinedPrinter