blob: 958f71282b6785aaebe8b4a1ac33433d4d3c700a (
plain) (
tree)
|
|
Scala compiler plugin template
------------------------------
This project is a template that can be used for creating compiler
plugins for the Scala compiler.
Installation
------------
To install the compiler plugin, run "ant install". This will create
an sbaz package for the template plugin and install it in the scala
installation available in your PATH.
The install command will also create a script for running the plugin
as standalone application. The command is called "runplugintemplate"
and available in your scala installation as well.
To uninstall the plugin again, run "and uninstall".
Alternatively, copy the file build/pack/plugintemplate.jar, generated
by "ant pack", to the directory misc/scala-devel/plugins of your
scala distribution. The scala compiler will then find and integrate
the new plugin.
Customization
-------------
The following files need to be edited when creating a new plugin
- plugin.properties
- misc/scalac-plugin.xml
- src / test / doc/examples: The source files of the template plugin
are located a package called "plugintemplate". This will most likely
be changed for new plugins.
When using eclipse for development, make sure "scala-compiler.jar" is
in the Java Build Path: Right-Click the project and select "Properties".
Then go to "Java Build Path" -> "Libraries" and add the jar file
"eclipse/plugins/ch.epfl.lamp.sdt.core[..]/lib/scala-compiler.jar".
Traverse, Transform, Check
--------------------------
There are several pre-defined components that can be used to code
the behavior of a plugin:
- TemplateTraverseComponent: a template for tree traversers. Used
to analyze and collect data about compiler trees.
-> implement the "check" method
- TemplateTransformComponent: a template for tree transformers.
-> implement "preTransform" and / or "postTransform"
- TemplateInfoTransformComponent: also a tree transformer, which
additionally is an InfoTransformer. Allows changing the type
of some symbols for later phases.
-> implement "preTransform" and / or "postTransform", and the
"apply" method of the "infoTransformer".
- TemplateAnnotationChecker: a plugin for the typechecker, useful
for pluggable type systems. Computes the subtyping between two
annotated types, and allows providing inferred type information.
-> implement "annotationsConform" and optionally "addAnnotations"
- TemplateComponent: the most general component. Can do anything it
likes with the CompilationUnits.
-> implement the "run" method
Ant tasks
---------
"build.xml" defines Ant tasks for building, testing and packing a
plugin. The tests are written using the ScalaTest framework
(http://www.artima.com/scalatest/).
Run the tests using "ant test", or "ant guitest".
|