Phenomena is designed to support any type of graph-based representation of source code. Phenomena's base structure uses the omnilingual source code schema provided by Arthur. This schema can be extended with custom definitions and inference rules which are introduced by using a CodeObserver.
Phenomena currently supports the following types of code observers:
CodeStructureObserver is the base observer which is required to use Phenomena. This observer creates nodes and edges which contain the structure of the source code in the form of an abstract syntax graph.
Structure | Supported language(s) |
---|---|
Abstract syntax tree | Bash, C++, C#, Go, Java, JavaScript, PHP, Python, Ruby |
Semantic roles | Bash, C++, C#, Go, Java, JavaScript, PHP, Python, Ruby |
The dependence observers create edges between program statements and the preceding statements which they depend on.
Metric | Supported language(s) |
---|---|
Identifier access | Java |
Method call | Java |
The metric observers create attributes on correlating source code nodes with calculated metric data.
Metric | Supported language(s) |
---|---|
Cyclomatic complexity | Bash, C++, C#, Go, Java, JavaScript, PHP, Python, Ruby |