Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to disambiguate links to methods in scaladoc?

I'm documenting a Scala class with overloaded methods. How can I distinguish them when referring to them in scaladoc comments? For example, if I have

/**  * The most important method is [[Doc.foo]].  */ object Doc {   def foo[A]: A = throw new UnsupportedOperationException;   def foo[A,B >: A](x: A): B = x; } 

and run sbt doc I get

Doc.scala:1: warning: The link target "Doc.foo" is ambiguous. Several (possibly overloaded) members fit the target:

  • method foo[A,B>:A](x:A):B in object Doc [chosen]
  • method foo[A]:Nothing in object Doc

Using foo[A,B >: A] etc. to the link doesn't work.

like image 883
Petr Avatar asked Mar 13 '13 19:03

Petr


1 Answers

The following seems do the trick in Scala 2.10.

/**  * The most important method is [[Doc.foo[A]:A*]].  */ 

And here is some hint scaladoc gives me:

[warn] Quick crash course on using Scaladoc links [warn] ========================================== [warn] Disambiguating terms and types: Prefix terms with '$' and types with '!' in case both names are in use: [warn]  - [[scala.collection.immutable.List!.apply class List's apply method]] and [warn]  - [[scala.collection.immutable.List$.apply object List's apply method]] [warn] Disambiguating overloaded members: If a term is overloaded, you can indicate the first part of its signature followed by *: [warn]  - [[[scala.collection.immutable.List$.fill[A](Int)(⇒A):List[A]* Fill with a single parameter]]] [warn]  - [[[scala.collection.immutable.List$.fill[A](Int,Int)(⇒A):List[List[A]]* Fill with a two parameters]]] [warn] Notes:  [warn]  - you can use any number of matching square brackets to avoid interference with the signature [warn]  - you can use \. to escape dots in prefixes (don't forget to use * at the end to match the signature!) [warn]  - you can use \# to escape hashes, otherwise they will be considered as delimiters, like dots. 
like image 169
Brian Hsu Avatar answered Oct 03 '22 04:10

Brian Hsu