How to format the sbt build files with scalariform automatically?

2.6k Views Asked by At

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?

1

There are 1 best solutions below

1
Eugene Yokota On BEST ANSWER

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
}