Skip to content

Commit

Permalink
feat(HIS): add cyclomatic complexity metric check to script
Browse files Browse the repository at this point in the history
Signed-off-by: Afonso Santos <[email protected]>
  • Loading branch information
AfonsoSantos96 committed Sep 28, 2023
1 parent 941ca01 commit b95729d
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 8 deletions.
1 change: 1 addition & 0 deletions docker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ RUN apt-get update && apt-get install -y \
clang-tidy-$CLANG_VERSION \
nodejs \
npm \
pmccabe \
enchant-2 && \
pip3 install gitlint && \
pip3 install license-expression && \
Expand Down
29 changes: 21 additions & 8 deletions his_checker.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,22 +9,35 @@

import sys
import argparse
import os

METRIC_FAIL = 0
CYCLOMATIC_THRESHOLD = 10

def process_metric(filenames):
def process_complexity(files):

"""Process each file."""
print("Checking X metric")
for file in filenames.files:
print(file)
"""Process McCabe Cyclomatic Complexity for each function in a file"""

metric_fail = 0
cc_tool = "pmccabe -c "
print("== Checking McCabe Cyclomatic Complexity metric ==")
for file in files.files:
sline = os.popen(cc_tool + str(file)).read().split('\n')
for fields in [line.split('\t') for line in sline[:-1]]:
if int(fields[0]) > CYCLOMATIC_THRESHOLD:
fields[5] = fields[5][fields[5].find("src"):]
print("At " + fields[5] + " has a complexity of "+ fields[0]
+ ". The maximum is "+str(CYCLOMATIC_THRESHOLD))
metric_fail += 1
print("== Check done with " + str(metric_fail) + " error(s) ==\n")
return metric_fail

if __name__ == "__main__":
CHECK_FAIL = 0
PARSER = argparse.ArgumentParser()
PARSER.add_argument("files", nargs="+", help="The files to process")
ARGS = PARSER.parse_args()

process_metric(ARGS)
CHECK_FAIL += process_complexity(ARGS)

if METRIC_FAIL:
if CHECK_FAIL:
sys.exit(-1)

0 comments on commit b95729d

Please sign in to comment.