diff options
author | Li Haoyi <haoyi.sg@gmail.com> | 2017-10-21 21:00:40 -0700 |
---|---|---|
committer | Li Haoyi <haoyi.sg@gmail.com> | 2017-10-21 21:00:40 -0700 |
commit | 06afaf6d3cf65cc7b42fa5f31aa6c48421626b6e (patch) | |
tree | 7b7ea4d8c1358b763e3372daa66dc66783678297 | |
parent | 5a7e3db2e39e8cd1d3cd56d186c055439ed6d160 (diff) | |
download | mill-06afaf6d3cf65cc7b42fa5f31aa6c48421626b6e.tar.gz mill-06afaf6d3cf65cc7b42fa5f31aa6c48421626b6e.tar.bz2 mill-06afaf6d3cf65cc7b42fa5f31aa6c48421626b6e.zip |
- Nest `StaticContext` into `DefCtx`
- Implement `Target.noop`, to let us construct target graphs without needing to create dummy implementations
-rw-r--r-- | src/main/scala/hbt/DefCtx.scala | 35 | ||||
-rw-r--r-- | src/main/scala/hbt/StaticContext.scala | 33 | ||||
-rw-r--r-- | src/main/scala/hbt/Target.scala | 4 | ||||
-rw-r--r-- | src/test/scala/hbt/StaticContextTests.scala | 2 |
4 files changed, 40 insertions, 34 deletions
diff --git a/src/main/scala/hbt/DefCtx.scala b/src/main/scala/hbt/DefCtx.scala new file mode 100644 index 00000000..1be06cd4 --- /dev/null +++ b/src/main/scala/hbt/DefCtx.scala @@ -0,0 +1,35 @@ +package hbt + + +import scala.language.experimental.macros +import scala.reflect.macros._ + + +case class DefCtx(staticEnclosing: Option[String]) +object DefCtx{ + case class StaticContext(value: Boolean) + object StaticContext { + implicit def default: StaticContext = macro applyImpl + def rec(c: Context)(expr: c.Symbol): Boolean = { + import c.universe._ + // Classes and traits and such + if(!expr.isModuleClass && expr.isClass) false + // Method contents + else if(expr.isMethod) false + else if(expr.owner == NoSymbol) true + else rec(c)(expr.owner) + } + + def applyImpl(c: Context): c.Expr[StaticContext] = { + import c.universe._ + val staticContext = rec(c)(c.internal.enclosingOwner) + c.Expr[StaticContext](q"hbt.DefCtx.StaticContext($staticContext)") + } + } + + implicit def default(implicit enc: sourcecode.Enclosing, + sc: StaticContext) = { + if (sc.value) DefCtx(Some(enc.value)) + else DefCtx(None) + } +}
\ No newline at end of file diff --git a/src/main/scala/hbt/StaticContext.scala b/src/main/scala/hbt/StaticContext.scala deleted file mode 100644 index 60298a3f..00000000 --- a/src/main/scala/hbt/StaticContext.scala +++ /dev/null @@ -1,33 +0,0 @@ -package hbt - - -import scala.language.experimental.macros -import scala.reflect.macros._ - -case class StaticContext(value: Boolean) -object StaticContext { - implicit def default: StaticContext = macro applyImpl - def rec(c: Context)(expr: c.Symbol): Boolean = { - import c.universe._ - // Classes and traits and such - if(!expr.isModuleClass && expr.isClass) false - // Method contents - else if(expr.isMethod) false - else if(expr.owner == NoSymbol) true - else rec(c)(expr.owner) - } - - def applyImpl(c: Context): c.Expr[StaticContext] = { - import c.universe._ - val staticContext = rec(c)(c.internal.enclosingOwner) - c.Expr[StaticContext](q"hbt.StaticContext($staticContext)") - } -} -case class DefCtx(staticEnclosing: Option[String]) -object DefCtx{ - implicit def default(implicit enc: sourcecode.Enclosing, - sc: StaticContext) = { - if (sc.value) DefCtx(Some(enc.value)) - else DefCtx(None) - } -}
\ No newline at end of file diff --git a/src/main/scala/hbt/Target.scala b/src/main/scala/hbt/Target.scala index 7b1c5166..c5d5433b 100644 --- a/src/main/scala/hbt/Target.scala +++ b/src/main/scala/hbt/Target.scala @@ -22,6 +22,10 @@ trait Target[T]{ } object Target{ + def noop(inputs: Target[_]*)(implicit defCtx: DefCtx) = NoopTarget(inputs, defCtx) + case class NoopTarget(inputs: Seq[Target[_]], defCtx: DefCtx) extends Target[Unit]{ + def evaluate(args: Args) = () + } def traverse[T](source: Seq[Target[T]])(implicit defCtx: DefCtx) = { Traverse[T](source, defCtx) } diff --git a/src/test/scala/hbt/StaticContextTests.scala b/src/test/scala/hbt/StaticContextTests.scala index 022cfd1e..c7fcdcd7 100644 --- a/src/test/scala/hbt/StaticContextTests.scala +++ b/src/test/scala/hbt/StaticContextTests.scala @@ -1,5 +1,5 @@ package hbt - +import DefCtx.StaticContext import utest._ class Helper{ val static = implicitly[StaticContext] |