ReplPrinter
Value members
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
String representation of symbol's kind.
String representation of symbol's kind.
- Definition Classes
- Inherited from:
- RefinedPrinter
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
Concrete fields
Givens
Inherited givens
Extensions
Inherited extensions
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