Skip to content

Commit e5c0b59

Browse files
committed
Fixed bug that leads to incorrect metatype for a class object that is created by calling the metaclass with a two-argument form.
1 parent d33a105 commit e5c0b59

File tree

2 files changed

+11
-5
lines changed

2 files changed

+11
-5
lines changed

packages/pyright-internal/src/analyzer/typeEvaluator.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12958,7 +12958,7 @@ export function createTypeEvaluator(
1295812958
fileInfo.fileUri,
1295912959
ClassTypeFlags.ValidTypeAliasClass,
1296012960
ParseTreeUtils.getTypeSourceId(errorNode),
12961-
/* declaredMetaclass */ undefined,
12961+
metaclass,
1296212962
arg1Type.details.effectiveMetaclass
1296312963
);
1296412964
arg1Type.tupleTypeArguments.forEach((typeArg) => {

packages/pyright-internal/src/tests/samples/newType2.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,10 @@
77
X2 = type("X2", (object,), {})
88

99

10-
class A(X1):
11-
...
10+
class A(X1): ...
1211

1312

14-
class B(X2, A):
15-
...
13+
class B(X2, A): ...
1614

1715

1816
# This should generate an error because the first arg is not a string.
@@ -27,3 +25,11 @@ class B(X2, A):
2725

2826
X6 = type("", tuple({str}), {})
2927
X7 = type("", (float, str), {})
28+
29+
30+
class Meta1(type): ...
31+
32+
33+
X8 = Meta1("X8", (list,), {})
34+
reveal_type(X8, expected_text="type[X8]")
35+
reveal_type(type(X8), expected_text="type[Meta1]")

0 commit comments

Comments
 (0)