diff options
-rw-r--r-- | examples/scalariform-example/build/build.scala | 7 | ||||
-rw-r--r-- | plugins/scalariform/Scalariform.scala | 51 |
2 files changed, 25 insertions, 33 deletions
diff --git a/examples/scalariform-example/build/build.scala b/examples/scalariform-example/build/build.scala index 91ff67a..cc09f3a 100644 --- a/examples/scalariform-example/build/build.scala +++ b/examples/scalariform-example/build/build.scala @@ -3,15 +3,16 @@ import scalariform.formatter.preferences._ class Build(val context: Context) extends BaseBuild with Scalariform { override def compile = { - scalariformFormat + scalariform() super.compile } - override def scalariformPreferences = - FormattingPreferences() + override def scalariform = super.scalariform.copy( + preferences = FormattingPreferences() .setPreference(SpacesAroundMultiImports, true) .setPreference(DoubleIndentClassDeclaration, true) .setPreference(RewriteArrowSymbols, true) + ) final def breakFormatting = { import java.nio.file._ diff --git a/plugins/scalariform/Scalariform.scala b/plugins/scalariform/Scalariform.scala index 0612469..8cfc252 100644 --- a/plugins/scalariform/Scalariform.scala +++ b/plugins/scalariform/Scalariform.scala @@ -9,16 +9,10 @@ import scalariform.formatter.preferences.FormattingPreferences import scalariform.parser.ScalaParserException trait Scalariform extends BaseBuild { - final def scalariformFormat: ExitCode = { - Scalariform.format(sourceFiles, scalariformPreferences, scalaVersion) - ExitCode.Success - } - - def scalariformPreferences: FormattingPreferences = Scalariform.defaultPreferences + def scalariform = Scalariform.apply(lib, sourceFiles.filter(_.string endsWith ".scala"), scalaVersion).config() } -object Scalariform { - +object Scalariform{ val defaultPreferences: FormattingPreferences = { import scalariform.formatter.preferences._ FormattingPreferences() @@ -32,30 +26,27 @@ object Scalariform { .setPreference(DoubleIndentClassDeclaration, false) } - private val scalaFileMatcher = FileSystems.getDefault.getPathMatcher("glob:**.scala") - - def format(files: Seq[File], preferences: FormattingPreferences, scalaVersion: String): Unit = { - var reformattedCount: Int = 0 - for (file <- files if file.exists) { - val path = file.toPath - if(scalaFileMatcher.matches(path)) { - try { - val sourceCode = new String(readAllBytes(path)) - val formatted = ScalaFormatter.format( - sourceCode, - preferences, - Some(scalaVersion) - ) - if (sourceCode != formatted) { - write(path, formatted.getBytes) - reformattedCount += 1 + case class apply( lib: Lib, files: Seq[File], scalaVersion: String ){ + case class config( + preferences: FormattingPreferences = Scalariform.defaultPreferences + ) extends (() => Seq[File]){ + def apply = { + val (successes, errors) = lib.transformFilesOrError( files, in => + try{ + Right( ScalaFormatter.format( in, preferences, Some(scalaVersion) ) ) + } catch { + case e: ScalaParserException => Left( e ) } - } catch { - case e: ScalaParserException => System.err.println(s"Scalariform parser error: ${e.getMessage} when formatting: $file") - } + ) + if(errors.nonEmpty) + throw new RuntimeException( + "Scalariform failed to parse some files:\n" ++ errors.map{ + case (file, error) => file.string ++ ": " ++ error.getMessage + }.mkString("\n"), + errors.head._2 + ) + successes } } - if (reformattedCount > 0) System.err.println(s"Formatted $reformattedCount Scala sources") } - } |