diff options
author | Kieran Bingham <kieran.bingham@ideasonboard.com> | 2020-03-16 12:33:09 +0000 |
---|---|---|
committer | Kieran Bingham <kieran.bingham@ideasonboard.com> | 2020-03-16 15:21:51 +0000 |
commit | d15f979ead99fd0b2acc7cbe5bd1375d7c6df706 (patch) | |
tree | 27d57a9cc118b56994c0dbe6e1a0f64c35a9afa0 /utils/checkstyle.py | |
parent | 32ccaf458f1137b717c5a66c77d3e7dede9aa7a2 (diff) |
utils: checkstyle: Add a ShellChecker
Hook the utility 'shellcheck' into our checkstyle helper to
automatically verify shell script additions.
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'utils/checkstyle.py')
-rwxr-xr-x | utils/checkstyle.py | 38 |
1 files changed, 38 insertions, 0 deletions
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 # |