Odin (object dependency inspector) — a static analyzer for EO programming language.
Work in progress
The project is still in active development stage and might not be usable or fully documented yet.
To run the project you will need sbt and JDK 8+.
As of now there is no app to run and interact with, but one can play with the source code of the analyzer in the sandbox project.
The entrypoint is in
The sandbox can be run via:
The source code can be ran in scala REPL via:
This might be helpful for development.
Defines EO AST. All other projects should depend on this one.
Defines backends for the static analyzer. A backend is something that produces an output from AST.
Backend that is able to generate EO program (now, roughly, represented as a list of strings) from EO AST.
Convenient tools that are used by other parts of the analyzer. This project must not depend on any other project.
Enables to interactively run and test source code of the analyzer. Facilitates the development and debug of the source code and enables to see intermediate results of the development. Any other project must not depend on it.
For more details on the project organization see:
build.sbt- main build configuration file
project/Dependendencies.scala- lists dependencies and versions for the projects
project/Compiler.scala- lists compiler flags used to compile the project and compiler plugins
master branch has the latest changes and must always be buildable. All the code changes are done through sending pull requests to the repositories. After CI has successfully finished and a reviewer has approved changes, the code can be merged to the
When a pull request is sent to
master or a branch with a pull request to
master is pushed, the following checks will run via GitHub Actions:
Build — all projects in the repository are built to check that the code compiles
Test — all tests are ran to check that new changes have not broken the existing functionality
Lint — run scalafix. If it fails run
sbt scalafixAlland fix issues that are not autofixable manually.
scalafix official documentation tells that SemanticDB compiler plugin with
-Yrangeposflag adds overhead to the compilation, so it is recommended to create a local
.jvmoptsfile with the following content:
-Xss8m -Xms1G -Xmx8G
Check code formatting — the code formatting will be checked via
scalafmt. If it fails run
sbt scalafmtAlland commit the updated formatting.
For more information, see