The implementation of GumTree algorithm.
GPL-3.0 License
Description:
GumTree is a Kotlin library for implementing the GumTree algorithm.
The origin paper can be found at here
Getting Started
Prerequisites:
Clone the Repository:
git clone [email protected]:Xanonymous-GitHub/gumtree.git
Build the Project:
./gradlew build
[!NOTE] This also runs the tests.
./gradlew test
[!TIP] Human-readable unit tests report generated by Kover can be found in
build/reports/kover/html/index.html
. The build folder is generated in each Gradle subproject after running thetest
task.
Usages
This project currently supports converting ANTLR's parse tree to GumTree
.
Assume we have a file, and UrlLexer
and UrlParser
are the lexer and parser for URLs.
Then we can convert the file to a GumTree
as follows:
// This API is defined in the `antlr-bridge` module.
val file = File("src/test/kotlin/data/urls.txt")
val inputStream = file.inputStream()
runBlocking {
GumTreeConverter.convertFrom(inputStream, ::UrlLexer, ::UrlParser, UrlParser::url)
}
You can use the DiffCalculator
class to compute the edit script between two GumTree
s.
val (tree1, tree2) = treePair
val calculator = DiffCalculator()
runBlocking {
val editScript = calculator.computeEditScriptFrom(tree1 to tree2)
assertEquals(7, editScript.size)
}