aboutsummaryrefslogtreecommitdiff
path: root/libraries/capture_args
diff options
context:
space:
mode:
authorChristopher Vogt <oss.nsp@cvogt.org>2017-03-20 22:09:38 -0400
committerChristopher Vogt <oss.nsp@cvogt.org>2017-03-27 19:56:13 -0400
commitbba2abe7ee38b8903822a07578c46466923d13ed (patch)
treea357fb8def6f58a9ea9a37411f3f5640dcb525fe /libraries/capture_args
parentd2f8cade709b7d55a93e18592b6e38247d648ca9 (diff)
downloadcbt-bba2abe7ee38b8903822a07578c46466923d13ed.tar.gz
cbt-bba2abe7ee38b8903822a07578c46466923d13ed.tar.bz2
cbt-bba2abe7ee38b8903822a07578c46466923d13ed.zip
start modularizing cbt into libraries
this extracts certain parts of cbt into stand-alone libraries, which can be published to maven and used outside of cbt. This also adds scalariform for these parts of the code. This slows down cbt’s own build a lot because of the number of projects involved! So we’ll follow this by a bunch of performance tweak commits.
Diffstat (limited to 'libraries/capture_args')
-rw-r--r--libraries/capture_args/build/build.scala12
-rw-r--r--libraries/capture_args/build/build/build.scala5
-rw-r--r--libraries/capture_args/package.scala28
3 files changed, 30 insertions, 15 deletions
diff --git a/libraries/capture_args/build/build.scala b/libraries/capture_args/build/build.scala
index 24c1faa..fab36bf 100644
--- a/libraries/capture_args/build/build.scala
+++ b/libraries/capture_args/build/build.scala
@@ -1,11 +1,21 @@
package cbt_build.cbt.capture_args
import cbt._
-class Build(val context: Context) extends BaseBuild{
+import cbt_internal._
+class Build(val context: Context) extends Library{
+ def description = (
+ "macro that allows you to extract a functions arguments"
+ ++" as strings in order to programmatically pass them to a stringly typed"
+ ++" api such as a process call, http or a .main method"
+ )
+
+ def inceptionYear = 2017
+
override def dependencies = (
super.dependencies ++ // don't forget super.dependencies here for scala-library, etc.
Resolver( mavenCentral ).bind(
MavenDependency( "org.scala-lang", "scala-reflect", scalaVersion )
)
)
+
override def scalacOptions = super.scalacOptions :+ "-language:experimental.macros"
}
diff --git a/libraries/capture_args/build/build/build.scala b/libraries/capture_args/build/build/build.scala
new file mode 100644
index 0000000..6fabf47
--- /dev/null
+++ b/libraries/capture_args/build/build/build.scala
@@ -0,0 +1,5 @@
+package cbt_build.cbt.capture_args.build
+import cbt._
+class Build(val context: Context) extends BuildBuild with CbtInternal{
+ override def dependencies = super.dependencies :+ cbtInternal.library
+}
diff --git a/libraries/capture_args/package.scala b/libraries/capture_args/package.scala
index f5cd219..5c96a8d 100644
--- a/libraries/capture_args/package.scala
+++ b/libraries/capture_args/package.scala
@@ -2,29 +2,29 @@ package cbt.capture_args
import scala.reflect._
import scala.reflect.macros.blackbox.Context
-case class Argument( annotations: Seq[annotation.Annotation], name: String, values: Option[Seq[String]] ){
+case class Argument( annotations: Seq[annotation.Annotation], name: String, values: Option[Seq[String]] ) {
def toSeqOption = values.map( name +: _ )
}
case class Signature( name: String, args: Seq[Argument] )
-object `package`{
- def captureArgsImplementation(c: Context): c.Tree = {
+object `package` {
+ def captureArgsImplementation( c: Context ): c.Tree = {
import c.universe._
- def literal( a: Any ) = Literal(Constant(a))
- def ident( name: String ) = Ident(TermName(name))
+ def literal( a: Any ) = Literal( Constant( a ) )
+ def ident( name: String ) = Ident( TermName( name ) )
- def findOwnerRecursive(symbol: Symbol, predicate: Symbol => Boolean): Option[Symbol] = {
- Option(symbol).flatMap{
+ def findOwnerRecursive( symbol: Symbol, predicate: Symbol => Boolean ): Option[Symbol] = {
+ Option( symbol ).flatMap {
s =>
- if(s == NoSymbol) None else if(predicate(s)) Some(s) else findOwnerRecursive(s.owner, predicate)
+ if ( s == NoSymbol ) None else if ( predicate( s ) ) Some( s ) else findOwnerRecursive( s.owner, predicate )
}
}
val method: MethodSymbol = (
- findOwnerRecursive(c.internal.enclosingOwner, _.isMethod).map(_.asMethod)
+ findOwnerRecursive( c.internal.enclosingOwner, _.isMethod ).map( _.asMethod )
orElse
- findOwnerRecursive(c.internal.enclosingOwner, _.isClass).map(_.asClass.primaryConstructor.asMethod)
+ findOwnerRecursive( c.internal.enclosingOwner, _.isClass ).map( _.asClass.primaryConstructor.asMethod )
getOrElse {
c.error(
c.enclosingPosition,
@@ -33,14 +33,14 @@ object `package`{
???
}
)
- val name = literal(method.name.decodedName.toString)
+ val name = literal( method.name.decodedName.toString )
// Note: method.paramLists requires explicitly annotated result type
- val params = method.paramLists.flatten.map(_.asTerm)
+ val params = method.paramLists.flatten.map( _.asTerm )
- val args = params.map{ s =>
+ val args = params.map { s =>
val name = literal( s.name.decodedName.toString )
val i = ident( s.name.toString )
- q"_root_.cbt.capture_args.Argument( _root_.scala.Seq( ..${s.annotations.map(_.tree)} ), $name, valueToStrings($i) )"
+ q"_root_.cbt.capture_args.Argument( _root_.scala.Seq( ..${s.annotations.map( _.tree )} ), $name, valueToStrings($i) )"
}
val tree = q"""
_root_.cbt.capture_args.Signature( name = $name, args = Seq( ..$args ) )