Hi Both,

> -----Original Message-----
> From: Jonathan Wakely <jwak...@redhat.com>
> Sent: Monday, July 22, 2024 3:21 PM
> To: Filip Kastl <fka...@suse.cz>
> Cc: Tamar Christina <tamar.christ...@arm.com>; gcc-patches@gcc.gnu.org; nd
> <n...@arm.com>
> Subject: Re: [PATCH][contrib]: support json output from check_GNU_style_lib.py
> 
> On Mon, 22 Jul 2024 at 14:54, Filip Kastl <fka...@suse.cz> wrote:
> >
> > Hi Tamar,
> >
> > I wanted to try reviewing a patch and this seemed simple enough so I gave 
> > it a
> > shot.  Hopefully this saves some time of the maintainer that eventually
> > approves this :).

Thanks for the review! :)

> >
> > I don't see any bug in the code.  I also tried running it on my own input 
> > and
> > the output was correct.  So functionally the patch is good.  I have some
> > remarks about the style though:
> >
> > - You sometimes put a space between function name and parentheses.  This
> >   doesn't look python-ish and isn't consistent in the file.
> 
> It's the GNU C convention, but I really wish we didn't use it for
> Python code too.
> 
> > - There's one very long line (check_GNU_style_lib.py:335).  I would shorten 
> > it
> >   so it is at most 79 characters long.
> > - On the same line, there is a space after { but not before }.  For
> >   consistency, I would erase the space after {
> > - On the same line there are spaces after :.  I think a more python-ish way
> >   would be not to have those spaces there.  Here I'm maybe being too 
> > pedantic
> >   so feel free to ignore this.  I think it will look nice either way.
> >
> > To summarize the last 3 points, I would replace this
> >
> >                 errlines.append({ "file" : locs[0], "row" : locs[1], 
> > "column" : locs[2], "err"
> : e.console_error})

How about this formatting, I tend to find it a bit easier to read even.
I also updated the location numbering to be numerical so, removed the quotes.

Ok for master?

Thanks,
Tamar

contrib/ChangeLog:

        * check_GNU_style.py: Add json format.
        * check_GNU_style_lib.py: Likewise.

-- inline copy of patch --

diff --git a/contrib/check_GNU_style.py b/contrib/check_GNU_style.py
index 
6b946a5bc3610b8ef70ba372ea800f892eeac85b..0890947f1f9b60c37ff62e23007c3a0735fd9c14
 100755
--- a/contrib/check_GNU_style.py
+++ b/contrib/check_GNU_style.py
@@ -31,7 +31,7 @@ def main():
     parser.add_argument('file', help = 'File with a patch')
     parser.add_argument('-f', '--format', default = 'stdio',
         help = 'Display format',
-        choices = ['stdio', 'quickfix'])
+        choices = ['stdio', 'quickfix', 'json'])
     args = parser.parse_args()
     filename = args.file
     format = args.format
diff --git a/contrib/check_GNU_style_lib.py b/contrib/check_GNU_style_lib.py
index 
6dbe4b53559c63d2e0276d0ff88619cd2f7f8e06..ab21ed4607593668ab95f24715295a41ac7d8a21
 100755
--- a/contrib/check_GNU_style_lib.py
+++ b/contrib/check_GNU_style_lib.py
@@ -29,6 +29,7 @@
 import sys
 import re
 import unittest
+import json
 
 def import_pip3(*args):
     missing=[]
@@ -317,6 +318,33 @@ def check_GNU_style_file(file, format):
         else:
             print('%d error(s) written to %s file.' % (len(errors), f))
             exit(1)
+    elif format == 'json':
+        fn = lambda x: x.error_message
+        i = 1
+        result = []
+        for (k, errors) in groupby(sorted(errors, key = fn), fn):
+            errors = list(errors)
+            entry = {}
+            entry['type'] = i
+            entry['msg'] = k
+            entry['count'] = len(errors)
+            i += 1
+            errlines = []
+            for e in errors:
+                locs = e.error_location ().split(':')
+                errlines.append({ "file": locs[0]
+                                , "row": int(locs[1])
+                                , "column": int(locs[2])
+                                , "err": e.console_error })
+            entry['errors'] = errlines
+            result.append(entry)
+
+        if len(errors) == 0:
+            exit(0)
+        else:
+            json_string = json.dumps(result)
+            print(json_string)
+            exit(1)
     else:
         assert False

Attachment: rb18652.patch
Description: rb18652.patch

Reply via email to