Calculate code metrics in various languages
Project description
Modern Metric
Calculate code metrics and complexity in various languages
Purpose
This tool tries to calculate the following metrics for many, many programming languages
- Comment to Code percentage
- Cyclomatic complexity according to McCabe
- Difficulty according to Halstead
- Effort according to Halstead
- Fan-Out
- Lines of code
- Maintainability index
- Metric according to pylint
- Metric according to TIOBE
- Number of delivered bugs according to Halstead
- Time required to program according to Halstead
- Volume according to Halstead
This tool was heavily inspired by metrics
Requirements
Installation
PyPi
simply run
pip3 install modernmetric
From source
- git clone this repository
- cd to <clone folder>
- Install the needed requirements by running
pip3 install -r requirements.txt - run
python3 setup.py build
Usage
usage: modernmetric [-h] [--warn_compiler WARN_COMPILER]
[--warn_duplication WARN_DUPLICATION]
[--warn_functional WARN_FUNCTIONAL]
[--warn_standard WARN_STANDARD]
[--warn_security WARN_SECURITY] [--coverage COVERAGE]
[--bugpredict {old,new}]
[--maintindex {sei,classic,microsoft}]
[--file=path_to_filelist]
AND/OR
files [files ...]
Calculate code metrics in various languages
positional arguments:
files Files to parse
optional arguments:
-h, --help show this help message and exit
--file=path_to_filelist
Path to JSON filelist to scan. Format is:
[
{
"name": "test.c",
"path": "../testfiles/test.c"
}
]
--output_file=path to output, optional
--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
--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
<content> = either a string
<severity> = optional severity
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>,<content>,<severity>
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
Output will be written to stdout as json.
Output structure
filescontains a list of each file passed by CLIoverallcontains the calculated values for all passed filesstatscontains the statistically calculated values over all files passed see Statistical additions
Item structure
| item | 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 |
Statistics
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
Further reading
Bugs & Contribution
Feel free to create issues or pull requests
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file techlens_metrics-0.4.0.tar.gz.
File metadata
- Download URL: techlens_metrics-0.4.0.tar.gz
- Upload date:
- Size: 18.0 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c274528d6aa10c8105cd884ae29449dcb9c5283af89cfd92ec39d086978e396e
|
|
| MD5 |
9c4ba136a51f566af08030e3411f4172
|
|
| BLAKE2b-256 |
50b1ca6c20448978910caa28922331b6c8d29d0c8d3e281258cdc3a581c14bc7
|
File details
Details for the file techlens_metrics-0.4.0-py3-none-any.whl.
File metadata
- Download URL: techlens_metrics-0.4.0-py3-none-any.whl
- Upload date:
- Size: 28.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cd9284d24c3bc7943e96238c78ea51e523a28b45980b08fccf6ae467f066dc10
|
|
| MD5 |
9da70e2d76f4a0b030545caf1144ca69
|
|
| BLAKE2b-256 |
29f22663799a6ac3aed5eb1d2519cc5870546f2253352b9a4321e2af0c42cc82
|