Как сгенерировать диаграммы иерархии типов с помощью Scaladoc?

Я хочу, чтобы Scaladoc генерировал диаграмму иерархии типов для следующего фрагмента кода:

trait A
trait B extends A

Но когда я выполняю scaladoc <file>.scala, иерархия типов не показана - ни в A, ни в B. Как я могу создать такие диаграммы?

Ответ 1

Во-первых, для этого требуется Scaladoc2, который является частью Scala 2.10.

Если установлено 2.10, необходимо также передать параметр -diagrams в Scaladoc, чтобы генерировать диаграммы. Но если вы это сделаете, может возникнуть следующее сообщение об ошибке:

Graphviz dot encountered an error when generating the diagram for:
_root_
These are usually spurious errors, but if you notice a persistant error on
a diagram, please use the -diagrams-debug flag and report a bug with the output.
Graphviz will be restarted...

Ошибка возникает из-за того, что Scaladoc не создает диаграммы самостоятельно, но пытается вызвать Graphviz, чтобы выполнить эту работу. Когда мы добавляем флаг -diagrams-debug, мы, среди прочего, получаем точное сообщение об ошибке:

The following is the log of the failure:
  Main thread in _root_: Exception: java.io.IOException: Cannot run program "dot": java.io.IOException: error=2, No such file or directory

Для решения проблемы необходимо установить программу dot, которая является частью Graphviz. После этого нужно иметь возможность успешно выполнить scaladoc -diagrams <file>.scala и увидеть в результате тег "Иерархия типов" над панелью поиска членов в сгенерированной документации.

Выполнение scaladoc -help показывает дополнительную информацию для опции диаграмм:

  -diagrams                                   Create inheritance diagrams for classes, traits and packages.
  -diagrams-dot-path <path>                   The path to the dot executable used to generate the inheritance diagrams. Eg: /usr/bin/dot
  -diagrams-dot-restart <n>                   The number of times to restart a malfunctioning dot process before disabling diagrams (default: 5)
  -diagrams-dot-timeout <n>                   The timeout before the graphviz dot util is forcefully closed, in seconds (default: 10)
  -diagrams-max-classes <n>                   The maximum number of superclasses or subclasses to show in a diagram
  -diagrams-max-implicits <n>                 The maximum number of implicitly converted classes to show in a diagram