diff options
Diffstat (limited to 'examples')
6 files changed, 68 insertions, 0 deletions
diff --git a/examples/export-build-information/Main.scala b/examples/export-build-information/Main.scala new file mode 100644 index 0000000..586aa1d --- /dev/null +++ b/examples/export-build-information/Main.scala @@ -0,0 +1,6 @@ +package export_build_information +object Main{ + def main( args: Array[String] ): Unit = { + println( Console.GREEN ++ "Hello World" ++ Console.RESET ) + } +} diff --git a/examples/export-build-information/build/build.scala b/examples/export-build-information/build/build.scala new file mode 100644 index 0000000..23b3f2d --- /dev/null +++ b/examples/export-build-information/build/build.scala @@ -0,0 +1,3 @@ +import cbt._ + +class Build(val context: Context) extends BaseBuild diff --git a/examples/export-build-information/build/build/build.scala b/examples/export-build-information/build/build/build.scala new file mode 100644 index 0000000..c7d5d82 --- /dev/null +++ b/examples/export-build-information/build/build/build.scala @@ -0,0 +1,9 @@ +import cbt._ + +class Build(val context: Context) extends BuildBuild { + override def dependencies = + super.dependencies ++ + Resolver(mavenCentral, sonatypeReleases).bind( + ScalaDependency( "org.scala-lang.modules", "scala-xml", "1.0.6" ) + ) +} diff --git a/examples/new-style-macros-example/Hello.scala b/examples/new-style-macros-example/Hello.scala new file mode 100644 index 0000000..7e04dcb --- /dev/null +++ b/examples/new-style-macros-example/Hello.scala @@ -0,0 +1,6 @@ +package macroparadise_example +import macros._ + +@Main object Hello{ + println("hello, world!") +} diff --git a/examples/new-style-macros-example/build/build.scala b/examples/new-style-macros-example/build/build.scala new file mode 100644 index 0000000..2054aba --- /dev/null +++ b/examples/new-style-macros-example/build/build.scala @@ -0,0 +1,19 @@ +package macroparadise_example_build +import cbt._ + +trait SharedSettings extends NewStyleMacros{ + override def defaultScalaVersion = "2.12.2" +} + +class Build(val context: Context) extends SharedSettings{ + override def dependencies = + super.dependencies :+ + new MacroBuild( context.copy( workingDirectory = projectDirectory / "macros" ) ) +} + +class MacroBuild(val context: Context) extends SharedSettings{ + override def dependencies = + super.dependencies :+ + Resolver( mavenCentral ).bindOne( ScalaDependency( "org.scalameta", "scalameta", "1.8.0" ) ) +} + diff --git a/examples/new-style-macros-example/macros/Main.scala b/examples/new-style-macros-example/macros/Main.scala new file mode 100644 index 0000000..ecdce34 --- /dev/null +++ b/examples/new-style-macros-example/macros/Main.scala @@ -0,0 +1,25 @@ +package macroparadise_example.macros + +import scala.meta._ +import scala.collection.immutable.Seq + +class Main extends scala.annotation.StaticAnnotation { + inline def apply(defn: Any): Any = meta { + defn match { + case q"object $name { ..$stats }" => + MainMacroImpl.expand(name, stats) + case _ => + abort("@main must annotate an object.") + } + } +} + +// This is an example how we can refactor the macro implementation into a utility +// function which can be used for unit testing, see MainUnitTest. +object MainMacroImpl { + def expand(name: Term.Name, stats: Seq[Stat]): Defn.Object = { + val main = q"def main(args: Array[String]): Unit = { ..$stats }" + q"object $name { $main }" + } +} + |