Scala Reflection Library 2.13.16 - scala.reflect.macros.Typers
Keywords: Scala Reflection Library 2.13.16 scala.reflect.macros.Typers

Scala Reflection Library2.13.16 < Back


# Packages

-  package root
  Definition Classes
    root
-  package scala
  Definition Classes
    root
-  package reflect
  Definition Classes
    scala
-  package macros

  EXPERIMENTAL

  EXPERIMENTAL

  The base package for Scala macros.

  Macros are functions that are called by the compiler during compilation. Within these functions the programmer has access to compiler APIs. For example, it is possible to generate, analyze and typecheck code.

  See the Macros Guide on how to get started with Scala macros.

  Definition Classes
    reflect
-  package blackbox
  Definition Classes
    macros
-  package whitebox
  Definition Classes
    macros
- Aliases
- Attachments
- Enclosures
- Evals
- ExprUtils
- FrontEnds
- Infrastructure
- Internals
- Names
- ParseException
- Parsers
- ReificationException
- Reifiers
- TypecheckException
- Typers
- UnexpectedReificationException
- Universe

t

scala.reflect.macros

# Typers

###

#### trait Typers extends AnyRef

EXPERIMENTAL

A slice of the Scala macros context that partially exposes the type checker to macro writers.

Self Type
  blackbox.Context
Source
  Typers.scala

Linear Supertypes
AnyRef, Any
Known Subclasses
Context, Context
Type Hierarchy

Ordering

1. Alphabetic
2. By Inheritance

Inherited

1. Typers
2. AnyRef
3. Any

Implicitly

1. by any2stringadd
2. by StringFormat
3. by Ensuring
4. by ArrowAssoc

1. Hide All
2. Show All

Visibility

1. Public
2. Protected

### Type Members

1.  type TypecheckException = macros.TypecheckException

   See also

     `scala.reflect.macros.TypecheckException`

2.  abstract type TypecheckMode

   Represents mode of operations of the typechecker underlying `c.typecheck` calls.

   Represents mode of operations of the typechecker underlying `c.typecheck` calls. Is necessary since the shape of the typechecked tree alone is not enough to guess how it should be typechecked. Can be TERMmode (typecheck as a term), TYPEmode (typecheck as a type) or PATTERNmode (typecheck as a pattern).

### Abstract Value Members

1.  abstract val PATTERNmode: blackbox.Context.TypecheckMode

   Indicates that an argument to `c.typecheck` should be typechecked as a pattern.

2.  abstract val TERMmode: blackbox.Context.TypecheckMode

   Indicates that an argument to `c.typecheck` should be typechecked as a term.

   Indicates that an argument to `c.typecheck` should be typechecked as a term. This is the default typechecking mode in Scala 2.11 and the only one supported in Scala 2.10.

3.  abstract val TYPEmode: blackbox.Context.TypecheckMode

   Indicates that an argument to `c.typecheck` should be typechecked as a type.

4.  abstract def inferImplicitValue(pt: blackbox.Context.Type, silent: Boolean = true, withMacrosDisabled: Boolean = false, pos: blackbox.Context.Position = enclosingPosition): blackbox.Context.Tree

   Infers an implicit value of the expected type `pt` in the macro callsite context.

   Infers an implicit value of the expected type `pt` in the macro callsite context. Optional `pos` parameter provides a position that will be associated with the implicit search.

   If `silent` is false, `TypecheckException` will be thrown in case of an inference error. If `silent` is true, the typecheck is silent and will return `EmptyTree` if an error occurs. Such errors don't vanish and can be inspected by turning on -Vimplicits. Unlike in `typecheck`, `silent` is true by default.

   Exceptions thrown
5.  abstract def inferImplicitView(tree: blackbox.Context.Tree, from: blackbox.Context.Type, to: blackbox.Context.Type, silent: Boolean = true, withMacrosDisabled: Boolean = false, pos: blackbox.Context.Position = enclosingPosition): blackbox.Context.Tree

   Infers an implicit view from the provided tree `tree` of the type `from` to the type `to` in the macro callsite context.

   Infers an implicit view from the provided tree `tree` of the type `from` to the type `to` in the macro callsite context. Optional `pos` parameter provides a position that will be associated with the implicit search.

   If `silent` is false, `TypecheckException` will be thrown in case of an inference error. If `silent` is true, the typecheck is silent and will return `EmptyTree` if an error occurs. Such errors don't vanish and can be inspected by turning on -Vimplicits. Unlike in `typecheck`, `silent` is true by default.

   Exceptions thrown
6.  abstract def openMacros: List[blackbox.Context]

   Contexts that represent macros in-flight, including the current one.

   Contexts that represent macros in-flight, including the current one. Very much like a stack trace, but for macros only. Can be useful for interoperating with other macros and for imposing compiler-friendly limits on macro expansion.

   Is also priceless for emitting sane error messages for macros that are called by other macros on synthetic (i.e. position-less) trees. In that dire case navigate the `openMacros` stack, and it will most likely contain at least one macro with a position-ful macro application. See `enclosingPosition` for a default implementation of this logic.

   Unlike `enclosingMacros`, this is a def, which means that it gets recalculated on every invocation, so it might change depending on what is going on during macro expansion.

7.  abstract def typecheck(tree: blackbox.Context.Tree, mode: blackbox.Context.TypecheckMode = TERMmode, pt: blackbox.Context.Type = universe.WildcardType, silent: Boolean = false, withImplicitViewsDisabled: Boolean = false, withMacrosDisabled: Boolean = false): blackbox.Context.Tree

   Typechecks the provided tree against the expected type `pt` in the macro callsite context under typechecking mode specified in `mode` with TERMmode being default.

   Typechecks the provided tree against the expected type `pt` in the macro callsite context under typechecking mode specified in `mode` with TERMmode being default. This populates symbols and types of the tree and possibly transforms it to reflect certain desugarings.

   If `silent` is false, `TypecheckException` will be thrown in case of a typecheck error. If `silent` is true, the typecheck is silent and will return `EmptyTree` if an error occurs. Such errors don't vanish and can be inspected by turning on -Ymacro-debug-verbose. Unlike in `inferImplicitValue` and `inferImplicitView`, `silent` is false by default.

   Typechecking can be steered with the following optional parameters: `withImplicitViewsDisabled` recursively prohibits implicit views (though, implicit vals will still be looked up and filled in), default value is false `withMacrosDisabled` recursively prohibits macro expansions and macro-based implicits, default value is false

   Exceptions thrown
8.  abstract def untypecheck(tree: blackbox.Context.Tree): blackbox.Context.Tree

   In the current implementation of Scala's reflection API, untyped trees (also known as parser trees or unattributed trees) are observationally different from typed trees (also known as typer trees, typechecked trees or attributed trees),

   In the current implementation of Scala's reflection API, untyped trees (also known as parser trees or unattributed trees) are observationally different from typed trees (also known as typer trees, typechecked trees or attributed trees),

   Usually, if some compiler API takes a tree, then both untyped and typed trees will do. However in some cases, only untyped or only typed trees are appropriate. For example, Evals.eval only accepts untyped trees and one can only splice typed trees inside typed trees. Therefore in the current reflection API, there is a need in functions that go back and forth between untyped and typed trees. For this we have typecheck and `untypecheck`.

   Note that `untypecheck` is currently afflicted by https://github.com/scala/bug/issues/5464, which makes it sometimes corrupt trees so that they don't make sense anymore. Unfortunately, there's no workaround for that. We plan to fix this issue soon, but for now please keep it in mind.

   See also

     https://stackoverflow.com/questions/20936509/scala-macros-what-is-the-difference-between-typed-aka-typechecked-an-untyped

9.  abstract def resetLocalAttrs(tree: blackbox.Context.Tree): blackbox.Context.Tree

   Recursively resets locally defined symbols and types in a given tree.

   Recursively resets locally defined symbols and types in a given tree. WARNING: Don't use this API, go for untypecheck instead.

   Annotations
     @deprecated
   Deprecated

     (Since version 2.11.0) use `c.untypecheck` instead

### Concrete Value Members

1.  final def !=(arg0: Any): Boolean
   Definition Classes
     AnyRef → Any
2.  final def ##: Int
   Definition Classes
     AnyRef → Any
3.  def +(other: String): String
   Implicit
     This member is added by an implicit conversion from Typers toany2stringadd[Typers] performed by method any2stringadd in scala.Predef.
   Definition Classes
     any2stringadd
4.  def ->[B](y: B): (Typers, B)
   Implicit
     This member is added by an implicit conversion from Typers toArrowAssoc[Typers] performed by method ArrowAssoc in scala.Predef.
   Definition Classes
     ArrowAssoc
   Annotations
     @inline()
5.  final def ==(arg0: Any): Boolean
   Definition Classes
     AnyRef → Any
6.  val TypecheckException: macros.TypecheckException.type

   See also

     `scala.reflect.macros.TypecheckException`

7.  final def asInstanceOf[T0]: T0
   Definition Classes
     Any
8.  def clone(): AnyRef
   Attributes
     protected[lang]
   Definition Classes
     AnyRef
   Annotations
     @throws(classOf[java.lang.CloneNotSupportedException]) @native()
9.  def ensuring(cond: (Typers) => Boolean, msg: => Any): Typers
   Implicit
     This member is added by an implicit conversion from Typers toEnsuring[Typers] performed by method Ensuring in scala.Predef.
   Definition Classes
     Ensuring
10.  def ensuring(cond: (Typers) => Boolean): Typers
    Implicit
      This member is added by an implicit conversion from Typers toEnsuring[Typers] performed by method Ensuring in scala.Predef.
    Definition Classes
      Ensuring
11.  def ensuring(cond: Boolean, msg: => Any): Typers
    Implicit
      This member is added by an implicit conversion from Typers toEnsuring[Typers] performed by method Ensuring in scala.Predef.
    Definition Classes
      Ensuring
12.  def ensuring(cond: Boolean): Typers
    Implicit
      This member is added by an implicit conversion from Typers toEnsuring[Typers] performed by method Ensuring in scala.Predef.
    Definition Classes
      Ensuring
13.  final def eq(arg0: AnyRef): Boolean
    Definition Classes
      AnyRef
14.  def equals(arg0: AnyRef): Boolean
    Definition Classes
      AnyRef → Any
15.  def finalize(): Unit
    Attributes
      protected[lang]
    Definition Classes
      AnyRef
    Annotations
      @throws(classOf[java.lang.Throwable])
16.  final def getClass(): Class[_ <: AnyRef]
    Definition Classes
      AnyRef → Any
    Annotations
      @native()
17.  def hashCode(): Int
    Definition Classes
      AnyRef → Any
    Annotations
      @native()
18.  final def isInstanceOf[T0]: Boolean
    Definition Classes
      Any
19.  final def ne(arg0: AnyRef): Boolean
    Definition Classes
      AnyRef
20.  final def notify(): Unit
    Definition Classes
      AnyRef
    Annotations
      @native()
21.  final def notifyAll(): Unit
    Definition Classes
      AnyRef
    Annotations
      @native()
22.  final def synchronized[T0](arg0: => T0): T0
    Definition Classes
      AnyRef
23.  def toString(): String
    Definition Classes
      AnyRef → Any
24.  final def wait(): Unit
    Definition Classes
      AnyRef
    Annotations
      @throws(classOf[java.lang.InterruptedException])
25.  final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
      AnyRef
    Annotations
      @throws(classOf[java.lang.InterruptedException])
26.  final def wait(arg0: Long): Unit
    Definition Classes
      AnyRef
    Annotations
      @throws(classOf[java.lang.InterruptedException]) @native()

### Deprecated Value Members

1.  def formatted(fmtstr: String): String
   Implicit
     This member is added by an implicit conversion from Typers toStringFormat[Typers] performed by method StringFormat in scala.Predef.
   Definition Classes
     StringFormat
   Annotations
     @deprecated @inline()
   Deprecated

     (Since version 2.12.16) Use `formatString.format(value)` instead of `value.formatted(formatString)`, or use the `f""` string interpolator. In Java 15 and later, `formatted` resolves to the new method in String which has reversed parameters.

2.  def typeCheck(tree: blackbox.Context.Tree, pt: blackbox.Context.Type = universe.WildcardType, silent: Boolean = false, withImplicitViewsDisabled: Boolean = false, withMacrosDisabled: Boolean = false): blackbox.Context.Tree

   Annotations
     @deprecated
   Deprecated

     (Since version 2.11.0) use `c.typecheck` instead

   See also

     `Typers.typecheck`

3.  def →[B](y: B): (Typers, B)
   Implicit
     This member is added by an implicit conversion from Typers toArrowAssoc[Typers] performed by method ArrowAssoc in scala.Predef.
   Definition Classes
     ArrowAssoc
   Annotations
     @deprecated
   Deprecated

     (Since version 2.13.0) Use `->` instead. If you still wish to display it as one character, consider using a font with programming ligatures such as Fira Code.

### Inherited from AnyRef

### Inherited from Any

### Inherited by implicit conversion any2stringadd fromTypers to any2stringadd[Typers]

### Inherited by implicit conversion StringFormat fromTypers to StringFormat[Typers]

### Inherited by implicit conversion Ensuring fromTypers to Ensuring[Typers]

### Inherited by implicit conversion ArrowAssoc fromTypers to ArrowAssoc[Typers]

### Ungrouped