From 8df38c92b93cd586da2ded9d86ad2283663a3feb Mon Sep 17 00:00:00 2001 From: Anthony Sottile Date: Thu, 31 Jan 2019 21:53:19 -0800 Subject: [PATCH] Fix reporting of UndefinedLocal pyflakes error --- src/flake8/plugins/pyflakes.py | 10 +++++----- tests/unit/test_pyflakes_codes.py | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/flake8/plugins/pyflakes.py b/src/flake8/plugins/pyflakes.py index 4435380..d4556c5 100644 --- a/src/flake8/plugins/pyflakes.py +++ b/src/flake8/plugins/pyflakes.py @@ -57,10 +57,7 @@ def patch_pyflakes(): """Add error codes to Pyflakes messages.""" for name, obj in vars(pyflakes.messages).items(): if name[0].isupper() and obj.message: - obj.flake8_msg = "%s %s" % ( - FLAKE8_PYFLAKES_CODES.get(name, "F999"), - obj.message, - ) + obj.flake8_code = FLAKE8_PYFLAKES_CODES.get(name, "F999") patch_pyflakes() @@ -188,6 +185,9 @@ class FlakesChecker(pyflakes.checker.Checker): yield ( message.lineno, col, - (message.flake8_msg % message.message_args), + "{} {}".format( + message.flake8_code, + message.message % message.message_args, + ), message.__class__, ) diff --git a/tests/unit/test_pyflakes_codes.py b/tests/unit/test_pyflakes_codes.py index 837e971..77f3e56 100644 --- a/tests/unit/test_pyflakes_codes.py +++ b/tests/unit/test_pyflakes_codes.py @@ -1,4 +1,5 @@ """Tests of pyflakes monkey patches.""" +import ast import pyflakes @@ -13,3 +14,20 @@ def test_all_pyflakes_messages_have_flake8_codes_assigned(): if name[0].isupper() and obj.message } assert messages == set(pyflakes_shim.FLAKE8_PYFLAKES_CODES) + + +def test_undefined_local_code(): + """In pyflakes 2.1.0 this code's string formatting was changed.""" + src = '''\ +import sys + +def f(): + sys = sys +''' + tree = ast.parse(src) + checker = pyflakes_shim.FlakesChecker(tree, (), 't.py') + message_texts = [s for _, _, s, _ in checker.run()] + assert message_texts == [ + "F823 local variable 'sys' defined in enclosing scope on line 1 referenced before assignment", # noqa: E501 + "F841 local variable 'sys' is assigned to but never used", + ]