Formatting

object Formatting
class Object
trait Matchable
class Any

Type members

Classlikes

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.

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.

General purpose string formatter, with the following features:

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.

Value members

Concrete methods

def disambiguateTypes(args: Type*)(using Context): (String, Context)

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

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 initializer of value s which is an alias of
         String
Returns

the where section as well as the printing context for the placeholders - ("T is a...", printCtx)

def explained(op: Context => String)(using Context): String

Entrypoint for explanation string interpolator:

Entrypoint for explanation string interpolator:

ex"disambiguate $tpe1 and $tpe2"
def explanation(entry: AnyRef)(using Context): String

Create explanation for single Recorded type or symbol

Create explanation for single Recorded type or symbol

def hl(s: String)(using Context): String

Explicit syntax highlighting

Explicit syntax highlighting

def typeDiff(found: Type, expected: Type)(using 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.

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.

Returns

the (found, expected, changePercentage) with coloring to highlight the difference