4 Stimmen

Wie man mit Scalatest ein Compiler-Plugin in Scala entwickelt

Derzeit entwickle ich ein Compiler-Plugin für Scala gemäß dem Artikel auf http://www.scala-lang.org/node/140 .

Hier ist der Code des Plugins:

package localhost

import scala.tools.nsc
import nsc.Global
import nsc.Phase
import nsc.plugins.Plugin
import nsc.plugins.PluginComponent

class DivByZero(val global: Global) extends Plugin {
  import global._

  val name = "divbyzero"
  val description = "checks for division by zero"
  val components = List[PluginComponent](Component)

  private object Component extends PluginComponent {
    val global: DivByZero.this.global.type = DivByZero.this.global
    val runsAfter = "refchecks"
    // Using the Scala Compiler 2.8.x the runsAfter should be written as below
    // val runsAfter = List[String]("refchecks");
    val phaseName = DivByZero.this.name
    def newPhase(_prev: Phase) = new DivByZeroPhase(_prev)    

    class DivByZeroPhase(prev: Phase) extends StdPhase(prev) {
      override def name = DivByZero.this.name
      def apply(unit: CompilationUnit) {
        for ( tree @ Apply(Select(rcvr, nme.DIV), List(Literal(Constant(0)))) <- unit.body;
             if rcvr.tpe <:< definitions.IntClass.tpe) 
          {
            unit.error(tree.pos, "definitely division by zero")
          }
      }
    }
  }
}

Ich tue die Dinge, die dort erwähnt werden und habe ein Makefile geschrieben, das alles kompiliert und dann eine Jar-Datei erstellt. Dann lade ich die Plugin-Jar-Datei mit der Testdatei mit dem folgenden Befehl:

scalac -Xplugin:myplugin.jar test.scala

und sehen Sie sich die Ausgabe an. Ich mag diesen Weg nicht, weil ich aus Ruby wusste, wie man tdd und bdd macht. Ich habe Scalatest installiert http://www.scalatest.org/ . Ist es irgendwie möglich, die jar-Datei oder die Klasse divbyzero zu testen? Ich weiß, dass das Plugin zuerst geladen wird, wenn es mit einer Datei ausgeführt wird. Ich bin sehr verdrahtet in meinem Kopf und weiß nicht, ob es möglich ist, direkt die Plugin-Klasse zu testen, ohne die jar-Datei zu erstellen (oder ist es sogar möglich, einige Funktionen und Klassen der jar-Datei zu testen)?

Wenn mir niemand helfen kann, kann ich mich weiter entwickeln wie in den guten alten Zeiten

Vielen Dank für Ihre Zeit und Hilfe Matthias

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X