aboutsummaryrefslogtreecommitdiff
path: root/docs/docs/contributing/workflow.md
diff options
context:
space:
mode:
authorFelix Mulder <felix.mulder@gmail.com>2016-10-07 14:35:35 +0200
committerFelix Mulder <felix.mulder@gmail.com>2016-10-07 14:35:35 +0200
commit2ffc7cfaf05217394708d2c00ab85ab07663d03c (patch)
tree3a239da59946fcb2d6c7b7becd499c7b61e12007 /docs/docs/contributing/workflow.md
parenta1d8e04af89d4b1ffc0f1c4efe587b8882461d6e (diff)
downloaddotty-2ffc7cfaf05217394708d2c00ab85ab07663d03c.tar.gz
dotty-2ffc7cfaf05217394708d2c00ab85ab07663d03c.tar.bz2
dotty-2ffc7cfaf05217394708d2c00ab85ab07663d03c.zip
Migrate dotty.epfl.ch to static site in repository
Diffstat (limited to 'docs/docs/contributing/workflow.md')
-rw-r--r--docs/docs/contributing/workflow.md81
1 files changed, 81 insertions, 0 deletions
diff --git a/docs/docs/contributing/workflow.md b/docs/docs/contributing/workflow.md
new file mode 100644
index 000000000..e160999d9
--- /dev/null
+++ b/docs/docs/contributing/workflow.md
@@ -0,0 +1,81 @@
+---
+layout: default
+title: "Workflow"
+---
+
+Workflow
+========
+This document details common workflow patterns when working with Dotty.
+
+## Compiling files with dotc ##
+
+From sbt:
+
+```bash
+> run <OPTIONS> <FILE>
+```
+
+From terminal:
+
+```bash
+$ ./bin/dotc <OPTIONS> <FILE>
+```
+
+Here are some useful debugging `<OPTIONS>`:
+
+* `-Xprint:PHASE1,PHASE2,...` or `-Xprint:all`: prints the `AST` after each
+ specified phase. Phase names can be found by searching
+ `src/dotty/tools/dotc/transform/` for `phaseName`.
+* `-Ylog:PHASE1,PHASE2,...` or `-Ylog:all`: enables `ctx.log("")` logging for
+ the specified phase.
+* `-Ycheck:all` verifies the consistency of `AST` nodes between phases, in
+ particular checks that types do not change. Some phases currently can't be
+ `Ycheck`ed, therefore in the tests we run:
+ `-Ycheck:tailrec,resolveSuper,mixin,restoreScopes,labelDef`.
+
+Additional logging information can be obtained by changes some `noPrinter` to
+`new Printer` in `src/dotty/tools/dotc/config/Printers.scala`. This enables the
+`subtyping.println("")` and `ctx.traceIndented("", subtyping)` style logging.
+
+## Running tests ##
+
+```bash
+$ sbt
+> partest --show-diff --verbose
+```
+
+## Running single tests ##
+To test a specific test tests/x/y.scala (for example tests/pos/t210.scala):
+
+```bash
+> partest-only-no-bootstrap --show-diff --verbose tests/partest-generated/x/y.scala
+```
+
+Currently this will re-run some tests and do some preprocessing because of the
+way partest has been set up.
+
+## Inspecting Trees with Type Stealer ##
+
+There is no power mode for the REPL yet, but you can inspect types with the
+type stealer:
+
+```bash
+$ ./bin/dotr
+scala> import test.DottyTypeStealer._; import dotty.tools.dotc.core._; import Contexts._,Types._
+```
+
+Now, you can define types and access their representation. For example:
+
+```scala
+scala> val s = stealType("class O { type X }", "O#X")
+scala> implicit val ctx: Context = s._1
+scala> val t = s._2(0)
+t: dotty.tools.dotc.core.Types.Type = TypeRef(TypeRef(ThisType(TypeRef(NoPrefix,<empty>)),O),X)
+scala> val u = t.asInstanceOf[TypeRef].underlying
+u: dotty.tools.dotc.core.Types.Type = TypeBounds(TypeRef(ThisType(TypeRef(NoPrefix,scala)),Nothing), TypeRef(ThisType(TypeRef(NoPrefix,scala)),Any))
+```
+
+## Pretty-printing ##
+Many objects in the dotc compiler implement a `Showable` trait (e.g. `Tree`,
+`Symbol`, `Type`). These objects may be prettyprinted using the `.show`
+method