2525from mypy_extensions import trait
2626
2727import mypy .strconv
28- from mypy .bogus_type import Bogus
2928from mypy .util import short_type
3029from mypy .visitor import ExpressionVisitor , NodeVisitor , StatementVisitor
3130
@@ -247,12 +246,10 @@ class SymbolNode(Node):
247246 def name (self ) -> str :
248247 pass
249248
250- # fullname can often be None even though the type system
251- # disagrees. We mark this with Bogus to let mypyc know not to
252- # worry about it.
249+ # Fully qualified name
253250 @property
254251 @abstractmethod
255- def fullname (self ) -> Bogus [ str ] :
252+ def fullname (self ) -> str :
256253 pass
257254
258255 @abstractmethod
@@ -294,7 +291,7 @@ class MypyFile(SymbolNode):
294291 __match_args__ = ("name" , "path" , "defs" )
295292
296293 # Fully qualified module name
297- _fullname : Bogus [ str ]
294+ _fullname : str
298295 # Path to the file (empty string if not known)
299296 path : str
300297 # Top-level definitions and statements
@@ -361,7 +358,7 @@ def name(self) -> str:
361358 return "" if not self ._fullname else self ._fullname .split ("." )[- 1 ]
362359
363360 @property
364- def fullname (self ) -> Bogus [ str ] :
361+ def fullname (self ) -> str :
365362 return self ._fullname
366363
367364 def accept (self , visitor : NodeVisitor [T ]) -> T :
@@ -526,16 +523,15 @@ def __init__(self) -> None:
526523 self .is_static = False
527524 self .is_final = False
528525 # Name with module prefix
529- # TODO: Type should be Optional[str]
530- self ._fullname = cast (Bogus [str ], None )
526+ self ._fullname = ""
531527
532528 @property
533529 @abstractmethod
534530 def name (self ) -> str :
535531 pass
536532
537533 @property
538- def fullname (self ) -> Bogus [ str ] :
534+ def fullname (self ) -> str :
539535 return self ._fullname
540536
541537
@@ -871,7 +867,7 @@ def name(self) -> str:
871867 return self .func .name
872868
873869 @property
874- def fullname (self ) -> Bogus [ str ] :
870+ def fullname (self ) -> str :
875871 return self .func .fullname
876872
877873 @property
@@ -967,7 +963,7 @@ def __init__(self, name: str, type: mypy.types.Type | None = None) -> None:
967963 super ().__init__ ()
968964 self ._name = name # Name without module prefix
969965 # TODO: Should be Optional[str]
970- self ._fullname = cast ( "Bogus[str]" , None ) # Name with module prefix
966+ self ._fullname = "" # Name with module prefix
971967 # TODO: Should be Optional[TypeInfo]
972968 self .info = VAR_NO_INFO
973969 self .type : mypy .types .Type | None = type # Declared or inferred type, or None
@@ -1019,7 +1015,7 @@ def name(self) -> str:
10191015 return self ._name
10201016
10211017 @property
1022- def fullname (self ) -> Bogus [ str ] :
1018+ def fullname (self ) -> str :
10231019 return self ._fullname
10241020
10251021 def accept (self , visitor : NodeVisitor [T ]) -> T :
@@ -1057,7 +1053,7 @@ class ClassDef(Statement):
10571053
10581054 __slots__ = (
10591055 "name" ,
1060- "fullname " ,
1056+ "_fullname " ,
10611057 "defs" ,
10621058 "type_vars" ,
10631059 "base_type_exprs" ,
@@ -1075,7 +1071,7 @@ class ClassDef(Statement):
10751071 __match_args__ = ("name" , "defs" )
10761072
10771073 name : str # Name of the class without module prefix
1078- fullname : Bogus [ str ] # Fully qualified name of the class
1074+ _fullname : str # Fully qualified name of the class
10791075 defs : Block
10801076 type_vars : list [mypy .types .TypeVarLikeType ]
10811077 # Base class expressions (not semantically analyzed -- can be arbitrary expressions)
@@ -1102,7 +1098,7 @@ def __init__(
11021098 ) -> None :
11031099 super ().__init__ ()
11041100 self .name = name
1105- self .fullname = None # type: ignore[assignment]
1101+ self ._fullname = ""
11061102 self .defs = defs
11071103 self .type_vars = type_vars or []
11081104 self .base_type_exprs = base_type_exprs or []
@@ -1117,6 +1113,14 @@ def __init__(
11171113 self .deco_line : int | None = None
11181114 self .removed_statements = []
11191115
1116+ @property
1117+ def fullname (self ) -> str :
1118+ return self ._fullname
1119+
1120+ @fullname .setter
1121+ def fullname (self , v : str ) -> None :
1122+ self ._fullname = v
1123+
11201124 def accept (self , visitor : StatementVisitor [T ]) -> T :
11211125 return visitor .visit_class_def (self )
11221126
@@ -1725,7 +1729,7 @@ class RefExpr(Expression):
17251729 __slots__ = (
17261730 "kind" ,
17271731 "node" ,
1728- "fullname " ,
1732+ "_fullname " ,
17291733 "is_new_def" ,
17301734 "is_inferred_def" ,
17311735 "is_alias_rvalue" ,
@@ -1739,7 +1743,7 @@ def __init__(self) -> None:
17391743 # Var, FuncDef or TypeInfo that describes this
17401744 self .node : SymbolNode | None = None
17411745 # Fully qualified name (or name if not global)
1742- self .fullname : str | None = None
1746+ self ._fullname = ""
17431747 # Does this define a new name?
17441748 self .is_new_def = False
17451749 # Does this define a new name with inferred type?
@@ -1752,6 +1756,14 @@ def __init__(self) -> None:
17521756 # Cache type guard from callable_type.type_guard
17531757 self .type_guard : mypy .types .Type | None = None
17541758
1759+ @property
1760+ def fullname (self ) -> str :
1761+ return self ._fullname
1762+
1763+ @fullname .setter
1764+ def fullname (self , v : str ) -> None :
1765+ self ._fullname = v
1766+
17551767
17561768class NameExpr (RefExpr ):
17571769 """Name expression
@@ -2806,7 +2818,7 @@ class is generic then it will be a type constructor of higher kind.
28062818 "self_type" ,
28072819 )
28082820
2809- _fullname : Bogus [ str ] # Fully qualified name
2821+ _fullname : str # Fully qualified name
28102822 # Fully qualified name for the module this type was defined in. This
28112823 # information is also in the fullname, but is harder to extract in the
28122824 # case of nested class definitions.
@@ -3023,7 +3035,7 @@ def name(self) -> str:
30233035 return self .defn .name
30243036
30253037 @property
3026- def fullname (self ) -> Bogus [ str ] :
3038+ def fullname (self ) -> str :
30273039 return self ._fullname
30283040
30293041 def is_generic (self ) -> bool :
@@ -3739,11 +3751,7 @@ def serialize(self, prefix: str, name: str) -> JsonDict:
37393751 if prefix is not None :
37403752 fullname = self .node .fullname
37413753 if (
3742- # See the comment above SymbolNode.fullname -- fullname can often be None,
3743- # but for complex reasons it's annotated as being `Bogus[str]` instead of `str | None`,
3744- # meaning mypy erroneously thinks the `fullname is not None` check here is redundant
3745- fullname is not None # type: ignore[redundant-expr]
3746- and "." in fullname
3754+ "." in fullname
37473755 and fullname != prefix + "." + name
37483756 and not (isinstance (self .node , Var ) and self .node .from_module_getattr )
37493757 ):
0 commit comments