Cyclomatic complexity is a code quality metric
- multi charset support.(this may lead slow)
- pretty output
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
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.
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 |
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.
$ 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 |
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
- add tree-sitter-parser project to languages dir
- build new language so
- add new dir in
pcc
dir like python. - implement node, parser, vistor for new language
- add unit test
- 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