Python Cyclomatic Complexity Caculator
Project description
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
- add tree-sitter-parser project to languages dir
- build new language so
- add new dir in
pccdir like python. - implement node, parser, vistor for new language
- 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
audreyr/cookiecutter-pypackage
History
0.0.1 (2022-09-04)
- First release on PyPI.
0.0.2 (2022-09-05)
- Add C language support.
Project details
Release history Release notifications | RSS feed
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 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8c0728d631c3de50024fd0a27627b5242fc4516803c9ab33dcb41d5f52b79b39
|
|
| MD5 |
f646083a29720faa7cda11b5c3465aa3
|
|
| BLAKE2b-256 |
36c2eee901e1c9d1ac48eae78b875c0fbddf5ae90f31a5f7340d4f1d2231bfe2
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f80ce5ca598ab144e68ebfaaef367ec19592c0f310c292842a3ac790660a5343
|
|
| MD5 |
a46d1052abcbbe2bfaa645da6d34adfc
|
|
| BLAKE2b-256 |
72792f15546d08b6a5d0bfae0dcb147103e5e1cbb68607fce67c04a360418a57
|