Code Formatting with Scalafmt
Whether you are starting a Scala project or collaborating in one, here, you have a guide to know the most used frameworks for improving the code style.
Scalastyle and Scalafmt
Scalastyle is a handy tool for coding style in Scala, similar to what Checkstyle does in Java. Scalafmt formats code to look consistent between people on your team, and it is perfectly integrated into your toolchain. When testing Scala code (don´t forget to test the private methods!) tools like Scalafmt make it easier to maintain style consistency even in such intricate scenarios.
Installation
To integrate Scalafmt and easily format scala code, you’ll need to modify the plugins.sbt
file under your project folder.
addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.4.2")
addSbtPlugin("org.scalastyle" %% "scalastyle-sbt-plugin" % "1.0.0")
This will create a Scalastyle configuration under scalastyle_config.xml
. And a file .scalafmt.conf
where you can write rules to maintain consistency across the project.For example:
# This style is copied from
# <https://github.com/apache/spark/blob/master/dev/.scalafmt.conf> version = "2.7.5"
align = none
align.openParenDefnSite = false
align.openParenCallSite = false
align.tokens = []
optIn = {
configStyleArguments = false
}
danglingParentheses = false
docstrings = JavaDoc
maxColumn = 98
newlines.topLevelStatements = [before,after]
Quickstart
When opening a project that contains a .scalafmt.conf
file, you will be prompted to use it:
Choose the scalafmt formatter, and it will be used at compile-time for formatting files.
However, you can check it manually with:
sbt scalastyle
An impressive feature to highlight is the flexibility of scalafmt and how easy is to configure your IDE to execute sbt run scalafmt upon saving and keeping a high code quality. If you’re in a hurry, you can directly force code formatting using commands like:
Alternatively, force code formatting:
sbt scalafmt # Format main sources
sbt test:scalafmt # Format test sources
sbt scalafmtCheck # Check if the scala sources under the project have been formatted
sbt scalafmtSbt # Format *.sbt and project /*.scala files
sbt scalafmtSbtCheck # Check if the files have been formatted by scalafmtSbt
More tricks
Scaladocs
Sbt also checks the format of the Scala docs when publishing the artifacts. The following command will check and generate the Scaladocs:
sbt doc
Header Creation
Sometimes a header must be present in all files. You can do so by using this plugin: https://github.com/sbt/sbt-header
First, add it in the plugins.sbt:
addSbtPlugin("de.heikoseeberger" % "sbt-header" % "5.6.0")
Include the header you want to show in your build.sbt
headerLicense := Some(HeaderLicense.Custom("Copyright 2021 Qbeast Pills"))
And use it in compile time with:
Compile / compile := (Compile / compile).dependsOn(Compile / headerCheck).value
sbt headerCreate
Using println
Scalafmt has strong policies on print information. And we all debug like this now and then.
The quick solution is to wrap your code:
// scalastyle:off println
<your beautiful piece of code>
// scalastyle:on println
But make sure you delete these comments before pushing any commits 😉