project/ScalacOptions.scala (63 lines of code) (raw):
/*
* Copyright 2019 Spotify AB.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import sbt._
object ScalacOptions {
import org.typelevel.scalacoptions.ScalacOption
import org.typelevel.scalacoptions.ScalaVersion
import org.typelevel.scalacoptions.ScalaVersion._
import org.typelevel.scalacoptions.ScalacOptions._
// Set the strategy used for translating lambdas into JVM code to "inline"
val delambdafyInlineOption = privateOption("delambdafy:inline")
val macroAnnotationsOption = privateOption(
"macro-annotations",
_.isBetween(V2_13_0, V3_0_0)
)
def macroShowCoderFallback(enabled: Boolean) =
advancedOption(s"macro-settings:show-coder-fallback=$enabled")
def macroCacheImplicitSchemas(enabled: Boolean) =
advancedOption(s"macro-settings:cache-implicit-schemas=$enabled")
def maxClassfileName(limit: Int) = advancedOption(
"max-classfile-name",
List(limit.toString),
_.isBetween(V2_12_0, V2_13_0)
)
val source3 = org.typelevel.scalacoptions.ScalacOptions.source3
// Warn
val privateWarnMacrosOption = privateWarnOption(
"macros:after",
_.isBetween(V2_12_0, V2_13_0)
)
val warnMacrosOption = warnOption(
"macros:after",
_.isBetween(V2_13_0, V3_0_0)
)
val warnConfOption = warnOption(
// silence all scala library deprecation warnings in 2.13
// since we still support 2.12
"conf:cat=deprecation&origin=scala\\..*&since>2.12.99:s" +
// until we can set fatalWarningOptions, handle those as errors
",cat=unused:e" +
// silence unused-imports compat
",cat=unused-imports&origin=scala\\.collection\\.compat\\..*:s" +
",cat=unused-imports&origin=kantan\\.codecs\\.compat\\..*:s" +
",cat=unused-imports&origin=com\\.spotify\\.scio\\.repl\\.compat\\..*:s",
_.isBetween(V2_13_2, V3_0_0)
)
val privateWarnDeadCode = org.typelevel.scalacoptions.ScalacOptions.privateWarnDeadCode
val warnDeadCode = org.typelevel.scalacoptions.ScalacOptions.warnDeadCode
val warnValueDiscard = org.typelevel.scalacoptions.ScalacOptions.warnValueDiscard
val privateWarnUnused = privateWarnOption("_,-nowarn,-privates", _.isBetween(V2_12_0, V2_13_0))
val warnUnused = warnOption("unused", _.isBetween(V2_13_0, V3_0_0))
def tokensForVersion(
scalaVersion: String,
proposedScalacOptions: Set[ScalacOption]
): Seq[String] = {
val Seq(major, minor, patch) = VersionNumber(scalaVersion).numbers
org.typelevel.scalacoptions.ScalacOptions
.tokensForVersion(ScalaVersion(major, minor, patch), proposedScalacOptions)
}
def defaults(scalaVersion: String): Seq[String] = tokensForVersion(
scalaVersion,
Set(
delambdafyInlineOption,
macroAnnotationsOption,
macroShowCoderFallback(true),
maxClassfileName(100),
privateWarnMacrosOption,
warnMacrosOption,
warnConfOption
)
)
}