aboutsummaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorJan Christopher Vogt <oss.nsp@cvogt.org>2017-03-19 22:15:02 -0400
committerGitHub <noreply@github.com>2017-03-19 22:15:02 -0400
commitfebf7d987f643f3e071510812373778608a480ac (patch)
tree3f2321914d91df63717e3bd6df08bb11574bd7b7 /plugins
parent092616b3e24deb522ae58d66b24a503efb0a486b (diff)
parent5388bb116834196e1b0a9bd9f2622f36e842b3be (diff)
downloadcbt-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.scala27
-rw-r--r--plugins/essentials/DynamicOverrides.scala82
-rw-r--r--plugins/essentials/MultipleScalaVersions.scala9
-rw-r--r--plugins/essentials/Readme.md3
-rw-r--r--plugins/essentials/SnapshotVersion.scala7
-rw-r--r--plugins/essentials/build/build.scala10
-rw-r--r--plugins/scalariform/Scalariform.scala51
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")
}
-
}