SelfTypePrinter

class SelfTypePrinter(using _ctx: Context) extends RefinedPrinter
class RefinedPrinter
class PlainPrinter
class Printer
class Object
trait Matchable
class Any

Value members

Concrete methods

override def toText(tp: Type): Text
Definition Classes
RefinedPrinter -> PlainPrinter -> Printer
override def toTextSingleton(tp: SingletonType): Text
Definition Classes
PlainPrinter

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 annotText(annot: Annotation): Text
Definition Classes
RefinedPrinter -> PlainPrinter -> Printer
Inherited from:
RefinedPrinter
def annotsText(sym: Symbol): Text
Inherited from:
PlainPrinter
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
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
def currentPrecedence: Precedence

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
def dclText(d: SingleDenotation): Text
Inherited from:
PlainPrinter
def dclText(sym: Symbol): Text
Inherited from:
PlainPrinter
def dclsText(syms: List[Symbol], sep: String): Text
Inherited from:
PlainPrinter
def extendedLocationText(sym: Symbol): Text
Inherited from:
PlainPrinter
override def fullNameString(sym: Symbol): String
Definition Classes
RefinedPrinter -> PlainPrinter -> Printer
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
RefinedPrinter -> PlainPrinter -> Printer
Inherited from:
RefinedPrinter
def locatedText(sym: Symbol): Text
Inherited from:
PlainPrinter
def locationText(sym: Symbol): Text
Inherited from:
PlainPrinter
override def nameString(name: Name): String
Definition Classes
RefinedPrinter -> PlainPrinter -> Printer
Inherited from:
RefinedPrinter
def nameString(sym: Symbol): String
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
def paramsText[T >: Untyped](params: ParamClause[T]): Text
Inherited from:
RefinedPrinter
override def plain: PlainPrinter
Definition Classes
RefinedPrinter -> PlainPrinter -> Printer
Inherited from:
RefinedPrinter
override def toText(denot: Denotation): Text
Definition Classes
RefinedPrinter -> PlainPrinter -> Printer
Inherited from:
RefinedPrinter
override def toText(sym: Symbol): Text
Definition Classes
RefinedPrinter -> PlainPrinter -> Printer
Inherited from:
RefinedPrinter
override def toText[T >: Untyped](tree: Tree[T]): Text
Definition Classes
RefinedPrinter -> PlainPrinter -> Printer
Inherited from:
RefinedPrinter
def toText(c: OrderingConstraint): Text
Inherited from:
PlainPrinter
def toText(importInfo: ImportInfo): Text
Inherited from:
PlainPrinter
def toText(result: SearchResult): Text
Inherited from:
PlainPrinter
def toText(pos: SourcePosition): Text
Inherited from:
PlainPrinter
def toText(sc: Scope): Text
Inherited from:
PlainPrinter
def toText(param: LambdaParam): Text
Inherited from:
PlainPrinter
def toText(annot: Annotation): Text
Inherited from:
PlainPrinter
def toText(const: Constant): 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
RefinedPrinter -> PlainPrinter
Inherited from:
RefinedPrinter
def toTextGlobal(elems: Iterable[Showable], sep: String): Text

Render elements within lowest precedence

Render elements within lowest precedence

Inherited from:
Printer
def toTextGlobal(elem: Showable): Text

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
def toTextLocal(elem: Showable): Text

Render element within highest precedence

Render element within highest precedence

Inherited from:
Printer
override def toTextPrefix(tp: Type): Text
Definition Classes
RefinedPrinter -> PlainPrinter -> Printer
Inherited from:
RefinedPrinter
override def toTextRef(tp: SingletonType): Text
Definition Classes
RefinedPrinter -> PlainPrinter -> Printer
Inherited from:
RefinedPrinter
def withEnclosingDef(enclDef: Tree[_ >: Untyped])(op: => Text): Text
Inherited from:
RefinedPrinter
def withoutPos(op: => Text): Text
Inherited from:
RefinedPrinter

Givens

Inherited givens

Inherited from:
PlainPrinter

Extensions

Inherited extensions

extension (mdef: DefTree)
def mods: Modifiers

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