shellmetrics
shellmetrics copied to clipboard
Cyclomatic Complexity Analyzer for bash, mksh, zsh and POSIX shells
ShellMetrics
ShellMetrics is Cyclomatic Complexity Analyzer for shell script.
Requirements
ShellMetrics is written by shell script.
One of the following shells is required: bash
, mksh
, yash
, zsh
Installation
curl -fsSL https://git.io/shellmetrics > ~/bin/shellmetrics
chmod +x ~/bin/shellmetrics
or
wget https://git.io/shellmetrics -O ~/bin/shellmetrics
chmod +x ~/bin/shellmetrics
Usage
Usage: shellmetrics [options] files...
-s, --shell The path of shell to use as parser [default: bash]
Supported shells: bash, mksh, yash, zsh
--[no-]color Enable / Disable color [default: enabled]
--csv Generate CSV output
-p, --pretty Format pretty with wrapper function(s)
-d, --debug Display parsed data for debug instead of report
-v, --version Display the version
-h, --help You're looking at it
Metric values vary slightly depending on the shell used.
Example
ShellMetrics self metrics.
- NLOC - Non-comment Lines of Code
- LLOC - Logical Lines of Code
- CCN - Cyclomatic Complexity number
$ shellmetrics ./shellmetrics
==============================================================================
LLOC CCN Location
------------------------------------------------------------------------------
1 1 usage:9 shellmetrics
1 1 proxy:35 shellmetrics
1 1 putsn:40 shellmetrics
1 1 putsn:44 shellmetrics
4 2 putsn:39 shellmetrics
9 2 count:51 shellmetrics
2 1 is_comment_line:64 shellmetrics
2 2 is_blank_line:69 shellmetrics
3 1 repeat_string:73 shellmetrics
3 2 array:79 shellmetrics
2 1 array_is_empty:86 shellmetrics
7 2 push_array:91 shellmetrics
11 3 pop_array:102 shellmetrics
11 3 shift_array:119 shellmetrics
8 3 peel:136 shellmetrics
7 3 pretty:149 shellmetrics
2 1 process:162 shellmetrics
65 27 parse:167 shellmetrics
21 8 analyze:238 shellmetrics
56 6 default_report:274 shellmetrics
10 4 csv_report:372 shellmetrics
3 1 title:389 shellmetrics
9 5 init_mode:395 shellmetrics
9 2 main:412 shellmetrics
4 2 error:426 shellmetrics
2 1 abort:435 shellmetrics
1 1 unknown:440 shellmetrics
1 1 required:441 shellmetrics
1 1 param:442 shellmetrics
1 1 params:443 shellmetrics
2 1 params_:444 shellmetrics
20 12 parse_options:446 shellmetrics
52 2 <main> shellmetrics
------------------------------------------------------------------------------
1 file(s), 33 function(s) analyzed. [bash 4.4.20(1)-release]
==============================================================================
NLOC NLOC LLOC LLOC CCN Func File (lines:comment:blank)
total avg total avg avg cnt
------------------------------------------------------------------------------
412 12.48 332 10.06 3.18 33 shellmetrics (479:5:62)
------------------------------------------------------------------------------
==============================================================================
NLOC NLOC LLOC LLOC CCN Func File lines comment blank
total avg total avg avg cnt cnt total total total
------------------------------------------------------------------------------
412 12.48 332 10.06 3.18 33 1 479 5 62
------------------------------------------------------------------------------
Contribution
How to test
ShellMetrics tested by ShellSpec.
To test, install ShellSpec and run spellspec
on the project root directory.