Skip to content

Commit

Permalink
scala 2.12! macros!
Browse files Browse the repository at this point in the history
Added a macro subproject and moved the entire repo to Scala 2.12!
  • Loading branch information
austinmiller committed Aug 6, 2017
1 parent a3e183e commit f88463a
Show file tree
Hide file tree
Showing 4 changed files with 82 additions and 24 deletions.
70 changes: 46 additions & 24 deletions build.sbt
@@ -1,25 +1,47 @@
import com.github.retronym.SbtOneJar._

name := "augustmc"
organization := "augustmc"
version := "2017.1"
scalaVersion := "2.11.8"

oneJarSettings

mainClass in Compile := Some("aug.gui.Main")

libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.1.7"
libraryDependencies += "com.typesafe.scala-logging" %% "scala-logging" % "3.4.0"

libraryDependencies += "org.mongodb.scala" % "mongo-scala-driver_2.11" % "2.1.0"

libraryDependencies += "commons-io" % "commons-io" % "2.5"
libraryDependencies += "commons-lang" % "commons-lang" % "2.6"

libraryDependencies += "org.scalatest" %% "scalatest" % "2.2.6" % "test"

libraryDependencies += "org.reflections" % "reflections" % "0.9.11"

libraryDependencies += "mrj" % "MRJToolkitStubs" % "1.0"

import Dependencies._
import sbt.Keys._

lazy val macroSettings = Seq(
libraryDependencies += scalameta,
addCompilerPlugin(paradise),
scalacOptions += "-Xplugin-require:macroparadise"
)

lazy val commonSettings = Seq(
version := "2017.1",
scalaVersion := scala212,
exportJars := true,
libraryDependencies ++= Seq(
"ch.qos.logback" % "logback-classic" % "1.1.7",
"com.typesafe.scala-logging" %% "scala-logging" % "3.7.2",
"org.mongodb.scala" %% "mongo-scala-driver" % "2.1.0",
"commons-io" % "commons-io" % "2.5",
"commons-lang" % "commons-lang" % "2.6",
"org.scalatest" %% "scalatest" % "3.2.0-SNAP9" % "test",
"org.reflections" % "reflections" % "0.9.11",
"mrj" % "MRJToolkitStubs" % "1.0"
)
) ++ oneJarSettings

lazy val rootSettings = Seq(
name := "augustmc",
organization := "augustmc",
mainClass in Compile := Some("aug.gui.Main")
)

lazy val macroProject = project
.in(file("macro"))
.settings(
macroSettings,
commonSettings
)

lazy val root = project
.in(file("."))
.dependsOn(macroProject)
.settings(
macroSettings,
commonSettings,
rootSettings
)
24 changes: 24 additions & 0 deletions macro/src/main/scala/aug/macros/Demo.scala
@@ -0,0 +1,24 @@
package aug.macros

import scala.meta._
import scala.collection.immutable.Seq

class Class2Map extends scala.annotation.StaticAnnotation {
inline def apply(defn: Any): Any = meta {
defn match {
case cls @ Defn.Class(_, _, _, Ctor.Primary(_, _, paramss), template) =>
val namesToValues: Seq[Term.Tuple] = paramss.flatten.map { param =>
q"(${param.name.syntax}, ${Term.Name(param.name.value)})"
}
val toMapImpl: Term =
q"_root_.scala.collection.Map[String, Any](..$namesToValues)"
val toMap =
q"def toMap: _root_.scala.collection.Map[String, Any] = $toMapImpl"
val templateStats: Seq[Stat] = toMap +: template.stats.getOrElse(Nil)
cls.copy(templ = template.copy(stats = Some(templateStats)))
case _ =>
println(defn.structure)
abort("@Class2Map must annotate a class.")
}
}
}
11 changes: 11 additions & 0 deletions project/Dependencies.scala
@@ -0,0 +1,11 @@
import sbt._, Keys._

object Dependencies {
lazy val MetaVersion = "1.8.0"
lazy val ParadiseVersion = "3.0.0-M10"
lazy val scala212 = "2.12.3"
lazy val scalameta = "org.scalameta" %% "scalameta" % MetaVersion
lazy val contrib = "org.scalameta" %% "contrib" % MetaVersion
lazy val testkit = "org.scalameta" %% "testkit" % MetaVersion
lazy val paradise = "org.scalameta" % "paradise" % ParadiseVersion cross CrossVersion.full
}
1 change: 1 addition & 0 deletions src/main/scala/aug/gui/MainWindow.scala
Expand Up @@ -7,6 +7,7 @@ import javax.swing._

import aug.gui.settings.SettingsWindow
import aug.io.{ConnectionManager, SystemLog, TransparentColor}
import aug.macros.Class2Map
import aug.profile.{ConfigManager, Profile}
import aug.util.Util
import com.bulenkov.darcula.DarculaLaf
Expand Down

0 comments on commit f88463a

Please sign in to comment.