Skip to content

Commit dd72094

Browse files
authored
Use double quotes in "already defined" errors and others (#10335)
Also covers `is nonlocal and global`, `No binding for nonlocal` and `is already defined in local`.
1 parent b367f26 commit dd72094

22 files changed

+112
-112
lines changed

docs/source/error_code_list.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -508,7 +508,7 @@ Example:
508508
class A:
509509
def __init__(self, x: int) -> None: ...
510510
511-
class A: # Error: Name 'A' already defined on line 1 [no-redef]
511+
class A: # Error: Name "A" already defined on line 1 [no-redef]
512512
def __init__(self, x: str) -> None: ...
513513
514514
# Error: Argument 1 to "A" has incompatible type "str"; expected "int"

mypy/semanal.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3463,7 +3463,7 @@ def visit_global_decl(self, g: GlobalDecl) -> None:
34633463
self.statement = g
34643464
for name in g.names:
34653465
if name in self.nonlocal_decls[-1]:
3466-
self.fail("Name '{}' is nonlocal and global".format(name), g)
3466+
self.fail('Name "{}" is nonlocal and global'.format(name), g)
34673467
self.global_decls[-1].add(name)
34683468

34693469
def visit_nonlocal_decl(self, d: NonlocalDecl) -> None:
@@ -3476,14 +3476,14 @@ def visit_nonlocal_decl(self, d: NonlocalDecl) -> None:
34763476
if table is not None and name in table:
34773477
break
34783478
else:
3479-
self.fail("No binding for nonlocal '{}' found".format(name), d)
3479+
self.fail('No binding for nonlocal "{}" found'.format(name), d)
34803480

34813481
if self.locals[-1] is not None and name in self.locals[-1]:
3482-
self.fail("Name '{}' is already defined in local "
3483-
"scope before nonlocal declaration".format(name), d)
3482+
self.fail('Name "{}" is already defined in local '
3483+
'scope before nonlocal declaration'.format(name), d)
34843484

34853485
if name in self.global_decls[-1]:
3486-
self.fail("Name '{}' is nonlocal and global".format(name), d)
3486+
self.fail('Name "{}" is nonlocal and global'.format(name), d)
34873487
self.nonlocal_decls[-1].add(name)
34883488

34893489
def visit_print_stmt(self, s: PrintStmt) -> None:
@@ -4783,7 +4783,7 @@ def already_defined(self,
47834783
extra_msg = ' on line {}'.format(node.line)
47844784
else:
47854785
extra_msg = ' (possibly by an import)'
4786-
self.fail("{} '{}' already defined{}".format(noun, unmangle(name), extra_msg), ctx,
4786+
self.fail('{} "{}" already defined{}'.format(noun, unmangle(name), extra_msg), ctx,
47874787
code=codes.NO_REDEF)
47884788

47894789
def name_already_defined(self,

mypy/test/teststubtest.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -816,8 +816,8 @@ def test_mypy_build(self) -> None:
816816

817817
output = run_stubtest(stub="def f(): ...\ndef f(): ...", runtime="", options=[])
818818
assert remove_color_code(output) == (
819-
"error: failed mypy build.\n{}.pyi:2: "
820-
"error: Name 'f' already defined on line 1\n".format(TEST_MODULE_NAME)
819+
'error: failed mypy build.\n{}.pyi:2: '
820+
'error: Name "f" already defined on line 1\n'.format(TEST_MODULE_NAME)
821821
)
822822

823823
def test_missing_stubs(self) -> None:

test-data/unit/check-attr.test

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -976,13 +976,13 @@ reveal_type(A) # N: Revealed type is "def (b: Any, a: Any) -> __main__.A"
976976
class B:
977977
a: int = attr.ib(default=8)
978978
b: int = attr.ib()
979-
a: int = attr.ib() # E: Name 'a' already defined on line 10
979+
a: int = attr.ib() # E: Name "a" already defined on line 10
980980
reveal_type(B) # N: Revealed type is "def (b: builtins.int, a: builtins.int) -> __main__.B"
981981
@attr.s(auto_attribs=True)
982982
class C:
983983
a: int = 8
984984
b: int
985-
a: int = attr.ib() # E: Name 'a' already defined on line 16
985+
a: int = attr.ib() # E: Name "a" already defined on line 16
986986
reveal_type(C) # N: Revealed type is "def (a: builtins.int, b: builtins.int) -> __main__.C"
987987
[builtins fixtures/bool.pyi]
988988

test-data/unit/check-class-namedtuple.test

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -639,16 +639,16 @@ class AnnotationsAsAMethod(NamedTuple):
639639

640640
class ReuseNames(NamedTuple):
641641
x: int
642-
def x(self) -> str: # E: Name 'x' already defined on line 22
642+
def x(self) -> str: # E: Name "x" already defined on line 22
643643
return ''
644644

645645
def y(self) -> int:
646646
return 0
647-
y: str # E: Name 'y' already defined on line 26
647+
y: str # E: Name "y" already defined on line 26
648648

649649
class ReuseCallableNamed(NamedTuple):
650650
z: Callable[[ReuseNames], int]
651-
def z(self) -> int: # E: Name 'z' already defined on line 31
651+
def z(self) -> int: # E: Name "z" already defined on line 31
652652
return 0
653653

654654
[builtins fixtures/dict.pyi]

test-data/unit/check-classes.test

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1093,7 +1093,7 @@ A()
10931093
class A: pass
10941094
class A: pass
10951095
[out]
1096-
main:4: error: Name 'A' already defined on line 3
1096+
main:4: error: Name "A" already defined on line 3
10971097

10981098
[case testDocstringInClass]
10991099
import typing
@@ -6101,13 +6101,13 @@ def test() -> None:
61016101
class C:
61026102
def __init__(self) -> None:
61036103
self.foo = 12
6104-
self.foo: int = 12 # E: Attribute 'foo' already defined on line 3
6104+
self.foo: int = 12 # E: Attribute "foo" already defined on line 3
61056105

61066106
[case testMemberRedefinitionDefinedInClass]
61076107
class C:
61086108
foo = 12
61096109
def __init__(self) -> None:
6110-
self.foo: int = 12 # E: Attribute 'foo' already defined on line 2
6110+
self.foo: int = 12 # E: Attribute "foo" already defined on line 2
61116111

61126112
[case testAbstractInit]
61136113
from abc import abstractmethod, ABCMeta

test-data/unit/check-dataclasses.test

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1069,9 +1069,9 @@ class A2:
10691069
from dataclasses import dataclass
10701070

10711071
@dataclass
1072-
class A: # E: Name 'x' already defined (possibly by an import)
1072+
class A: # E: Name "x" already defined (possibly by an import)
10731073
x: int = 0
1074-
x: int = 0 # E: Name 'x' already defined on line 7
1074+
x: int = 0 # E: Name "x" already defined on line 7
10751075

10761076
@dataclass
10771077
class B(A):

test-data/unit/check-errorcodes.test

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -510,11 +510,11 @@ from pkg.bad2 import bad3 # E: Cannot find implementation or library stub for m
510510

511511
[case testErrorCodeAlreadyDefined]
512512
x: int
513-
x: str # E: Name 'x' already defined on line 1 [no-redef]
513+
x: str # E: Name "x" already defined on line 1 [no-redef]
514514

515515
def f():
516516
pass
517-
def f(): # E: Name 'f' already defined on line 4 [no-redef]
517+
def f(): # E: Name "f" already defined on line 4 [no-redef]
518518
pass
519519

520520
[case testErrorCodeMissingReturn]

test-data/unit/check-functions.test

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1390,7 +1390,7 @@ from typing import Any
13901390
x = None # type: Any
13911391
if x:
13921392
def f(): pass
1393-
def f(): pass # E: Name 'f' already defined on line 4
1393+
def f(): pass # E: Name "f" already defined on line 4
13941394

13951395
[case testIncompatibleConditionalFunctionDefinition]
13961396
from typing import Any
@@ -1636,7 +1636,7 @@ x = None # type: Any
16361636
class A:
16371637
if x:
16381638
def f(self): pass
1639-
def f(self): pass # E: Name 'f' already defined on line 5
1639+
def f(self): pass # E: Name "f" already defined on line 5
16401640

16411641
[case testIncompatibleConditionalMethodDefinition]
16421642
from typing import Any
@@ -2149,7 +2149,7 @@ f = g # E: Incompatible types in assignment (expression has type "Callable[[Any,
21492149

21502150
[case testRedefineFunction2]
21512151
def f() -> None: pass
2152-
def f() -> None: pass # E: Name 'f' already defined on line 1
2152+
def f() -> None: pass # E: Name "f" already defined on line 1
21532153

21542154

21552155
-- Special cases

test-data/unit/check-incremental.test

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1028,7 +1028,7 @@ import a.b
10281028
[rechecked b]
10291029
[stale]
10301030
[out2]
1031-
tmp/b.py:4: error: Name 'a' already defined on line 3
1031+
tmp/b.py:4: error: Name "a" already defined on line 3
10321032

10331033
[case testIncrementalSilentImportsAndImportsInClass]
10341034
# flags: --ignore-missing-imports

test-data/unit/check-modules.test

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,7 @@ main:2: error: Name "y" is not defined
326326
# Error messages differ with the new analyzer
327327

328328
import xab # E: Cannot find implementation or library stub for module named "xab" # N: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
329-
def xab(): pass # E: Name 'xab' already defined (possibly by an import)
329+
def xab(): pass # E: Name "xab" already defined (possibly by an import)
330330

331331
[case testAccessingUnknownModuleFromOtherModule]
332332
import x
@@ -2110,7 +2110,7 @@ def __getattr__(name: str) -> Any: ...
21102110
from has_attr import name
21112111
from has_attr import name
21122112
from has_attr import x
2113-
from has_attr import y as x # E: Name 'x' already defined (possibly by an import)
2113+
from has_attr import y as x # E: Name "x" already defined (possibly by an import)
21142114
reveal_type(name) # N: Revealed type is "builtins.int"
21152115

21162116
[file has_attr.pyi]

test-data/unit/check-newsemanal.test

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -286,11 +286,11 @@ if MYPY:
286286
from b import x as y
287287
x = 0
288288

289-
def y(): pass # E: Name 'y' already defined on line 4
289+
def y(): pass # E: Name "y" already defined on line 4
290290
reveal_type(y) # N: Revealed type is "builtins.int"
291291

292292
y2 = y
293-
class y2: pass # E: Name 'y2' already defined on line 9
293+
class y2: pass # E: Name "y2" already defined on line 9
294294
reveal_type(y2) # N: Revealed type is "builtins.int"
295295

296296
y3, y4 = y, y
@@ -312,11 +312,11 @@ import a
312312
from b import x as y
313313
x = 0
314314

315-
def y(): pass # E: Name 'y' already defined on line 2
315+
def y(): pass # E: Name "y" already defined on line 2
316316
reveal_type(y) # N: Revealed type is "builtins.int"
317317

318318
y2 = y
319-
class y2: pass # E: Name 'y2' already defined on line 7
319+
class y2: pass # E: Name "y2" already defined on line 7
320320
reveal_type(y2) # N: Revealed type is "builtins.int"
321321

322322
y3, y4 = y, y
@@ -340,7 +340,7 @@ MYPY = False
340340
if MYPY: # Tweak processing order
341341
from b import C as C2
342342
class C: pass
343-
class C2: pass # E: Name 'C2' already defined on line 4
343+
class C2: pass # E: Name "C2" already defined on line 4
344344

345345
[file b.py]
346346
from a import C
@@ -352,7 +352,7 @@ import a
352352
from b import C as C2
353353
class C: pass
354354

355-
class C2: pass # E: Name 'C2' already defined on line 2
355+
class C2: pass # E: Name "C2" already defined on line 2
356356
[file b.py]
357357
MYPY = False
358358
if MYPY: # Tweak processing order
@@ -366,7 +366,7 @@ from b import f as g
366366
def f(): pass
367367

368368
a, *b = g()
369-
class b(): pass # E: Name 'b' already defined on line 4
369+
class b(): pass # E: Name "b" already defined on line 4
370370
reveal_type(b) # N: Revealed type is "Any"
371371

372372
[file b.py]
@@ -381,7 +381,7 @@ reveal_type(x) # N: Revealed type is "b.A"
381381

382382
from b import *
383383

384-
class A: pass # E: Name 'A' already defined (possibly by an import)
384+
class A: pass # E: Name "A" already defined (possibly by an import)
385385

386386
[file b.py]
387387
class A: pass
@@ -400,7 +400,7 @@ MYPY = False
400400
if MYPY: # Tweak processing order
401401
from b import *
402402

403-
class A: pass # E: Name 'A' already defined (possibly by an import)
403+
class A: pass # E: Name "A" already defined (possibly by an import)
404404

405405
[file b.py]
406406
class A: pass
@@ -1911,7 +1911,7 @@ reveal_type(f) # N: Revealed type is "def (builtins.str)"
19111911
[case testNewAnalyzerConditionallyDefineFuncOverClass]
19121912
class C:
19131913
1() # E: "int" not callable
1914-
def C() -> None: # E: Name 'C' already defined on line 1
1914+
def C() -> None: # E: Name "C" already defined on line 1
19151915
''() # E: "str" not callable
19161916

19171917
[case testNewAnalyzerTupleIteration]
@@ -2014,7 +2014,7 @@ y = 1
20142014
from non_existing import stuff, other_stuff
20152015

20162016
stuff = 1 # OK
2017-
other_stuff: int = 1 # E: Name 'other_stuff' already defined (possibly by an import)
2017+
other_stuff: int = 1 # E: Name "other_stuff" already defined (possibly by an import)
20182018

20192019
x: C
20202020
class C: ...
@@ -2023,9 +2023,9 @@ class C: ...
20232023
# flags: --ignore-missing-imports
20242024

20252025
class Other: ...
2026-
from non_existing import Other # E: Name 'Other' already defined on line 3
2026+
from non_existing import Other # E: Name "Other" already defined on line 3
20272027
from non_existing import Cls
2028-
class Cls: ... # E: Name 'Cls' already defined (possibly by an import)
2028+
class Cls: ... # E: Name "Cls" already defined (possibly by an import)
20292029

20302030
x: C
20312031
class C: ...
@@ -2056,14 +2056,14 @@ def f(x: asdf) -> None: # E: Name "asdf" is not defined
20562056
from enum import Enum
20572057

20582058
A = Enum('A', ['x', 'y'])
2059-
A = Enum('A', ['z', 't']) # E: Name 'A' already defined on line 3
2059+
A = Enum('A', ['z', 't']) # E: Name "A" already defined on line 3
20602060

20612061
[case testNewAnalyzerNewTypeRedefinition]
20622062
from typing import NewType
20632063

20642064
A = NewType('A', int)
20652065
A = NewType('A', str) # E: Cannot redefine 'A' as a NewType \
2066-
# E: Name 'A' already defined on line 3
2066+
# E: Name "A" already defined on line 3
20672067

20682068
[case testNewAnalyzerNewTypeForwardClass]
20692069
from typing import NewType, List
@@ -2432,7 +2432,7 @@ from other import C # type: ignore
24322432

24332433
y = 'bad'
24342434

2435-
class C: # E: Name 'C' already defined (possibly by an import)
2435+
class C: # E: Name "C" already defined (possibly by an import)
24362436
def meth(self, other: int) -> None:
24372437
y() # E: "str" not callable
24382438

@@ -2445,7 +2445,7 @@ if int():
24452445
def f(x: int) -> None:
24462446
pass
24472447
else:
2448-
@overload # E: Name 'f' already defined on line 6
2448+
@overload # E: Name "f" already defined on line 6
24492449
def f(x: int) -> None: ...
24502450
@overload
24512451
def f(x: str) -> None: ...
@@ -2471,7 +2471,7 @@ x = y
24712471
x = 1
24722472

24732473
# We want to check that the first definition creates the variable.
2474-
def x() -> None: ... # E: Name 'x' already defined on line 1
2474+
def x() -> None: ... # E: Name "x" already defined on line 1
24752475
y = 2
24762476

24772477
[case testNewAnalyzerImportStarSpecialCase]
@@ -2955,7 +2955,7 @@ def g() -> None:
29552955

29562956
def foo() -> None:
29572957
nonlocal bar
2958-
bar = [] # type: typing.List[int] # E: Name 'bar' already defined on line 11
2958+
bar = [] # type: typing.List[int] # E: Name "bar" already defined on line 11
29592959
[builtins fixtures/list.pyi]
29602960

29612961
[case testNewAnalyzerMoreInvalidTypeVarArgumentsDeferred]
@@ -3049,7 +3049,7 @@ from foo import *
30493049
try:
30503050
X = X
30513051
except:
3052-
class X: # E: Name 'X' already defined (possibly by an import)
3052+
class X: # E: Name "X" already defined (possibly by an import)
30533053
pass
30543054

30553055
reveal_type(X()) # N: Revealed type is "foo.X"
@@ -3062,7 +3062,7 @@ try:
30623062
int = int
30633063
reveal_type(int()) # N: Revealed type is "builtins.int"
30643064
except:
3065-
class int: # E: Name 'int' already defined (possibly by an import)
3065+
class int: # E: Name "int" already defined (possibly by an import)
30663066
pass
30673067

30683068
reveal_type(int()) # N: Revealed type is "builtins.int"
@@ -3074,7 +3074,7 @@ try:
30743074
int = int
30753075
reveal_type(int()) # N: Revealed type is "builtins.int"
30763076
except:
3077-
class int: # E: Name 'int' already defined (possibly by an import)
3077+
class int: # E: Name "int" already defined (possibly by an import)
30783078
pass
30793079

30803080
reveal_type(int()) # N: Revealed type is "builtins.int"

test-data/unit/check-newsyntax.test

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ a = 5 # E: Incompatible types in assignment (expression has type "int", variabl
1919
b: str = 5 # E: Incompatible types in assignment (expression has type "int", variable has type "str")
2020

2121
zzz: int
22-
zzz: str # E: Name 'zzz' already defined on line 10
22+
zzz: str # E: Name "zzz" already defined on line 10
2323
[out]
2424

2525
[case testNewSyntaxWithDict]

0 commit comments

Comments
 (0)