)]}'
{"tests/hacking/checks.py":[{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"b5585302f689c12aec6d76879c6c3a57897311d2","unresolved":false,"context_lines":[{"line_number":440,"context_line":"        yield (0, \"N353 \u0027unicode\u0027 function is absent in python3. Please \""},{"line_number":441,"context_line":"                  \"use \u0027six.text_type\u0027 instead.\")"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"def check_raises(physical_line, filename):"},{"line_number":445,"context_line":"    \"\"\"Check raises usage"},{"line_number":446,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"5a2ca52d_c21c81c3","line":443,"updated":"2015-10-15 14:57:45.000000000","message":"I think we should add  @skip_ignored_lines","commit_id":"4c757e57aec072c250814d836e8002f348fc5b8a"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"86a6e90b0d409a55bfc3cc8c47df1998864a7428","unresolved":false,"context_lines":[{"line_number":440,"context_line":"        yield (0, \"N353 \u0027unicode\u0027 function is absent in python3. Please \""},{"line_number":441,"context_line":"                  \"use \u0027six.text_type\u0027 instead.\")"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"def check_raises(physical_line, filename):"},{"line_number":445,"context_line":"    \"\"\"Check raises usage"},{"line_number":446,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a29b11f_dcc7e843","line":443,"in_reply_to":"5a2ca52d_c21c81c3","updated":"2015-10-19 09:04:54.000000000","message":"@Roman: This hacking rule checks only docstring, which should not end with \"noqa\" statements(check from skip_ignored_line decoratpr). Also, I see no reasons to give ability to skip this check.","commit_id":"4c757e57aec072c250814d836e8002f348fc5b8a"},{"author":{"_account_id":6116,"name":"li,chen","email":"shchenli@cn.ibm.com","username":"chen-li"},"change_message_id":"25df8aebd80a14e9185e647b9e2463fc8c27b74d","unresolved":false,"context_lines":[{"line_number":440,"context_line":"        yield (0, \"N353 \u0027unicode\u0027 function is absent in python3. Please \""},{"line_number":441,"context_line":"                  \"use \u0027six.text_type\u0027 instead.\")"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"def check_raises(physical_line, filename):"},{"line_number":445,"context_line":"    \"\"\"Check raises usage"},{"line_number":446,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a29b11f_0fed2f8b","line":443,"in_reply_to":"5a2ca52d_c21c81c3","updated":"2015-10-19 01:27:56.000000000","message":"I think we can\u0027t use @skip_ignored_lines here because it only works on logical_line.","commit_id":"4c757e57aec072c250814d836e8002f348fc5b8a"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"86a6e90b0d409a55bfc3cc8c47df1998864a7428","unresolved":false,"context_lines":[{"line_number":446,"context_line":""},{"line_number":447,"context_line":"    N354"},{"line_number":448,"context_line":"    \"\"\""},{"line_number":449,"context_line":""},{"line_number":450,"context_line":"    ignored_files \u003d [\"./tests/unit/test_hacking.py\"]"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"    if filename not in ignored_files:"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a29b11f_5c68b8f5","line":449,"updated":"2015-10-19 09:04:54.000000000","message":"It would be nice to check here that `:raise ` (without `s` at the end of word) is not used.","commit_id":"4c757e57aec072c250814d836e8002f348fc5b8a"},{"author":{"_account_id":18785,"name":"Bo Chi","email":"bochi@tethrnet.com","username":"bochi"},"change_message_id":"e20f9bcdd39dccf0d63c45634eec76c2b62f91c4","unresolved":false,"context_lines":[{"line_number":447,"context_line":"    N354"},{"line_number":448,"context_line":"    \"\"\""},{"line_number":449,"context_line":""},{"line_number":450,"context_line":"    ignored_files \u003d [\"./tests/unit/test_hacking.py\"]"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"    if filename not in ignored_files:"},{"line_number":453,"context_line":"        if re.search(r\"\\s:raises:\\s\", physical_line):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a29b11f_0576ab6f","line":450,"updated":"2015-10-22 14:39:26.000000000","message":"what about this match string? \n\n\":raise[^s].*\\n|: *raises *:.*\\n|:raises.*[:,]\\n\"\n\nit matches 3 cases:\n\n1. use of :raise instead of :raises\n\n2. use of :raises:\n\n3. lines that ends with : or ,","commit_id":"4c757e57aec072c250814d836e8002f348fc5b8a"},{"author":{"_account_id":18785,"name":"Bo Chi","email":"bochi@tethrnet.com","username":"bochi"},"change_message_id":"9bfb2e8ed810a87bb18096c3e6faf77d5a72a747","unresolved":false,"context_lines":[{"line_number":447,"context_line":"    N354"},{"line_number":448,"context_line":"    \"\"\""},{"line_number":449,"context_line":""},{"line_number":450,"context_line":"    ignored_files \u003d [\"./tests/unit/test_hacking.py\"]"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"    if filename not in ignored_files:"},{"line_number":453,"context_line":"        if re.search(r\"\\s:raises:\\s\", physical_line):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a29b11f_3325db5b","line":450,"in_reply_to":"3a29b11f_0576ab6f","updated":"2015-10-26 11:22:05.000000000","message":"will following string work?\n\n\nre.search(r\u0027^.*:raise[^s].*$|^.*: *raises *:.*$|^.*:raises[^:]+$|^.*:raises.*:(?! ).*$|^.*:raises.*: \\W*$\u0027, physical_line, flags\u003dre.M);","commit_id":"4c757e57aec072c250814d836e8002f348fc5b8a"}],"tests/unit/fakes.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"86a6e90b0d409a55bfc3cc8c47df1998864a7428","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    :param required: list, mandatory keys to check"},{"line_number":69,"context_line":"    :param defaults: dict, default data"},{"line_number":70,"context_line":"    :returns: dict, with all keys set"},{"line_number":71,"context_line":"    :raises IndexError, ValueError"},{"line_number":72,"context_line":"    \"\"\""},{"line_number":73,"context_line":"    required \u003d required or []"},{"line_number":74,"context_line":"    for i in set(required) - set(data):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a29b11f_fc82e4c7","line":71,"updated":"2015-10-19 09:04:54.000000000","message":"this line should look something like:\n\n1)\n:raises IndexError, ValueError: If input data is incorrect\n\n2)\n:raises IndexError: if keys from required dict missed from data dict\n:raises ValueError: If something missed in ...\n\nAlso, your hacking rule should check that `:raises Exception:` ends with `:` and include one or more letters after `:`(description exists)","commit_id":"4c757e57aec072c250814d836e8002f348fc5b8a"}]}
