[libcamera-devel] [PATCH] utils: checkstyle: Add a ShellChecker
Kieran Bingham
kieran.bingham at ideasonboard.com
Mon Mar 16 14:43:51 CET 2020
Hi Laurent
On 16/03/2020 13:27, Laurent Pinchart wrote:
> Hi Kieran,
>
> Thank you for the patch.
>
> On Mon, Mar 16, 2020 at 01:21:21PM +0000, Kieran Bingham wrote:
>> Hook the utility 'shellcheck' into our checkstyle helper to
>> automatically verify shell script additions.
>>
>> Signed-off-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
>
> Reviewed-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Thanks, I meant to add here as a note:
This produces the following output:
libcamera/utils$ ./checkstyle.py HEAD^
-----------------------------------------------------------------
652973f905fdb2b642e7893d7d39c000432c0e03 DNI: Bad shell bad shell
-----------------------------------------------------------------
--- utils/gen-version.sh
+++ utils/gen-version.sh
#25: ^-- SC2039: In POSIX sh, [[ ]] is undefined.
+if [[ -z "$build_dir" ]] || (echo "$build_dir" | grep -q "$src_dir")
---
1 potential style issue detected, please review
The only 'undesirable' issue is that in shellcheck, the message is
printed below the 'line', and thus the ' ^--' is aligned to the point
of the issue, which it isn't here.
That's not currently possible in our checkstyle, and I haven't even
filtered out the '^--', but those can be future improvements, and are
purely cosmetic really.
--
Kieran
>
>> ---
>> utils/checkstyle.py | 38 ++++++++++++++++++++++++++++++++++++++
>> 1 file changed, 38 insertions(+)
>>
>> diff --git a/utils/checkstyle.py b/utils/checkstyle.py
>> index 5ac14508bad5..0827a1e6ba0f 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
>> #
>
--
Regards
--
Kieran
More information about the libcamera-devel
mailing list