)]}'
{"hacking/core.py":[{"author":{"_account_id":7366,"name":"Ivan Melnikov","email":"imelnikov@griddynamics.com","username":"imelnikov"},"change_message_id":"0c6dabe8ca0c0b8e1cf011f5ea070e66f6ab37a2","unresolved":false,"context_lines":[{"line_number":327,"context_line":""},{"line_number":328,"context_line":"@flake8ext"},{"line_number":329,"context_line":"def hacking_python3x_print_function(logical_line, physical_line):"},{"line_number":330,"context_line":"    r\"\"\"Check that all occurrences look like print functions, not"},{"line_number":331,"context_line":"        print operator."},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"    As of Python 3.x, the print operator has been removed."}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2BnRU%3D","side":"PARENT","line":330,"updated":"2014-01-23 21:30:43.000000000","message":"This changes helps to find violations like this one ;)","commit_id":"b3e01a93e7ce96fb5064c5537d9726eeb25ba58b"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"b9d457854407192bf0b68115ec1e58b0f98dbb0e","unresolved":false,"context_lines":[{"line_number":329,"context_line":"def hacking_python3x_print_function(logical_line, physical_line):"},{"line_number":330,"context_line":"    r\"\"\"Check that all print occurrences look like print functions."},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    Check that not all occurrences of print look like functions, not"},{"line_number":333,"context_line":"    print operator. As of Python 3.x, the print operator has been removed."},{"line_number":334,"context_line":""},{"line_number":335,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2BmwM%3D","line":332,"updated":"2014-01-24 00:08:13.000000000","message":"There\u0027s an extra \"not\" in here now.  Should be: \"Check that all occurrences...\"","commit_id":"73ac4f00e96f7c9f2107a5d4afa5f7f88127612d"},{"author":{"_account_id":7366,"name":"Ivan Melnikov","email":"imelnikov@griddynamics.com","username":"imelnikov"},"change_message_id":"444bf59f4d1ab9852407c9d4e99df4bed7c7f6da","unresolved":false,"context_lines":[{"line_number":329,"context_line":"def hacking_python3x_print_function(logical_line, physical_line):"},{"line_number":330,"context_line":"    r\"\"\"Check that all print occurrences look like print functions."},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    Check that not all occurrences of print look like functions, not"},{"line_number":333,"context_line":"    print operator. As of Python 3.x, the print operator has been removed."},{"line_number":334,"context_line":""},{"line_number":335,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2BliQ%3D","line":332,"in_reply_to":"AAAAUH%2F%2BmwM%3D","updated":"2014-01-24 04:56:23.000000000","message":"Thanks for the catch, will fix.","commit_id":"73ac4f00e96f7c9f2107a5d4afa5f7f88127612d"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"b9d457854407192bf0b68115ec1e58b0f98dbb0e","unresolved":false,"context_lines":[{"line_number":689,"context_line":"    http://www.python.org/dev/peps/pep-0257/#what-is-a-docstring"},{"line_number":690,"context_line":"    \"\"\""},{"line_number":691,"context_line":"    line \u003d physical_line.lstrip()"},{"line_number":692,"context_line":"    start \u003d max([line.find(i) for i in START_DOCSTRING_TRIPLE])"},{"line_number":693,"context_line":"    end \u003d max([line[-4:-1] \u003d\u003d i for i in END_DOCSTRING_TRIPLE])"},{"line_number":694,"context_line":"    if (previous_logical.startswith(\"def \") or"},{"line_number":695,"context_line":"            previous_logical.startswith(\"class \")):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2BmXU%3D","line":692,"updated":"2014-01-24 00:08:13.000000000","message":"So, this is actually the problem.  We want to find the earliest occurrence of the docstring starts (the full r\u0027\u0027\u0027 instead of just the \u0027\u0027\u0027 part), but because find() returns -1 we can\u0027t use min, unfortunately.  With a little more logic we can make it work right, but it\u0027s more complicated to do that.  I\u0027m not really sure which I prefer, but i wanted to mention it.\n\nMy alternative calculation of start:\n\nstart \u003d [line.find(i) for i in START_DOCSTRING_TRIPLE]\n\nstart \u003d [i for i in start if i !\u003d -1]\n\nstart \u003d min(start) if start else -1\n\nWith this we can go back to just checking if start is 0 like before.","commit_id":"73ac4f00e96f7c9f2107a5d4afa5f7f88127612d"},{"author":{"_account_id":7366,"name":"Ivan Melnikov","email":"imelnikov@griddynamics.com","username":"imelnikov"},"change_message_id":"444bf59f4d1ab9852407c9d4e99df4bed7c7f6da","unresolved":false,"context_lines":[{"line_number":689,"context_line":"    http://www.python.org/dev/peps/pep-0257/#what-is-a-docstring"},{"line_number":690,"context_line":"    \"\"\""},{"line_number":691,"context_line":"    line \u003d physical_line.lstrip()"},{"line_number":692,"context_line":"    start \u003d max([line.find(i) for i in START_DOCSTRING_TRIPLE])"},{"line_number":693,"context_line":"    end \u003d max([line[-4:-1] \u003d\u003d i for i in END_DOCSTRING_TRIPLE])"},{"line_number":694,"context_line":"    if (previous_logical.startswith(\"def \") or"},{"line_number":695,"context_line":"            previous_logical.startswith(\"class \")):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2Blh4%3D","line":692,"in_reply_to":"AAAAUH%2F%2BmXU%3D","updated":"2014-01-24 04:56:23.000000000","message":"Yes, I\u0027ve seen that and tried something very similar to your suggestion, but then opted for solution that has less LOCs changed. With that more clear logic (as one you suggest) we would also need to update line 700 below, as as far as I can tell it relies on the fact that found triple has length 3. But let me try that anyway;)","commit_id":"73ac4f00e96f7c9f2107a5d4afa5f7f88127612d"},{"author":{"_account_id":7366,"name":"Ivan Melnikov","email":"imelnikov@griddynamics.com","username":"imelnikov"},"change_message_id":"431320a9685bc3dacb58772a36aa9ff998361435","unresolved":false,"context_lines":[{"line_number":712,"context_line":"            return True"},{"line_number":713,"context_line":"        else:"},{"line_number":714,"context_line":"            # Handle multi line comments"},{"line_number":715,"context_line":"            return end and start in (-1, len(line) - len(start_triple) - 1)"},{"line_number":716,"context_line":""},{"line_number":717,"context_line":""},{"line_number":718,"context_line":"@flake8ext"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2Blf0%3D","line":715,"updated":"2014-01-24 05:00:26.000000000","message":"Without this change new test on line 794 fails.","commit_id":"1f883688bcc78410053651fa905552829811cb8c"}]}
