@zzzen/pyright-internal 1.2.0-dev.20231029 → 1.2.0-dev.20231105

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 (151) hide show
  1. package/dist/analyzer/analyzerFileInfo.d.ts +1 -0
  2. package/dist/analyzer/analyzerFileInfo.js.map +1 -1
  3. package/dist/analyzer/checker.js +57 -50
  4. package/dist/analyzer/checker.js.map +1 -1
  5. package/dist/analyzer/codeFlowEngine.js +4 -4
  6. package/dist/analyzer/codeFlowEngine.js.map +1 -1
  7. package/dist/analyzer/codeFlowUtils.js +4 -2
  8. package/dist/analyzer/codeFlowUtils.js.map +1 -1
  9. package/dist/analyzer/constraintSolver.js +2 -3
  10. package/dist/analyzer/constraintSolver.js.map +1 -1
  11. package/dist/analyzer/constructorTransform.js +1 -1
  12. package/dist/analyzer/constructorTransform.js.map +1 -1
  13. package/dist/analyzer/constructors.js +41 -36
  14. package/dist/analyzer/constructors.js.map +1 -1
  15. package/dist/analyzer/dataClasses.js +3 -3
  16. package/dist/analyzer/dataClasses.js.map +1 -1
  17. package/dist/analyzer/enums.d.ts +2 -5
  18. package/dist/analyzer/enums.js +4 -2
  19. package/dist/analyzer/enums.js.map +1 -1
  20. package/dist/analyzer/functionTransform.js +1 -1
  21. package/dist/analyzer/functionTransform.js.map +1 -1
  22. package/dist/analyzer/importResolver.d.ts +2 -1
  23. package/dist/analyzer/importResolver.js +13 -5
  24. package/dist/analyzer/importResolver.js.map +1 -1
  25. package/dist/analyzer/namedTuples.js +3 -2
  26. package/dist/analyzer/namedTuples.js.map +1 -1
  27. package/dist/analyzer/operations.js +22 -25
  28. package/dist/analyzer/operations.js.map +1 -1
  29. package/dist/analyzer/packageTypeVerifier.js +19 -21
  30. package/dist/analyzer/packageTypeVerifier.js.map +1 -1
  31. package/dist/analyzer/patternMatching.js +5 -5
  32. package/dist/analyzer/patternMatching.js.map +1 -1
  33. package/dist/analyzer/program.d.ts +1 -1
  34. package/dist/analyzer/program.js +17 -12
  35. package/dist/analyzer/program.js.map +1 -1
  36. package/dist/analyzer/properties.js +5 -5
  37. package/dist/analyzer/properties.js.map +1 -1
  38. package/dist/analyzer/protocols.js +1 -1
  39. package/dist/analyzer/protocols.js.map +1 -1
  40. package/dist/analyzer/service.js +11 -4
  41. package/dist/analyzer/service.js.map +1 -1
  42. package/dist/analyzer/sourceFile.d.ts +1 -0
  43. package/dist/analyzer/sourceFile.js +3 -0
  44. package/dist/analyzer/sourceFile.js.map +1 -1
  45. package/dist/analyzer/tracePrinter.js +11 -13
  46. package/dist/analyzer/tracePrinter.js.map +1 -1
  47. package/dist/analyzer/typeDocStringUtils.js +3 -3
  48. package/dist/analyzer/typeDocStringUtils.js.map +1 -1
  49. package/dist/analyzer/typeEvaluator.js +748 -805
  50. package/dist/analyzer/typeEvaluator.js.map +1 -1
  51. package/dist/analyzer/typeEvaluatorTypes.d.ts +12 -25
  52. package/dist/analyzer/typeEvaluatorTypes.js +1 -36
  53. package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
  54. package/dist/analyzer/typeGuards.js +27 -23
  55. package/dist/analyzer/typeGuards.js.map +1 -1
  56. package/dist/analyzer/typePrinter.js +19 -18
  57. package/dist/analyzer/typePrinter.js.map +1 -1
  58. package/dist/analyzer/typeUtils.d.ts +17 -8
  59. package/dist/analyzer/typeUtils.js +146 -93
  60. package/dist/analyzer/typeUtils.js.map +1 -1
  61. package/dist/analyzer/typeVarContext.js +6 -7
  62. package/dist/analyzer/typeVarContext.js.map +1 -1
  63. package/dist/analyzer/typeWalker.d.ts +1 -2
  64. package/dist/analyzer/typeWalker.js +7 -13
  65. package/dist/analyzer/typeWalker.js.map +1 -1
  66. package/dist/analyzer/typedDicts.js +10 -10
  67. package/dist/analyzer/typedDicts.js.map +1 -1
  68. package/dist/analyzer/types.d.ts +8 -19
  69. package/dist/analyzer/types.js +44 -76
  70. package/dist/analyzer/types.js.map +1 -1
  71. package/dist/commands/dumpFileDebugInfoCommand.js +7 -9
  72. package/dist/commands/dumpFileDebugInfoCommand.js.map +1 -1
  73. package/dist/common/commandLineOptions.d.ts +2 -1
  74. package/dist/common/commandLineOptions.js +1 -1
  75. package/dist/common/commandLineOptions.js.map +1 -1
  76. package/dist/common/configOptions.d.ts +1 -1
  77. package/dist/common/configOptions.js +22 -24
  78. package/dist/common/configOptions.js.map +1 -1
  79. package/dist/common/pathUtils.d.ts +1 -1
  80. package/dist/common/pathUtils.js +11 -10
  81. package/dist/common/pathUtils.js.map +1 -1
  82. package/dist/common/realFileSystem.js +4 -6
  83. package/dist/common/realFileSystem.js.map +1 -1
  84. package/dist/languageServerBase.d.ts +2 -2
  85. package/dist/languageServerBase.js +14 -14
  86. package/dist/languageServerBase.js.map +1 -1
  87. package/dist/languageService/analyzerServiceExecutor.js +1 -1
  88. package/dist/languageService/analyzerServiceExecutor.js.map +1 -1
  89. package/dist/languageService/callHierarchyProvider.js +3 -3
  90. package/dist/languageService/callHierarchyProvider.js.map +1 -1
  91. package/dist/languageService/completionProvider.js +8 -8
  92. package/dist/languageService/completionProvider.js.map +1 -1
  93. package/dist/languageService/completionProviderUtils.js +1 -1
  94. package/dist/languageService/definitionProvider.js +1 -1
  95. package/dist/languageService/documentSymbolCollector.js +1 -1
  96. package/dist/languageService/hoverProvider.js +1 -1
  97. package/dist/languageService/signatureHelpProvider.js +0 -14
  98. package/dist/languageService/signatureHelpProvider.js.map +1 -1
  99. package/dist/languageService/tooltipUtils.js +4 -4
  100. package/dist/languageService/tooltipUtils.js.map +1 -1
  101. package/dist/localization/localize.d.ts +12 -0
  102. package/dist/localization/localize.js +4 -0
  103. package/dist/localization/localize.js.map +1 -1
  104. package/dist/localization/package.nls.cs.json +1 -1
  105. package/dist/localization/package.nls.de.json +1 -1
  106. package/dist/localization/package.nls.en-us.json +4 -0
  107. package/dist/localization/package.nls.es.json +1 -1
  108. package/dist/localization/package.nls.fr.json +1 -1
  109. package/dist/localization/package.nls.it.json +1 -1
  110. package/dist/localization/package.nls.ja.json +1 -1
  111. package/dist/localization/package.nls.ko.json +1 -1
  112. package/dist/localization/package.nls.pl.json +1 -1
  113. package/dist/localization/package.nls.pt-br.json +1 -1
  114. package/dist/localization/package.nls.ru.json +1 -1
  115. package/dist/localization/package.nls.tr.json +1 -1
  116. package/dist/localization/package.nls.zh-cn.json +1 -1
  117. package/dist/localization/package.nls.zh-tw.json +1 -1
  118. package/dist/pyright.js +3 -6
  119. package/dist/pyright.js.map +1 -1
  120. package/dist/server.d.ts +1 -0
  121. package/dist/server.js +10 -1
  122. package/dist/server.js.map +1 -1
  123. package/dist/tests/fourslash/{completions.importInterimFile.fourslash.js → completions.importInterimFile.fourslash.disabled.js} +2 -2
  124. package/dist/tests/fourslash/completions.importInterimFile.fourslash.disabled.js.map +1 -0
  125. package/dist/tests/fourslash/fourslash.d.ts +1 -1
  126. package/dist/tests/fourslash/signature.complicated.fourslash.js +6 -6
  127. package/dist/tests/fourslash/signature.complicated.fourslash.js.map +1 -1
  128. package/dist/tests/harness/fourslash/testState.d.ts +1 -1
  129. package/dist/tests/harness/fourslash/testState.js +1 -1
  130. package/dist/tests/harness/fourslash/testState.js.map +1 -1
  131. package/dist/tests/harness/vfs/filesystem.js +1 -1
  132. package/dist/tests/harness/vfs/filesystem.js.map +1 -1
  133. package/dist/tests/logger.test.js +0 -1
  134. package/dist/tests/logger.test.js.map +1 -1
  135. package/dist/tests/pathUtils.test.js +30 -1
  136. package/dist/tests/pathUtils.test.js.map +1 -1
  137. package/dist/tests/testUtils.js +2 -1
  138. package/dist/tests/testUtils.js.map +1 -1
  139. package/dist/tests/typeEvaluator1.test.js +3 -3
  140. package/dist/tests/typeEvaluator2.test.js +1 -1
  141. package/dist/tests/typeEvaluator3.test.js +7 -1
  142. package/dist/tests/typeEvaluator3.test.js.map +1 -1
  143. package/dist/tests/typeEvaluator4.test.js +6 -2
  144. package/dist/tests/typeEvaluator4.test.js.map +1 -1
  145. package/dist/tests/typePrinter.test.js +12 -16
  146. package/dist/tests/typePrinter.test.js.map +1 -1
  147. package/dist/tests/zipfs.test.js +2 -0
  148. package/dist/tests/zipfs.test.js.map +1 -1
  149. package/package.json +1 -1
  150. package/dist/tests/fourslash/completions.importInterimFile.fourslash.js.map +0 -1
  151. /package/dist/tests/fourslash/{completions.importInterimFile.fourslash.d.ts → completions.importInterimFile.fourslash.disabled.d.ts} +0 -0
@@ -37,6 +37,7 @@ export interface AnalyzerFileInfo {
37
37
  isStubFile: boolean;
38
38
  isTypingStubFile: boolean;
39
39
  isTypingExtensionsStubFile: boolean;
40
+ isTypeshedStubFile: boolean;
40
41
  isBuiltInStubFile: boolean;
41
42
  isInPyTypedPackage: boolean;
42
43
  ipythonMode: IPythonMode;
@@ -1 +1 @@
1
- {"version":3,"file":"analyzerFileInfo.js","sourceRoot":"","sources":["../../../src/analyzer/analyzerFileInfo.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAIH,2DAAwD;AAqDxD,SAAgB,+BAA+B,CAAC,QAA0B;IACtE,IAAI,QAAQ,CAAC,UAAU,EAAE;QACrB,OAAO,IAAI,CAAC;KACf;IAED,IAAI,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE;QAC3C,OAAO,IAAI,CAAC;KACf;IAED,oFAAoF;IACpF,iFAAiF;IACjF,8BAA8B;IAC9B,qGAAqG;IACrG,IAAI,QAAQ,CAAC,oBAAoB,CAAC,aAAa,IAAI,6BAAa,CAAC,KAAK,EAAE;QACpE,OAAO,IAAI,CAAC;KACf;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAlBD,0EAkBC"}
1
+ {"version":3,"file":"analyzerFileInfo.js","sourceRoot":"","sources":["../../../src/analyzer/analyzerFileInfo.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAIH,2DAAwD;AAsDxD,SAAgB,+BAA+B,CAAC,QAA0B;IACtE,IAAI,QAAQ,CAAC,UAAU,EAAE;QACrB,OAAO,IAAI,CAAC;KACf;IAED,IAAI,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE;QAC3C,OAAO,IAAI,CAAC;KACf;IAED,oFAAoF;IACpF,iFAAiF;IACjF,8BAA8B;IAC9B,qGAAqG;IACrG,IAAI,QAAQ,CAAC,oBAAoB,CAAC,aAAa,IAAI,6BAAa,CAAC,KAAK,EAAE;QACpE,OAAO,IAAI,CAAC;KACf;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAlBD,0EAkBC"}
@@ -195,7 +195,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
195
195
  return false;
196
196
  }
197
197
  visitFunction(node) {
198
- var _a;
198
+ var _a, _b;
199
199
  if (node.typeParameters) {
200
200
  this.walk(node.typeParameters);
201
201
  }
@@ -210,9 +210,14 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
210
210
  // Track whether we have seen a *args: P.args parameter. Named
211
211
  // parameters after this need to be flagged as an error.
212
212
  let sawParamSpecArgs = false;
213
+ const keywordNames = new Set();
214
+ const paramDetails = (0, parameterUtils_1.getParameterListDetails)(functionTypeResult.functionType);
213
215
  // Report any unknown or missing parameter types.
214
216
  node.parameters.forEach((param, index) => {
215
217
  if (param.name) {
218
+ if (param.category === 0 /* Simple */ && index >= paramDetails.positionOnlyParamCount) {
219
+ keywordNames.add(param.name.value);
220
+ }
216
221
  // Determine whether this is a P.args parameter.
217
222
  if (param.category === 1 /* ArgsList */) {
218
223
  const annotationExpr = param.typeAnnotation || param.typeAnnotationComment;
@@ -270,6 +275,24 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
270
275
  }
271
276
  }
272
277
  });
278
+ // Verify that an unpacked TypedDict doesn't overlap any keyword parameters.
279
+ if (paramDetails.hasUnpackedTypedDict) {
280
+ const kwargsIndex = functionTypeResult.functionType.details.parameters.length - 1;
281
+ const kwargsType = types_1.FunctionType.getEffectiveParameterType(functionTypeResult.functionType, kwargsIndex);
282
+ if ((0, types_1.isClass)(kwargsType) && kwargsType.details.typedDictEntries) {
283
+ const overlappingEntries = new Set();
284
+ kwargsType.details.typedDictEntries.forEach((_, name) => {
285
+ if (keywordNames.has(name)) {
286
+ overlappingEntries.add(name);
287
+ }
288
+ });
289
+ if (overlappingEntries.size > 0) {
290
+ this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.overlappingKeywordArgs().format({
291
+ names: [...overlappingEntries.values()].join(', '),
292
+ }), (_a = node.parameters[kwargsIndex].typeAnnotation) !== null && _a !== void 0 ? _a : node.parameters[kwargsIndex]);
293
+ }
294
+ }
295
+ }
273
296
  // Check for invalid use of ParamSpec P.args and P.kwargs.
274
297
  const paramSpecParams = functionTypeResult.functionType.details.parameters.filter((param) => {
275
298
  if (param.typeAnnotation && (0, types_1.isTypeVar)(param.type) && (0, types_1.isParamSpec)(param.type)) {
@@ -284,7 +307,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
284
307
  }
285
308
  // If this is a stub, ensure that the return type is specified.
286
309
  if (this._fileInfo.isStubFile) {
287
- const returnAnnotation = node.returnTypeAnnotation || ((_a = node.functionAnnotationComment) === null || _a === void 0 ? void 0 : _a.returnTypeAnnotation);
310
+ const returnAnnotation = node.returnTypeAnnotation || ((_b = node.functionAnnotationComment) === null || _b === void 0 ? void 0 : _b.returnTypeAnnotation);
288
311
  if (!returnAnnotation) {
289
312
  this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportUnknownParameterType, diagnosticRules_1.DiagnosticRule.reportUnknownParameterType, localize_1.Localizer.Diagnostic.returnTypeUnknown(), node.name);
290
313
  }
@@ -514,7 +537,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
514
537
  }
515
538
  else {
516
539
  // There is no return expression, so "None" is assumed.
517
- returnTypeResult = { type: types_1.NoneType.createInstance() };
540
+ returnTypeResult = { type: this._evaluator.getNoneType() };
518
541
  }
519
542
  // If the enclosing function is async and a generator, the return
520
543
  // statement is not allowed to have an argument. A syntax error occurs
@@ -591,7 +614,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
591
614
  var _a;
592
615
  const yieldTypeResult = node.expression
593
616
  ? this._evaluator.getTypeResult(node.expression)
594
- : { type: types_1.NoneType.createInstance() };
617
+ : { type: this._evaluator.getNoneType() };
595
618
  this._validateYieldType(node, (_a = yieldTypeResult === null || yieldTypeResult === void 0 ? void 0 : yieldTypeResult.type) !== null && _a !== void 0 ? _a : types_1.UnknownType.create(), yieldTypeResult === null || yieldTypeResult === void 0 ? void 0 : yieldTypeResult.expectedTypeDiagAddendum);
596
619
  return true;
597
620
  }
@@ -633,7 +656,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
633
656
  const diagAddendum = new diagnostic_1.DiagnosticAddendum();
634
657
  (0, typeUtils_1.doForEachSubtype)(exceptionType, (subtype) => {
635
658
  subtype = this._evaluator.makeTopLevelTypeVarsConcrete(subtype);
636
- if (!(0, types_1.isAnyOrUnknown)(subtype) && !(0, types_1.isNoneInstance)(subtype)) {
659
+ if (!(0, types_1.isAnyOrUnknown)(subtype) && !(0, typeUtils_1.isNoneInstance)(subtype)) {
637
660
  if ((0, types_1.isClass)(subtype)) {
638
661
  if (!(0, typeUtils_1.derivesFromClassRecursive)(subtype, baseExceptionType, /* ignoreUnknown */ false)) {
639
662
  diagAddendum.addMessage(localize_1.Localizer.Diagnostic.exceptionTypeIncorrect().format({
@@ -1077,7 +1100,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1077
1100
  return undefined;
1078
1101
  }
1079
1102
  // Invoke the __bool__ method on the type.
1080
- const boolReturnType = this._evaluator.getTypeOfMagicMethodReturn(expandedSubtype, [], '__bool__', node,
1103
+ const boolReturnType = this._evaluator.getTypeOfMagicMethodCall(expandedSubtype, '__bool__', [], node,
1081
1104
  /* inferenceContext */ undefined);
1082
1105
  if (!boolReturnType || (0, types_1.isAnyOrUnknown)(boolReturnType)) {
1083
1106
  return undefined;
@@ -1252,7 +1275,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1252
1275
  // operation have overlapping types.
1253
1276
  _validateComparisonTypesForIsOperator(node) {
1254
1277
  const rightType = this._evaluator.getType(node.rightExpression);
1255
- if (!rightType || !(0, types_1.isNoneInstance)(rightType)) {
1278
+ if (!rightType || !(0, typeUtils_1.isNoneInstance)(rightType)) {
1256
1279
  return;
1257
1280
  }
1258
1281
  const leftType = this._evaluator.getType(node.leftExpression);
@@ -1262,7 +1285,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1262
1285
  let foundMatchForNone = false;
1263
1286
  (0, typeUtils_1.doForEachSubtype)(leftType, (subtype) => {
1264
1287
  subtype = this._evaluator.makeTopLevelTypeVarsConcrete(subtype);
1265
- if (this._evaluator.assignType(subtype, types_1.NoneType.createInstance())) {
1288
+ if (this._evaluator.assignType(subtype, this._evaluator.getNoneType())) {
1266
1289
  foundMatchForNone = true;
1267
1290
  }
1268
1291
  });
@@ -1359,7 +1382,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1359
1382
  if ((0, types_1.isModule)(leftType) || (0, types_1.isModule)(rightType)) {
1360
1383
  return (0, types_1.isTypeSame)(leftType, rightType);
1361
1384
  }
1362
- if ((0, types_1.isNoneInstance)(leftType) || (0, types_1.isNoneInstance)(rightType)) {
1385
+ if ((0, typeUtils_1.isNoneInstance)(leftType) || (0, typeUtils_1.isNoneInstance)(rightType)) {
1363
1386
  return (0, types_1.isTypeSame)(leftType, rightType);
1364
1387
  }
1365
1388
  const isLeftCallable = (0, types_1.isFunction)(leftType) || (0, types_1.isOverloadedFunction)(leftType);
@@ -1468,7 +1491,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1468
1491
  // Determines whether the specified type is one that should trigger
1469
1492
  // an "unused" value diagnostic.
1470
1493
  _isTypeValidForUnusedValueTest(type) {
1471
- return !(0, types_1.isNoneInstance)(type) && !(0, types_1.isNever)(type) && !(0, types_1.isAnyOrUnknown)(type);
1494
+ return !(0, typeUtils_1.isNoneInstance)(type) && !(0, types_1.isNever)(type) && !(0, types_1.isAnyOrUnknown)(type);
1472
1495
  }
1473
1496
  // Verifies that each local type variable is used more than once.
1474
1497
  _validateFunctionTypeVarUsage(node, functionTypeResult) {
@@ -2638,22 +2661,22 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2638
2661
  case 1 /* Unknown */:
2639
2662
  case 0 /* Unbound */:
2640
2663
  break;
2641
- case 7 /* Class */:
2642
- // If it's a class, make sure that it has not been given explicit
2643
- // type arguments. This will result in a TypeError exception.
2644
- if (subtype.isTypeArgumentExplicit && !subtype.includeSubclasses) {
2664
+ case 6 /* Class */:
2665
+ if ((0, typeUtils_1.isNoneInstance)(subtype)) {
2666
+ isSupported = false;
2667
+ }
2668
+ else if (subtype.isTypeArgumentExplicit && !subtype.includeSubclasses) {
2669
+ // If it's a class, make sure that it has not been given explicit
2670
+ // type arguments. This will result in a TypeError exception.
2645
2671
  isSupported = false;
2646
2672
  }
2647
2673
  break;
2648
- case 3 /* None */:
2649
- isSupported = types_1.TypeBase.isInstantiable(subtype);
2650
- break;
2651
- case 5 /* Function */:
2674
+ case 4 /* Function */:
2652
2675
  if (!types_1.TypeBase.isInstantiable(subtype) || subtype.isCallableWithTypeArgs) {
2653
2676
  isSupported = false;
2654
2677
  }
2655
2678
  break;
2656
- case 9 /* Union */:
2679
+ case 8 /* Union */:
2657
2680
  isSupported = this._isTypeSupportedTypeForIsInstance(subtype, isInstanceCheck);
2658
2681
  break;
2659
2682
  default:
@@ -3105,14 +3128,14 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3105
3128
  const returnAnnotation = node.returnTypeAnnotation || ((_a = node.functionAnnotationComment) === null || _a === void 0 ? void 0 : _a.returnTypeAnnotation);
3106
3129
  const declaredReturnType = functionType.details.declaredReturnType;
3107
3130
  if (returnAnnotation && declaredReturnType) {
3108
- if (!(0, types_1.isNoneInstance)(declaredReturnType) && !(0, types_1.isNever)(declaredReturnType)) {
3131
+ if (!(0, typeUtils_1.isNoneInstance)(declaredReturnType) && !(0, types_1.isNever)(declaredReturnType)) {
3109
3132
  this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.initMustReturnNone(), returnAnnotation);
3110
3133
  }
3111
3134
  }
3112
3135
  else {
3113
3136
  const inferredReturnType = this._evaluator.getFunctionInferredReturnType(functionType);
3114
3137
  if (!(0, types_1.isNever)(inferredReturnType) &&
3115
- !(0, types_1.isNoneInstance)(inferredReturnType) &&
3138
+ !(0, typeUtils_1.isNoneInstance)(inferredReturnType) &&
3116
3139
  !(0, types_1.isAnyOrUnknown)(inferredReturnType)) {
3117
3140
  this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.initMustReturnNone(), node.name);
3118
3141
  }
@@ -3161,7 +3184,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3161
3184
  // type doesn't allow it. Skip this check for abstract methods.
3162
3185
  const diagAddendum = new diagnostic_1.DiagnosticAddendum();
3163
3186
  // If the declared type isn't compatible with 'None', flag an error.
3164
- if (!this._evaluator.assignType(declaredReturnType, types_1.NoneType.createInstance(), diagAddendum)) {
3187
+ if (!this._evaluator.assignType(declaredReturnType, this._evaluator.getNoneType(), diagAddendum)) {
3165
3188
  // If the function consists entirely of "...", assume that it's
3166
3189
  // an abstract method or a protocol method and don't require that
3167
3190
  // the return type matches. This check can also be skipped for an overload.
@@ -3289,7 +3312,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3289
3312
  if (!types_1.ClassType.isDataClass(classType)) {
3290
3313
  return;
3291
3314
  }
3292
- const postInitMember = (0, typeUtils_1.lookUpClassMember)(classType, '__post_init__', 2 /* SkipBaseClasses */ | 32 /* DeclaredTypesOnly */);
3315
+ const postInitMember = (0, typeUtils_1.lookUpClassMember)(classType, '__post_init__', 2 /* SkipBaseClasses */ | 64 /* DeclaredTypesOnly */);
3293
3316
  // If there's no __post_init__ method, there's nothing to check.
3294
3317
  if (!postInitMember) {
3295
3318
  return;
@@ -3604,8 +3627,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3604
3627
  }
3605
3628
  // Validates that the __init__ and __new__ method signatures are consistent.
3606
3629
  _validateConstructorConsistency(classType) {
3607
- const initMember = (0, typeUtils_1.lookUpClassMember)(classType, '__init__', 4 /* SkipObjectBaseClass */ | 8 /* SkipInstanceVariables */);
3608
- const newMember = (0, typeUtils_1.lookUpClassMember)(classType, '__new__', 4 /* SkipObjectBaseClass */ | 8 /* SkipInstanceVariables */);
3630
+ const initMember = (0, typeUtils_1.lookUpClassMember)(classType, '__init__', 4 /* SkipObjectBaseClass */ | 16 /* SkipInstanceMembers */);
3631
+ const newMember = (0, typeUtils_1.lookUpClassMember)(classType, '__new__', 4 /* SkipObjectBaseClass */ | 16 /* SkipInstanceMembers */);
3609
3632
  if (!initMember || !newMember || !(0, types_1.isClass)(initMember.classType) || !(0, types_1.isClass)(newMember.classType)) {
3610
3633
  return;
3611
3634
  }
@@ -3619,7 +3642,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3619
3642
  // __call__ method, skip this check.
3620
3643
  const metaclass = newMember.classType.details.effectiveMetaclass;
3621
3644
  if (metaclass && (0, types_1.isClass)(metaclass) && !types_1.ClassType.isBuiltIn(metaclass, 'type')) {
3622
- const callMethod = (0, typeUtils_1.lookUpClassMember)(metaclass, '__call__', 64 /* SkipTypeBaseClass */ | 8 /* SkipInstanceVariables */);
3645
+ const callMethod = (0, typeUtils_1.lookUpClassMember)(metaclass, '__call__', 8 /* SkipTypeBaseClass */ | 16 /* SkipInstanceMembers */);
3623
3646
  if (callMethod) {
3624
3647
  return;
3625
3648
  }
@@ -4064,8 +4087,9 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4064
4087
  return;
4065
4088
  }
4066
4089
  const baseClass = baseClassAndSymbol.classType;
4067
- const childClassSelf = (0, typeUtils_1.selfSpecializeClass)(childClassType);
4068
- const baseType = (0, typeUtils_1.partiallySpecializeType)(this._evaluator.getEffectiveTypeOfSymbol(baseClassAndSymbol.symbol), baseClass, types_1.ClassType.cloneAsInstance(childClassSelf));
4090
+ const childClassSelf = types_1.ClassType.cloneAsInstance((0, typeUtils_1.selfSpecializeClass)(childClassType));
4091
+ const baseType = (0, typeUtils_1.partiallySpecializeType)(this._evaluator.getEffectiveTypeOfSymbol(baseClassAndSymbol.symbol), baseClass, childClassSelf);
4092
+ overrideType = (0, typeUtils_1.partiallySpecializeType)(overrideType, childClassType, childClassSelf);
4069
4093
  if ((0, types_1.isFunction)(baseType) || (0, types_1.isOverloadedFunction)(baseType)) {
4070
4094
  const diagAddendum = new diagnostic_1.DiagnosticAddendum();
4071
4095
  if ((0, types_1.isFunction)(overrideType) || (0, types_1.isOverloadedFunction)(overrideType)) {
@@ -4290,7 +4314,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4290
4314
  // Performs checks on a function that is located within a class
4291
4315
  // and has been determined not to be a property accessor.
4292
4316
  _validateMethod(node, functionType, classNode) {
4293
- var _a, _b, _c, _d;
4317
+ var _a, _b;
4294
4318
  const classTypeInfo = this._evaluator.getTypeOfClass(classNode);
4295
4319
  const classType = classTypeInfo === null || classTypeInfo === void 0 ? void 0 : classTypeInfo.classType;
4296
4320
  if (node.name && classType) {
@@ -4314,25 +4338,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4314
4338
  this._validateClsSelfParameterType(functionType, classType, /* isCls */ true);
4315
4339
  }
4316
4340
  }
4317
- else if (((_b = node.name) === null || _b === void 0 ? void 0 : _b.value) === '__init_subclass__') {
4318
- // __init_subclass__ overrides should have a "cls" parameter.
4319
- if (node.parameters.length === 0 || !node.parameters[0].name || node.parameters[0].name.value !== 'cls') {
4320
- this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportSelfClsParameterName, diagnosticRules_1.DiagnosticRule.reportSelfClsParameterName, localize_1.Localizer.Diagnostic.initSubclassClsParam(), node.parameters.length > 0 ? node.parameters[0] : node.name);
4321
- }
4322
- if (classType) {
4323
- this._validateClsSelfParameterType(functionType, classType, /* isCls */ true);
4324
- }
4325
- }
4326
- else if (((_c = node.name) === null || _c === void 0 ? void 0 : _c.value) === '__class_getitem__') {
4327
- // __class_getitem__ overrides should have a "cls" parameter.
4328
- if (node.parameters.length === 0 || !node.parameters[0].name || node.parameters[0].name.value !== 'cls') {
4329
- this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportSelfClsParameterName, diagnosticRules_1.DiagnosticRule.reportSelfClsParameterName, localize_1.Localizer.Diagnostic.classGetItemClsParam(), node.parameters.length > 0 ? node.parameters[0] : node.name);
4330
- }
4331
- if (classType) {
4332
- this._validateClsSelfParameterType(functionType, classType, /* isCls */ true);
4333
- }
4334
- }
4335
- else if (((_d = node.name) === null || _d === void 0 ? void 0 : _d.value) === '_generate_next_value_') {
4341
+ else if (((_b = node.name) === null || _b === void 0 ? void 0 : _b.value) === '_generate_next_value_') {
4336
4342
  // Skip this check for _generate_next_value_.
4337
4343
  }
4338
4344
  else if (types_1.FunctionType.isStaticMethod(functionType)) {
@@ -4420,7 +4426,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4420
4426
  // it could be combined with other classes in a multi-inheritance
4421
4427
  // situation that effectively adds new superclasses that we don't know
4422
4428
  // about statically.
4423
- let effectiveFlags = 8 /* SkipInstanceVariables */ | 1 /* SkipOriginalClass */;
4429
+ let effectiveFlags = 16 /* SkipInstanceMembers */ | 1 /* SkipOriginalClass */;
4424
4430
  if (types_1.ClassType.isFinal(classType)) {
4425
4431
  effectiveFlags |= 4 /* SkipObjectBaseClass */;
4426
4432
  }
@@ -4593,7 +4599,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4593
4599
  else if ((0, types_1.isClassInstance)(exceptionType)) {
4594
4600
  const iterableType = (_b = (_a = this._evaluator.getTypeOfIterator({ type: exceptionType },
4595
4601
  /* isAsync */ false,
4596
- /* errorNode */ undefined)) === null || _a === void 0 ? void 0 : _a.type) !== null && _b !== void 0 ? _b : types_1.UnknownType.create();
4602
+ /* errorNode */ except.typeExpression,
4603
+ /* emitNotIterableError */ false)) === null || _a === void 0 ? void 0 : _a.type) !== null && _b !== void 0 ? _b : types_1.UnknownType.create();
4597
4604
  (0, typeUtils_1.doForEachSubtype)(iterableType, (subtype) => {
4598
4605
  if ((0, types_1.isAnyOrUnknown)(subtype)) {
4599
4606
  sawUnknownExceptionType = true;