aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFelix Mulder <felix.mulder@gmail.com>2016-04-13 11:26:02 +0200
committerFelix Mulder <felix.mulder@gmail.com>2016-08-19 15:37:18 +0200
commit1b20568bdbf7b561fb836faf095bb67a52895a58 (patch)
treec744c755b6c35fe795c26d6ee8147676357a17d1 /src
parent8d8d87b9cecef81e2b2813137bb3f71e13418b11 (diff)
downloaddotty-1b20568bdbf7b561fb836faf095bb67a52895a58.tar.gz
dotty-1b20568bdbf7b561fb836faf095bb67a52895a58.tar.bz2
dotty-1b20568bdbf7b561fb836faf095bb67a52895a58.zip
Port cooking of strings from NSC
Diffstat (limited to 'src')
-rw-r--r--src/dotty/tools/dotc/ast/Trees.scala7
-rw-r--r--src/dotty/tools/dotc/config/Printers.scala2
-rw-r--r--src/dotty/tools/dotc/core/Contexts.scala7
-rw-r--r--src/dotty/tools/dotc/parsing/Parsers.scala23
-rw-r--r--src/dotty/tools/dotc/parsing/Scanners.scala4
5 files changed, 23 insertions, 20 deletions
diff --git a/src/dotty/tools/dotc/ast/Trees.scala b/src/dotty/tools/dotc/ast/Trees.scala
index 20ae02994..cf11c27fa 100644
--- a/src/dotty/tools/dotc/ast/Trees.scala
+++ b/src/dotty/tools/dotc/ast/Trees.scala
@@ -15,6 +15,7 @@ import printing.Printer
import util.{Stats, Attachment, DotClass}
import annotation.unchecked.uncheckedVariance
import language.implicitConversions
+import parsing.Scanners.Comment
object Trees {
@@ -30,7 +31,7 @@ object Trees {
@sharable var ntrees = 0
/** Attachment key for trees with documentation strings attached */
- val DocComment = new Attachment.Key[String]
+ val DocComment = new Attachment.Key[Comment]
/** Modifiers and annotations for definitions
* @param flags The set flags
@@ -324,7 +325,7 @@ object Trees {
private[ast] def rawMods: Modifiers[T] =
if (myMods == null) genericEmptyModifiers else myMods
- def rawComment: Option[String] = getAttachment(DocComment)
+ def rawComment: Option[Comment] = getAttachment(DocComment)
def withMods(mods: Modifiers[Untyped]): ThisTree[Untyped] = {
val tree = if (myMods == null || (myMods == mods)) this else clone.asInstanceOf[MemberDef[Untyped]]
@@ -334,7 +335,7 @@ object Trees {
def withFlags(flags: FlagSet): ThisTree[Untyped] = withMods(Modifiers(flags))
- def setComment(comment: Option[String]): ThisTree[Untyped] = {
+ def setComment(comment: Option[Comment]): ThisTree[Untyped] = {
comment.map(putAttachment(DocComment, _))
asInstanceOf[ThisTree[Untyped]]
}
diff --git a/src/dotty/tools/dotc/config/Printers.scala b/src/dotty/tools/dotc/config/Printers.scala
index fa36ad12c..31c9d06cd 100644
--- a/src/dotty/tools/dotc/config/Printers.scala
+++ b/src/dotty/tools/dotc/config/Printers.scala
@@ -13,7 +13,7 @@ object Printers {
}
val default: Printer = new Printer
- val dottydoc: Printer = noPrinter
+ val dottydoc: Printer = new Printer
val core: Printer = noPrinter
val typr: Printer = noPrinter
val constr: Printer = noPrinter
diff --git a/src/dotty/tools/dotc/core/Contexts.scala b/src/dotty/tools/dotc/core/Contexts.scala
index 262443314..4a3f7c685 100644
--- a/src/dotty/tools/dotc/core/Contexts.scala
+++ b/src/dotty/tools/dotc/core/Contexts.scala
@@ -29,6 +29,7 @@ import printing._
import config.{Settings, ScalaSettings, Platform, JavaPlatform, SJSPlatform}
import language.implicitConversions
import DenotTransformers.DenotTransformer
+import parsing.Scanners.Comment
import xsbti.AnalysisCallback
object Contexts {
@@ -568,12 +569,12 @@ object Contexts {
allPhases.find(_.period.containsPhaseId(p.id)).getOrElse(NoPhase)
}
- val _docstrings: mutable.Map[Symbol, String] =
+ val _docstrings: mutable.Map[Symbol, Comment] =
mutable.Map.empty
- def docstring(sym: Symbol): Option[String] = _docstrings.get(sym)
+ def docstring(sym: Symbol): Option[Comment] = _docstrings.get(sym)
- def addDocstring(sym: Symbol, doc: Option[String]): Unit =
+ def addDocstring(sym: Symbol, doc: Option[Comment]): Unit =
doc.map(d => _docstrings += (sym -> d))
}
diff --git a/src/dotty/tools/dotc/parsing/Parsers.scala b/src/dotty/tools/dotc/parsing/Parsers.scala
index 600707cbf..378aa6ed7 100644
--- a/src/dotty/tools/dotc/parsing/Parsers.scala
+++ b/src/dotty/tools/dotc/parsing/Parsers.scala
@@ -22,6 +22,7 @@ import ScriptParsers._
import scala.annotation.{tailrec, switch}
import util.DotClass
import rewrite.Rewrites.patch
+import Scanners.Comment
object Parsers {
@@ -1778,13 +1779,13 @@ object Parsers {
*/
def defOrDcl(start: Int, mods: Modifiers): Tree = in.token match {
case VAL =>
- patDefOrDcl(posMods(start, mods), in.getDocString(start))
+ patDefOrDcl(posMods(start, mods), in.getDocComment(start))
case VAR =>
- patDefOrDcl(posMods(start, addFlag(mods, Mutable)), in.getDocString(start))
+ patDefOrDcl(posMods(start, addFlag(mods, Mutable)), in.getDocComment(start))
case DEF =>
- defDefOrDcl(posMods(start, mods), in.getDocString(start))
+ defDefOrDcl(posMods(start, mods), in.getDocComment(start))
case TYPE =>
- typeDefOrDcl(posMods(start, mods), in.getDocString(start))
+ typeDefOrDcl(posMods(start, mods), in.getDocComment(start))
case _ =>
tmplDef(start, mods)
}
@@ -1794,7 +1795,7 @@ object Parsers {
* ValDcl ::= Id {`,' Id} `:' Type
* VarDcl ::= Id {`,' Id} `:' Type
*/
- def patDefOrDcl(mods: Modifiers, docstring: Option[String] = None): Tree = {
+ def patDefOrDcl(mods: Modifiers, docstring: Option[Comment] = None): Tree = {
val lhs = commaSeparated(pattern2)
val tpt = typedOpt()
val rhs =
@@ -1820,7 +1821,7 @@ object Parsers {
* DefDcl ::= DefSig `:' Type
* DefSig ::= id [DefTypeParamClause] ParamClauses
*/
- def defDefOrDcl(mods: Modifiers, docstring: Option[String] = None): Tree = atPos(tokenRange) {
+ def defDefOrDcl(mods: Modifiers, docstring: Option[Comment] = None): Tree = atPos(tokenRange) {
def scala2ProcedureSyntax(resultTypeStr: String) = {
val toInsert =
if (in.token == LBRACE) s"$resultTypeStr ="
@@ -1895,7 +1896,7 @@ object Parsers {
/** TypeDef ::= type Id [TypeParamClause] `=' Type
* TypeDcl ::= type Id [TypeParamClause] TypeBounds
*/
- def typeDefOrDcl(mods: Modifiers, docstring: Option[String] = None): Tree = {
+ def typeDefOrDcl(mods: Modifiers, docstring: Option[Comment] = None): Tree = {
newLinesOpt()
atPos(tokenRange) {
val name = ident().toTypeName
@@ -1917,7 +1918,7 @@ object Parsers {
* | [`case'] `object' ObjectDef
*/
def tmplDef(start: Int, mods: Modifiers): Tree = {
- val docstring = in.getDocString(start)
+ val docstring = in.getDocComment(start)
in.token match {
case TRAIT =>
classDef(posMods(start, addFlag(mods, Trait)), docstring)
@@ -1938,7 +1939,7 @@ object Parsers {
/** ClassDef ::= Id [ClsTypeParamClause]
* [ConstrMods] ClsParamClauses TemplateOpt
*/
- def classDef(mods: Modifiers, docstring: Option[String]): TypeDef = atPos(tokenRange) {
+ def classDef(mods: Modifiers, docstring: Option[Comment]): TypeDef = atPos(tokenRange) {
val name = ident().toTypeName
val constr = atPos(in.offset) {
val tparams = typeParamClauseOpt(ParamOwner.Class)
@@ -1965,7 +1966,7 @@ object Parsers {
/** ObjectDef ::= Id TemplateOpt
*/
- def objectDef(mods: Modifiers, docstring: Option[String] = None): ModuleDef = {
+ def objectDef(mods: Modifiers, docstring: Option[Comment] = None): ModuleDef = {
val name = ident()
val template = templateOpt(emptyConstructor())
@@ -2190,7 +2191,7 @@ object Parsers {
if (in.token == PACKAGE) {
in.nextToken()
if (in.token == OBJECT) {
- val docstring = in.getDocString(start)
+ val docstring = in.getDocComment(start)
ts += objectDef(atPos(start, in.skipToken()) { Modifiers(Package) }, docstring)
if (in.token != EOF) {
acceptStatSep()
diff --git a/src/dotty/tools/dotc/parsing/Scanners.scala b/src/dotty/tools/dotc/parsing/Scanners.scala
index 1355ea386..b46ab6348 100644
--- a/src/dotty/tools/dotc/parsing/Scanners.scala
+++ b/src/dotty/tools/dotc/parsing/Scanners.scala
@@ -193,7 +193,7 @@ object Scanners {
}
/** Returns the closest docstring preceding the position supplied */
- def getDocString(pos: Int): Option[String] = {
+ def getDocComment(pos: Int): Option[Comment] = {
def closest(c: Comment, docstrings: List[Comment]): Comment = docstrings match {
case x :: xs if (c.pos.end < x.pos.end && x.pos.end <= pos) => closest(x, xs)
case Nil => c
@@ -203,7 +203,7 @@ object Scanners {
case (list @ (x :: xs)) :: _ => {
val c = closest(x, xs)
docsPerBlockStack = list.dropWhile(_ != c).tail :: docsPerBlockStack.tail
- Some(c.chrs)
+ Some(c)
}
case _ => None
}