@zzzen/pyright-internal 1.2.0-dev.20240526 → 1.2.0-dev.20240609

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 (160) hide show
  1. package/dist/analyzer/analyzerNodeInfo.d.ts +2 -2
  2. package/dist/analyzer/binder.d.ts +3 -3
  3. package/dist/analyzer/binder.js +46 -40
  4. package/dist/analyzer/binder.js.map +1 -1
  5. package/dist/analyzer/checker.d.ts +3 -3
  6. package/dist/analyzer/checker.js +82 -65
  7. package/dist/analyzer/checker.js.map +1 -1
  8. package/dist/analyzer/codeFlowEngine.js +4 -4
  9. package/dist/analyzer/codeFlowTypes.js +3 -3
  10. package/dist/analyzer/constraintSolver.js +26 -34
  11. package/dist/analyzer/constraintSolver.js.map +1 -1
  12. package/dist/analyzer/constructorTransform.js +1 -1
  13. package/dist/analyzer/constructorTransform.js.map +1 -1
  14. package/dist/analyzer/constructors.js +12 -8
  15. package/dist/analyzer/constructors.js.map +1 -1
  16. package/dist/analyzer/dataClasses.js +1 -1
  17. package/dist/analyzer/dataClasses.js.map +1 -1
  18. package/dist/analyzer/declarationUtils.js +3 -3
  19. package/dist/analyzer/enums.d.ts +1 -1
  20. package/dist/analyzer/enums.js +25 -22
  21. package/dist/analyzer/enums.js.map +1 -1
  22. package/dist/analyzer/importResolver.d.ts +1 -0
  23. package/dist/analyzer/importResolver.js +6 -3
  24. package/dist/analyzer/importResolver.js.map +1 -1
  25. package/dist/analyzer/importStatementUtils.js +6 -6
  26. package/dist/analyzer/namedTuples.js +2 -2
  27. package/dist/analyzer/operations.js +8 -9
  28. package/dist/analyzer/operations.js.map +1 -1
  29. package/dist/analyzer/parameterUtils.js +1 -13
  30. package/dist/analyzer/parameterUtils.js.map +1 -1
  31. package/dist/analyzer/parseTreeUtils.d.ts +1 -1
  32. package/dist/analyzer/parseTreeUtils.js +94 -94
  33. package/dist/analyzer/parseTreeUtils.js.map +1 -1
  34. package/dist/analyzer/parseTreeWalker.d.ts +5 -5
  35. package/dist/analyzer/parseTreeWalker.js +64 -64
  36. package/dist/analyzer/parseTreeWalker.js.map +1 -1
  37. package/dist/analyzer/patternMatching.js +5 -5
  38. package/dist/analyzer/patternMatching.js.map +1 -1
  39. package/dist/analyzer/program.d.ts +1 -1
  40. package/dist/analyzer/program.js +23 -29
  41. package/dist/analyzer/program.js.map +1 -1
  42. package/dist/analyzer/properties.js +2 -2
  43. package/dist/analyzer/properties.js.map +1 -1
  44. package/dist/analyzer/protocols.js +2 -2
  45. package/dist/analyzer/protocols.js.map +1 -1
  46. package/dist/analyzer/scope.d.ts +1 -1
  47. package/dist/analyzer/scope.js +2 -2
  48. package/dist/analyzer/scope.js.map +1 -1
  49. package/dist/analyzer/sourceFile.js +3 -3
  50. package/dist/analyzer/sourceFile.js.map +1 -1
  51. package/dist/analyzer/sourceMapper.js +4 -4
  52. package/dist/analyzer/staticExpressions.js +3 -3
  53. package/dist/analyzer/testWalker.js +1 -1
  54. package/dist/analyzer/tracePrinter.js +4 -4
  55. package/dist/analyzer/typeDocStringUtils.js +1 -1
  56. package/dist/analyzer/typeEvaluator.js +568 -519
  57. package/dist/analyzer/typeEvaluator.js.map +1 -1
  58. package/dist/analyzer/typeEvaluatorTypes.d.ts +2 -3
  59. package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
  60. package/dist/analyzer/typeGuards.js +9 -8
  61. package/dist/analyzer/typeGuards.js.map +1 -1
  62. package/dist/analyzer/typePrinter.js +21 -14
  63. package/dist/analyzer/typePrinter.js.map +1 -1
  64. package/dist/analyzer/typeStubWriter.js +1 -1
  65. package/dist/analyzer/typeUtils.d.ts +4 -5
  66. package/dist/analyzer/typeUtils.js +100 -128
  67. package/dist/analyzer/typeUtils.js.map +1 -1
  68. package/dist/analyzer/typeVarContext.js +4 -0
  69. package/dist/analyzer/typeVarContext.js.map +1 -1
  70. package/dist/analyzer/typedDicts.d.ts +1 -2
  71. package/dist/analyzer/typedDicts.js +5 -17
  72. package/dist/analyzer/typedDicts.js.map +1 -1
  73. package/dist/analyzer/types.d.ts +11 -12
  74. package/dist/analyzer/types.js +137 -169
  75. package/dist/analyzer/types.js.map +1 -1
  76. package/dist/backgroundAnalysisBase.d.ts +1 -1
  77. package/dist/backgroundAnalysisBase.js +3 -3
  78. package/dist/commands/dumpFileDebugInfoCommand.d.ts +1 -1
  79. package/dist/commands/dumpFileDebugInfoCommand.js +15 -15
  80. package/dist/commands/dumpFileDebugInfoCommand.js.map +1 -1
  81. package/dist/common/configOptions.d.ts +2 -1
  82. package/dist/common/configOptions.js +12 -3
  83. package/dist/common/configOptions.js.map +1 -1
  84. package/dist/common/realFileSystem.d.ts +3 -3
  85. package/dist/common/realFileSystem.js +6 -6
  86. package/dist/common/realFileSystem.js.map +1 -1
  87. package/dist/common/textEditTracker.js +5 -5
  88. package/dist/common/uri/fileUri.js +1 -0
  89. package/dist/common/uri/fileUri.js.map +1 -1
  90. package/dist/common/uri/uri.d.ts +3 -0
  91. package/dist/common/uri/uri.js +16 -0
  92. package/dist/common/uri/uri.js.map +1 -1
  93. package/dist/languageServerBase.js +1 -1
  94. package/dist/languageServerBase.js.map +1 -1
  95. package/dist/languageService/autoImporter.js +4 -4
  96. package/dist/languageService/callHierarchyProvider.js +1 -1
  97. package/dist/languageService/completionProvider.js +30 -30
  98. package/dist/languageService/completionProvider.js.map +1 -1
  99. package/dist/languageService/documentSymbolCollector.js +7 -7
  100. package/dist/languageService/hoverProvider.js +2 -2
  101. package/dist/languageService/importSorter.js +1 -1
  102. package/dist/languageService/referencesProvider.js +4 -4
  103. package/dist/languageService/referencesProvider.js.map +1 -1
  104. package/dist/languageService/symbolIndexer.js +3 -3
  105. package/dist/languageService/tooltipUtils.js +2 -2
  106. package/dist/languageService/workspaceSymbolProvider.js +1 -1
  107. package/dist/localization/localize.d.ts +7 -1
  108. package/dist/localization/localize.js +4 -1
  109. package/dist/localization/localize.js.map +1 -1
  110. package/dist/localization/package.nls.cs.json +5 -3
  111. package/dist/localization/package.nls.de.json +5 -3
  112. package/dist/localization/package.nls.en-us.json +4 -1
  113. package/dist/localization/package.nls.es.json +5 -3
  114. package/dist/localization/package.nls.fr.json +5 -3
  115. package/dist/localization/package.nls.it.json +5 -3
  116. package/dist/localization/package.nls.ja.json +5 -3
  117. package/dist/localization/package.nls.ko.json +6 -4
  118. package/dist/localization/package.nls.pl.json +5 -3
  119. package/dist/localization/package.nls.pt-br.json +5 -3
  120. package/dist/localization/package.nls.qps-ploc.json +5 -3
  121. package/dist/localization/package.nls.ru.json +5 -3
  122. package/dist/localization/package.nls.tr.json +5 -3
  123. package/dist/localization/package.nls.zh-cn.json +5 -3
  124. package/dist/localization/package.nls.zh-tw.json +5 -3
  125. package/dist/parser/parseNodes.d.ts +42 -42
  126. package/dist/parser/parseNodes.js +69 -69
  127. package/dist/parser/parseNodes.js.map +1 -1
  128. package/dist/parser/parser.d.ts +1 -1
  129. package/dist/parser/parser.js +35 -35
  130. package/dist/parser/parser.js.map +1 -1
  131. package/dist/pyright.js +6 -3
  132. package/dist/pyright.js.map +1 -1
  133. package/dist/tests/classDeclaration.test.js +1 -1
  134. package/dist/tests/config.test.js +2 -2
  135. package/dist/tests/config.test.js.map +1 -1
  136. package/dist/tests/diagnosticOverrides.test.js +7 -6
  137. package/dist/tests/diagnosticOverrides.test.js.map +1 -1
  138. package/dist/tests/importResolver.test.js +16 -0
  139. package/dist/tests/importResolver.test.js.map +1 -1
  140. package/dist/tests/parseTreeUtils.test.js +4 -4
  141. package/dist/tests/parser.test.js +3 -3
  142. package/dist/tests/testState.test.js +1 -1
  143. package/dist/tests/testState.test.js.map +1 -1
  144. package/dist/tests/testUtils.js +1 -1
  145. package/dist/tests/testUtils.js.map +1 -1
  146. package/dist/tests/typeEvaluator2.test.js +9 -1
  147. package/dist/tests/typeEvaluator2.test.js.map +1 -1
  148. package/dist/tests/typeEvaluator3.test.js +8 -0
  149. package/dist/tests/typeEvaluator3.test.js.map +1 -1
  150. package/dist/tests/typeEvaluator4.test.js +7 -3
  151. package/dist/tests/typeEvaluator4.test.js.map +1 -1
  152. package/dist/tests/typeEvaluator7.test.js +15 -15
  153. package/dist/tests/typeEvaluator7.test.js.map +1 -1
  154. package/dist/tests/typePrinter.test.js +2 -2
  155. package/dist/tests/typePrinter.test.js.map +1 -1
  156. package/dist/tests/uri.test.js +11 -3
  157. package/dist/tests/uri.test.js.map +1 -1
  158. package/dist/workspaceFactory.js +16 -14
  159. package/dist/workspaceFactory.js.map +1 -1
  160. package/package.json +1 -1
@@ -102,7 +102,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
102
102
  console.log(`Code complexity of module ${this._fileInfo.fileUri.toUserVisibleString()} is ${codeComplexity.toString()}`);
103
103
  }
104
104
  if (codeComplexity > typeEvaluator_1.maxCodeComplexity) {
105
- this._evaluator.addDiagnosticForTextRange(this._fileInfo, this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.codeTooComplexToAnalyze(), { start: 0, length: 0 });
105
+ this._evaluator.addDiagnosticForTextRange(this._fileInfo, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.codeTooComplexToAnalyze(), { start: 0, length: 0 });
106
106
  }
107
107
  this._walkStatementsAndReportUnreachable(this._moduleNode.statements);
108
108
  // Mark symbols accessed by __all__ as accessed.
@@ -493,7 +493,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
493
493
  visitFor(node) {
494
494
  this._evaluator.evaluateTypesForStatement(node);
495
495
  if (node.typeComment) {
496
- this._evaluator.addDiagnosticForTextRange(this._fileInfo, this._fileInfo.diagnosticRuleSet.reportInvalidTypeForm, diagnosticRules_1.DiagnosticRule.reportInvalidTypeForm, localize_1.LocMessage.annotationNotSupported(), node.typeComment);
496
+ this._evaluator.addDiagnosticForTextRange(this._fileInfo, diagnosticRules_1.DiagnosticRule.reportInvalidTypeForm, localize_1.LocMessage.annotationNotSupported(), node.typeComment);
497
497
  }
498
498
  return true;
499
499
  }
@@ -509,11 +509,11 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
509
509
  this._validateIllegalDefaultParamInitializer(node);
510
510
  return true;
511
511
  }
512
- visitListComprehension(node) {
512
+ visitComprehension(node) {
513
513
  this._scopedNodes.push(node);
514
514
  return true;
515
515
  }
516
- visitListComprehensionIf(node) {
516
+ visitComprehensionIf(node) {
517
517
  this._validateConditionalIsBool(node.testExpression);
518
518
  this._reportUnnecessaryConditionExpression(node.testExpression);
519
519
  return true;
@@ -533,7 +533,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
533
533
  this._evaluator.evaluateTypesForStatement(item);
534
534
  });
535
535
  if (node.typeComment) {
536
- this._evaluator.addDiagnosticForTextRange(this._fileInfo, this._fileInfo.diagnosticRuleSet.reportInvalidTypeForm, diagnosticRules_1.DiagnosticRule.reportInvalidTypeForm, localize_1.LocMessage.annotationNotSupported(), node.typeComment);
536
+ this._evaluator.addDiagnosticForTextRange(this._fileInfo, diagnosticRules_1.DiagnosticRule.reportInvalidTypeForm, localize_1.LocMessage.annotationNotSupported(), node.typeComment);
537
537
  }
538
538
  return true;
539
539
  }
@@ -701,7 +701,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
701
701
  this._evaluator.evaluateTypesForStatement(node);
702
702
  const exceptionType = this._evaluator.getType(node.typeExpression);
703
703
  if (exceptionType) {
704
- this._validateExceptionType(exceptionType, node.typeExpression);
704
+ this._validateExceptionType(exceptionType, node.typeExpression, node.isExceptGroup);
705
705
  }
706
706
  }
707
707
  return true;
@@ -719,7 +719,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
719
719
  if ((0, typeUtils_1.isTupleClass)(type) && type.tupleTypeArguments) {
720
720
  if (type.tupleTypeArguments.length > 0) {
721
721
  if (!(0, typeUtils_1.isUnboundedTupleClass)(type)) {
722
- this._evaluator.addDiagnosticForTextRange(this._fileInfo, this._fileInfo.diagnosticRuleSet.reportAssertAlwaysTrue, diagnosticRules_1.DiagnosticRule.reportAssertAlwaysTrue, localize_1.LocMessage.assertAlwaysTrue(), node.testExpression);
722
+ this._evaluator.addDiagnosticForTextRange(this._fileInfo, diagnosticRules_1.DiagnosticRule.reportAssertAlwaysTrue, localize_1.LocMessage.assertAlwaysTrue(), node.testExpression);
723
723
  }
724
724
  }
725
725
  }
@@ -861,7 +861,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
861
861
  if (this._fileInfo.executionEnvironment.pythonVersion.isLessThan(pythonVersion_1.pythonVersion3_12)) {
862
862
  let curNode = node;
863
863
  while (curNode) {
864
- if (curNode.nodeType === 27 /* ParseNodeType.FormatString */) {
864
+ if (curNode.nodeType === 30 /* ParseNodeType.FormatString */) {
865
865
  fStringContainers.push(curNode);
866
866
  }
867
867
  curNode = curNode.parent;
@@ -877,14 +877,14 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
877
877
  }
878
878
  unescapedResult.unescapeErrors.forEach((error) => {
879
879
  if (error.errorType === 0 /* UnescapeErrorType.InvalidEscapeSequence */) {
880
- this._evaluator.addDiagnosticForTextRange(this._fileInfo, this._fileInfo.diagnosticRuleSet.reportInvalidStringEscapeSequence, diagnosticRules_1.DiagnosticRule.reportInvalidStringEscapeSequence, localize_1.LocMessage.stringUnsupportedEscape(), { start: start + error.offset, length: error.length });
880
+ this._evaluator.addDiagnosticForTextRange(this._fileInfo, diagnosticRules_1.DiagnosticRule.reportInvalidStringEscapeSequence, localize_1.LocMessage.stringUnsupportedEscape(), { start: start + error.offset, length: error.length });
881
881
  }
882
882
  });
883
883
  // Prior to Python 3.12, it was not allowed to include a slash in an f-string.
884
884
  if (fStringContainers.length > 0) {
885
885
  const escapeOffset = token.escapedValue.indexOf('\\');
886
886
  if (escapeOffset >= 0) {
887
- this._evaluator.addDiagnosticForTextRange(this._fileInfo, this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.formatStringEscape(), { start, length: 1 });
887
+ this._evaluator.addDiagnosticForTextRange(this._fileInfo, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.formatStringEscape(), { start, length: 1 });
888
888
  }
889
889
  }
890
890
  });
@@ -901,7 +901,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
901
901
  this._evaluator.getType(node);
902
902
  }
903
903
  if (node.strings.length > 1 && !node.isParenthesized) {
904
- this._evaluator.addDiagnosticForTextRange(this._fileInfo, this._fileInfo.diagnosticRuleSet.reportImplicitStringConcatenation, diagnosticRules_1.DiagnosticRule.reportImplicitStringConcatenation, localize_1.LocMessage.implicitStringConcat(), node);
904
+ this._evaluator.addDiagnosticForTextRange(this._fileInfo, diagnosticRules_1.DiagnosticRule.reportImplicitStringConcatenation, localize_1.LocMessage.implicitStringConcat(), node);
905
905
  }
906
906
  return true;
907
907
  }
@@ -992,7 +992,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
992
992
  importInfo.isImportFound &&
993
993
  importInfo.importType !== 2 /* ImportType.Local */ &&
994
994
  !this._fileInfo.isStubFile) {
995
- this._evaluator.addDiagnosticForTextRange(this._fileInfo, this._fileInfo.diagnosticRuleSet.reportWildcardImportFromLibrary, diagnosticRules_1.DiagnosticRule.reportWildcardImportFromLibrary, localize_1.LocMessage.wildcardLibraryImport(), node.wildcardToken || node);
995
+ this._evaluator.addDiagnosticForTextRange(this._fileInfo, diagnosticRules_1.DiagnosticRule.reportWildcardImportFromLibrary, localize_1.LocMessage.wildcardLibraryImport(), node.wildcardToken || node);
996
996
  }
997
997
  }
998
998
  return true;
@@ -1024,7 +1024,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1024
1024
  break;
1025
1025
  }
1026
1026
  let isImportFromTyping = false;
1027
- if (((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 22 /* ParseNodeType.ImportFrom */) {
1027
+ if (((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 25 /* ParseNodeType.ImportFrom */) {
1028
1028
  if (node.parent.module.leadingDots === 0 && node.parent.module.nameParts.length === 1) {
1029
1029
  if (node.parent.module.nameParts[0].value === 'typing') {
1030
1030
  isImportFromTyping = true;
@@ -1066,7 +1066,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1066
1066
  break;
1067
1067
  }
1068
1068
  }
1069
- else if (typeVarScopeNode.nodeType === 28 /* ParseNodeType.Function */) {
1069
+ else if (typeVarScopeNode.nodeType === 31 /* ParseNodeType.Function */) {
1070
1070
  const functionType = (_d = this._evaluator.getTypeOfFunction(typeVarScopeNode)) === null || _d === void 0 ? void 0 : _d.functionType;
1071
1071
  if (functionType === null || functionType === void 0 ? void 0 : functionType.details.typeParameters.some((param) => param.details.name === node.name.value)) {
1072
1072
  foundDuplicate = true;
@@ -1228,7 +1228,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1228
1228
  55 /* ParseNodeType.UnaryOperation */,
1229
1229
  7 /* ParseNodeType.BinaryOperation */,
1230
1230
  40 /* ParseNodeType.Number */,
1231
- 11 /* ParseNodeType.Constant */,
1231
+ 14 /* ParseNodeType.Constant */,
1232
1232
  38 /* ParseNodeType.Name */,
1233
1233
  52 /* ParseNodeType.Tuple */,
1234
1234
  ];
@@ -1236,11 +1236,11 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1236
1236
  if (simpleExpressionTypes.some((nodeType) => nodeType === node.nodeType)) {
1237
1237
  reportAsUnused = true;
1238
1238
  }
1239
- else if (node.nodeType === 31 /* ParseNodeType.List */ ||
1239
+ else if (node.nodeType === 34 /* ParseNodeType.List */ ||
1240
1240
  node.nodeType === 45 /* ParseNodeType.Set */ ||
1241
- node.nodeType === 15 /* ParseNodeType.Dictionary */) {
1241
+ node.nodeType === 18 /* ParseNodeType.Dictionary */) {
1242
1242
  // Exclude comprehensions.
1243
- if (!node.entries.some((entry) => entry.nodeType === 32 /* ParseNodeType.ListComprehension */)) {
1243
+ if (!node.entries.some((entry) => entry.nodeType === 11 /* ParseNodeType.Comprehension */)) {
1244
1244
  reportAsUnused = true;
1245
1245
  }
1246
1246
  }
@@ -1605,7 +1605,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1605
1605
  }
1606
1606
  }
1607
1607
  const existingEntry = localTypeVarUsage.get(nameType.details.name);
1608
- const isParamTypeWithEllipsisUsage = ((_a = curParamNode === null || curParamNode === void 0 ? void 0 : curParamNode.defaultValue) === null || _a === void 0 ? void 0 : _a.nodeType) === 18 /* ParseNodeType.Ellipsis */;
1608
+ const isParamTypeWithEllipsisUsage = ((_a = curParamNode === null || curParamNode === void 0 ? void 0 : curParamNode.defaultValue) === null || _a === void 0 ? void 0 : _a.nodeType) === 21 /* ParseNodeType.Ellipsis */;
1609
1609
  if (!existingEntry) {
1610
1610
  localTypeVarUsage.set(nameType.details.name, {
1611
1611
  nodes: [nameNode],
@@ -1637,7 +1637,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1637
1637
  // this constructor method?
1638
1638
  if (constructorClass && nameType.scopeId === constructorClass.details.typeVarScopeId) {
1639
1639
  const existingEntry = classTypeVarUsage.get(nameType.details.name);
1640
- const isParamTypeWithEllipsisUsage = ((_d = curParamNode === null || curParamNode === void 0 ? void 0 : curParamNode.defaultValue) === null || _d === void 0 ? void 0 : _d.nodeType) === 18 /* ParseNodeType.Ellipsis */;
1640
+ const isParamTypeWithEllipsisUsage = ((_d = curParamNode === null || curParamNode === void 0 ? void 0 : curParamNode.defaultValue) === null || _d === void 0 ? void 0 : _d.nodeType) === 21 /* ParseNodeType.Ellipsis */;
1641
1641
  const isExempt = !!nameType.details.isDefaultExplicit;
1642
1642
  if (!existingEntry) {
1643
1643
  classTypeVarUsage.set(nameType.details.name, {
@@ -1799,8 +1799,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1799
1799
  for (let i = 0; i < prevOverloads.length; i++) {
1800
1800
  const prevOverload = prevOverloads[i];
1801
1801
  if (this._isOverlappingOverload(prevOverload, functionType, /* partialOverlap */ true)) {
1802
- const prevReturnType = types_1.FunctionType.getSpecializedReturnType(prevOverload);
1803
- const returnType = types_1.FunctionType.getSpecializedReturnType(functionType);
1802
+ const prevReturnType = types_1.FunctionType.getEffectiveReturnType(prevOverload);
1803
+ const returnType = types_1.FunctionType.getEffectiveReturnType(functionType);
1804
1804
  if (prevReturnType &&
1805
1805
  returnType &&
1806
1806
  !this._evaluator.assignType(returnType, prevReturnType,
@@ -1901,15 +1901,15 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1901
1901
  }
1902
1902
  _validateStubStatement(statement) {
1903
1903
  switch (statement.nodeType) {
1904
- case 19 /* ParseNodeType.If */:
1905
- case 28 /* ParseNodeType.Function */:
1904
+ case 22 /* ParseNodeType.If */:
1905
+ case 31 /* ParseNodeType.Function */:
1906
1906
  case 10 /* ParseNodeType.Class */:
1907
1907
  case 0 /* ParseNodeType.Error */: {
1908
1908
  // These are allowed in a stub file.
1909
1909
  break;
1910
1910
  }
1911
1911
  case 57 /* ParseNodeType.While */:
1912
- case 26 /* ParseNodeType.For */:
1912
+ case 29 /* ParseNodeType.For */:
1913
1913
  case 53 /* ParseNodeType.Try */:
1914
1914
  case 58 /* ParseNodeType.With */: {
1915
1915
  // These are not allowed.
@@ -1924,15 +1924,15 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1924
1924
  case 4 /* ParseNodeType.AssignmentExpression */:
1925
1925
  case 6 /* ParseNodeType.Await */:
1926
1926
  case 7 /* ParseNodeType.BinaryOperation */:
1927
- case 11 /* ParseNodeType.Constant */:
1928
- case 14 /* ParseNodeType.Del */:
1929
- case 15 /* ParseNodeType.Dictionary */:
1930
- case 24 /* ParseNodeType.Index */:
1931
- case 26 /* ParseNodeType.For */:
1932
- case 27 /* ParseNodeType.FormatString */:
1933
- case 29 /* ParseNodeType.Global */:
1934
- case 30 /* ParseNodeType.Lambda */:
1935
- case 31 /* ParseNodeType.List */:
1927
+ case 14 /* ParseNodeType.Constant */:
1928
+ case 17 /* ParseNodeType.Del */:
1929
+ case 18 /* ParseNodeType.Dictionary */:
1930
+ case 27 /* ParseNodeType.Index */:
1931
+ case 29 /* ParseNodeType.For */:
1932
+ case 30 /* ParseNodeType.FormatString */:
1933
+ case 32 /* ParseNodeType.Global */:
1934
+ case 33 /* ParseNodeType.Lambda */:
1935
+ case 34 /* ParseNodeType.List */:
1936
1936
  case 35 /* ParseNodeType.MemberAccess */:
1937
1937
  case 38 /* ParseNodeType.Name */:
1938
1938
  case 39 /* ParseNodeType.Nonlocal */:
@@ -1978,13 +1978,19 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1978
1978
  }
1979
1979
  }
1980
1980
  }
1981
- _validateExceptionTypeRecursive(exceptionType, diag, baseExceptionType, allowTuple) {
1981
+ _validateExceptionTypeRecursive(exceptionType, diag, baseExceptionType, baseExceptionGroupType, allowTuple, isExceptGroup) {
1982
1982
  const derivesFromBaseException = (classType) => {
1983
1983
  if (!baseExceptionType || !(0, types_1.isInstantiableClass)(baseExceptionType)) {
1984
1984
  return true;
1985
1985
  }
1986
1986
  return (0, typeUtils_1.derivesFromClassRecursive)(classType, baseExceptionType, /* ignoreUnknown */ false);
1987
1987
  };
1988
+ const derivesFromBaseExceptionGroup = (classType) => {
1989
+ if (!baseExceptionGroupType || !(0, types_1.isInstantiableClass)(baseExceptionGroupType)) {
1990
+ return true;
1991
+ }
1992
+ return (0, typeUtils_1.derivesFromClassRecursive)(classType, baseExceptionGroupType, /* ignoreUnknown */ false);
1993
+ };
1988
1994
  (0, typeUtils_1.doForEachSubtype)(exceptionType, (exceptionSubtype) => {
1989
1995
  if ((0, types_1.isAnyOrUnknown)(exceptionSubtype)) {
1990
1996
  return;
@@ -1996,12 +2002,15 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1996
2002
  type: this._evaluator.printType(exceptionSubtype),
1997
2003
  }));
1998
2004
  }
2005
+ if (isExceptGroup && derivesFromBaseExceptionGroup(exceptionSubtype)) {
2006
+ diag.addMessage(localize_1.LocMessage.exceptionGroupTypeIncorrect());
2007
+ }
1999
2008
  return;
2000
2009
  }
2001
2010
  if (allowTuple && exceptionSubtype.tupleTypeArguments) {
2002
2011
  exceptionSubtype.tupleTypeArguments.forEach((typeArg) => {
2003
- this._validateExceptionTypeRecursive(typeArg.type, diag, baseExceptionType,
2004
- /* allowTuple */ false);
2012
+ this._validateExceptionTypeRecursive(typeArg.type, diag, baseExceptionType, baseExceptionGroupType,
2013
+ /* allowTuple */ false, isExceptGroup);
2005
2014
  });
2006
2015
  return;
2007
2016
  }
@@ -2011,10 +2020,12 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2011
2020
  }
2012
2021
  });
2013
2022
  }
2014
- _validateExceptionType(exceptionType, errorNode) {
2023
+ _validateExceptionType(exceptionType, errorNode, isExceptGroup) {
2015
2024
  const baseExceptionType = this._evaluator.getBuiltInType(errorNode, 'BaseException');
2025
+ const baseExceptionGroupType = this._evaluator.getBuiltInType(errorNode, 'BaseExceptionGroup');
2016
2026
  const diagAddendum = new diagnostic_1.DiagnosticAddendum();
2017
- this._validateExceptionTypeRecursive(exceptionType, diagAddendum, baseExceptionType, /* allowTuple */ true);
2027
+ this._validateExceptionTypeRecursive(exceptionType, diagAddendum, baseExceptionType, baseExceptionGroupType,
2028
+ /* allowTuple */ true, isExceptGroup);
2018
2029
  if (!diagAddendum.isEmpty()) {
2019
2030
  this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.exceptionTypeNotClass().format({
2020
2031
  type: this._evaluator.printType(exceptionType),
@@ -2175,7 +2186,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2175
2186
  // the assignment is within an `__init__` method, so ignore class
2176
2187
  // scopes here.
2177
2188
  const classOrFunc = ParseTreeUtils.getEnclosingClassOrFunction(decl.node);
2178
- if ((classOrFunc === null || classOrFunc === void 0 ? void 0 : classOrFunc.nodeType) === 28 /* ParseNodeType.Function */) {
2189
+ if ((classOrFunc === null || classOrFunc === void 0 ? void 0 : classOrFunc.nodeType) === 31 /* ParseNodeType.Function */) {
2179
2190
  exemptAssignment = true;
2180
2191
  }
2181
2192
  }
@@ -2454,7 +2465,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2454
2465
  case 8 /* DeclarationType.Alias */:
2455
2466
  diagnosticLevel = this._fileInfo.diagnosticRuleSet.reportUnusedImport;
2456
2467
  rule = diagnosticRules_1.DiagnosticRule.reportUnusedImport;
2457
- if (decl.node.nodeType === 21 /* ParseNodeType.ImportAs */) {
2468
+ if (decl.node.nodeType === 24 /* ParseNodeType.ImportAs */) {
2458
2469
  if (decl.node.alias) {
2459
2470
  // For statements of the form "import x as x", don't mark "x" as unaccessed
2460
2471
  // because it's assumed to be re-exported.
@@ -2471,12 +2482,12 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2471
2482
  let textRange = { start: nameParts[0].start, length: nameParts[0].length };
2472
2483
  textRange = textRange_1.TextRange.extend(textRange, nameParts[nameParts.length - 1]);
2473
2484
  this._fileInfo.diagnosticSink.addUnusedCodeWithTextRange(localize_1.LocMessage.unaccessedSymbol().format({ name: multipartName }), textRange, { action: "pyright.unusedImport" /* Commands.unusedImport */ });
2474
- this._evaluator.addDiagnosticForTextRange(this._fileInfo, this._fileInfo.diagnosticRuleSet.reportUnusedImport, diagnosticRules_1.DiagnosticRule.reportUnusedImport, localize_1.LocMessage.unaccessedImport().format({ name: multipartName }), textRange);
2485
+ this._evaluator.addDiagnosticForTextRange(this._fileInfo, diagnosticRules_1.DiagnosticRule.reportUnusedImport, localize_1.LocMessage.unaccessedImport().format({ name: multipartName }), textRange);
2475
2486
  return;
2476
2487
  }
2477
2488
  }
2478
2489
  }
2479
- else if (decl.node.nodeType === 23 /* ParseNodeType.ImportFromAs */) {
2490
+ else if (decl.node.nodeType === 26 /* ParseNodeType.ImportFromAs */) {
2480
2491
  const importFrom = decl.node.parent;
2481
2492
  // For statements of the form "from y import x as x", don't mark "x" as
2482
2493
  // unaccessed because it's assumed to be re-exported.
@@ -2908,7 +2919,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2908
2919
  _isSymbolPrivate(nameValue, scopeType) {
2909
2920
  // All variables within the scope of a function or a list
2910
2921
  // comprehension are considered private.
2911
- if (scopeType === 2 /* ScopeType.Function */ || scopeType === 1 /* ScopeType.ListComprehension */) {
2922
+ if (scopeType === 2 /* ScopeType.Function */ || scopeType === 1 /* ScopeType.Comprehension */) {
2912
2923
  return true;
2913
2924
  }
2914
2925
  // See if the symbol is private.
@@ -2966,7 +2977,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2966
2977
  let deprecatedMessage;
2967
2978
  function getDeprecatedMessageForFunction(functionType) {
2968
2979
  if (functionType.details.declaration &&
2969
- functionType.details.declaration.node.nodeType === 28 /* ParseNodeType.Function */) {
2980
+ functionType.details.declaration.node.nodeType === 31 /* ParseNodeType.Function */) {
2970
2981
  const containingClass = ParseTreeUtils.getEnclosingClass(functionType.details.declaration.node,
2971
2982
  /* stopAtFunction */ true);
2972
2983
  if (containingClass) {
@@ -3134,7 +3145,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3134
3145
  this._importResolver.isStdlibModule(desc, this._fileInfo.executionEnvironment) &&
3135
3146
  this._sourceMapper.isUserCode(this._fileInfo.fileUri)) {
3136
3147
  // This means the user has a module that is overwriting the stdlib module.
3137
- const diag = this._evaluator.addDiagnosticForTextRange(this._fileInfo, this._fileInfo.diagnosticRuleSet.reportShadowedImports, diagnosticRules_1.DiagnosticRule.reportShadowedImports, localize_1.LocMessage.stdlibModuleOverridden().format({
3148
+ const diag = this._evaluator.addDiagnosticForTextRange(this._fileInfo, diagnosticRules_1.DiagnosticRule.reportShadowedImports, localize_1.LocMessage.stdlibModuleOverridden().format({
3138
3149
  name: moduleName,
3139
3150
  path: this._fileInfo.fileUri.toUserVisibleString(),
3140
3151
  }), this._moduleNode);
@@ -3155,8 +3166,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3155
3166
  return;
3156
3167
  }
3157
3168
  // Skip this check for relative imports.
3158
- const nodeModule = node.nodeType === 23 /* ParseNodeType.ImportFromAs */
3159
- ? ((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 22 /* ParseNodeType.ImportFrom */
3169
+ const nodeModule = node.nodeType === 26 /* ParseNodeType.ImportFromAs */
3170
+ ? ((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 25 /* ParseNodeType.ImportFrom */
3160
3171
  ? (_b = node.parent) === null || _b === void 0 ? void 0 : _b.module
3161
3172
  : undefined
3162
3173
  : node.module;
@@ -3164,9 +3175,9 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3164
3175
  return;
3165
3176
  }
3166
3177
  // Otherwise use the name to determine if a match for a stdlib module.
3167
- const namePartNodes = node.nodeType === 21 /* ParseNodeType.ImportAs */
3178
+ const namePartNodes = node.nodeType === 24 /* ParseNodeType.ImportAs */
3168
3179
  ? node.module.nameParts
3169
- : node.nodeType === 23 /* ParseNodeType.ImportFromAs */
3180
+ : node.nodeType === 26 /* ParseNodeType.ImportFromAs */
3170
3181
  ? [node.name]
3171
3182
  : node.module.nameParts;
3172
3183
  const nameParts = namePartNodes.map((n) => n.value);
@@ -3321,7 +3332,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3321
3332
  if (statement.nodeType === 47 /* ParseNodeType.StatementList */) {
3322
3333
  for (const substatement of statement.statements) {
3323
3334
  if (substatement.nodeType !== 54 /* ParseNodeType.TypeAnnotation */ &&
3324
- substatement.nodeType !== 18 /* ParseNodeType.Ellipsis */ &&
3335
+ substatement.nodeType !== 21 /* ParseNodeType.Ellipsis */ &&
3325
3336
  substatement.nodeType !== 48 /* ParseNodeType.StringList */ &&
3326
3337
  substatement.nodeType !== 42 /* ParseNodeType.Pass */) {
3327
3338
  emitBadStatementError(substatement);
@@ -3540,11 +3551,13 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3540
3551
  }
3541
3552
  types_1.ClassType.getSymbolTable(classType).forEach((symbol, name) => {
3542
3553
  var _a;
3543
- // Enum members don't have type annotations.
3544
- if (symbol.getTypedDeclarations().length > 0) {
3545
- return;
3546
- }
3547
- const symbolType = (0, enums_1.transformTypeForEnumMember)(this._evaluator, classType, name);
3554
+ // Determine whether this is an enum member. We ignore the presence
3555
+ // of an annotation in this case because the runtime does. From a
3556
+ // type checking perspective, if the runtime treats the assignment
3557
+ // as an enum member but there is a type annotation present, it is
3558
+ // considered a type checking error.
3559
+ const symbolType = (0, enums_1.transformTypeForEnumMember)(this._evaluator, classType, name,
3560
+ /* ignoreAnnotation */ true);
3548
3561
  // Is this symbol a literal instance of the enum class?
3549
3562
  if (!symbolType ||
3550
3563
  !(0, types_1.isClassInstance)(symbolType) ||
@@ -3552,6 +3565,14 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3552
3565
  !(symbolType.literalValue instanceof types_1.EnumLiteral)) {
3553
3566
  return;
3554
3567
  }
3568
+ // Enum members should not have type annotations.
3569
+ const typedDecls = symbol.getTypedDeclarations();
3570
+ if (typedDecls.length > 0) {
3571
+ if (typedDecls[0].type === 1 /* DeclarationType.Variable */ && typedDecls[0].inferredTypeSource) {
3572
+ this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.enumMemberTypeAnnotation(), typedDecls[0].node);
3573
+ }
3574
+ return;
3575
+ }
3555
3576
  // Look for a duplicate assignment.
3556
3577
  const decls = symbol.getDeclarations();
3557
3578
  if (decls.length >= 2 && decls[0].type === 1 /* DeclarationType.Variable */) {
@@ -3978,12 +3999,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3978
3999
  // We'll set the "SkipArgsKwargs" flag for pragmatic reasons since __new__
3979
4000
  // often has an *args and/or **kwargs. We'll also set the ParamSpecValue
3980
4001
  // because we don't care about the return type for this check.
3981
- initMemberType = types_1.FunctionType.cloneWithNewFlags(initMemberType, initMemberType.details.flags |
3982
- 32768 /* FunctionTypeFlags.SkipArgsKwargsCompatibilityCheck */ |
3983
- 65536 /* FunctionTypeFlags.ParamSpecValue */);
3984
- newMemberType = types_1.FunctionType.cloneWithNewFlags(newMemberType, initMemberType.details.flags |
3985
- 32768 /* FunctionTypeFlags.SkipArgsKwargsCompatibilityCheck */ |
3986
- 65536 /* FunctionTypeFlags.ParamSpecValue */);
4002
+ initMemberType = types_1.FunctionType.cloneWithNewFlags(initMemberType, initMemberType.details.flags | 32768 /* FunctionTypeFlags.GradualCallableForm */ | 65536 /* FunctionTypeFlags.ParamSpecValue */);
4003
+ newMemberType = types_1.FunctionType.cloneWithNewFlags(newMemberType, initMemberType.details.flags | 32768 /* FunctionTypeFlags.GradualCallableForm */ | 65536 /* FunctionTypeFlags.ParamSpecValue */);
3987
4004
  if (!this._evaluator.assignType(newMemberType, initMemberType,
3988
4005
  /* diag */ undefined,
3989
4006
  /* destTypeVarContext */ undefined,
@@ -3997,7 +4014,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
3997
4014
  const newDecl = newMemberType.details.declaration;
3998
4015
  if (initDecl && newDecl) {
3999
4016
  const mainDecl = displayOnInit ? initDecl : newDecl;
4000
- const mainDeclNode = mainDecl.node.nodeType === 28 /* ParseNodeType.Function */ ? mainDecl.node.name : mainDecl.node;
4017
+ const mainDeclNode = mainDecl.node.nodeType === 31 /* ParseNodeType.Function */ ? mainDecl.node.name : mainDecl.node;
4001
4018
  const diagAddendum = new diagnostic_1.DiagnosticAddendum();
4002
4019
  const initSignature = this._evaluator.printType(initMemberType);
4003
4020
  const newSignature = this._evaluator.printType(newMemberType);
@@ -5068,7 +5085,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
5068
5085
  if (!functionTypeResult) {
5069
5086
  return;
5070
5087
  }
5071
- const declaredReturnType = types_1.FunctionType.getSpecializedReturnType(functionTypeResult.functionType);
5088
+ const declaredReturnType = types_1.FunctionType.getEffectiveReturnType(functionTypeResult.functionType);
5072
5089
  if (!declaredReturnType) {
5073
5090
  return;
5074
5091
  }
@@ -5178,7 +5195,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
5178
5195
  const importStatements = (0, importStatementUtils_1.getTopLevelImports)(this._moduleNode);
5179
5196
  const importModuleMap = new Map();
5180
5197
  importStatements.orderedImports.forEach((importStatement) => {
5181
- if (importStatement.node.nodeType === 22 /* ParseNodeType.ImportFrom */) {
5198
+ if (importStatement.node.nodeType === 25 /* ParseNodeType.ImportFrom */) {
5182
5199
  const symbolMap = new Map();
5183
5200
  importStatement.node.imports.forEach((importFromAs) => {
5184
5201
  // Ignore duplicates if they're aliased.