summaryrefslogtreecommitdiff
path: root/utils/checkstyle.py
diff options
context:
space:
mode:
authorKieran Bingham <kieran.bingham@ideasonboard.com>2020-03-16 12:33:09 +0000
committerKieran Bingham <kieran.bingham@ideasonboard.com>2020-03-16 15:21:51 +0000
commitd15f979ead99fd0b2acc7cbe5bd1375d7c6df706 (patch)
tree27d57a9cc118b56994c0dbe6e1a0f64c35a9afa0 /utils/checkstyle.py
parent32ccaf458f1137b717c5a66c77d3e7dede9aa7a2 (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-xutils/checkstyle.py38
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
#