Check Getting Started for instructions on how to obtain the source code of dotty. This document details common workflow patterns when working with Dotty.

Compiling files with dotc

As we have seen you can compile a test file either from sbt:

$ sbt
> dotc <OPTIONS> <FILE>

or from terminal:

$ dotc <OPTIONS> <FILE>

Here are some useful debugging <OPTIONS>:

Inspecting Trees with Type Stealer

There is no power mode for the REPL yet, but you can inspect types with the type stealer:

$ sbt
> repl
scala> import; import; import Contexts._,Types._

Now, you can define types and access their representation. For example:

scala> val s = stealType("class O { type X }", "O#X")
scala> implicit val ctx: Context = s._1
scala> val t = s._2(0)
t: = TypeRef(TypeRef(ThisType(TypeRef(NoPrefix,<empty>)),O),X)
scala> val u = t.asInstanceOf[TypeRef].underlying
u: = TypeBounds(TypeRef(ThisType(TypeRef(NoPrefix,scala)),Nothing), TypeRef(ThisType(TypeRef(NoPrefix,scala)),Any))


Many objects in the dotc compiler implement a Showable trait (e.g. Tree, Symbol, Type). These objects may be prettyprinted using the .show method

SBT Commands Cheat Sheet

The basics of working with Dotty codebase are documented here and here. Below is a cheat sheet of some frequently used commands (to be used from SBT console – sbt).

dotc ../issues/Playground.scalaCompile the given file – path relative to the Dotty directory. Output the compiled class files to the Dotty directory itself.
dotr PlaygroundRun the compiled class Playground. Dotty directory is on classpath by default.
replStart REPL
testOnly -- *posRun test (method) pos from CompilationTests suite.
testCompilation sampleIn all test suites, run test files containing the word sample in their title.