[libcamera-devel] [PATCH] utils: checkstyle: Add a ShellChecker

Laurent Pinchart laurent.pinchart at ideasonboard.com
Mon Mar 16 14:27:59 CET 2020


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>

> ---
>  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,

Laurent Pinchart


More information about the libcamera-devel mailing list