Functional companion to Kotlin's Compiler & IDE
Arrow Meta is a meta-programming library that cooperates with the Kotlin compiler in all it's phases bringing its full power to the community. Writing compiler plugins, source transformations, IDEA plugins, linters, type search engines, automatic code refactoring,... are just a few of the use cases of the things that can be accomplished with Meta.
The following example shows a Hello World Compiler Plugin.
The Hello World plugin auto implements the helloWorld
function by rewriting the Kotlin AST before the compiler proceeds.
val Meta.helloWorld: Plugin
get() =
"Hello World" {
meta(
func({ name == "helloWorld" }) { c ->
Transform.replace(
replacing = c,
newDeclaration =
"""|fun helloWorld(): Unit =
| println("Hello ΛRROW Meta!")
|""".function.synthetic
)
}
)
}
For any user code whose function name is helloWorld
our compiler plugin will replace the matching function for a
function that returns Unit and prints our message.
-fun helloWorld(): Unit = TODO()
+fun helloWorld(): Unit =
+ println("Hello ΛRROW Meta!")
Build and run tests
./gradlew buildMeta -Dorg.gradle.debug=true -Dkotlin.compiler.execution.strategy="in-process"
Build and run test + IDE plugin
./gradlew publishAndRunIde -Dorg.gradle.debug=true -Dkotlin.compiler.execution.strategy="in-process"