package works.iterative.sbt import sbt._ import sbt.Keys._ import scalafix.sbt.ScalafixPlugin import scalafix.sbt.ScalafixPlugin.autoImport._ import org.scalafmt.sbt.ScalafmtPlugin import org.scalafmt.sbt.ScalafmtPlugin.autoImport._ object IWScalaProjectPlugin extends AutoPlugin { override def requires: Plugins = ScalafixPlugin && ScalafmtPlugin override def trigger: PluginTrigger = allRequirements object autoImport { val scala2Version = "2.13.8" val scala3Version = "3.2.0" def publishToIW: Seq[Def.Setting[_]] = inThisBuild( List( publishTo := { val base = "https://dig.iterative.works/maven/" if (version.value.endsWith("SNAPSHOT")) Some("snapshots" at base + "snapshots") else Some("releases" at base + "releases") }, credentials += Credentials(Path.userHome / ".sbt" / ".iw-credentials") ) ) def resolveIW: Seq[Def.Setting[_]] = inThisBuild( List( resolvers += "IW releases" at "https://dig.iterative.works/maven/releases", resolvers += "IW snapshots" at "https://dig.iterative.works/maven/snapshots" ) ) } import autoImport._ override def buildSettings: Seq[Def.Setting[_]] = Seq( scalaVersion := scala3Version, // enable SemanticDB semanticdbEnabled := true, // use Scalafix compatible version, semanticdbVersion := scalafixSemanticdb.revision, versionScheme := Some("early-semver") ) override def projectSettings: Seq[Def.Setting[_]] = Seq( // Do not buffer logging in tests Test / logBuffered := false, // Do I need this still for Metals? // scalacOptions += s"-P:semanticdb:sourceroot:${(ThisBuild / baseDirectory).value}", scalafmtOnCompile := true ) }