Pytanie Dlaczego Scalaz pojawia się w dokumentach API mojego projektu?


Załóżmy, że moja cała konfiguracja projektu jest tak prosta build.sbt:

scalaVersion := "2.11.4"

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

A to jest mój kod:

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

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

Teraz, kiedy biegnę sbt doc i otwórz dokumenty API w przeglądarce, widzę scalaz pakiet na liście pakietów root ScalaDoc, razem z moim Foo:

object Foo
package scalaz

Lub, jeśli mi nie wierzysz:

scalaz package

Zauważyłem to już wcześniej ze Scalazem i nie jestem jedynym, któremu się to udało (patrz na przykład obecnie opublikowana wersja dokumentacji Argonaut API). Nie jestem pewien, czy widziałem to z jakąkolwiek biblioteką inną niż Scalaz.

Jeśli w moim kodzie projektu faktycznie nie używam nic ze Scalaza, to się nie wyświetla. To samo dzieje się na co najmniej 2.10.4 i 2.11.4.

Dlaczego jest scalaz pakiet pojawia się tutaj i jak mogę go zatrzymać?


11
2017-11-03 14:46


pochodzenie




Odpowiedzi:


Też to zauważyłem. Zdarza się również z akka.pattern pakiet od Akka, a także na przykład upickle pakiet od upalnego projektu.

Te trzy pakiety mają dwie rzeczy wspólne:

  1. Są to obiekty pakietu
  2. Określają one co najmniej jeden typ w funkcji mixin.

Zrobiłem mały eksperyment z dwoma projektami:

Projekt A:

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

package object projectA extends SomeFunctionality

Projekt B (w zależności od Projektu A):

package projectB
import projectA._

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

I voila: w ScalaDoc Projektu B pojawiają się dwa pakiety w pakiecie root:

projectA
projectB

Wygląda na to, że oba powyższe kryteria muszą zostać spełnione, ponieważ wyeliminowanie jednego rozwiązuje problem.

Wierzę, że jest to błąd w kompilatorze scala. Nie mogę ci pomóc, unikając tego, ponieważ jedynym sposobem na zmianę źródeł skalazu jest w tym przypadku. Zmiana niczego w ProjectB z wyjątkiem usunięcia wszystkich odniesień do ProjectA nie pomogła.


Aktualizacja: Wygląda na to, że możesz instruować kompilator wyklucz konkretne pakiety z scaladoc.

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

Więc byłoby to obejście tutaj


9
2017-11-03 16:22



+1 i dzięki! Mam zamiar zostawić to na razie otwarte, na wypadek gdyby ktoś miał obejście, które nie wymaga zmiany Scalaza, ale to jest świetne. Masz pomysł, jeśli masz otwarty problem? - Travis Brown
@TravisBrown zobacz mnie aktualizacji ... istnieje obejście. Nie znalazłem pasującego problemu. Tylko niektóre zamknięte, które wyglądają podejrzanie. Przyjrzę się bliżej jutro! - Martin Ring
Tak, obiekty pakietu są znane z błędów. Nawiasem mówiąc, @retronym ostatnio pracował nad sprzątaniem tego obszaru: github.com/retronym/scala/compare/scala:2.12.x...ticket/8862-2 - Adriaan Moors