aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/parsing/Scanners.scala
diff options
context:
space:
mode:
authorFelix Mulder <felix.mulder@gmail.com>2016-03-09 15:54:25 +0100
committerFelix Mulder <felix.mulder@gmail.com>2016-04-07 08:40:27 +0200
commitee5413751183d4ab217cf63fc9c1ac7b33ff4710 (patch)
treef2fb4d1c11022068ba640a514a02ede6533d2184 /src/dotty/tools/dotc/parsing/Scanners.scala
parent7f20aef772c1bdc6e0a699a82f179d93934a1555 (diff)
downloaddotty-ee5413751183d4ab217cf63fc9c1ac7b33ff4710.tar.gz
dotty-ee5413751183d4ab217cf63fc9c1ac7b33ff4710.tar.bz2
dotty-ee5413751183d4ab217cf63fc9c1ac7b33ff4710.zip
Add ability to parse nested classes/traits docstrings
Diffstat (limited to 'src/dotty/tools/dotc/parsing/Scanners.scala')
-rw-r--r--src/dotty/tools/dotc/parsing/Scanners.scala29
1 files changed, 20 insertions, 9 deletions
diff --git a/src/dotty/tools/dotc/parsing/Scanners.scala b/src/dotty/tools/dotc/parsing/Scanners.scala
index 438c54398..60042e5a6 100644
--- a/src/dotty/tools/dotc/parsing/Scanners.scala
+++ b/src/dotty/tools/dotc/parsing/Scanners.scala
@@ -185,12 +185,23 @@ object Scanners {
/** The currently closest docstring, replaced every time a new docstring is
* encountered
*/
- val closestDocString: mutable.Queue[Comment] = mutable.Queue.empty
+ var closestDocString: List[mutable.Queue[Comment]] = mutable.Queue.empty[Comment] :: Nil
+
+ /** Adds level of nesting to docstrings */
+ def enterBlock(): Unit =
+ closestDocString = mutable.Queue.empty[Comment] :: closestDocString
+
+ /** Removes level of nesting for docstrings */
+ def exitBlock(): Unit = closestDocString = closestDocString match {
+ case x :: Nil => mutable.Queue.empty[Comment] :: Nil
+ case _ => closestDocString.tail
+ }
/** Returns `closestDocString`'s raw string and sets it to `None` */
- def getDocString(): Option[String] =
- if (closestDocString.isEmpty) None
- else Some(closestDocString.dequeue.chrs)
+ def getDocString(): Option[String] = closestDocString match {
+ case x :: _ if !x.isEmpty => Some(x.dequeue.chrs)
+ case _ => None
+ }
/** A buffer for comments */
val commentBuf = new StringBuilder
@@ -497,13 +508,13 @@ object Scanners {
case ',' =>
nextChar(); token = COMMA
case '(' =>
- nextChar(); token = LPAREN
+ enterBlock(); nextChar(); token = LPAREN
case '{' =>
- nextChar(); token = LBRACE
+ enterBlock(); nextChar(); token = LBRACE
case ')' =>
- nextChar(); token = RPAREN
+ exitBlock(); nextChar(); token = RPAREN
case '}' =>
- nextChar(); token = RBRACE
+ exitBlock(); nextChar(); token = RBRACE
case '[' =>
nextChar(); token = LBRACKET
case ']' =>
@@ -569,7 +580,7 @@ object Scanners {
val comment = Comment(pos, flushBuf(commentBuf))
if (comment.isDocComment)
- closestDocString.enqueue(comment)
+ closestDocString.head.enqueue(comment)
if (keepComments)
revComments = comment :: revComments