From d15f979ead99fd0b2acc7cbe5bd1375d7c6df706 Mon Sep 17 00:00:00 2001 From: Kieran Bingham Date: Mon, 16 Mar 2020 12:33:09 +0000 Subject: utils: checkstyle: Add a ShellChecker Hook the utility 'shellcheck' into our checkstyle helper to automatically verify shell script additions. Signed-off-by: Kieran Bingham Reviewed-by: Laurent Pinchart --- utils/checkstyle.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'utils/checkstyle.py') diff --git a/utils/checkstyle.py b/utils/checkstyle.py index 5ac14508..0827a1e6 100755 --- a/utils/checkstyle.py +++ b/utils/checkstyle.py @@ -341,6 +341,44 @@ class Pep8Checker(StyleChecker): return issues +class ShellChecker(StyleChecker): + patterns = ('*.sh',) + results_line_regex = re.compile('In - line ([0-9]+):') + + def __init__(self, content): + super().__init__() + self.__content = content + + def check(self, line_numbers): + issues = [] + data = ''.join(self.__content).encode('utf-8') + + try: + ret = subprocess.run(['shellcheck', '-Cnever', '-'], + input=data, stdout=subprocess.PIPE) + except FileNotFoundError: + issues.append(StyleIssue(0, None, "Please install shellcheck to validate shell script additions")) + return issues + + results = ret.stdout.decode('utf-8').splitlines() + for nr, item in enumerate(results): + search = re.search(ShellChecker.results_line_regex, item) + if search is None: + continue + + line_number = int(search.group(1)) + line = results[nr + 1] + msg = results[nr + 2] + + # Determined, but not yet used + position = msg.find('^') + 1 + + if line_number in line_numbers: + issues.append(StyleIssue(line_number, line, msg)) + + return issues + + # ------------------------------------------------------------------------------ # Formatters # -- cgit v1.2.1