mirror of
https://github.com/python/cpython.git
synced 2025-08-28 04:35:02 +00:00
bpo-38530: Require 50% similarity in NameError and AttributeError suggestions (GH-25584)
This commit is contained in:
parent
7244c0060d
commit
284c52da09
2 changed files with 116 additions and 1 deletions
|
@ -1507,6 +1507,61 @@ class NameErrorTests(unittest.TestCase):
|
|||
|
||||
self.assertNotIn("somethingverywronghehe", err.getvalue())
|
||||
|
||||
def test_name_error_bad_suggestions_do_not_trigger_for_small_names(self):
|
||||
vvv = mom = w = id = pytho = None
|
||||
|
||||
with self.subTest(name="b"):
|
||||
try:
|
||||
b
|
||||
except NameError as exc:
|
||||
with support.captured_stderr() as err:
|
||||
sys.__excepthook__(*sys.exc_info())
|
||||
self.assertNotIn("you mean", err.getvalue())
|
||||
self.assertNotIn("vvv", err.getvalue())
|
||||
self.assertNotIn("mom", err.getvalue())
|
||||
self.assertNotIn("'id'", err.getvalue())
|
||||
self.assertNotIn("'w'", err.getvalue())
|
||||
self.assertNotIn("'pytho'", err.getvalue())
|
||||
|
||||
with self.subTest(name="v"):
|
||||
try:
|
||||
v
|
||||
except NameError as exc:
|
||||
with support.captured_stderr() as err:
|
||||
sys.__excepthook__(*sys.exc_info())
|
||||
self.assertNotIn("you mean", err.getvalue())
|
||||
self.assertNotIn("vvv", err.getvalue())
|
||||
self.assertNotIn("mom", err.getvalue())
|
||||
self.assertNotIn("'id'", err.getvalue())
|
||||
self.assertNotIn("'w'", err.getvalue())
|
||||
self.assertNotIn("'pytho'", err.getvalue())
|
||||
|
||||
with self.subTest(name="m"):
|
||||
try:
|
||||
m
|
||||
except NameError as exc:
|
||||
with support.captured_stderr() as err:
|
||||
sys.__excepthook__(*sys.exc_info())
|
||||
self.assertNotIn("you mean", err.getvalue())
|
||||
self.assertNotIn("vvv", err.getvalue())
|
||||
self.assertNotIn("mom", err.getvalue())
|
||||
self.assertNotIn("'id'", err.getvalue())
|
||||
self.assertNotIn("'w'", err.getvalue())
|
||||
self.assertNotIn("'pytho'", err.getvalue())
|
||||
|
||||
with self.subTest(name="py"):
|
||||
try:
|
||||
py
|
||||
except NameError as exc:
|
||||
with support.captured_stderr() as err:
|
||||
sys.__excepthook__(*sys.exc_info())
|
||||
self.assertNotIn("you mean", err.getvalue())
|
||||
self.assertNotIn("vvv", err.getvalue())
|
||||
self.assertNotIn("mom", err.getvalue())
|
||||
self.assertNotIn("'id'", err.getvalue())
|
||||
self.assertNotIn("'w'", err.getvalue())
|
||||
self.assertNotIn("'pytho'", err.getvalue())
|
||||
|
||||
def test_name_error_suggestions_do_not_trigger_for_too_many_locals(self):
|
||||
def f():
|
||||
# Mutating locals() is unreliable, so we need to do it by hand
|
||||
|
@ -1661,6 +1716,63 @@ class AttributeErrorTests(unittest.TestCase):
|
|||
|
||||
self.assertNotIn("blech", err.getvalue())
|
||||
|
||||
def test_getattr_error_bad_suggestions_do_not_trigger_for_small_names(self):
|
||||
class MyClass:
|
||||
vvv = mom = w = id = pytho = None
|
||||
|
||||
with self.subTest(name="b"):
|
||||
try:
|
||||
MyClass.b
|
||||
except AttributeError as exc:
|
||||
with support.captured_stderr() as err:
|
||||
sys.__excepthook__(*sys.exc_info())
|
||||
self.assertNotIn("you mean", err.getvalue())
|
||||
self.assertNotIn("vvv", err.getvalue())
|
||||
self.assertNotIn("mom", err.getvalue())
|
||||
self.assertNotIn("'id'", err.getvalue())
|
||||
self.assertNotIn("'w'", err.getvalue())
|
||||
self.assertNotIn("'pytho'", err.getvalue())
|
||||
|
||||
with self.subTest(name="v"):
|
||||
try:
|
||||
MyClass.v
|
||||
except AttributeError as exc:
|
||||
with support.captured_stderr() as err:
|
||||
sys.__excepthook__(*sys.exc_info())
|
||||
self.assertNotIn("you mean", err.getvalue())
|
||||
self.assertNotIn("vvv", err.getvalue())
|
||||
self.assertNotIn("mom", err.getvalue())
|
||||
self.assertNotIn("'id'", err.getvalue())
|
||||
self.assertNotIn("'w'", err.getvalue())
|
||||
self.assertNotIn("'pytho'", err.getvalue())
|
||||
|
||||
with self.subTest(name="m"):
|
||||
try:
|
||||
MyClass.m
|
||||
except AttributeError as exc:
|
||||
with support.captured_stderr() as err:
|
||||
sys.__excepthook__(*sys.exc_info())
|
||||
self.assertNotIn("you mean", err.getvalue())
|
||||
self.assertNotIn("vvv", err.getvalue())
|
||||
self.assertNotIn("mom", err.getvalue())
|
||||
self.assertNotIn("'id'", err.getvalue())
|
||||
self.assertNotIn("'w'", err.getvalue())
|
||||
self.assertNotIn("'pytho'", err.getvalue())
|
||||
|
||||
with self.subTest(name="py"):
|
||||
try:
|
||||
MyClass.py
|
||||
except AttributeError as exc:
|
||||
with support.captured_stderr() as err:
|
||||
sys.__excepthook__(*sys.exc_info())
|
||||
self.assertNotIn("you mean", err.getvalue())
|
||||
self.assertNotIn("vvv", err.getvalue())
|
||||
self.assertNotIn("mom", err.getvalue())
|
||||
self.assertNotIn("'id'", err.getvalue())
|
||||
self.assertNotIn("'w'", err.getvalue())
|
||||
self.assertNotIn("'pytho'", err.getvalue())
|
||||
|
||||
|
||||
def test_getattr_suggestions_do_not_trigger_for_big_dicts(self):
|
||||
class A:
|
||||
blech = None
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue