Skip to content

HyperAST/HyperAST

Repository files navigation

HyperAST

CICD badge DOI

Home Page HyperAST



Summary

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).

How to use

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.

Launch server with Nix (A package manager for reproducible, declarative and reliable systems)

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

Launch server with Cargo (You have to handle depencies such as rustc, openssl, ... yourself)

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.

How to Cite

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}
}