11

プロジェクト全体の構成がこのように単純であるとしますbuild.sbt

scalaVersion := "2.11.4"

libraryDependencies += "org.scalaz" %% "scalaz-core" % "7.1.0"

そして、これは私のコードです:

import scalaz.Equal
import scalaz.syntax.equal._

object Foo {
  def whatever[A: Equal](a: A, b: A) = a === b
}

sbt docブラウザーで API ドキュメントを実行して開くとscalaz、ScalaDoc ルート パッケージ リストにパッケージが表示されますFoo

object Foo
package scalaz

または、あなたが私を信じていない場合:

scalaz パッケージ

以前に Scalaz でこれに気づいたことがありますが、それが起こったのは私だけではありません (たとえば、Argonaut API ドキュメントの現在公開されているバージョンを参照してください)。Scalaz 以外のライブラリでそれが起こるのを見たことがあるかどうかはわかりません。

プロジェクト コードで実際に Scalaz から何も使用しない場合、表示されません。少なくとも 2.10.4 と 2.11.4 で同じことが起こります。

scalazパッケージがここに表示されるのはなぜですか?どうすれば停止できますか?

4

1 に答える 1

9

私もこれに気づきました。akka.patternAkkaのパッケージやupickle、upickle プロジェクトのパッケージなどでも発生します。

これら 3 つのパッケージには、次の 2 つの共通点があります。

  1. それらはパッケージオブジェクトです
  2. mixin トレイトで少なくとも 1 つの型を定義します。

そこで、2 つのプロジェクトで少し実験を行いました。

プロジェクト A:

trait SomeFunctionality {
  class P(val s: String)
}

package object projectA extends SomeFunctionality

プロジェクト B (プロジェクト A に依存):

package projectB
import projectA._

object B extends App {
  val p = new P("Test")
}

出来上がり: プロジェクト B の ScalaDoc では、ルート パッケージに 2 つのパッケージが表示されます。

projectA
projectB

いずれかを削除すると問題が解決するため、上記の両方の基準を満たす必要があるようです。

これは scala コンパイラのバグだと思います。この場合、scalaz のソースを変更するしか方法がないため、これを回避することはできません。ProjectA へのすべての参照を削除することを除いて、ProjectB の何かを変更しても役に立ちませんでした。


更新: scaladoc から特定のパッケージを除外するようにコンパイラに指示できるようです。

scaladoc -skip-packages <pack1>:<pack2>:...:<packN> files.scala

したがって、これはここでの回避策になります

于 2014-11-03T16:22:13.600 に答える