Dotty Documentation


object Formatting

[-] Constructors

[-] Members

The em string interpolator works like the i string interpolator, but marks nonsensical errors using <nonsensical>...</nonsensical> tags. Note: Instead of these tags, it would be nicer to return a data structure containing the message string and a boolean indicating whether the message is sensical, but then we cannot use string operations like concatenation, stripMargin etc on the values returned by em"...", and in the current error message composition methods, this is crucial.

[+] private class ExplainingPrinter
[+] private class Seen
[+] class StringFormatter

General purpose string formatter, with the following features:

1) On all Showables, show is called instead of toString 2) Exceptions raised by a show are handled by falling back to toString. 3) Sequences can be formatted using the desired separator between two % signs, eg i"myList = (${myList}%, %)" 4) Safe handling of multi-line margins. Left margins are skipped om the parts of the string context before inserting the arguments. That way, we guard against accidentally treating an interpolated value as a margin.

[+] class SyntaxFormatter
[+] private type Recorded = AnyRef
[+] def disambiguateTypes ( args: [ Type ] ) ( implicit ctx: Context ) : ( String, Context )

When getting a type mismatch it is useful to disambiguate placeholders like:

found:    List[Int]
required: List[T]
where:    T is a type in the initalizer of value s which is an alias of
[+] private def explainCtx ( seen: Seen ) ( implicit ctx: Context ) : Context

Context with correct printer set for explanations

[+] def explained ( op: Context => String ) ( implicit ctx: Context ) : String

Entrypoint for explanation string interpolator:

ex"disambiguate $tpe1 and $tpe2"
[+] def explanation ( entry: AnyRef ) ( implicit ctx: Context ) : String

Create explanation for single Recorded type or symbol

[+] private def explanations ( seen: Seen ) ( implicit ctx: Context ) : String

Turns a Seen into a String to produce an explanation for types on the form where: T is...

[+] def typeDiff ( found: Type , expected: Type ) ( implicit ctx: Context ) : ( String, String )

This method will produce a colored type diff from the given arguments. The idea is to do this for known cases that are useful and then fall back on regular syntax highlighting for the cases which are unhandled.

Please not that if used in combination with disambiguateTypes the correct Context for printing should also be passed when calling the method.

[+] private def wrapNonSensical ( arg: Any , str: String ) ( implicit ctx: Context ) : String