12

I'd like to format my sbt build files with scalariform. Is it possible to run scalariform on the build definition itself when starting sbt?

Jacek Laskowski
  • 72,696
  • 27
  • 242
  • 420
Leif Wickland
  • 3,693
  • 26
  • 43

1 Answers1

13

Put this in project/scalariform.sbt:

addSbtPlugin("com.typesafe.sbt" % "sbt-scalariform" % "1.2.0")

And this in scalariform.sbt:

import scalariform.formatter.preferences._
import ScalariformKeys._

lazy val BuildConfig = config("build") extend Compile
lazy val BuildSbtConfig = config("buildsbt") extend Compile

val foo: Int => Int = {
  case 1 => 1
  case     2 => 2
}

noConfigScalariformSettings

inConfig(BuildConfig)(configScalariformSettings)

inConfig(BuildSbtConfig)(configScalariformSettings)

scalaSource in BuildConfig := baseDirectory.value / "project"

scalaSource in BuildSbtConfig := baseDirectory.value

includeFilter in (BuildConfig, format) := ("*.scala": FileFilter)

includeFilter in (BuildSbtConfig, format) := ("*.sbt": FileFilter)

format in BuildConfig := {
  val x = (format in BuildSbtConfig).value
  (format in BuildConfig).value
}

preferences := preferences.value.
  setPreference(AlignSingleLineCaseStatements, true).
  setPreference(AlignParameters, true)

Run:

helloworld> build:scalariformFormat
[info] Formatting 1 Scala source {file:/Users/eed3si9n/work/helloworld/}helloworld(buildsbt) ...
[info] Reformatted 1 Scala source {file:/Users/eed3si9n/work/helloworld/}helloworld(buildsbt).
[success] Total time: 1 s, completed Oct 5, 2013 2:58:45 PM

Magic!

val foo: Int => Int = {
  case 1 => 1
  case 2 => 2
}
Eugene Yokota
  • 94,654
  • 45
  • 215
  • 319