diff options
author | Paul Phillips <paulp@improving.org> | 2013-02-10 10:40:27 -0800 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2013-02-10 10:40:27 -0800 |
commit | 0084849f7c8ab5195ffdd17c984c7738b51a1089 (patch) | |
tree | a0e298d1618eabf449844d62ecec2c45624f3269 /test/files/presentation/doc/doc.scala | |
parent | 7dfbf07a89b6daac0dddf004fff512e8c9e325b4 (diff) | |
parent | f784fbfbce7c1426fe90706f11096ea1b826e88c (diff) | |
download | scala-0084849f7c8ab5195ffdd17c984c7738b51a1089.tar.gz scala-0084849f7c8ab5195ffdd17c984c7738b51a1089.tar.bz2 scala-0084849f7c8ab5195ffdd17c984c7738b51a1089.zip |
Merge commit 'f784fbfbce' into merge-210
* commit 'f784fbfbce':
Add a request to presentation compiler to fetch doc comment information.
Refactor scaladoc base functionality to allow it to be mixed in with Global in the IDE.
Conflicts:
src/compiler/scala/tools/nsc/interactive/Doc.scala
Diffstat (limited to 'test/files/presentation/doc/doc.scala')
-rwxr-xr-x | test/files/presentation/doc/doc.scala | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/test/files/presentation/doc/doc.scala b/test/files/presentation/doc/doc.scala new file mode 100755 index 0000000000..475d92b861 --- /dev/null +++ b/test/files/presentation/doc/doc.scala @@ -0,0 +1,91 @@ +import scala.tools.nsc.doc +import scala.tools.nsc.doc.base._ +import scala.tools.nsc.doc.base.comment._ +import scala.tools.nsc.interactive._ +import scala.tools.nsc.interactive.tests._ +import scala.tools.nsc.util._ +import scala.tools.nsc.io._ + +object Test extends InteractiveTest { + override val settings: doc.Settings = docSettings + + val tags = Seq( + "@example `\"abb\".permutations = Iterator(abb, bab, bba)`", + "@version 1.0, 09/07/2012", + "@since 2.10", + "@todo this method is unsafe", + "@note Don't inherit!", + "@see some other method" + ) + + val comment = "This is a test comment." + val caret = "<caret>" + + def text(nTags: Int) = + """|/** %s + | + | * %s */ + |trait Commented {} + |class User(c: %sCommented)""".stripMargin.format(comment, tags take nTags mkString "\n", caret) + + override lazy val compiler = { + new { + override val settings = { + prepareSettings(Test.this.settings) + Test.this.settings + } + } with Global(settings, compilerReporter) with MemberLookupBase with CommentFactoryBase { + val global: this.type = this + def chooseLink(links: List[LinkTo]): LinkTo = links.head + def internalLink(sym: Symbol, site: Symbol) = None + def toString(link: LinkTo) = link.toString + + def getComment(sym: Symbol, source: SourceFile) = { + val docResponse = new Response[(String, String, Position)] + askDocComment(sym, sym.owner, source, docResponse) + docResponse.get.left.toOption flatMap { + case (expanded, raw, pos) => + if (expanded.isEmpty) + None + else + Some(ask { () => parseAtSymbol(expanded, raw, pos, Some(sym.owner)) }) + } + } + } + } + + override def runDefaultTests() { + for (i <- 1 to tags.length) { + val markedText = text(i) + val idx = markedText.indexOf(caret) + val fileText = markedText.substring(0, idx) + markedText.substring(idx + caret.length) + val source = sourceFiles(0) + val batch = new BatchSourceFile(source.file, fileText.toCharArray) + val reloadResponse = new Response[Unit] + compiler.askReload(List(batch), reloadResponse) + reloadResponse.get.left.toOption match { + case None => + reporter.println("Couldn't reload") + case Some(_) => + val treeResponse = new compiler.Response[compiler.Tree] + val pos = compiler.rangePos(batch, idx, idx, idx) + compiler.askTypeAt(pos, treeResponse) + treeResponse.get.left.toOption match { + case Some(tree) => + val sym = tree.tpe.typeSymbol + compiler.getComment(sym, batch) match { + case None => println("Got no doc comment") + case Some(comment) => + import comment._ + val tags: List[(String, Iterable[Body])] = + List(("@example", example), ("@version", version), ("@since", since.toList), ("@todo", todo), ("@note", note), ("@see", see)) + val str = ("body:" + body + "\n") + + tags.map{ case (name, bodies) => name + ":" + bodies.mkString("\n") }.mkString("\n") + println(str) + } + case None => println("Couldn't find a typedTree") + } + } + } + } +} |