Skip to content

Commit ff981eb

Browse files
committed
Merge remote-tracking branch 'upstream/master' into simplify-indirect
2 parents 49f8475 + bf77aab commit ff981eb

30 files changed

+456
-95
lines changed

mypy/checkexpr.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6435,7 +6435,7 @@ def visit_type_var(self, t: TypeVarType) -> bool:
64356435

64366436
def visit_param_spec(self, t: ParamSpecType) -> bool:
64376437
default = [t.default] if t.has_default() else []
6438-
return self.query_types([t.upper_bound, *default])
6438+
return self.query_types([t.upper_bound, *default, t.prefix])
64396439

64406440
def visit_type_var_tuple(self, t: TypeVarTupleType) -> bool:
64416441
default = [t.default] if t.has_default() else []

mypy/erasetype.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,7 @@ def visit_type_var_tuple(self, t: TypeVarTupleType) -> Type:
222222
return t
223223

224224
def visit_param_spec(self, t: ParamSpecType) -> Type:
225+
# TODO: we should probably preserve prefix here.
225226
if self.erase_id is None or self.erase_id(t.id):
226227
return self.replacement
227228
return t

mypy/fixup.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -347,6 +347,7 @@ def visit_type_var(self, tvt: TypeVarType) -> None:
347347
def visit_param_spec(self, p: ParamSpecType) -> None:
348348
p.upper_bound.accept(self)
349349
p.default.accept(self)
350+
p.prefix.accept(self)
350351

351352
def visit_type_var_tuple(self, t: TypeVarTupleType) -> None:
352353
t.tuple_fallback.accept(self)

mypy/indirection.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ def visit_type_var(self, t: types.TypeVarType) -> None:
107107
def visit_param_spec(self, t: types.ParamSpecType) -> None:
108108
self._visit(t.upper_bound)
109109
self._visit(t.default)
110+
self._visit(t.prefix)
110111

111112
def visit_type_var_tuple(self, t: types.TypeVarTupleType) -> None:
112113
self._visit(t.upper_bound)

mypy/main.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -886,7 +886,7 @@ def add_invertible_flag(
886886
"--allow-redefinition-new",
887887
default=False,
888888
strict_flag=False,
889-
help=argparse.SUPPRESS, # This is still very experimental
889+
help="Allow more flexible variable redefinition semantics (experimental)",
890890
group=strictness_group,
891891
)
892892

mypy/options.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ class BuildType:
7474
"disable_memoryview_promotion",
7575
"strict_bytes",
7676
"fixed_format_cache",
77+
"untyped_calls_exclude",
7778
}
7879
) - {"debug_cache"}
7980

mypy/server/astdiff.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -435,6 +435,7 @@ def visit_param_spec(self, typ: ParamSpecType) -> SnapshotItem:
435435
typ.flavor,
436436
snapshot_type(typ.upper_bound),
437437
snapshot_type(typ.default),
438+
snapshot_type(typ.prefix),
438439
)
439440

440441
def visit_type_var_tuple(self, typ: TypeVarTupleType) -> SnapshotItem:

mypy/server/astmerge.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -489,6 +489,7 @@ def visit_type_var(self, typ: TypeVarType) -> None:
489489
def visit_param_spec(self, typ: ParamSpecType) -> None:
490490
typ.upper_bound.accept(self)
491491
typ.default.accept(self)
492+
typ.prefix.accept(self)
492493

493494
def visit_type_var_tuple(self, typ: TypeVarTupleType) -> None:
494495
typ.upper_bound.accept(self)

mypy/server/deps.py

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1038,10 +1038,8 @@ def visit_type_var(self, typ: TypeVarType) -> list[str]:
10381038
triggers = []
10391039
if typ.fullname:
10401040
triggers.append(make_trigger(typ.fullname))
1041-
if typ.upper_bound:
1042-
triggers.extend(self.get_type_triggers(typ.upper_bound))
1043-
if typ.default:
1044-
triggers.extend(self.get_type_triggers(typ.default))
1041+
triggers.extend(self.get_type_triggers(typ.upper_bound))
1042+
triggers.extend(self.get_type_triggers(typ.default))
10451043
for val in typ.values:
10461044
triggers.extend(self.get_type_triggers(val))
10471045
return triggers
@@ -1050,22 +1048,17 @@ def visit_param_spec(self, typ: ParamSpecType) -> list[str]:
10501048
triggers = []
10511049
if typ.fullname:
10521050
triggers.append(make_trigger(typ.fullname))
1053-
if typ.upper_bound:
1054-
triggers.extend(self.get_type_triggers(typ.upper_bound))
1055-
if typ.default:
1056-
triggers.extend(self.get_type_triggers(typ.default))
10571051
triggers.extend(self.get_type_triggers(typ.upper_bound))
1052+
triggers.extend(self.get_type_triggers(typ.default))
1053+
triggers.extend(self.get_type_triggers(typ.prefix))
10581054
return triggers
10591055

10601056
def visit_type_var_tuple(self, typ: TypeVarTupleType) -> list[str]:
10611057
triggers = []
10621058
if typ.fullname:
10631059
triggers.append(make_trigger(typ.fullname))
1064-
if typ.upper_bound:
1065-
triggers.extend(self.get_type_triggers(typ.upper_bound))
1066-
if typ.default:
1067-
triggers.extend(self.get_type_triggers(typ.default))
10681060
triggers.extend(self.get_type_triggers(typ.upper_bound))
1061+
triggers.extend(self.get_type_triggers(typ.default))
10691062
return triggers
10701063

10711064
def visit_unpack_type(self, typ: UnpackType) -> list[str]:

mypy/stubtest.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,11 @@ def is_positional_only_related(self) -> bool:
140140
# TODO: This is hacky, use error codes or something more resilient
141141
return "should be positional" in self.message
142142

143+
def is_disjoint_base_related(self) -> bool:
144+
"""Whether or not the error is related to @disjoint_base."""
145+
# TODO: This is hacky, use error codes or something more resilient
146+
return "@disjoint_base" in self.message
147+
143148
def get_description(self, concise: bool = False) -> str:
144149
"""Returns a description of the error.
145150
@@ -2181,6 +2186,7 @@ class _Arguments:
21812186
concise: bool
21822187
ignore_missing_stub: bool
21832188
ignore_positional_only: bool
2189+
ignore_disjoint_bases: bool
21842190
allowlist: list[str]
21852191
generate_allowlist: bool
21862192
ignore_unused_allowlist: bool
@@ -2274,6 +2280,8 @@ def warning_callback(msg: str) -> None:
22742280
continue
22752281
if args.ignore_positional_only and error.is_positional_only_related():
22762282
continue
2283+
if args.ignore_disjoint_bases and error.is_disjoint_base_related():
2284+
continue
22772285
if error.object_desc in allowlist:
22782286
allowlist[error.object_desc] = True
22792287
continue
@@ -2364,6 +2372,12 @@ def parse_options(args: list[str]) -> _Arguments:
23642372
action="store_true",
23652373
help="Ignore errors for whether an argument should or shouldn't be positional-only",
23662374
)
2375+
# TODO: Remove once PEP 800 is accepted
2376+
parser.add_argument(
2377+
"--ignore-disjoint-bases",
2378+
action="store_true",
2379+
help="Disable checks for PEP 800 @disjoint_base classes",
2380+
)
23672381
parser.add_argument(
23682382
"--allowlist",
23692383
"--whitelist",

0 commit comments

Comments
 (0)