mirror of https://github.com/sbt/sbt.git
Bring EvaluateConfigurations and DslEntry to internal
This commit is contained in:
parent
6304b24916
commit
ce3926fbed
|
|
@ -72,7 +72,7 @@ object BuildUtil {
|
|||
}
|
||||
}
|
||||
|
||||
def baseImports: Seq[String] = "import scala.xml.{TopScope=>$scope}" :: "import sbt._, Keys._, dsl._, syntax._" :: Nil
|
||||
def baseImports: Seq[String] = "import scala.xml.{TopScope=>$scope}" :: "import sbt._, Keys._, syntax._" :: Nil
|
||||
|
||||
def getImports(unit: BuildUnit): Seq[String] = unit.plugins.detected.imports ++ unit.definitions.dslDefinitions.imports
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
*/
|
||||
package sbt
|
||||
|
||||
import sbt.internal.Load
|
||||
import sbt.internal.{ Load, EvaluateConfigurations }
|
||||
import sbt.internal.util.{ AttributeKey, AttributeMap, complete, ConsoleOut, GlobalLogging, LineRange, MainLogging, SimpleReader, Types }
|
||||
import sbt.util.{ Level, Logger }
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
*/
|
||||
package sbt
|
||||
|
||||
import sbt.internal.Load
|
||||
import sbt.internal.{ Load, EvaluateConfigurations }
|
||||
import sbt.librarymanagement.Configurations
|
||||
|
||||
import sbt.util.Level
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ import Types.Endo
|
|||
import compiler.Eval
|
||||
|
||||
import SessionSettings._
|
||||
import sbt.internals.parser.SbtRefactorings
|
||||
import sbt.internal.parser.SbtRefactorings
|
||||
|
||||
import sbt.io.IO
|
||||
|
||||
|
|
|
|||
|
|
@ -1,17 +0,0 @@
|
|||
package sbt
|
||||
|
||||
import sbt.librarymanagement.Configuration
|
||||
|
||||
import internals.{
|
||||
DslEntry,
|
||||
DslConfigs,
|
||||
DslEnablePlugins,
|
||||
DslDisablePlugins
|
||||
}
|
||||
|
||||
package object dsl {
|
||||
def enablePlugins(ps: AutoPlugin*): DslEntry = DslEnablePlugins(ps)
|
||||
def disablePlugins(ps: AutoPlugin*): DslEntry = DslDisablePlugins(ps)
|
||||
def configs(cs: Configuration*): DslEntry = DslConfigs(cs)
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,65 @@
|
|||
package sbt
|
||||
package internal
|
||||
|
||||
import sbt.internal.util.RangePosition
|
||||
|
||||
import sbt.librarymanagement.Configuration
|
||||
|
||||
import Def._
|
||||
|
||||
/** This reprsents a `Setting` expression configured by the sbt DSL. */
|
||||
sealed trait DslEntry {
|
||||
/** Called by the parser. Sets the position where this entry was defined in the build.sbt file. */
|
||||
def withPos(pos: RangePosition): DslEntry
|
||||
}
|
||||
object DslEntry {
|
||||
implicit def fromSettingsDef(inc: SettingsDefinition): DslEntry =
|
||||
DslSetting(inc)
|
||||
implicit def fromSettingsDef(inc: Seq[Setting[_]]): DslEntry =
|
||||
DslSetting(inc)
|
||||
|
||||
/** Represents a DSL entry which adds settings to the current project. */
|
||||
sealed trait ProjectSettings extends DslEntry {
|
||||
def toSettings: Seq[Setting[_]]
|
||||
}
|
||||
object ProjectSettings {
|
||||
def unapply(e: DslEntry): Option[Seq[Setting[_]]] =
|
||||
e match {
|
||||
case e: ProjectSettings => Some(e.toSettings)
|
||||
case _ => None
|
||||
}
|
||||
}
|
||||
|
||||
/** Represents a DSL entry which manipulates the current project. */
|
||||
sealed trait ProjectManipulation extends DslEntry {
|
||||
def toFunction: Project => Project
|
||||
// TODO - Should we store this?
|
||||
final def withPos(pos: RangePosition): DslEntry = this
|
||||
}
|
||||
object ProjectManipulation {
|
||||
def unapply(e: DslEntry): Option[Project => Project] =
|
||||
e match {
|
||||
case e: ProjectManipulation => Some(e.toFunction)
|
||||
case _ => None
|
||||
}
|
||||
}
|
||||
|
||||
/** this represents an actually Setting[_] or Seq[Setting[_]] configured by the sbt DSL. */
|
||||
case class DslSetting(settings: SettingsDefinition) extends ProjectSettings {
|
||||
def toSettings = settings.settings
|
||||
final def withPos(pos: RangePosition): DslEntry = DslSetting(settings.settings.map(_.withPos(pos)))
|
||||
}
|
||||
/** this represents an `enablePlugins()` in the sbt DSL */
|
||||
case class DslEnablePlugins(plugins: Seq[AutoPlugin]) extends ProjectManipulation {
|
||||
override val toFunction: Project => Project = _.enablePlugins(plugins: _*)
|
||||
}
|
||||
/** this represents an `disablePlugins()` in the sbt DSL */
|
||||
case class DslDisablePlugins(plugins: Seq[AutoPlugin]) extends ProjectManipulation {
|
||||
override val toFunction: Project => Project = _.disablePlugins(plugins: _*)
|
||||
}
|
||||
/** Represents registering a set of configurations with the current project. */
|
||||
case class DslConfigs(cs: Seq[Configuration]) extends ProjectManipulation {
|
||||
override val toFunction: Project => Project = _.configs(cs: _*)
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -2,6 +2,7 @@
|
|||
* Copyright 2011 Mark Harrah
|
||||
*/
|
||||
package sbt
|
||||
package internal
|
||||
|
||||
import sbt.internal.util.{ complete, AttributeEntry, AttributeKey, LineRange, MessageOnlyException, RangePosition, Settings }
|
||||
|
||||
|
|
@ -10,7 +11,7 @@ import compiler.{ Eval, EvalImports }
|
|||
import complete.DefaultParsers.validID
|
||||
import Def.{ ScopedKey, Setting }
|
||||
import Scope.GlobalScope
|
||||
import sbt.internals.parser.SbtParser
|
||||
import sbt.internal.parser.SbtParser
|
||||
|
||||
import scala.annotation.tailrec
|
||||
|
||||
|
|
@ -27,7 +28,7 @@ import sbt.io.IO
|
|||
*
|
||||
*
|
||||
*/
|
||||
object EvaluateConfigurations {
|
||||
private[sbt] object EvaluateConfigurations {
|
||||
|
||||
type LazyClassLoaded[T] = ClassLoader => T
|
||||
|
||||
|
|
@ -130,15 +131,15 @@ object EvaluateConfigurations {
|
|||
}
|
||||
val (settingsRaw, manipulationsRaw) =
|
||||
dslEntries map (_.result apply loader) partition {
|
||||
case internals.ProjectSettings(_) => true
|
||||
case _ => false
|
||||
case DslEntry.ProjectSettings(_) => true
|
||||
case _ => false
|
||||
}
|
||||
val settings = settingsRaw flatMap {
|
||||
case internals.ProjectSettings(settings) => settings
|
||||
case _ => Nil
|
||||
case DslEntry.ProjectSettings(settings) => settings
|
||||
case _ => Nil
|
||||
}
|
||||
val manipulations = manipulationsRaw map {
|
||||
case internals.ProjectManipulation(f) => f
|
||||
case DslEntry.ProjectManipulation(f) => f
|
||||
}
|
||||
// TODO -get project manipulations.
|
||||
new LoadedSbtFile(settings, projects, importDefs, manipulations, definitions, allGeneratedFiles)
|
||||
|
|
@ -158,8 +159,8 @@ object EvaluateConfigurations {
|
|||
* The name of the class we cast DSL "setting" (vs. definition) lines to.
|
||||
*/
|
||||
val SettingsDefinitionName = {
|
||||
val _ = classOf[sbt.internals.DslEntry] // this line exists to try to provide a compile-time error when the following line needs to be changed
|
||||
"sbt.internals.DslEntry"
|
||||
val _ = classOf[DslEntry] // this line exists to try to provide a compile-time error when the following line needs to be changed
|
||||
"sbt.internal.DslEntry"
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -171,10 +172,10 @@ object EvaluateConfigurations {
|
|||
* @param expression The scala expression we're compiling
|
||||
* @param range The original position in source of the expression, for error messages.
|
||||
*
|
||||
* @return A method that given an sbt classloader, can return the actual [[internals.DslEntry]] defined by
|
||||
* @return A method that given an sbt classloader, can return the actual [[sbt.internal.DslEntry]] defined by
|
||||
* the expression, and the sequence of .class files generated.
|
||||
*/
|
||||
private[sbt] def evaluateDslEntry(eval: Eval, name: String, imports: Seq[(String, Int)], expression: String, range: LineRange): TrackedEvalResult[internals.DslEntry] = {
|
||||
private[sbt] def evaluateDslEntry(eval: Eval, name: String, imports: Seq[(String, Int)], expression: String, range: LineRange): TrackedEvalResult[DslEntry] = {
|
||||
// TODO - Should we try to namespace these between.sbt files? IF they hash to the same value, they may actually be
|
||||
// exactly the same setting, so perhaps we don't care?
|
||||
val result = try {
|
||||
|
|
@ -186,7 +187,7 @@ object EvaluateConfigurations {
|
|||
TrackedEvalResult(result.generated,
|
||||
loader => {
|
||||
val pos = RangePosition(name, range shift 1)
|
||||
result.getValue(loader).asInstanceOf[internals.DslEntry].withPos(pos)
|
||||
result.getValue(loader).asInstanceOf[DslEntry].withPos(pos)
|
||||
})
|
||||
}
|
||||
|
||||
|
|
@ -207,8 +208,8 @@ object EvaluateConfigurations {
|
|||
def evaluateSetting(eval: Eval, name: String, imports: Seq[(String, Int)], expression: String, range: LineRange): LazyClassLoaded[Seq[Setting[_]]] =
|
||||
{
|
||||
evaluateDslEntry(eval, name, imports, expression, range).result andThen {
|
||||
case internals.ProjectSettings(values) => values
|
||||
case _ => Nil
|
||||
case DslEntry.ProjectSettings(values) => values
|
||||
case _ => Nil
|
||||
}
|
||||
}
|
||||
private[this] def isSpace = (c: Char) => Character isWhitespace c
|
||||
|
|
@ -1,12 +1,12 @@
|
|||
package sbt
|
||||
package internals
|
||||
package internal
|
||||
package parser
|
||||
|
||||
import sbt.internal.util.{ LineRange, MessageOnlyException }
|
||||
|
||||
import java.io.File
|
||||
|
||||
import sbt.internals.parser.SbtParser._
|
||||
import sbt.internal.parser.SbtParser._
|
||||
|
||||
import scala.reflect.runtime.universe._
|
||||
|
||||
|
|
@ -60,7 +60,7 @@ private[sbt] case class SbtParser(file: File, lines: Seq[String]) extends Parsed
|
|||
val (imports, settings, settingsTrees) = splitExpressions(file, lines)
|
||||
|
||||
private def splitExpressions(file: File, lines: Seq[String]): (Seq[(String, Int)], Seq[(String, LineRange)], Seq[(String, Tree)]) = {
|
||||
import sbt.internals.parser.MissingBracketHandler._
|
||||
import sbt.internal.parser.MissingBracketHandler._
|
||||
|
||||
import scala.compat.Platform.EOL
|
||||
import scala.reflect.runtime._
|
||||
|
|
@ -1,12 +1,12 @@
|
|||
package sbt
|
||||
package internals
|
||||
package internal
|
||||
package parser
|
||||
|
||||
import scala.reflect.runtime.universe._
|
||||
|
||||
private[sbt] object SbtRefactorings {
|
||||
|
||||
import sbt.internals.parser.SbtParser.{ END_OF_LINE, FAKE_FILE }
|
||||
import sbt.internal.parser.SbtParser.{ END_OF_LINE, FAKE_FILE }
|
||||
import sbt.SessionSettings.{ SessionSetting, SbtConfigFile }
|
||||
|
||||
val EMPTY_STRING = ""
|
||||
|
|
@ -1,65 +0,0 @@
|
|||
package sbt
|
||||
package internals
|
||||
|
||||
import sbt.internal.util.RangePosition
|
||||
|
||||
import sbt.librarymanagement.Configuration
|
||||
|
||||
import Def._
|
||||
|
||||
/** This reprsents a `Setting` expression configured by the sbt DSL. */
|
||||
sealed trait DslEntry {
|
||||
/** Called by the parser. Sets the position where this entry was defined in the build.sbt file. */
|
||||
def withPos(pos: RangePosition): DslEntry
|
||||
}
|
||||
object DslEntry {
|
||||
implicit def fromSettingsDef(inc: SettingsDefinition): DslEntry =
|
||||
DslSetting(inc)
|
||||
implicit def fromSettingsDef(inc: Seq[Setting[_]]): DslEntry =
|
||||
DslSetting(inc)
|
||||
}
|
||||
|
||||
/** Represents a DSL entry which adds settings to the current project. */
|
||||
sealed trait ProjectSettings extends DslEntry {
|
||||
def toSettings: Seq[Setting[_]]
|
||||
}
|
||||
object ProjectSettings {
|
||||
def unapply(e: DslEntry): Option[Seq[Setting[_]]] =
|
||||
e match {
|
||||
case e: ProjectSettings => Some(e.toSettings)
|
||||
case _ => None
|
||||
}
|
||||
}
|
||||
|
||||
/** Represents a DSL entry which manipulates the current project. */
|
||||
sealed trait ProjectManipulation extends DslEntry {
|
||||
def toFunction: Project => Project
|
||||
// TODO - Should we store this?
|
||||
final def withPos(pos: RangePosition): DslEntry = this
|
||||
}
|
||||
object ProjectManipulation {
|
||||
def unapply(e: DslEntry): Option[Project => Project] =
|
||||
e match {
|
||||
case e: ProjectManipulation => Some(e.toFunction)
|
||||
case _ => None
|
||||
}
|
||||
}
|
||||
|
||||
/** this represents an actually Setting[_] or Seq[Setting[_]] configured by the sbt DSL. */
|
||||
case class DslSetting(settings: SettingsDefinition) extends ProjectSettings {
|
||||
def toSettings = settings.settings
|
||||
final def withPos(pos: RangePosition): DslEntry = DslSetting(settings.settings.map(_.withPos(pos)))
|
||||
}
|
||||
/** this represents an `enablePlugins()` in the sbt DSL */
|
||||
case class DslEnablePlugins(plugins: Seq[AutoPlugin]) extends ProjectManipulation {
|
||||
override val toFunction: Project => Project = _.enablePlugins(plugins: _*)
|
||||
}
|
||||
/** this represents an `disablePlugins()` in the sbt DSL */
|
||||
case class DslDisablePlugins(plugins: Seq[AutoPlugin]) extends ProjectManipulation {
|
||||
override val toFunction: Project => Project = _.disablePlugins(plugins: _*)
|
||||
}
|
||||
/** Represents registering a set of configurations with the current project. */
|
||||
case class DslConfigs(cs: Seq[Configuration]) extends ProjectManipulation {
|
||||
override val toFunction: Project => Project = _.configs(cs: _*)
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
package sbt.internal.parser
|
||||
|
||||
import org.specs2.mutable._
|
||||
|
||||
trait AbstractSpec extends Specification with SplitExpression
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
package sbt.internals.parser
|
||||
|
||||
import sbt.EvaluateConfigurations
|
||||
package sbt
|
||||
package internal
|
||||
package parser
|
||||
|
||||
abstract class CheckIfParsedSpec(implicit val splitter: SplitExpressions.SplitExpression = EvaluateConfigurations.splitExpressions) extends AbstractSpec {
|
||||
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package sbt.internals.parser
|
||||
package sbt.internal.parser
|
||||
|
||||
class CommentedXmlSpec extends CheckIfParsedSpec {
|
||||
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package sbt.internals.parser
|
||||
package sbt.internal.parser
|
||||
|
||||
import sbt.internal.util.MessageOnlyException
|
||||
|
||||
|
|
@ -1,9 +1,10 @@
|
|||
package sbt.internals.parser
|
||||
package sbt
|
||||
package internal
|
||||
package parser
|
||||
|
||||
import java.io.File
|
||||
|
||||
import org.specs2.ScalaCheck
|
||||
import sbt.EvaluateConfigurations
|
||||
import sbt.internal.util.MessageOnlyException
|
||||
|
||||
import scala.io.Source
|
||||
|
|
@ -1,8 +1,9 @@
|
|||
package sbt.internals.parser
|
||||
package sbt
|
||||
package internal
|
||||
package parser
|
||||
|
||||
import java.io.File
|
||||
|
||||
import sbt.EvaluateConfigurations
|
||||
import sbt.internal.util.LineRange
|
||||
|
||||
import scala.annotation.tailrec
|
||||
|
|
@ -1,10 +1,11 @@
|
|||
package sbt.internals.parser
|
||||
package sbt
|
||||
package internal
|
||||
package parser
|
||||
|
||||
import java.io.File
|
||||
|
||||
import org.junit.runner.RunWith
|
||||
import org.specs2.runner.JUnitRunner
|
||||
import sbt.EvaluateConfigurations
|
||||
|
||||
import scala.io.Source
|
||||
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
package sbt
|
||||
package internals
|
||||
package internal
|
||||
package parser
|
||||
|
||||
import java.io.{ File, FilenameFilter }
|
||||
|
|
@ -1,4 +1,6 @@
|
|||
package sbt.internals.parser
|
||||
package sbt
|
||||
package internal
|
||||
package parser
|
||||
|
||||
import java.io.File
|
||||
|
||||
|
|
@ -1,4 +1,6 @@
|
|||
package sbt.internals.parser
|
||||
package sbt
|
||||
package internal
|
||||
package parser
|
||||
|
||||
import java.io.File
|
||||
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
package sbt
|
||||
package internals
|
||||
package internal
|
||||
package parser
|
||||
|
||||
import java.io.File
|
||||
|
|
@ -1,7 +1,8 @@
|
|||
package sbt.internals.parser
|
||||
package sbt
|
||||
package internal
|
||||
package parser
|
||||
|
||||
import org.specs2.mutable.Specification
|
||||
import sbt.EvaluateConfigurations
|
||||
|
||||
class SplitExpressionsTest extends Specification with SplitExpressionsBehavior {
|
||||
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
package sbt.internals.parser
|
||||
|
||||
import org.specs2.mutable._
|
||||
|
||||
trait AbstractSpec extends Specification with SplitExpression
|
||||
|
|
@ -1,5 +1,7 @@
|
|||
package sbt
|
||||
|
||||
import sbt.internal.DslEntry
|
||||
|
||||
object syntax extends syntax
|
||||
|
||||
abstract class syntax extends IOSyntax0 with sbt.std.TaskExtra with sbt.internal.util.Types with sbt.ProcessExtra
|
||||
|
|
@ -45,6 +47,10 @@ abstract class syntax extends IOSyntax0 with sbt.std.TaskExtra with sbt.internal
|
|||
def settingKey[T](description: String): SettingKey[T] = macro std.KeyMacro.settingKeyImpl[T]
|
||||
def taskKey[T](description: String): TaskKey[T] = macro std.KeyMacro.taskKeyImpl[T]
|
||||
def inputKey[T](description: String): InputKey[T] = macro std.KeyMacro.inputKeyImpl[T]
|
||||
|
||||
def enablePlugins(ps: AutoPlugin*): DslEntry = DslEntry.DslEnablePlugins(ps)
|
||||
def disablePlugins(ps: AutoPlugin*): DslEntry = DslEntry.DslDisablePlugins(ps)
|
||||
def configs(cs: Configuration*): DslEntry = DslEntry.DslConfigs(cs)
|
||||
}
|
||||
|
||||
// Todo share this this io.syntax
|
||||
|
|
|
|||
Loading…
Reference in New Issue