Skip to main content

Python Cyclomatic Complexity Caculator

Project description

Python Cyclomatic Complexity Caculator

Installation | Usage | Examples

English | 简体中文

Features

Cyclomatic complexity is a code quality metric

  • multi charset support.(this may lead slow)
  • pretty output

Installation

pip install pcc-calc==0.0.2

you need download or build library first.

pcc ./tests/data/python3 
Do you want to creat [/your/path/pcc/.pcc] ? [y/N]: y
Create Dir [/your/path/pcc/.pcc] success!
Do you want to dowload one from [/your/path/pcc/.pcc/libpcc_ts_all.so] ? [y/N]: y
Download [/your/path/pcc/.pcc] success!
                    Code Cyclomatic Complexity Caculator                                       

| Complexity | Function          |                                                    File |
|------------|-------------------|---------------------------------------------------------|
|          6 | class             | /your/path/pcc/tests/data/python3/directory/class.py:15 |
|          6 | myfun             | /your/path/pcc/tests/data/python3/directory/class.py:32 |
|          6 | myfun2            | /your/path/pcc/tests/data/python3/directory/class.py:52 |
|          4 | function_in_file2 |  /your/path/pcc/tests/data/python3/directory/file2.py:1 |
|          2 | if_statment_0     |              /your/path/pcc/tests/data/python3/ifs.py:2 |
|          2 | if_statment_1     |              /your/path/pcc/tests/data/python3/ifs.py:8 |
|          2 | function_in_file1 |  /your/path/pcc/tests/data/python3/directory/file1.py:1 |
|          1 | get_url           |  /your/path/pcc/tests/data/python3/directory/class.py:7 |
|          1 | class             | /your/path/pcc/tests/data/python3/directory/class.py:12 |

Procee [4] files use Time: 0.022909164428710938 s

Usage

pcc --help
Usage: pcc [OPTIONS] CODE_PATH

  Cyclomatic Complexity Caculator

Options:
  -j, --jobs INTEGER            Parallel jobs count  [default: 10]
  -c, --count INTEGER           Output item count  [default: 10]
  -s, --sort BOOLEAN            sort by Complexity  [default: True]
  -e, --exclude_path DIRECTORY  exclude path
  --lib_path DIRECTORY          tree-sitter library path  [default: .pcc/]
  --version
  --help                        Show this message and exit.

Examples

caculate one file

pcc ./pcc/pcc.py
                               Code Cyclomatic Complexity Caculator

| Complexity | Function                       |                           File |
|------------|--------------------------------|--------------------------------|
|          2 | get_vistor                     |/your/project/pcc/pcc/pcc.py:19 |
|          2 | get_parser                     |/your/project/pcc/pcc/pcc.py:26 |
|          1 | detect_file_lanuage            |/your/project/pcc/pcc/pcc.py:14 |
|          1 | parse_code                     |/your/project/pcc/pcc/pcc.py:33 |
|          1 | calc_code_complexity           |/your/project/pcc/pcc/pcc.py:37 |
|          1 | calc_code_complexity_from_file |/your/project/pcc/pcc/pcc.py:49 |

caculate directory

pcc . -j 8 -e ./venv -e ./docs -e ./languages
                                        Code Cyclomatic Complexity Caculator

| Complexity | Function              |                                                      File |
|------------|-----------------------|-----------------------------------------------------------|
|          7 | class                 |            /your/project/pcc/pcc/python/vistor_impl.py:94 |
|          7 | class                 |           /your/project/pcc/pcc/python/vistor_impl.py:117 |
|          7 | class                 |  /your/project/pcc/build/lib/pcc/python/vistor_impl.py:94 |
|          7 | class                 | /your/project/pcc/build/lib/pcc/python/vistor_impl.py:117 |
|          6 | travel_dir_and_filter |                         /your/project/pcc/pcc/utils.py:33 |
|          6 | check_or_download     |                           /your/project/pcc/pcc/cli.py:38 |
|          6 | class                 |/your/project/pcc/tests/data/python3/directory/class.py:15 |
|          6 | myfun                 |/your/project/pcc/tests/data/python3/directory/class.py:32 |
|          6 | myfun2                |/your/project/pcc/tests/data/python3/directory/class.py:52 |
|          6 | travel_dir_and_filter |               /your/project/pcc/build/lib/pcc/utils.py:33 |

Procee [37] files use Time: 0.04288077354431152 s

as u can see, -e can exclude directory you don't want, and can use multi times.

multilang support

$ pcc ./tests/data/       
                  Code Cyclomatic Complexity Caculator                                       

| Complexity | Function          |                                                                         File |
|------------|-------------------|------------------------------------------------------------------------------|
|          6 | class             | /home/sss/cyclomatic_complexity/pcc/tests/data/python3/directory/class.py:15 |
|          6 | myfun             | /home/sss/cyclomatic_complexity/pcc/tests/data/python3/directory/class.py:32 |
|          6 | myfun2            | /home/sss/cyclomatic_complexity/pcc/tests/data/python3/directory/class.py:52 |
|          4 | function_in_file2 |  /home/sss/cyclomatic_complexity/pcc/tests/data/python3/directory/file2.py:1 |
|          4 | ifs_c_func        |                     /home/sss/cyclomatic_complexity/pcc/tests/data/c/ifs.c:1 |
|          4 | if_c              |            /home/sss/cyclomatic_complexity/pcc/tests/data/c/directory/if.c:1 |
|          3 | for_c             |           /home/sss/cyclomatic_complexity/pcc/tests/data/c/directory/for.c:1 |
|          3 | if_while_c        |         /home/sss/cyclomatic_complexity/pcc/tests/data/c/directory/while.c:1 |
|          2 | if_statment_0     |              /home/sss/cyclomatic_complexity/pcc/tests/data/python3/ifs.py:2 |
|          2 | if_statment_1     |              /home/sss/cyclomatic_complexity/pcc/tests/data/python3/ifs.py:8 |

Development

download repo and initialize environment

python3 -m venv venv
source ./venv/bin/activate
pip3 install -r requirements_dev.txt
# or use aliyun
pip3 install -r requirements_dev.txt -i https://mirrors.aliyun.com/pypi/simple/
git submodule update --init

compile dynamic library

make lib

run test

make test

How to add new language support

  1. add tree-sitter-parser project to languages dir
  2. build new language so
  3. add new dir in pcc dir like python.
  4. implement node, parser, vistor for new language
  5. add unit test

TodoList

  • add json output for future analyze
  • add macos, windows support
  • do more test
  • comment support,for ignore function
  • select language and sort group by language

Reference

Cookiecutter

audreyr/cookiecutter-pypackage

cyclomatic complexities Wiki

gocyclo

tree-sitter

py-tree-sitter

mccabe

cccalculator

History

0.0.1 (2022-09-04)

  • First release on PyPI.

0.0.2 (2022-09-05)

  • Add C language support.

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

pcc_calc-0.0.2.tar.gz (152.6 kB view details)

Uploaded Source

Built Distribution

pcc_calc-0.0.2-py2.py3-none-any.whl (16.4 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file pcc_calc-0.0.2.tar.gz.

File metadata

  • Download URL: pcc_calc-0.0.2.tar.gz
  • Upload date:
  • Size: 152.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.14.0 pkginfo/1.8.3 requests/2.28.1 setuptools/44.0.0 requests-toolbelt/0.9.1 tqdm/4.64.0 CPython/3.8.10

File hashes

Hashes for pcc_calc-0.0.2.tar.gz
Algorithm Hash digest
SHA256 8c0728d631c3de50024fd0a27627b5242fc4516803c9ab33dcb41d5f52b79b39
MD5 f646083a29720faa7cda11b5c3465aa3
BLAKE2b-256 36c2eee901e1c9d1ac48eae78b875c0fbddf5ae90f31a5f7340d4f1d2231bfe2

See more details on using hashes here.

File details

Details for the file pcc_calc-0.0.2-py2.py3-none-any.whl.

File metadata

  • Download URL: pcc_calc-0.0.2-py2.py3-none-any.whl
  • Upload date:
  • Size: 16.4 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.14.0 pkginfo/1.8.3 requests/2.28.1 setuptools/44.0.0 requests-toolbelt/0.9.1 tqdm/4.64.0 CPython/3.8.10

File hashes

Hashes for pcc_calc-0.0.2-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 f80ce5ca598ab144e68ebfaaef367ec19592c0f310c292842a3ac790660a5343
MD5 a46d1052abcbbe2bfaa645da6d34adfc
BLAKE2b-256 72792f15546d08b6a5d0bfae0dcb147103e5e1cbb68607fce67c04a360418a57

See more details on using hashes here.

Supported by

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