PlainPrinter
Value members
Concrete methods
Usual target for Annotation#toText
, overridden in RefinedPrinter
Usual target for Annotation#toText
, overridden in RefinedPrinter
The string representation of this type used as a prefix, including separator
The string representation of this type used as a prefix, including separator
Inherited methods
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]use
toText(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
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
Render elements alternating with sep
string
Render elements alternating with sep
string
- Inherited from:
- Printer
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
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