diff options
author | Jan Christopher Vogt <oss.nsp@cvogt.org> | 2017-03-19 22:15:02 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-03-19 22:15:02 -0400 |
commit | febf7d987f643f3e071510812373778608a480ac (patch) | |
tree | 3f2321914d91df63717e3bd6df08bb11574bd7b7 /plugins | |
parent | 092616b3e24deb522ae58d66b24a503efb0a486b (diff) | |
parent | 5388bb116834196e1b0a9bd9f2622f36e842b3be (diff) | |
download | cbt-febf7d987f643f3e071510812373778608a480ac.tar.gz cbt-febf7d987f643f3e071510812373778608a480ac.tar.bz2 cbt-febf7d987f643f3e071510812373778608a480ac.zip |
Merge pull request #447 from cvogt/chris
Get rid of the hacky "essential" plugins separation
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/essentials/CommandLineOverrides.scala | 27 | ||||
-rw-r--r-- | plugins/essentials/DynamicOverrides.scala | 82 | ||||
-rw-r--r-- | plugins/essentials/MultipleScalaVersions.scala | 9 | ||||
-rw-r--r-- | plugins/essentials/Readme.md | 3 | ||||
-rw-r--r-- | plugins/essentials/SnapshotVersion.scala | 7 | ||||
-rw-r--r-- | plugins/essentials/build/build.scala | 10 | ||||
-rw-r--r-- | plugins/scalariform/Scalariform.scala | 51 |
7 files changed, 21 insertions, 168 deletions
diff --git a/plugins/essentials/CommandLineOverrides.scala b/plugins/essentials/CommandLineOverrides.scala deleted file mode 100644 index 3ffaf21..0000000 --- a/plugins/essentials/CommandLineOverrides.scala +++ /dev/null @@ -1,27 +0,0 @@ -package cbt -trait CommandLineOverrides extends DynamicOverrides{ - def `with`: Any = { - lib.callReflective( - newBuild[DynamicOverrides]( - context.copy( - args = context.args.drop(2) - ) - )( s""" - ${context.args.lift(0).getOrElse("")} - """ ), - context.args.lift(1) orElse Some("void"), - context - ) - } - def eval = { - lib.callReflective( - newBuild[CommandLineOverrides]( - context.copy( - args = ( context.args.lift(0).map("println{ "+_+" }") ).toSeq - ) - ){""}, - Some("with"), - context - ) - } -} diff --git a/plugins/essentials/DynamicOverrides.scala b/plugins/essentials/DynamicOverrides.scala deleted file mode 100644 index 8d67be7..0000000 --- a/plugins/essentials/DynamicOverrides.scala +++ /dev/null @@ -1,82 +0,0 @@ -package cbt -import cbt.eval.Eval -trait DynamicOverrides extends BaseBuild{ - private val twitterEval = { - taskCache[DynamicOverrides]( "eval" ).memoize{ - new Eval{ - override lazy val impliedClassPath: List[String] = context.parentBuild.get.classpath.strings.toList//new ScalaCompilerDependency( context.cbtLastModified, context.paths.mavenCache, scalaVersion ).classpath.strings.toList - override def classLoader = DynamicOverrides.this.getClass.getClassLoader - } - } - } - - protected [cbt] def overrides: String = "" - - // TODO: add support for Build inner classes - import scala.reflect.runtime.universe._ - def newBuild[T <: DynamicOverrides:TypeTag]: T = newBuild[T](context)("") - def newBuild[T <: DynamicOverrides:TypeTag](body: String): T = newBuild[T](context)(body) - def newBuild[T <: DynamicOverrides:TypeTag](context: Context)(body: String): T = { - val tag = typeTag[T] - val mixinClass = tag.mirror.runtimeClass(tag.tpe) - assert(mixinClass.getTypeParameters.size == 0) - val mixin = if( - mixinClass == classOf[Nothing] - || mixinClass.getSimpleName == "Build" - ) "" else " with "+mixinClass.getName - import scala.collection.JavaConverters._ - val parent = Option( - if(this.getClass.getName.startsWith("Evaluator__")) - this.getClass.getName.dropWhile(_ != '$').drop(1).stripSuffix("$1") - else - this.getClass.getName - ).getOrElse( - throw new Exception( "You cannot have more than one newBuild call on the Stack right now." ) - ) - val overrides = "" // currently disables, but can be used to force overrides everywhere - if(mixin == "" && overrides == "" && body == ""){ - // TODO: is it possible for the contructor to have the wrong signature and - // thereby produce a pretty hard to understand error message here? - this.getClass - .getConstructor(classOf[Context]) - .newInstance(context) - .asInstanceOf[T] - } else { - val baseName = "DynamicBuild" + System.currentTimeMillis - val overrideName = baseName+"Overrides" - val (finalName, code) = if(overrides == ""){ - ( - baseName, - s""" - class $baseName(context: _root_.cbt.Context) - extends $parent(context)$mixin{ - $body - } - """ - ) - } else { - ( - overrideName, - s""" - class $baseName(context: _root_.cbt.Context) - extends $parent(context)$mixin{ - $body - } - class $overrideName(context: _root_.cbt.Context) - extends $baseName(context){ - $overrides - } - """ - ) - } - logger.dynamic("Dynamically generated code:\n" ++ code) - twitterEval.compile(code) - val createBuild = twitterEval.apply[Context => T](s"new $finalName(_: _root_.cbt.Context)",false) - createBuild( context ).asInstanceOf[T] - } - } - - def runFlat: ExitCode = newBuild[DynamicOverrides]{""" - override def flatClassLoader = true - """}.run -} diff --git a/plugins/essentials/MultipleScalaVersions.scala b/plugins/essentials/MultipleScalaVersions.scala deleted file mode 100644 index 5d896dd..0000000 --- a/plugins/essentials/MultipleScalaVersions.scala +++ /dev/null @@ -1,9 +0,0 @@ -package cbt - -trait MultipleScalaVersions extends DynamicOverrides{ - def scalaVersions: Seq[String] = Seq(scalaVersion, "2.10.6") - def cross: Seq[MultipleScalaVersions] = - scalaVersions.map{ v => - newBuild[MultipleScalaVersions](context.copy(scalaVersion = Some(v)))("") - } -} diff --git a/plugins/essentials/Readme.md b/plugins/essentials/Readme.md deleted file mode 100644 index 76d3756..0000000 --- a/plugins/essentials/Readme.md +++ /dev/null @@ -1,3 +0,0 @@ -Essential CBT plugins - -Not part of CBT's core to keep it slim and so they can have dependencies if needed. diff --git a/plugins/essentials/SnapshotVersion.scala b/plugins/essentials/SnapshotVersion.scala deleted file mode 100644 index 1f7eb23..0000000 --- a/plugins/essentials/SnapshotVersion.scala +++ /dev/null @@ -1,7 +0,0 @@ -package cbt - -trait SnapshotVersion extends ArtifactInfo with DynamicOverrides{ - def snapshot = newBuild[SnapshotVersion]{""" - override def version = super.version ++ "-SNAPSHOT" - """} -} 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") } - } |