Skip to main content

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

  • files contains a list of each file passed by CLI
  • overall contains the calculated values for all passed files
  • stats contains 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 metric
  • mean = statistical mean over all items of the metric
  • median = statistical median over all items of the metric
  • min = the minimum value of all items of the metric
  • sd = 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

modernmetric-1.5.9.tar.gz (18.0 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

modernmetric-1.5.9-py3-none-any.whl (29.7 kB view details)

Uploaded Python 3

File details

Details for the file modernmetric-1.5.9.tar.gz.

File metadata

  • Download URL: modernmetric-1.5.9.tar.gz
  • Upload date:
  • Size: 18.0 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for modernmetric-1.5.9.tar.gz
Algorithm Hash digest
SHA256 0474a1f134b920185e0f0f9b8d5378c0a66f53ac47cca89f8e719f9b05f3403f
MD5 47eb0a82c37d54fae3d62f937ef96e66
BLAKE2b-256 15e0ebdbc38ed681484e2119b30412430c8314b73f6c33cc40cb623f44b03248

See more details on using hashes here.

Provenance

The following attestation bundles were made for modernmetric-1.5.9.tar.gz:

Publisher: test.yml on VerinFast/modernmetric

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file modernmetric-1.5.9-py3-none-any.whl.

File metadata

  • Download URL: modernmetric-1.5.9-py3-none-any.whl
  • Upload date:
  • Size: 29.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for modernmetric-1.5.9-py3-none-any.whl
Algorithm Hash digest
SHA256 097dfc30304526f9c3a89194c5faf6fecf512616f8f9e1efe12b9f84dea64300
MD5 2f90f00fbea6b1bd2a4ef54a152feac0
BLAKE2b-256 d5c51195933fe861f54d36ba0619996849e85b0880caa3b1d92239df05ad2cf8

See more details on using hashes here.

Provenance

The following attestation bundles were made for modernmetric-1.5.9-py3-none-any.whl:

Publisher: test.yml on VerinFast/modernmetric

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page