Calculate code metrics in various languages
This tool tries to calculate the following metrics for many, many programming languages
This tool was heavily inspired by metrics
For the following programming language we do offer the complete feature set.
Other languages work too, but might have a more limited support of what metrics can be extracted.
simply run
pip3 install multimetric
pip3 install -r requirements.txt
python3 setup.py build
usage: multimetric [-h] [--warn_compiler WARN_COMPILER] [--warn_duplication WARN_DUPLICATION] [--warn_functional WARN_FUNCTIONAL] [--warn_standard WARN_STANDARD]
[--warn_security WARN_SECURITY] [--coverage COVERAGE] [--dump] [--verbose] [--jobs JOBS] [--bugpredict {old,new}] [--maintindex {sei,classic,microsoft}]
files [files ...]
Calculate code metrics in various languages
positional arguments:
files Files to parse
options:
-h, --help show this help message and exit
--warn_compiler WARN_COMPILER
File(s) holding information about compiler warnings
--warn_duplication WARN_DUPLICATION
File(s) holding information about code duplications
--warn_functional WARN_FUNCTIONAL
File(s) holding information about static code analysis findings
--warn_standard WARN_STANDARD
File(s) holding information about language standard violations
--warn_security WARN_SECURITY
File(s) File(s) holding information about found security issue
--coverage COVERAGE File(s) with compiler warningsFile(s) holding information about testing coverage
--dump Just dump the token tree
--verbose Verbose logging output
--jobs JOBS Run x jobs in parallel
--bugpredict {old,new}
Method how to calculate the bug prediction
--maintindex {sei,classic,microsoft}
Method how to calculate the maintainability index
Currently you could import files of the following types for --warn_* or --coverage
Following information can be read
<file> = full path to file
<severity> = severity [error, warning, info]
<content> = optional string
Note: you could also add a single line, then <content>
has to be a number reflecting to total number of findings
File formats
csv: CSV file of following line format
<file>,<severity>,[<content>]
json: JSON file
<file>: {
["content": <content>,]
"severity": <severity>
}
By default tool guesses the content type by the filename, if that doesn't work for you please see below
Output will be written to stdout as json.
files
contains a list of each file passed by CLIoverall
contains the calculated values for all passed filesstats
contains the statistically calculated values over all files passed see Statistical additionsitem | description | range | recommendation |
---|---|---|---|
comment_ratio | Comment to Code percentage | 0..100 | > 30.0 |
cyclomatic_complexity | Cyclomatic complexity according to McCabe | 0..(inf) | < 10 |
fanout_external | Number imports from out of tree modules | 0..(inf) | |
fanout_internal | Number imports from same source tree modules | 0..(inf) | |
halstead_bugprop | Number of delivered bugs according to Halstead | 0..(inf) | < 0.05 |
halstead_difficulty | Difficulty according to Halstead | 0..(inf) | |
halstead_effort | Effort according to Halstead | 0..(inf) | |
halstead_timerequired | Time required to program according to Halstead | 0..(inf) | |
halstead_volume | Volume according to Halstead | 0..(inf) | |
lang | list of identified programming languages | list | |
loc | Lines of code | 1..(inf) | |
maintainability_index | Maintainability index | 0..100 | > 80.0 |
operands_sum | Number of used operands | 1..(inf) | |
operands_uniq | Number of unique used operands | 1..(inf) | |
operators_sum | Number of used operators | 1..(inf) | |
operators_uniq | Number of unique used operators | 1..(inf) | |
pylint | General quality score according to pylint | 0..100 | > 80.0 |
tiobe_compiler | Compiler warnings score according to TIOBE | 0..100 | > 90.0 |
tiobe_complexity | Complexity according to TIOBE | 0..100 | > 80.0 |
tiobe_coverage | Coverage according to TIOBE | 0..100 | > 80.0 |
tiobe_duplication | Code duplications score according to TIOBE | 0..100 | > 80.0 |
tiobe_fanout | Fan-Out score according to TIOBE | 0..100 | > 80.0 |
tiobe_functional | Functional defect score according to TIOBE | 0..100 | > 90.0 |
tiobe_security | Security score according to TIOBE | 0..100 | > 90.0 |
tiobe_standard | Language standard score according to TIOBE | 0..100 | > 80.0 |
tiobe | General quality score according to TIOBE | 0..100 | > 80.0 |
The item stats
contains in addition to the above mentioned the following items, which by themselves contain all the items mentioned at Item structure
max
= the maximum value of all items of the metricmean
= statistical mean over all items of the metricmedian
= statistical median over all items of the metricmin
= the minimum value of all items of the metricsd
= standard deviation over all items of the metric (needs more than one file to be passed by CLI)Feel free to create issues or pull requests
flowchart TD
A[I want to contribute!] --> C(Code your changes)
C -->|Flake8 successful| E[Open PR]
C -->|pytest successful| E[Open PR]
C -->|Contribution guideline accepted| E[Open PR]
C -->|README updated| E[Open PR]
flowchart TD
A[I want to contribute a new language config!] --> A1(Find permissively licensed test code)
A1 --> B(Pygments contains a lexer for the language)
B --> C(Create fanout settings)
C --> D[Code your changes]
D -->|Flake8 successful| E[Open PR]
D -->|pytest successful| E[Open PR]
D -->|Contribution guideline accepted| E[Open PR]
D -->|README updated| E[Open PR]