diff options
-rw-r--r-- | build/build.scala | 6 | ||||
-rw-r--r-- | examples/scalariform-example/build/build.scala | 7 | ||||
-rw-r--r-- | libraries/eval/build/build/build.scala | 7 | ||||
-rw-r--r-- | plugins/essentials/build/build.scala | 10 | ||||
-rw-r--r-- | plugins/scalariform/Scalariform.scala | 51 | ||||
-rw-r--r-- | stage1/Stage1.scala | 6 | ||||
-rw-r--r-- | stage1/cbt.scala | 1 | ||||
-rw-r--r-- | stage2/BasicBuild.scala | 10 | ||||
-rw-r--r-- | stage2/BuildBuild.scala | 13 | ||||
-rw-r--r-- | stage2/Lib.scala | 13 | ||||
-rw-r--r-- | stage2/Plugin.scala | 4 | ||||
-rw-r--r-- | stage2/plugins/CommandLineOverrides.scala (renamed from plugins/essentials/CommandLineOverrides.scala) | 0 | ||||
-rw-r--r-- | stage2/plugins/DynamicOverrides.scala (renamed from plugins/essentials/DynamicOverrides.scala) | 0 | ||||
-rw-r--r-- | stage2/plugins/MultipleScalaVersions.scala (renamed from plugins/essentials/MultipleScalaVersions.scala) | 0 | ||||
-rw-r--r-- | stage2/plugins/Readme.md (renamed from plugins/essentials/Readme.md) | 0 | ||||
-rw-r--r-- | stage2/plugins/SnapshotVersion.scala (renamed from plugins/essentials/SnapshotVersion.scala) | 0 |
16 files changed, 47 insertions, 81 deletions
diff --git a/build/build.scala b/build/build.scala index 8f094c3..496acdc 100644 --- a/build/build.scala +++ b/build/build.scala @@ -11,11 +11,11 @@ class Build(val context: Context) extends Shared with PublishLocal{ override def dependencies = { super.dependencies ++ Resolver(mavenCentral).bind( MavenDependency("org.eclipse.jgit", "org.eclipse.jgit", "4.2.0.201601211800-r"), - ScalaDependency("org.scala-lang.modules","scala-xml","1.0.5") + ScalaDependency("org.scala-lang.modules","scala-xml",constants.scalaXmlVersion) ) - } + } :+ libraries.eval override def sources = Seq( "nailgun_launcher", "stage1", "stage2", "compatibility" - ).map( projectDirectory / _ ).flatMap( _.listFiles ) + ).map( projectDirectory / _ ).flatMap( _.listOrFail ) } 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/libraries/eval/build/build/build.scala b/libraries/eval/build/build/build.scala index b93554e..af4eb64 100644 --- a/libraries/eval/build/build/build.scala +++ b/libraries/eval/build/build/build.scala @@ -1,8 +1,5 @@ import cbt._ -class Build(val context: Context) extends BuildBuildWithoutEssentials{ - // this is used by the essentials plugin, so we can't depend on it - override def dependencies = super.dependencies ++ Seq( - plugins.scalaTest - ) +class Build(val context: Context) extends BuildBuild{ + override def dependencies = super.dependencies :+ plugins.scalaTest } diff --git a/plugins/essentials/build/build.scala b/plugins/essentials/build/build.scala deleted file mode 100644 index 450130a..0000000 --- a/plugins/essentials/build/build.scala +++ /dev/null @@ -1,10 +0,0 @@ -import cbt._ -// TODO: maybe move this back into stage2 to avoid having to call zinc separately for this as a plugin -// and to avoid the special casing "BuildBuildWithoutEssentials" -class Build(val context: Context) extends BaseBuild{ - override def dependencies = ( - super.dependencies - :+ context.cbtDependency - :+ libraries.eval - ) -} 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") } - } diff --git a/stage1/Stage1.scala b/stage1/Stage1.scala index e419e67..c243cc0 100644 --- a/stage1/Stage1.scala +++ b/stage1/Stage1.scala @@ -91,8 +91,10 @@ object Stage1{ import paths._ val stage2sourceFiles = ( - stage2.listFiles ++ (stage2 ++ "/plugins").listFiles - ).toVector.filter(_.isFile).filter(_.toString.endsWith(".scala")) + stage2.listFiles + ++ (stage2 / "plugins").listOrFail + ++ (cbtHome / "libraries" / "eval").listOrFail + ).filter(_.isFile).filter(_.toString.endsWith(".scala")) val cls = this.getClass.getClassLoader.loadClass("cbt.NailgunLauncher") diff --git a/stage1/cbt.scala b/stage1/cbt.scala index b97ad44..8cba9df 100644 --- a/stage1/cbt.scala +++ b/stage1/cbt.scala @@ -62,6 +62,7 @@ object `package`{ file.delete } + def listOrFail: Seq[File] = Option( file.listFiles ).getOrElse( throw new Exception( "no such file: " + file ) ).toVector def listRecursive: Seq[File] = { file +: ( if( file.isDirectory ) file.listFiles.flatMap(_.listRecursive).toVector else Seq[File]() diff --git a/stage2/BasicBuild.scala b/stage2/BasicBuild.scala index 37b1786..fcda629 100644 --- a/stage2/BasicBuild.scala +++ b/stage2/BasicBuild.scala @@ -32,10 +32,10 @@ trait BaseBuild extends BuildInterface with DependencyImplementation with SbtDep def projectDirectory: File = lib.realpath(context.workingDirectory) assert( projectDirectory.exists, "projectDirectory does not exist: " ++ projectDirectory.string ) assert( - projectDirectory.getName =!= lib.buildDirectoryName || - { + projectDirectory.getName =!= lib.buildDirectoryName + || { def transitiveInterfaces(cls: Class[_]): Vector[Class[_]] = cls.getInterfaces.toVector.flatMap(i => i +: transitiveInterfaces(i)) - transitiveInterfaces(this.getClass).contains(classOf[BuildBuildWithoutEssentials]) + transitiveInterfaces(this.getClass).contains(classOf[BuildBuild]) }, s"You need to extend ${lib.buildBuildClassName} in: " + projectDirectory + "/" ++ lib.buildDirectoryName ) @@ -96,7 +96,7 @@ trait BaseBuild extends BuildInterface with DependencyImplementation with SbtDep def sources: Seq[File] = ( Seq(defaultSourceDirectory) ++ generatedSources - ++ projectDirectory.listFiles.toVector.filter(sourceFileFilter) + ++ projectDirectory.listOrFail.toVector.filter(sourceFileFilter) ) /** Which file endings to consider being source files. */ @@ -130,7 +130,7 @@ trait BaseBuild extends BuildInterface with DependencyImplementation with SbtDep def localJars: Seq[File] = Seq(projectDirectory ++ "/lib") .filter(_.exists) - .flatMap(_.listFiles) + .flatMap(_.listOrFail) .filter(_.toString.endsWith(".jar")) override def dependencyClasspath : ClassPath = super.dependencyClasspath diff --git a/stage2/BuildBuild.scala b/stage2/BuildBuild.scala index 9b48e15..dea0f12 100644 --- a/stage2/BuildBuild.scala +++ b/stage2/BuildBuild.scala @@ -3,19 +3,13 @@ import java.nio.file._ import java.io.File class ConcreteBuildBuild(val context: Context) extends BuildBuild -class ConcreteBuildBuildWithoutEssentials(val context: Context) extends BuildBuildWithoutEssentials -trait BuildBuild extends BuildBuildWithoutEssentials{ - override def dependencies = - super.dependencies :+ plugins.essentials -} class plugins(implicit context: Context){ // TODO: move this out of the OO - private def plugin(dir: String) = DirectoryDependency( + private def plugin(dir: String) = cbt.DirectoryDependency( context.copy( workingDirectory = context.cbtHome / "plugins" / dir ) ) - final lazy val essentials = plugin( "essentials" ) final lazy val googleJavaFormat = plugin( "google-java-format" ) final lazy val proguard = plugin( "proguard" ) final lazy val sbtLayout = plugin( "sbt_layout" ) @@ -28,7 +22,8 @@ class plugins(implicit context: Context){ final lazy val wartremover = plugin( "wartremover" ) final lazy val scalafix = plugin( "scalafix" ) } -trait BuildBuildWithoutEssentials extends BaseBuild{ + +trait BuildBuild extends BaseBuild{ object plugins extends plugins assert( @@ -45,7 +40,7 @@ trait BuildBuildWithoutEssentials extends BaseBuild{ super.dependencies :+ context.cbtDependency def managedBuildDirectory: java.io.File = lib.realpath( projectDirectory.parent ) - def managedBuild = taskCache[BuildBuildWithoutEssentials]("managedBuild").memoize{ + def managedBuild = taskCache[BuildBuild]("managedBuild").memoize{ val managedBuildFile = projectDirectory++("/"++lib.buildFileName) logger.composition("Loading build at " ++ managedBuildDirectory.toString) val build = ( diff --git a/stage2/Lib.scala b/stage2/Lib.scala index 948cbf0..04e68f1 100644 --- a/stage2/Lib.scala +++ b/stage2/Lib.scala @@ -38,17 +38,8 @@ final class Lib(val logger: Logger) extends Stage1Lib(logger){ val useBasicBuild = directory == start && start.getName != buildDirectoryName try{ - if(useBasicBuild) { + if(useBasicBuild) new BasicBuild( context.copy( workingDirectory = directory ) ) - } else if( - // essentials depends on eval, which has a build that depends on scalatest - // this means in these we can't depend on essentials - // hopefully we find a better way that this pretty hacky exclusion rule - directory == (context.cbtHome ++ "/plugins/essentials") - || directory == (context.cbtHome ++ "/libraries/eval") - || directory == (context.cbtHome ++ "/plugins/scalatest") - ) - new cbt.ConcreteBuildBuildWithoutEssentials( context.copy( workingDirectory = start ) ) else new cbt.ConcreteBuildBuild( context.copy( workingDirectory = start ) ) } catch { @@ -211,7 +202,7 @@ final class Lib(val logger: Logger) extends Stage1Lib(logger){ def depthFirstFileStream(file: File): Vector[File] = { ( if (file.isDirectory) { - file.listFiles.toVector.flatMap(depthFirstFileStream(_)) + file.listOrFail.toVector.flatMap(depthFirstFileStream(_)) } else Vector() ) :+ file } diff --git a/stage2/Plugin.scala b/stage2/Plugin.scala index ed4a698..43e26fa 100644 --- a/stage2/Plugin.scala +++ b/stage2/Plugin.scala @@ -1,7 +1,5 @@ package cbt trait Plugin extends BaseBuild{ + override def dependencies = super.dependencies :+ context.cbtDependency object plugins extends plugins - - override def dependencies = - super.dependencies :+ context.cbtDependency :+ plugins.essentials } diff --git a/plugins/essentials/CommandLineOverrides.scala b/stage2/plugins/CommandLineOverrides.scala index 3ffaf21..3ffaf21 100644 --- a/plugins/essentials/CommandLineOverrides.scala +++ b/stage2/plugins/CommandLineOverrides.scala diff --git a/plugins/essentials/DynamicOverrides.scala b/stage2/plugins/DynamicOverrides.scala index 8d67be7..8d67be7 100644 --- a/plugins/essentials/DynamicOverrides.scala +++ b/stage2/plugins/DynamicOverrides.scala diff --git a/plugins/essentials/MultipleScalaVersions.scala b/stage2/plugins/MultipleScalaVersions.scala index 5d896dd..5d896dd 100644 --- a/plugins/essentials/MultipleScalaVersions.scala +++ b/stage2/plugins/MultipleScalaVersions.scala diff --git a/plugins/essentials/Readme.md b/stage2/plugins/Readme.md index 76d3756..76d3756 100644 --- a/plugins/essentials/Readme.md +++ b/stage2/plugins/Readme.md diff --git a/plugins/essentials/SnapshotVersion.scala b/stage2/plugins/SnapshotVersion.scala index 1f7eb23..1f7eb23 100644 --- a/plugins/essentials/SnapshotVersion.scala +++ b/stage2/plugins/SnapshotVersion.scala |