2014-11-14 10 views
20

Lubię definiowania scalacOptions na najwyższym poziomie jak tak (jako przykład, ignorując oś projektu na razie):W sbt, w jaki sposób przesłonić opcje scalacOptions dla konsoli we wszystkich konfiguracjach?

scalacOptions += "-Ywarn-unused-import" 

Ale potem zdałem sobie sprawę, że zbyt surowe dla console. Dlatego starałem ustawienie:

scalacOptions in console ~= (_ filterNot (_ == "-Ywarn-unused-import")) 

Ale to nie działa (wciąż mam (śmiertelne) ostrzeżenia w REPL).

użyłem inspect aby spróbować zrozumieć, dlaczego:

> inspect console 
[info] Task: Unit 
[info] Description: 
[info] Starts the Scala interpreter with the project classes on the classpath. 
[info] Provided by: 
[info] {file:/a/}b/compile:console 
[info] Defined at: 
[info] (sbt.Defaults) Defaults.scala:261 
[info] Dependencies: 
[info] compile:console::compilers 
[info] compile:console::initialCommands 
[info] compile:console::fullClasspath 
[info] compile:console::taskTemporaryDirectory 
[info] compile:console::scalaInstance 
[info] compile:console::streams 
[info] compile:console::cleanupCommands 
[info] compile:console::scalacOptions 
[info] Delegates: 
[info] compile:console 
[info] *:console 
[info] {.}/compile:console 
[info] {.}/*:console 
[info] */compile:console 
[info] */*:console 
[info] Related: 
[info] test:console 

Uwaga: console jest

  • dostarczone przez compile:console
  • zależy compile:console::scalacOptions

następnie:

> inspect compile:console::scalacOptions 
[info] Task: scala.collection.Seq[java.lang.String] 
[info] Description: 
[info] Options for the Scala compiler. 
[info] Provided by: 
[info] {file:/a/}b/compile:scalacOptions 
[info] Defined at: 
[info] (sbt.Classpaths) Defaults.scala:1593 
[info] Reverse dependencies: 
[info] compile:console 
[info] Delegates: 
[info] compile:console::scalacOptions 
[info] compile:scalacOptions 
[info] *:console::scalacOptions 
[info] *:scalacOptions 
[info] {.}/compile:console::scalacOptions 
[info] {.}/compile:scalacOptions 
[info] {.}/*:console::scalacOptions 
[info] {.}/*:scalacOptions 
[info] */compile:console::scalacOptions 
[info] */compile:scalacOptions 
[info] */*:console::scalacOptions 
[info] */*:scalacOptions 
[info] Related: 
[info] *:console::scalacOptions 
[info] compile:scalacOptions 
[info] *:scalacOptions 
[info] */*:scalacOptions 
[info] test:scalacOptions 

Uwaga: compile:console::scalacOptions jest

  • dostarczone przez compile:scalacOptions
  • nie osiągnie *:console::scalacOptions (która jest, co określono) w łańcuchu Przekazanie

Moje pytanie brzmi, jak zrobić Zastępuję scalacOptions dla wszystkich konfiguracji konsoli? Czy można zmienić łańcuch delegacji?

Chciałbym uniknąć konieczności ustawiania scalacOptions in (Compile, console) (ponieważ byłby powielony dla (Test, console)) lub zdefiniowania wartości opcji scalac.

+0

Zobacz także https: // github.com/typelevel/wartremover/issues/131 –

Odpowiedz

12

Moje pytanie brzmi: jak zastąpić scalacOptions dla wszystkich konfiguracji konsoli?

Nie sądzę, że możemy podać obecność compile:scalacOptions dostarczoną przez sbt's Defaults. Jedynym zakresem mającym wyższy priorytet jest compile:console::scalacOptions. W większości przypadków nie byłoby pożądane, aby ustawienia Compile i Test przechodziły przez przewód, więc konfiguracja określania zakresu miała wyższy priorytet. Nie uważam tego za zły domyślny.

lazy val commonSettings = Seq(
    scalaVersion := "2.11.4", 
    scalacOptions += "-Ywarn-unused-import", 
    scalacOptions in (Compile, console) ~= (_ filterNot (_ == "-Ywarn-unused-import")), 
    scalacOptions in (Test, console) := (scalacOptions in (Compile, console)).value 
) 

Czy jest możliwe, aby zmienić łańcuch delegacji?

Nie, nie jest to możliwe. Istnieje jedna instancja funkcji delegates w BuildStructure, która jest inicjowana w czasie ładowania i używana do wszystkich zadań. Zamawianie odbywa się w Scope.delegates.

+1

Dziękuję za odpowiedź Eugene, szczególnie szczegóły/linki do wnętrzności są dla mnie bardzo cenne. Sądzę, że podjęto decyzję projektową o domyślnym wyszukiwaniu w konfiguracji przed zadaniem ('compile: scalacOptions' przed' *: console :: scalacOptions'). –

+0

Czy istnieje sposób, aby coś z tych linii działało? 'ivyConfigurations.value.map (c => scalacOpcje w (c, console): = consoleCompilerOptions)' (To nie działa) – aij

Powiązane problemy