HyperAST is an AST structured as a Direct Acyclic Graph (DAG) (similar to MerkleDAG used in Git). An HyperAST is efficiently constructed by leveraging Git and TreeSitter.
It reimplements the Gumtree algorithm in Rust while using HyperAST as the underlying AST structure.
It implements a use-def solver, that uses a context-free indexing of references present in subtrees (each subtree has a bloom filter of contained references).
You can use the dedicated GUI in your browser. However, in order to use any of the GUI features, you will need to launch/connect to the REST API server.
Look there for instruction on how to install Nix on your system.
nix run .#hyperast-webapi // similar to the prev. mentioned cargo run
nix run github:HyperAST/HyperAST#hyperast-webapi // here nix handles everything, no need to clone!
This will download all dependencies and build locally. This will work on any *NIX system (Linux, WSL, MACOSX, ...).
There is also a devShell provided with all the necessary dependencies installed in a healthy environment to develop and build the project. You can enter the environement with:
nix develop # from the project root dir
cargo run -p client --release # from the project root dir, after having cloned the repository
Note: Currently HyperAST uses features from the nightly channel, so you should definetly use rustup, the Rust version manager.
If you use HyperAST and/or HyperDiff in an academic purpose, please cite the following papers:
@inproceedings{ledilavrec:hal-03764541,
TITLE = {{HyperAST: Enabling Efficient Analysis of Software Histories at Scale}},
AUTHOR = {Le Dilavrec, Quentin and Khelladi, Djamel Eddine and Blouin, Arnaud and J{\'e}z{\'e}quel, Jean-Marc},
URL = {https://hal.inria.fr/hal-03764541},
BOOKTITLE = {{ASE 2022 - 37th IEEE/ACM International Conference on Automated Software Engineering}},
PUBLISHER = {{IEEE}},
PAGES = {1-12},
YEAR = {2022}
}
@inproceedings{ledilavrec:hal-04189855,
TITLE = {{HyperDiff: Computing Source Code Diffs at Scale}},
AUTHOR = {Le Dilavrec, Quentin and Khelladi, Djamel Eddine and Blouin, Arnaud and J{\'e}z{\'e}quel, Jean-Marc},
URL = {https://inria.hal.science/hal-04189855},
BOOKTITLE = {{ESEC/FSE 2023 - 31st ACM Joint European Software Engineering Conference and Symposium on the Foundations of Software Engineering}},
PUBLISHER = {{ACM}},
PAGES = {1-12},
YEAR = {2023}
}