diff options
author | Felix Mulder <felix.mulder@gmail.com> | 2016-03-09 15:54:25 +0100 |
---|---|---|
committer | Felix Mulder <felix.mulder@gmail.com> | 2016-04-07 08:40:27 +0200 |
commit | ee5413751183d4ab217cf63fc9c1ac7b33ff4710 (patch) | |
tree | f2fb4d1c11022068ba640a514a02ede6533d2184 /src/dotty/tools/dotc/parsing/Scanners.scala | |
parent | 7f20aef772c1bdc6e0a699a82f179d93934a1555 (diff) | |
download | dotty-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.scala | 29 |
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 |