)]}'
{"nova/hacking/checks.py":[{"author":{"_account_id":6601,"name":"James Carey","email":"jecarey@yerac.com","username":"jecarey"},"change_message_id":"ed797ae1069315969f7b289a63cfac7eeab0f547","unresolved":false,"context_lines":[{"line_number":96,"context_line":"dict_constructor_with_list_copy_re \u003d re.compile(r\".*\\bdict\\((\\[)?(\\(|\\[)\")"},{"line_number":97,"context_line":"decorator_re \u003d re.compile(r\"@.*\")"},{"line_number":98,"context_line":"http_not_implemented_re \u003d re.compile(r\"raise .*HTTPNotImplemented\\(\")"},{"line_number":99,"context_line":"greenthread_spawn_re \u003d re.compile(r\".*greenthread.spawn\\(.*\\)\")"},{"line_number":100,"context_line":"greenthread_spawn_n_re \u003d re.compile(r\".*greenthread.spawn_n\\(.*\\)\")"},{"line_number":101,"context_line":"eventlet_spawn_re \u003d re.compile(r\".*eventlet.spawn\\(.*\\)\")"},{"line_number":102,"context_line":"eventlet_spawn_n_re \u003d re.compile(r\".*eventlet.spawn_n\\(.*\\)\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_18d1f42f","line":99,"updated":"2015-08-13 20:21:07.000000000","message":"The greenthread and eventlet regex\u0027s could be combined into one with a named parameter to pick off the spawn or spawn_n:\n\n       .*(eventlet|greenthread)\\.(?P\u003cspawn_part\u003espawn(_n)?)\\(.*\\)\n\nThen the checks below could be replaced with one that, if it matches uses match.group(\u0027spawn_part\u0027) for the replacement text.","commit_id":"7506d14388a3529871b756beac9e19f14e78321b"},{"author":{"_account_id":2835,"name":"Brian Elliott","email":"bdelliott@gmail.com","username":"belliott"},"change_message_id":"4cbb9cb473410042bf90531d288b232eb3dc2ae3","unresolved":false,"context_lines":[{"line_number":97,"context_line":"decorator_re \u003d re.compile(r\"@.*\")"},{"line_number":98,"context_line":"http_not_implemented_re \u003d re.compile(r\"raise .*HTTPNotImplemented\\(\")"},{"line_number":99,"context_line":"spawn_re \u003d re.compile("},{"line_number":100,"context_line":"    r\".*(eventlet|greenthread)\\.(?P\u003cspawn_part\u003espawn(_n)?)\\(.*\\)\")"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"class BaseASTChecker(ast.NodeVisitor):"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba15a1d1_cf0fecdf","line":100,"updated":"2015-09-15 14:57:15.000000000","message":"Picking at nits, but it\u0027s slightly faster to use a lazy matcher like \".*?\" instead of \".*\" because less backtracking will be done and many files will be scanned.\n\ni.e.:\n\n    r\".*?(eventlet|greenthread)\\.(?P\u003cspawn_part\u003espawn(_n)?)\\(.*\\)\")","commit_id":"6179854ae77960d4ae883349626069023b407cb0"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"559cb58aa22a5550c02a25c8ec278fd3243ae44c","unresolved":false,"context_lines":[{"line_number":97,"context_line":"decorator_re \u003d re.compile(r\"@.*\")"},{"line_number":98,"context_line":"http_not_implemented_re \u003d re.compile(r\"raise .*HTTPNotImplemented\\(\")"},{"line_number":99,"context_line":"spawn_re \u003d re.compile("},{"line_number":100,"context_line":"    r\".*(eventlet|greenthread)\\.(?P\u003cspawn_part\u003espawn(_n)?)\\(.*\\)\")"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"class BaseASTChecker(ast.NodeVisitor):"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a2fa921_c5dee810","line":100,"in_reply_to":"ba15a1d1_cf0fecdf","updated":"2015-10-07 12:20:43.000000000","message":".* vs. .*? is probably irrelevant here. Honestly, this is probably better done as an AST check, but we should probably just land this now and that could be done later.","commit_id":"6179854ae77960d4ae883349626069023b407cb0"}]}
