-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
e76512d
commit e4488e6
Showing
1 changed file
with
62 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,64 @@ | ||
# GumTree | ||
|
||
The implementation of GumTree algorithm in Kotlin. | ||
[![codecov](https://codecov.io/github/Xanonymous-GitHub/gumtree/graph/badge.svg?token=APHSDWWVC4)](https://codecov.io/github/Xanonymous-GitHub/gumtree) | ||
|
||
**Description:** | ||
|
||
GumTree is a Kotlin library for implementing the GumTree algorithm. | ||
|
||
The origin paper can be found at [here](https://doi.org/10.1145/2642937.2642982) | ||
|
||
**Getting Started** | ||
|
||
1. **Prerequisites:** | ||
* **JDK:** Gumtree requires JDK 21 to build and run. | ||
|
||
2. **Clone the Repository:** | ||
```bash | ||
git clone [email protected]:Xanonymous-GitHub/gumtree.git | ||
``` | ||
|
||
3. **Build the Project:** | ||
```bash | ||
./gradlew build | ||
``` | ||
|
||
> [!NOTE] | ||
> This also runs the tests. | ||
4. **Run Unit Tests:** | ||
```bash | ||
./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 the `test` 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: | ||
|
||
```kotlin | ||
// 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. | ||
|
||
```kotlin | ||
val (tree1, tree2) = treePair | ||
val calculator = DiffCalculator() | ||
|
||
runBlocking { | ||
val editScript = calculator.computeEditScriptFrom(tree1 to tree2) | ||
assertEquals(7, editScript.size) | ||
} | ||
``` |