2014-11-03 12 views
11

Załóżmy, cała moja konfiguracja projektu jest to proste build.sbt:Dlaczego Scalaz pojawia się w dokumentach API mojego projektu?

scalaVersion := "2.11.4" 

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

I 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 gdy uruchamiam sbt doc i otwórz docs API w przeglądarce, widzę scalaz pakiet w wykazie pakietów root ScalaDoc, wraz z moim Lub, w przypadku, gdy nie wierzcie mi:

scalaz package

Zauważyłem to z Scalaz wcześniej, a ja nie jestem jedynym, zdarza się (patrz na przykład currently published version z Argonaut Dokumenty API). Nie jestem pewien, czy widziałem to z jakąkolwiek biblioteką inną niż Scalaz.

Jeśli w moim kodzie projektu nie używam niczego z programu Scalaz, to się nie pojawia. To samo dzieje się na co najmniej 2.10.4 i 2.11.4.

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

Odpowiedz

9

Też to zauważyłem. Dzieje się tak również w przypadku pakietu akka.pattern firmy Akka, a także na przykład pakietu upickle z upalnego projektu.

Te trzy pakiety mają dwie cechy wspólne:

  1. są one pakiet obiektów
  2. one określić co najmniej jeden typ w mixin cechy.

Więc zrobiłem mały eksperyment z dwoma projektami:

project:

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 zawiera dwa pakiety w pakiecie głównym:

projectA 
projectB 

Wygląda na to, że oba powyższe kryteria muszą zostać spełnione, ponieważ wyeliminowanie jednego z nich 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: Wydaje się, że można polecić kompilator exclude specific packages from scaladoc.

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

Więc byłoby to obejście tutaj

+1

+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? –

+1

@TravisBrown zobacz aktualizację ... istnieje obejście problemu. Nie znalazłem pasującego problemu. Tylko niektóre zamknięte, które wyglądają podejrzanie. Przyjrzę się bliżej jutro! –

+2

Tak, obiekty pakietu są znane z błędów. Nawiasem mówiąc, @retronym pracował ostatnio nad tym obszarem: https://github.com/retronym/scala/compare/scala:2.12.x...ticket/8862-2 –

Powiązane problemy