diff options
Diffstat (limited to 'doc-tool/src/dotty/tools')
-rw-r--r-- | doc-tool/src/dotty/tools/dottydoc/DocCompiler.scala | 35 | ||||
-rw-r--r-- | doc-tool/src/dotty/tools/dottydoc/DocDriver.scala | 50 | ||||
-rw-r--r-- | doc-tool/src/dotty/tools/dottydoc/DocFrontEnd.scala | 17 | ||||
-rw-r--r-- | doc-tool/src/dotty/tools/dottydoc/DottyDoc.scala | 85 |
4 files changed, 102 insertions, 85 deletions
diff --git a/doc-tool/src/dotty/tools/dottydoc/DocCompiler.scala b/doc-tool/src/dotty/tools/dottydoc/DocCompiler.scala new file mode 100644 index 000000000..af4aaae4f --- /dev/null +++ b/doc-tool/src/dotty/tools/dottydoc/DocCompiler.scala @@ -0,0 +1,35 @@ +package dotty.tools +package dottydoc + +import core._ +import core.transform._ +import dotc.core.Phases.Phase +import dotc.Compiler + +/** Custom Compiler with phases for the documentation tool + * + * The idea here is to structure `dottydoc` around the new infrastructure. As + * such, dottydoc will itself be a compiler. It will, however, produce a format + * that can be used by other tools or web-browsers. + * + * Example: + * 1. Use the existing FrontEnd to typecheck the code being fed to dottydoc, + * wihtout discarding AnyVal interfaces + * 2. Create an AST that is serializable + * 3. Serialize to JS object + */ +class DocCompiler extends Compiler { + override def phases: List[List[Phase]] = List( + List(new DocFrontEnd), + List(new DocImplicitsPhase), + List(new DocASTPhase), + List(DocMiniTransformations(new UsecasePhase, + new DocstringPhase, + new LinkReturnTypes, + new LinkParamListTypes, + new LinkImplicitlyAddedTypes, + new LinkSuperTypes, + new AlternateConstructors, + new SortMembers)) + ) +} diff --git a/doc-tool/src/dotty/tools/dottydoc/DocDriver.scala b/doc-tool/src/dotty/tools/dottydoc/DocDriver.scala new file mode 100644 index 000000000..430fb8083 --- /dev/null +++ b/doc-tool/src/dotty/tools/dottydoc/DocDriver.scala @@ -0,0 +1,50 @@ +package dotty.tools +package dottydoc + +import dotty.tools.dottydoc.util.syntax._ +import core.ContextDottydoc +import dotc.core.Contexts._ +import dotc.{ Compiler, Driver } +import model.Package +import model.json._ +import dotc.config._ +import dotc.core.Comments.ContextDoc + +/** `DocDriver` implements the main entry point to the Dotty documentation + * tool. It's methods are used by the external scala and java APIs. + */ +class DocDriver extends Driver { + import _root_.java.util.{ Map => JMap } + import scala.collection.JavaConverters._ + + override def setup(args: Array[String], rootCtx: Context): (List[String], Context) = { + val ctx = rootCtx.fresh + val summary = CompilerCommand.distill(args)(ctx) + + ctx.setSettings(summary.sstate) + ctx.setSetting(ctx.settings.YkeepComments, true) + ctx.setSetting(ctx.settings.YnoInline, true) + ctx.setProperty(ContextDoc, new ContextDottydoc) + + val fileNames = CompilerCommand.checkUsage(summary, sourcesRequired)(ctx) + (fileNames, ctx) + } + + override def newCompiler(implicit ctx: Context): Compiler = new DocCompiler + + def compiledDocs(args: Array[String]): collection.Map[String, Package] = { + val (fileNames, ctx) = setup(args, initCtx.fresh) + doCompile(newCompiler(ctx), fileNames)(ctx) + + ctx.docbase.packages + } + + def compiledDocsJava(args: Array[String]): JMap[String, Package] = + compiledDocs(args).asJava + + def indexToJson(index: collection.Map[String, Package]): String = + index.json + + def indexToJsonJava(index: JMap[String, Package]): String = + indexToJson(index.asScala) +} diff --git a/doc-tool/src/dotty/tools/dottydoc/DocFrontEnd.scala b/doc-tool/src/dotty/tools/dottydoc/DocFrontEnd.scala new file mode 100644 index 000000000..30c5e3e87 --- /dev/null +++ b/doc-tool/src/dotty/tools/dottydoc/DocFrontEnd.scala @@ -0,0 +1,17 @@ +package dotty.tools +package dottydoc + +import dotc.typer.FrontEnd +import dotc.core.Contexts.Context +import dotc.CompilationUnit + +/** `DocFrontEnd` uses the Dotty `FrontEnd` without discarding the AnyVal + * interfaces for Boolean, Int, Char, Long, Byte etc. + * + * It currently still throws away Java sources by overriding + * `discardAfterTyper`. + */ +class DocFrontEnd extends FrontEnd { + override protected def discardAfterTyper(unit: CompilationUnit)(implicit ctx: Context) = + unit.isJava +} diff --git a/doc-tool/src/dotty/tools/dottydoc/DottyDoc.scala b/doc-tool/src/dotty/tools/dottydoc/DottyDoc.scala deleted file mode 100644 index e6aaddb48..000000000 --- a/doc-tool/src/dotty/tools/dottydoc/DottyDoc.scala +++ /dev/null @@ -1,85 +0,0 @@ -package dotty.tools -package dottydoc - -import dotty.tools.dottydoc.util.syntax._ -import core._ -import core.transform._ -import dotc.config.CompilerCommand -import dotc.config.Printers.dottydoc -import dotc.core.Contexts._ -import dotc.core.Comments.ContextDoc -import dotc.core.Phases.Phase -import dotc.typer.FrontEnd -import dotc.{ CompilationUnit, Compiler, Driver, Run } -import io.PlainFile -import model.Package -import model.json._ - -import _root_.java.util.{ Map => JMap } - -/** Custom Compiler with phases for the documentation tool - * - * The idea here is to structure `dottydoc` around the new infrastructure. As - * such, dottydoc will itself be a compiler. It will, however, produce a format - * that can be used by other tools or web-browsers. - * - * Example: - * 1. Use the existing FrontEnd to typecheck the code being fed to dottydoc - * 2. Create an AST that is serializable - * 3. Serialize to JS object - */ -class DocCompiler extends Compiler { - override def phases: List[List[Phase]] = List( - List(new DocFrontEnd), - List(new DocImplicitsPhase), - List(new DocASTPhase), - List(DocMiniTransformations(new UsecasePhase, - new DocstringPhase, - new LinkReturnTypes, - new LinkParamListTypes, - new LinkImplicitlyAddedTypes, - new LinkSuperTypes, - new AlternateConstructors, - new SortMembers)) - ) -} - -class DocFrontEnd extends FrontEnd { - override protected def discardAfterTyper(unit: CompilationUnit)(implicit ctx: Context) = - unit.isJava -} - -class DocDriver extends Driver { - import scala.collection.JavaConverters._ - - override def setup(args: Array[String], rootCtx: Context): (List[String], Context) = { - val ctx = rootCtx.fresh - val summary = CompilerCommand.distill(args)(ctx) - - ctx.setSettings(summary.sstate) - ctx.setSetting(ctx.settings.YkeepComments, true) - ctx.setSetting(ctx.settings.YnoInline, true) - ctx.setProperty(ContextDoc, new ContextDottydoc) - - val fileNames = CompilerCommand.checkUsage(summary, sourcesRequired)(ctx) - (fileNames, ctx) - } - - override def newCompiler(implicit ctx: Context): Compiler = new DocCompiler - - def compiledDocs(args: Array[String]): collection.Map[String, Package] = { - val (fileNames, ctx) = setup(args, initCtx.fresh) - doCompile(newCompiler(ctx), fileNames)(ctx) - - ctx.docbase.packages - } - - def compiledDocsJava(args: Array[String]): JMap[String, Package] = - compiledDocs(args).asJava - - def indexToJson(index: collection.Map[String, Package]): String = - index.json - - def indexToJsonJava(index: JMap[String, Package]): String = - indexToJson(index.asScala) -} |