From 1d6bdbe1d1378e5d0c467d94c98d59fe7f643a4f Mon Sep 17 00:00:00 2001 From: AfonsoSantos96 Date: Thu, 10 Aug 2023 23:23:19 +0100 Subject: [PATCH] feat(HIS): add cyclomatic complexity metric check to script Signed-off-by: Afonso Santos --- docker/Dockerfile | 1 + his_checker.py | 23 ++++++++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 530ebf4..5c1b94e 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -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 && \ diff --git a/his_checker.py b/his_checker.py index 2ec03e9..d4f539b 100755 --- a/his_checker.py +++ b/his_checker.py @@ -9,9 +9,30 @@ import sys import argparse +import os + +CYCLOMATIC_THRESHOLD = 10 + +def process_complexity(files): + + """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__": - METRICS_LIST = [] + METRICS_LIST = [process_complexity] CHECK_FAIL = 0 PARSER = argparse.ArgumentParser() PARSER.add_argument("files", nargs="+", help="The files to process")