Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/chicxurug/solmet-solidity-parser
A static analysis tool for calculating OO-style source code metrics for Solidity smart contracts.
https://github.com/chicxurug/solmet-solidity-parser
metrics solidity
Last synced: 2 months ago
JSON representation
A static analysis tool for calculating OO-style source code metrics for Solidity smart contracts.
- Host: GitHub
- URL: https://github.com/chicxurug/solmet-solidity-parser
- Owner: chicxurug
- License: apache-2.0
- Created: 2018-02-05T07:24:04.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2023-08-08T14:08:51.000Z (over 1 year ago)
- Last Synced: 2023-10-20T18:49:22.284Z (about 1 year ago)
- Topics: metrics, solidity
- Language: Java
- Homepage:
- Size: 134 KB
- Stars: 37
- Watchers: 3
- Forks: 12
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# SolMet
SolMet is a static analysis based metric calculator tool for Solidity smart contract programs.
Currently, it supports the following metrics:
* SLOC - number of source code lines
* LLOC - number of logical code lines (lines without empty and comment lines)
* CLOC - number of comment lines
* NF - number of functions
* McCC - McCabe's cyclomatic complexity
* WMC - weighted sum of McCabe's style complexity over the functions of a contract
* NL - the deepest nesting level of control structures in functions summed for a contract
* NLE - nesting level else-if
* NUMPAR -number of parameters
* NOS - number of statements
* DIT - depth of inheritance tree
* NOA - number of ancestors
* NOD - number of descendants
* CBO - coupling between object classes
* NA - number of attributes (i.e. states)
* NOI - number of outgoing invocations (i.e. fan-out)## Building the tool
You can build the tool with Maven to get an executable jar file:
```
mvn package
```## Using the tool
Usage is very simple, the built jar is executable.
It requires two parameters:
1) a Solidity file or a folder containing Solidity files
2) an output csv file path.
```
java -jar solmet-0.1.jar [input(s)] [output]
```
## Publications
Hegedűs P., "Towards Analyzing the Complexity Landscape of
Solidity Based Ethereum Smart Contracts", ACM/IEEE 1st International Workshop on Emerging Trends in Software Engineering for Blockchain, 2018 [[PDF]](http://publicatio.bibl.u-szeged.hu/14474/1/3hnJuJZyEJkfd6NEz9E0PF.pdf)## Output
The output is a comma separated file containing the values of the calculated metrics for each analyzed contracts/libraries/interfaces.
## Credits
The parser is based on the excellent antlr4 grammar available at https://github.com/solidityj/solidity-antlr4.