)]}'
{"hacking/checks/other.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c1989b919a20903dfa9c9c596dcb43d5f2c1ee33","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"@core.flake8ext"},{"line_number":24,"context_line":"def hacking_no_cr(physical_line):"},{"line_number":25,"context_line":"    r\"\"\"Check that we only use newlines not carriage returns."},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"bf51134e_1cd4e0e8","line":23,"updated":"2020-07-22 19:03:56.000000000","message":"pep8: E303 too many blank lines (3)","commit_id":"bf02b24447c5be1b72cb0c94e70e4117014099b4"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"63d7a946d4d8298a38519981efe013b1325f1fe0","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"log_string_interpolation \u003d re.compile(r\".*LOG\\.(?:error|warn|warning|info\""},{"line_number":19,"context_line":"                                      r\"|critical|exception|debug)\""},{"line_number":20,"context_line":"                                      r\"\\([^,]*%[^,]*[,)]\")"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"@core.flake8ext"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_2c8e1d78","side":"PARENT","line":20,"range":{"start_line":20,"start_character":38,"end_line":20,"end_character":58},"updated":"2020-07-27 08:28:51.000000000","message":"I think here we expected to catch all the strings between logger call (log statement) parenthesis, I\u0027m not sure this is still the case with your regex, I mean I think we will only catch the line where logger is called but we don\u0027t catch multilines strings, isn\u0027t?\n\nExample (to be more clear):\n\n```\nLOG.debug(\"foo bar baz\") # not an issue there\nLOG.debug(\"foo\" # will be catched\n          \"bar\" # will be ignored\n          \"baz\")  # will be ignored\n```","commit_id":"93e6cd290471f9e58f6d052eea508213a55f98c3"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"b519c0ef03ab3342209dee367fc5e67cc34dcad1","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"log_string_interpolation \u003d re.compile(r\".*LOG\\.(?:error|warn|warning|info\""},{"line_number":19,"context_line":"                                      r\"|critical|exception|debug)\""},{"line_number":20,"context_line":"                                      r\"\\([^,]*%[^,]*[,)]\")"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"@core.flake8ext"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_9eaf8793","side":"PARENT","line":20,"range":{"start_line":20,"start_character":38,"end_line":20,"end_character":58},"in_reply_to":"9f560f44_2c8e1d78","updated":"2020-07-27 13:08:01.000000000","message":"The plugin uses logical_line, so it should not matter.","commit_id":"93e6cd290471f9e58f6d052eea508213a55f98c3"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"66bf2ac616da56ca5fc7096b6aebd2d48822565c","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"log_string_interpolation \u003d re.compile(r\".*LOG\\.(?:error|warn|warning|info\""},{"line_number":19,"context_line":"                                      r\"|critical|exception|debug)\""},{"line_number":20,"context_line":"                                      r\"\\([^,]*%[^,]*[,)]\")"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"@core.flake8ext"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_ff97778f","side":"PARENT","line":20,"range":{"start_line":20,"start_character":38,"end_line":20,"end_character":58},"in_reply_to":"9f560f44_9eaf8793","updated":"2020-07-29 09:44:18.000000000","message":"Oh ok, then I missed that point","commit_id":"93e6cd290471f9e58f6d052eea508213a55f98c3"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"63d7a946d4d8298a38519981efe013b1325f1fe0","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        return"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    if log_string.match(logical_line):"},{"line_number":53,"context_line":"        # Line is a log statement, strip out strings and see if % is used,"},{"line_number":54,"context_line":"        # just to make sure we don\u0027t match on a format specifier in a string."},{"line_number":55,"context_line":"        line \u003d re.sub(r\"[\\\"\u0027].+?[\\\"\u0027]\", \u0027\u0027, logical_line)"},{"line_number":56,"context_line":"        if \u0027%\u0027 in line:"},{"line_number":57,"context_line":"            yield 0, msg"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_6c3bf59b","line":56,"range":{"start_line":53,"start_character":8,"end_line":56,"end_character":23},"updated":"2020-07-27 08:28:51.000000000","message":"`re.sub` will be applyed only on line where logger is called (log statement) and not on is multilines strings between parenthesis.\n\ncf. my other comments for an example.","commit_id":"6002520ae37980450c05da830bb3134256dce1ea"}]}
