@zzzen/pyright-internal 1.2.0-dev.20240901 → 1.2.0-dev.20240915

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/dist/analyzer/analysis.d.ts +1 -0
  2. package/dist/analyzer/analysis.js +2 -0
  3. package/dist/analyzer/analysis.js.map +1 -1
  4. package/dist/analyzer/backgroundAnalysisProgram.js +6 -2
  5. package/dist/analyzer/backgroundAnalysisProgram.js.map +1 -1
  6. package/dist/analyzer/binder.js +14 -8
  7. package/dist/analyzer/binder.js.map +1 -1
  8. package/dist/analyzer/cacheManager.d.ts +2 -2
  9. package/dist/analyzer/cacheManager.js.map +1 -1
  10. package/dist/analyzer/checker.js +53 -192
  11. package/dist/analyzer/checker.js.map +1 -1
  12. package/dist/analyzer/codeFlowEngine.js +7 -2
  13. package/dist/analyzer/codeFlowEngine.js.map +1 -1
  14. package/dist/analyzer/constraintSolver.d.ts +1 -2
  15. package/dist/analyzer/constraintSolver.js +2 -2
  16. package/dist/analyzer/constraintSolver.js.map +1 -1
  17. package/dist/analyzer/constructors.js +7 -1
  18. package/dist/analyzer/constructors.js.map +1 -1
  19. package/dist/analyzer/dataClasses.js +6 -1
  20. package/dist/analyzer/dataClasses.js.map +1 -1
  21. package/dist/analyzer/namedTuples.js +4 -1
  22. package/dist/analyzer/namedTuples.js.map +1 -1
  23. package/dist/analyzer/operations.js +5 -0
  24. package/dist/analyzer/operations.js.map +1 -1
  25. package/dist/analyzer/parseTreeWalker.js +1 -1
  26. package/dist/analyzer/parseTreeWalker.js.map +1 -1
  27. package/dist/analyzer/patternMatching.js +3 -1
  28. package/dist/analyzer/patternMatching.js.map +1 -1
  29. package/dist/analyzer/program.js +2 -3
  30. package/dist/analyzer/program.js.map +1 -1
  31. package/dist/analyzer/properties.js.map +1 -1
  32. package/dist/analyzer/protocols.d.ts +1 -2
  33. package/dist/analyzer/protocols.js +5 -8
  34. package/dist/analyzer/protocols.js.map +1 -1
  35. package/dist/analyzer/pythonPathUtils.d.ts +1 -1
  36. package/dist/analyzer/service.d.ts +3 -1
  37. package/dist/analyzer/service.js +50 -33
  38. package/dist/analyzer/service.js.map +1 -1
  39. package/dist/analyzer/sourceMapper.js +10 -5
  40. package/dist/analyzer/sourceMapper.js.map +1 -1
  41. package/dist/analyzer/tuples.d.ts +1 -2
  42. package/dist/analyzer/tuples.js.map +1 -1
  43. package/dist/analyzer/typeEvaluator.js +599 -181
  44. package/dist/analyzer/typeEvaluator.js.map +1 -1
  45. package/dist/analyzer/typeEvaluatorTypes.d.ts +33 -6
  46. package/dist/analyzer/typeEvaluatorTypes.js +66 -2
  47. package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
  48. package/dist/analyzer/typeGuards.d.ts +3 -12
  49. package/dist/analyzer/typeGuards.js +286 -461
  50. package/dist/analyzer/typeGuards.js.map +1 -1
  51. package/dist/analyzer/typeStubWriter.js +12 -1
  52. package/dist/analyzer/typeStubWriter.js.map +1 -1
  53. package/dist/analyzer/typeUtils.d.ts +4 -17
  54. package/dist/analyzer/typeUtils.js +61 -60
  55. package/dist/analyzer/typeUtils.js.map +1 -1
  56. package/dist/analyzer/typedDicts.d.ts +1 -2
  57. package/dist/analyzer/typedDicts.js.map +1 -1
  58. package/dist/analyzer/types.d.ts +9 -4
  59. package/dist/analyzer/types.js +80 -26
  60. package/dist/analyzer/types.js.map +1 -1
  61. package/dist/backgroundAnalysisBase.d.ts +23 -16
  62. package/dist/backgroundAnalysisBase.js +64 -35
  63. package/dist/backgroundAnalysisBase.js.map +1 -1
  64. package/dist/backgroundThreadBase.js +9 -0
  65. package/dist/backgroundThreadBase.js.map +1 -1
  66. package/dist/commands/dumpFileDebugInfoCommand.js +0 -1
  67. package/dist/commands/dumpFileDebugInfoCommand.js.map +1 -1
  68. package/dist/common/languageServerInterface.d.ts +1 -1
  69. package/dist/common/uri/uriUtils.d.ts +1 -1
  70. package/dist/common/uri/uriUtils.js +6 -1
  71. package/dist/common/uri/uriUtils.js.map +1 -1
  72. package/dist/languageServerBase.d.ts +2 -2
  73. package/dist/languageServerBase.js +1 -3
  74. package/dist/languageServerBase.js.map +1 -1
  75. package/dist/languageService/analyzerServiceExecutor.d.ts +6 -1
  76. package/dist/languageService/analyzerServiceExecutor.js +7 -6
  77. package/dist/languageService/analyzerServiceExecutor.js.map +1 -1
  78. package/dist/languageService/callHierarchyProvider.js +2 -1
  79. package/dist/languageService/callHierarchyProvider.js.map +1 -1
  80. package/dist/languageService/completionProvider.js +12 -12
  81. package/dist/languageService/completionProvider.js.map +1 -1
  82. package/dist/languageService/definitionProvider.js +6 -6
  83. package/dist/languageService/definitionProvider.js.map +1 -1
  84. package/dist/languageService/documentSymbolCollector.js +9 -9
  85. package/dist/languageService/documentSymbolCollector.js.map +1 -1
  86. package/dist/languageService/fileWatcherDynamicFeature.d.ts +5 -1
  87. package/dist/languageService/fileWatcherDynamicFeature.js +12 -2
  88. package/dist/languageService/fileWatcherDynamicFeature.js.map +1 -1
  89. package/dist/languageService/hoverProvider.d.ts +1 -0
  90. package/dist/languageService/hoverProvider.js +30 -3
  91. package/dist/languageService/hoverProvider.js.map +1 -1
  92. package/dist/languageService/signatureHelpProvider.js +2 -2
  93. package/dist/languageService/signatureHelpProvider.js.map +1 -1
  94. package/dist/languageService/tooltipUtils.js +2 -2
  95. package/dist/languageService/tooltipUtils.js.map +1 -1
  96. package/dist/localization/localize.d.ts +10 -0
  97. package/dist/localization/localize.js +4 -0
  98. package/dist/localization/localize.js.map +1 -1
  99. package/dist/localization/package.nls.cs.json +155 -153
  100. package/dist/localization/package.nls.de.json +128 -126
  101. package/dist/localization/package.nls.en-us.json +1632 -404
  102. package/dist/localization/package.nls.es.json +151 -149
  103. package/dist/localization/package.nls.fr.json +129 -127
  104. package/dist/localization/package.nls.it.json +143 -141
  105. package/dist/localization/package.nls.ja.json +142 -140
  106. package/dist/localization/package.nls.ko.json +155 -153
  107. package/dist/localization/package.nls.pl.json +178 -176
  108. package/dist/localization/package.nls.pt-br.json +139 -137
  109. package/dist/localization/package.nls.qps-ploc.json +392 -390
  110. package/dist/localization/package.nls.ru.json +170 -168
  111. package/dist/localization/package.nls.tr.json +153 -151
  112. package/dist/localization/package.nls.zh-cn.json +149 -147
  113. package/dist/localization/package.nls.zh-tw.json +133 -131
  114. package/dist/parser/parseNodes.d.ts +2 -3
  115. package/dist/parser/parseNodes.js.map +1 -1
  116. package/dist/parser/parser.js +6 -20
  117. package/dist/parser/parser.js.map +1 -1
  118. package/dist/tests/checker.test.js +14 -1
  119. package/dist/tests/checker.test.js.map +1 -1
  120. package/dist/tests/envVarUtils.test.js +0 -3
  121. package/dist/tests/envVarUtils.test.js.map +1 -1
  122. package/dist/tests/harness/fourslash/testLanguageService.js +0 -3
  123. package/dist/tests/harness/fourslash/testLanguageService.js.map +1 -1
  124. package/dist/tests/harness/fourslash/testState.js +2 -5
  125. package/dist/tests/harness/fourslash/testState.js.map +1 -1
  126. package/dist/tests/harness/fourslash/testStateUtils.d.ts +1 -0
  127. package/dist/tests/harness/fourslash/testStateUtils.js +5 -0
  128. package/dist/tests/harness/fourslash/testStateUtils.js.map +1 -1
  129. package/dist/tests/harness/vfs/filesystem.d.ts +3 -2
  130. package/dist/tests/harness/vfs/filesystem.js +6 -3
  131. package/dist/tests/harness/vfs/filesystem.js.map +1 -1
  132. package/dist/tests/importStatementUtils.test.js +1 -1
  133. package/dist/tests/importStatementUtils.test.js.map +1 -1
  134. package/dist/tests/service.test.js +31 -0
  135. package/dist/tests/service.test.js.map +1 -1
  136. package/dist/tests/typeEvaluator1.test.js +5 -1
  137. package/dist/tests/typeEvaluator1.test.js.map +1 -1
  138. package/dist/tests/typeEvaluator2.test.js +13 -1
  139. package/dist/tests/typeEvaluator2.test.js.map +1 -1
  140. package/dist/tests/typeEvaluator3.test.js +5 -1
  141. package/dist/tests/typeEvaluator3.test.js.map +1 -1
  142. package/dist/tests/typeEvaluator5.test.js +6 -0
  143. package/dist/tests/typeEvaluator5.test.js.map +1 -1
  144. package/dist/tests/typeEvaluator6.test.js +5 -1
  145. package/dist/tests/typeEvaluator6.test.js.map +1 -1
  146. package/dist/tests/typeEvaluator7.test.js +1 -1
  147. package/dist/tests/typeEvaluator8.test.js +40 -0
  148. package/dist/tests/typeEvaluator8.test.js.map +1 -1
  149. package/dist/workspaceFactory.d.ts +2 -20
  150. package/dist/workspaceFactory.js +26 -64
  151. package/dist/workspaceFactory.js.map +1 -1
  152. package/package.json +1 -1
@@ -8,7 +8,7 @@
8
8
  * Functions that operate on Type objects.
9
9
  */
10
10
  Object.defineProperty(exports, "__esModule", { value: true });
11
- exports.TypeVarTransformer = exports.UniqueSignatureTracker = exports.AssignTypeFlags = exports.ClassIteratorFlags = exports.MemberAccessFlags = void 0;
11
+ exports.TypeVarTransformer = exports.UniqueSignatureTracker = exports.ClassIteratorFlags = exports.MemberAccessFlags = void 0;
12
12
  exports.isOptionalType = isOptionalType;
13
13
  exports.isNoneInstance = isNoneInstance;
14
14
  exports.isNoneTypeClass = isNoneTypeClass;
@@ -47,6 +47,8 @@ exports.isLiteralTypeOrUnion = isLiteralTypeOrUnion;
47
47
  exports.isLiteralLikeType = isLiteralLikeType;
48
48
  exports.containsLiteralType = containsLiteralType;
49
49
  exports.getLiteralTypeClassName = getLiteralTypeClassName;
50
+ exports.stripTypeForm = stripTypeForm;
51
+ exports.stripTypeFormRecursive = stripTypeFormRecursive;
50
52
  exports.getUnionSubtypeCount = getUnionSubtypeCount;
51
53
  exports.isEllipsisType = isEllipsisType;
52
54
  exports.isProperty = isProperty;
@@ -72,6 +74,7 @@ exports.getContainerDepth = getContainerDepth;
72
74
  exports.lookUpObjectMember = lookUpObjectMember;
73
75
  exports.lookUpClassMember = lookUpClassMember;
74
76
  exports.getClassMemberIterator = getClassMemberIterator;
77
+ exports.isMemberReadOnly = isMemberReadOnly;
75
78
  exports.getClassIterator = getClassIterator;
76
79
  exports.getClassFieldsRecursive = getClassFieldsRecursive;
77
80
  exports.addTypeVarsToListIfUnique = addTypeVarsToListIfUnique;
@@ -172,64 +175,6 @@ var ClassIteratorFlags;
172
175
  // Skip the 'type' base class in particular.
173
176
  ClassIteratorFlags[ClassIteratorFlags["SkipTypeBaseClass"] = 4] = "SkipTypeBaseClass";
174
177
  })(ClassIteratorFlags || (exports.ClassIteratorFlags = ClassIteratorFlags = {}));
175
- var AssignTypeFlags;
176
- (function (AssignTypeFlags) {
177
- AssignTypeFlags[AssignTypeFlags["Default"] = 0] = "Default";
178
- // Require invariance with respect to class matching? Normally
179
- // subclasses are allowed.
180
- AssignTypeFlags[AssignTypeFlags["Invariant"] = 1] = "Invariant";
181
- // The caller has swapped the source and dest types because
182
- // the types are contravariant. Perform type var matching
183
- // on dest type vars rather than source type var.
184
- AssignTypeFlags[AssignTypeFlags["Contravariant"] = 2] = "Contravariant";
185
- // We're comparing type compatibility of two distinct recursive types.
186
- // This has the potential of recursing infinitely. This flag allows us
187
- // to detect the recursion after the first level of checking.
188
- AssignTypeFlags[AssignTypeFlags["SkipRecursiveTypeCheck"] = 4] = "SkipRecursiveTypeCheck";
189
- // During TypeVar solving for a function call, this flag is set if
190
- // this is the first of multiple passes. It adjusts certain heuristics
191
- // for constraint solving.
192
- AssignTypeFlags[AssignTypeFlags["ArgAssignmentFirstPass"] = 8] = "ArgAssignmentFirstPass";
193
- // If the dest is not Any but the src is Any, treat it
194
- // as incompatible. Also, treat all source TypeVars as their
195
- // concrete counterparts. This option is used for validating
196
- // whether overload signatures overlap.
197
- AssignTypeFlags[AssignTypeFlags["OverloadOverlap"] = 16] = "OverloadOverlap";
198
- // When used in conjunction with OverloadOverlapCheck, look
199
- // for partial overlaps. For example, `int | list` overlaps
200
- // partially with `int | str`.
201
- AssignTypeFlags[AssignTypeFlags["PartialOverloadOverlap"] = 32] = "PartialOverloadOverlap";
202
- // For function types, skip the return type check.
203
- AssignTypeFlags[AssignTypeFlags["SkipReturnTypeCheck"] = 64] = "SkipReturnTypeCheck";
204
- // In most cases, literals are stripped when assigning to a
205
- // type variable. This overrides the standard behavior.
206
- AssignTypeFlags[AssignTypeFlags["RetainLiteralsForTypeVar"] = 256] = "RetainLiteralsForTypeVar";
207
- // When validating the type of a self or cls parameter, allow
208
- // a type mismatch. This is used in overload consistency validation
209
- // because overloads can provide explicit type annotations for self
210
- // or cls.
211
- AssignTypeFlags[AssignTypeFlags["SkipSelfClsTypeCheck"] = 512] = "SkipSelfClsTypeCheck";
212
- // We're initially populating the constraints with an expected type,
213
- // so TypeVars should match the specified type exactly rather than
214
- // employing narrowing or widening. The variance context determines
215
- // whether the upper bound, lower bound, or both are established.
216
- AssignTypeFlags[AssignTypeFlags["PopulateExpectedType"] = 2048] = "PopulateExpectedType";
217
- // Used with PopulatingExpectedType, this flag indicates that a TypeVar
218
- // constraint that is Unknown should be ignored.
219
- AssignTypeFlags[AssignTypeFlags["SkipPopulateUnknownExpectedType"] = 4096] = "SkipPopulateUnknownExpectedType";
220
- // Normally, when a class type is assigned to a TypeVar and that class
221
- // hasn't previously been specialized, it will be specialized with
222
- // default type arguments (typically "Unknown"). This flag skips
223
- // this step.
224
- AssignTypeFlags[AssignTypeFlags["AllowUnspecifiedTypeArgs"] = 8192] = "AllowUnspecifiedTypeArgs";
225
- // Normally all special form classes are incompatible with type[T],
226
- // but a few of them are allowed in the context of an isinstance
227
- // or issubclass call.
228
- AssignTypeFlags[AssignTypeFlags["AllowIsinstanceSpecialForms"] = 16384] = "AllowIsinstanceSpecialForms";
229
- // When comparing two methods, skip the type check for the "self" or "cls"
230
- // parameters. This is used for variance inference and validation.
231
- AssignTypeFlags[AssignTypeFlags["SkipSelfClsParamCheck"] = 32768] = "SkipSelfClsParamCheck";
232
- })(AssignTypeFlags || (exports.AssignTypeFlags = AssignTypeFlags = {}));
233
178
  // Tracks whether a function signature has been seen before within
234
179
  // an expression. For example, in the expression "foo(foo, foo)", the
235
180
  // signature for "foo" will be seen three times at three different
@@ -689,6 +634,11 @@ function preserveUnknown(type1, type2) {
689
634
  // Determines whether the specified type is a type that can be
690
635
  // combined with other types for a union.
691
636
  function isUnionableType(subtypes) {
637
+ // If all of the subtypes are TypeForm types, we know that they
638
+ // are unionable.
639
+ if (subtypes.every((t) => { var _a; return ((_a = t.props) === null || _a === void 0 ? void 0 : _a.typeForm) !== undefined; })) {
640
+ return true;
641
+ }
692
642
  let typeFlags = 2 /* TypeFlags.Instance */ | 1 /* TypeFlags.Instantiable */;
693
643
  for (const subtype of subtypes) {
694
644
  typeFlags &= subtype.flags;
@@ -1030,6 +980,24 @@ function getLiteralTypeClassName(type) {
1030
980
  }
1031
981
  return undefined;
1032
982
  }
983
+ function stripTypeForm(type) {
984
+ var _a;
985
+ if ((_a = type.props) === null || _a === void 0 ? void 0 : _a.typeForm) {
986
+ return types_1.TypeBase.cloneWithTypeForm(type, undefined);
987
+ }
988
+ return type;
989
+ }
990
+ function stripTypeFormRecursive(type, recursionCount = 0) {
991
+ var _a;
992
+ if (recursionCount > types_1.maxTypeRecursionCount) {
993
+ return type;
994
+ }
995
+ recursionCount++;
996
+ if ((_a = type.props) === null || _a === void 0 ? void 0 : _a.typeForm) {
997
+ type = types_1.TypeBase.cloneWithTypeForm(type, undefined);
998
+ }
999
+ return mapSubtypes(type, (subtype) => stripTypeFormRecursive(subtype, recursionCount));
1000
+ }
1033
1001
  function getUnionSubtypeCount(type) {
1034
1002
  if ((0, types_1.isUnion)(type)) {
1035
1003
  return type.priv.subtypes.length;
@@ -1183,10 +1151,16 @@ function makeFunctionTypeVarsBound(type) {
1183
1151
  return makeTypeVarsBound(type, scopeIds);
1184
1152
  }
1185
1153
  function makeTypeVarsBound(type, scopeIds) {
1154
+ if (scopeIds && scopeIds.length === 0) {
1155
+ return type;
1156
+ }
1186
1157
  const transformer = new BoundTypeVarTransform(scopeIds);
1187
1158
  return transformer.apply(type, 0);
1188
1159
  }
1189
1160
  function makeTypeVarsFree(type, scopeIds) {
1161
+ if (scopeIds.length === 0) {
1162
+ return type;
1163
+ }
1190
1164
  const transformer = new FreeTypeVarTransform(scopeIds);
1191
1165
  return transformer.apply(type, 0);
1192
1166
  }
@@ -1248,6 +1222,7 @@ function getProtocolSymbolsRecursive(classType, symbolMap, classFlags = 512 /* C
1248
1222
  isInstanceMember: symbol.isInstanceMember(),
1249
1223
  isClassMember: symbol.isClassMember(),
1250
1224
  isClassVar: (0, symbolUtils_1.isEffectivelyClassVar)(symbol, /* isDataclass */ false),
1225
+ isReadOnly: false,
1251
1226
  isTypeDeclared: symbol.hasTypedDeclarations(),
1252
1227
  skippedUndeclaredType: false,
1253
1228
  });
@@ -1358,6 +1333,7 @@ function* getClassMemberIterator(classType, memberName, flags = 0 /* MemberAcces
1358
1333
  isClassVar: false,
1359
1334
  classType,
1360
1335
  unspecializedClassType: classType,
1336
+ isReadOnly: false,
1361
1337
  isTypeDeclared: false,
1362
1338
  skippedUndeclaredType: false,
1363
1339
  };
@@ -1382,6 +1358,7 @@ function* getClassMemberIterator(classType, memberName, flags = 0 /* MemberAcces
1382
1358
  isClassVar: (0, symbolUtils_1.isEffectivelyClassVar)(symbol, types_1.ClassType.isDataClass(specializedMroClass)),
1383
1359
  classType: specializedMroClass,
1384
1360
  unspecializedClassType: mroClass,
1361
+ isReadOnly: isMemberReadOnly(specializedMroClass, memberName),
1385
1362
  isTypeDeclared: hasDeclaredType,
1386
1363
  skippedUndeclaredType,
1387
1364
  };
@@ -1421,6 +1398,7 @@ function* getClassMemberIterator(classType, memberName, flags = 0 /* MemberAcces
1421
1398
  isClassVar: (0, symbolUtils_1.isEffectivelyClassVar)(symbol, isDataclass),
1422
1399
  classType: specializedMroClass,
1423
1400
  unspecializedClassType: mroClass,
1401
+ isReadOnly: false,
1424
1402
  isTypeDeclared: hasDeclaredType,
1425
1403
  skippedUndeclaredType,
1426
1404
  };
@@ -1443,6 +1421,7 @@ function* getClassMemberIterator(classType, memberName, flags = 0 /* MemberAcces
1443
1421
  isClassVar: false,
1444
1422
  classType,
1445
1423
  unspecializedClassType: classType,
1424
+ isReadOnly: false,
1446
1425
  isTypeDeclared: false,
1447
1426
  skippedUndeclaredType: false,
1448
1427
  };
@@ -1450,6 +1429,21 @@ function* getClassMemberIterator(classType, memberName, flags = 0 /* MemberAcces
1450
1429
  }
1451
1430
  return undefined;
1452
1431
  }
1432
+ // Checks for whether the member is effectively read only because it
1433
+ // belongs to a frozen dataclass or a named tuple.
1434
+ function isMemberReadOnly(classType, name) {
1435
+ var _a;
1436
+ if (types_1.ClassType.hasNamedTupleEntry(classType, name)) {
1437
+ return true;
1438
+ }
1439
+ if (types_1.ClassType.isDataClassFrozen(classType)) {
1440
+ const dcEntries = (_a = classType.shared) === null || _a === void 0 ? void 0 : _a.dataClassEntries;
1441
+ if (dcEntries === null || dcEntries === void 0 ? void 0 : dcEntries.some((entry) => entry.name === name)) {
1442
+ return true;
1443
+ }
1444
+ }
1445
+ return false;
1446
+ }
1453
1447
  function* getClassIterator(classType, flags = 0 /* ClassIteratorFlags.Default */, skipMroClass) {
1454
1448
  if ((0, types_1.isClass)(classType)) {
1455
1449
  let foundSkipMroClass = skipMroClass === undefined;
@@ -1509,6 +1503,7 @@ function getClassFieldsRecursive(classType) {
1509
1503
  isInstanceMember: symbol.isInstanceMember(),
1510
1504
  isClassMember: symbol.isClassMember(),
1511
1505
  isClassVar: (0, symbolUtils_1.isEffectivelyClassVar)(symbol, types_1.ClassType.isDataClass(specializedMroClass)),
1506
+ isReadOnly: isMemberReadOnly(specializedMroClass, name),
1512
1507
  isTypeDeclared: true,
1513
1508
  skippedUndeclaredType: false,
1514
1509
  });
@@ -1680,8 +1675,9 @@ function synthesizeTypeVarForSelfCls(classType, isClsParam) {
1680
1675
  const scopeId = (_a = getTypeVarScopeId(classType)) !== null && _a !== void 0 ? _a : '';
1681
1676
  selfType.shared.isSynthesized = true;
1682
1677
  selfType.shared.isSynthesizedSelf = true;
1683
- selfType.priv.nameWithScope = types_1.TypeVarType.makeNameWithScope(selfType.shared.name, scopeId);
1684
1678
  selfType.priv.scopeId = scopeId;
1679
+ selfType.priv.scopeName = '';
1680
+ selfType.priv.nameWithScope = types_1.TypeVarType.makeNameWithScope(selfType.shared.name, scopeId, selfType.priv.scopeName);
1685
1681
  const boundType = types_1.ClassType.specialize(classType,
1686
1682
  /* typeArgs */ undefined,
1687
1683
  /* isTypeArgExplicit */ false,
@@ -3284,6 +3280,11 @@ class ApplySolvedTypeVarsTransformer extends TypeVarTransformer {
3284
3280
  if (solutionSets.length <= 1) {
3285
3281
  return callback();
3286
3282
  }
3283
+ // Handle the case where we're already processing one of the signature contexts
3284
+ // and are called recursively. Don't loop over all the signature contexts again.
3285
+ if (this._activeConstraintSetIndex !== undefined) {
3286
+ return callback();
3287
+ }
3287
3288
  // Loop through all of the signature contexts in the type var context
3288
3289
  // to create an overload type.
3289
3290
  const overloadTypes = solutionSets.map((_, index) => {