[PATCH 3/3] utils: checkstyle: Add a python formatter

Laurent Pinchart laurent.pinchart at ideasonboard.com
Mon Sep 2 16:41:34 CEST 2024


Hi Stefan,

On Mon, Sep 02, 2024 at 04:14:20PM +0200, Stefan Klug wrote:
> On Fri, Aug 30, 2024 at 06:06:28PM +0300, Laurent Pinchart wrote:
> > On Fri, Aug 30, 2024 at 02:53:00PM +0200, Stefan Klug wrote:
> > > Reporting style issues on python files is great, automatically fixing
> > > them is even better. Add a call to autopep8 for python files.
> > > 
> > > Signed-off-by: Stefan Klug <stefan.klug at ideasonboard.com>
> > > ---
> > >  utils/checkstyle.py | 15 +++++++++++++++
> > >  1 file changed, 15 insertions(+)
> > > 
> > > diff --git a/utils/checkstyle.py b/utils/checkstyle.py
> > > index 5901f1a71562..ed15145b64a4 100755
> > > --- a/utils/checkstyle.py
> > > +++ b/utils/checkstyle.py
> > > @@ -954,6 +954,21 @@ class StripTrailingSpaceFormatter(Formatter):
> > >          return ''.join(lines)
> > >  
> > >  
> > > +class Pep8Formatter(Formatter):
> > > +    patterns = ('*.py',)
> > > +
> > > +    @classmethod
> > > +    def format(cls, filename, data):
> > > +        try:
> > > +            ret = subprocess.run(['autopep8', '--ignore=E501', '-'],
> > > +                                 input=data.encode('utf-8'), stdout=subprocess.PIPE)
> > > +        except FileNotFoundError:
> > > +            issues.append(StyleIssue(0, None, None, 'Please install autopep8 to format python additions'))
> > > +            return issues
> > > +
> > > +        return ret.stdout.decode('utf-8')
> > > +
> > > +
> > 
> > Testing this, on a simple patch that breaks the coding style, I get
> > 
> > ----------------------------------------------------------------------------------
> > dea6e2fea04866b477ca9bd622c885ca74b50d9c utils: checkstyle.py: Test PEP8 formatter
> > ----------------------------------------------------------------------------------
> > --- utils/checkstyle.py
> > +++ utils/checkstyle.py
> > @@ -728,7 +730,7 @@
> >              issues.append(StyleIssue(0, None, None, 'Please install pycodestyle to validate python additions'))
> >              return issues
> > 
> > -        results = ret.stdout.decode('utf-8').splitlines( )
> > +        results = ret.stdout.decode('utf-8').splitlines()
> >          for item in results:
> >              search = re.search(Pep8Checker.results_regex, item)
> >              line_number = int(search.group(1))
> > #731: E201 whitespace after '('
> > +        results = ret.stdout.decode('utf-8').splitlines( )
> >                                                           ^
> > ---
> > 2 potential issues detected, please review
> > 
> > [master dea6e2fea048] utils: checkstyle.py: Test PEP8 formatter
> > 
> > 
> > The checker and formatter generate duplicate issues. Would you consider
> > than as an issue ? Should we disable the checker when the dependencies
> > of the formatter are available ? Or could the checker report additional
> > issues ?
> 
> Hm. I saw cases (E.g. only a single blank line before a class) where the
> formatter (which added the missing line above the class) created a
> change that didn't intersect with the modification, but the Issue was
> correctly detected. For a moment I thought about adding a line above and
> below in the hunk intersect function, but that felt wrong. Skipping the
> checker would silence that issue, which is also not good. Adding more
> logic just for python seems to be too much effort.  Maybe just leave the
> duplicate issues, as we only do limited python development?

Do you plan to stop working on the tuning tool ? :-) If this is caused
by an off-by-one but I'd rather fix it instead of carrying the annoyance
of duplicated issues. Can you provide a sample commit that reproduces
the problem ?

> > >  # ------------------------------------------------------------------------------
> > >  # Style checking
> > >  #

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list