@zzzen/pyright-internal 1.2.0-dev.20250420 → 1.2.0-dev.20250802

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 (257) hide show
  1. package/dist/analyzer/analyzerNodeInfo.js +1 -1
  2. package/dist/analyzer/analyzerNodeInfo.js.map +1 -1
  3. package/dist/analyzer/binder.d.ts +2 -1
  4. package/dist/analyzer/binder.js +33 -18
  5. package/dist/analyzer/binder.js.map +1 -1
  6. package/dist/analyzer/checker.js +81 -44
  7. package/dist/analyzer/checker.js.map +1 -1
  8. package/dist/analyzer/codeFlowEngine.js +19 -7
  9. package/dist/analyzer/codeFlowEngine.js.map +1 -1
  10. package/dist/analyzer/codeFlowTypes.d.ts +9 -8
  11. package/dist/analyzer/codeFlowTypes.js +9 -8
  12. package/dist/analyzer/codeFlowTypes.js.map +1 -1
  13. package/dist/analyzer/codeFlowUtils.js +4 -2
  14. package/dist/analyzer/codeFlowUtils.js.map +1 -1
  15. package/dist/analyzer/docStringUtils.js +3 -1
  16. package/dist/analyzer/docStringUtils.js.map +1 -1
  17. package/dist/analyzer/importStatementUtils.js +5 -3
  18. package/dist/analyzer/importStatementUtils.js.map +1 -1
  19. package/dist/analyzer/operations.js +1 -1
  20. package/dist/analyzer/operations.js.map +1 -1
  21. package/dist/analyzer/packageTypeVerifier.js +5 -3
  22. package/dist/analyzer/packageTypeVerifier.js.map +1 -1
  23. package/dist/analyzer/parameterUtils.js +10 -3
  24. package/dist/analyzer/parameterUtils.js.map +1 -1
  25. package/dist/analyzer/parseTreeUtils.d.ts +3 -4
  26. package/dist/analyzer/parseTreeUtils.js +19 -225
  27. package/dist/analyzer/parseTreeUtils.js.map +1 -1
  28. package/dist/analyzer/patternMatching.js +4 -0
  29. package/dist/analyzer/patternMatching.js.map +1 -1
  30. package/dist/analyzer/program.d.ts +12 -2
  31. package/dist/analyzer/program.js +74 -58
  32. package/dist/analyzer/program.js.map +1 -1
  33. package/dist/analyzer/properties.js +3 -5
  34. package/dist/analyzer/properties.js.map +1 -1
  35. package/dist/analyzer/protocols.js +13 -3
  36. package/dist/analyzer/protocols.js.map +1 -1
  37. package/dist/analyzer/sentinel.d.ts +4 -0
  38. package/dist/analyzer/sentinel.js +51 -0
  39. package/dist/analyzer/sentinel.js.map +1 -0
  40. package/dist/analyzer/service.d.ts +2 -2
  41. package/dist/analyzer/service.js +7 -6
  42. package/dist/analyzer/service.js.map +1 -1
  43. package/dist/analyzer/sourceFile.d.ts +4 -0
  44. package/dist/analyzer/sourceFile.js +52 -12
  45. package/dist/analyzer/sourceFile.js.map +1 -1
  46. package/dist/analyzer/sourceFileInfo.d.ts +10 -1
  47. package/dist/analyzer/sourceFileInfo.js +28 -0
  48. package/dist/analyzer/sourceFileInfo.js.map +1 -1
  49. package/dist/analyzer/sourceFileInfoUtils.js +4 -4
  50. package/dist/analyzer/sourceFileInfoUtils.js.map +1 -1
  51. package/dist/analyzer/sourceMapper.d.ts +1 -1
  52. package/dist/analyzer/sourceMapper.js +20 -20
  53. package/dist/analyzer/sourceMapper.js.map +1 -1
  54. package/dist/analyzer/symbol.d.ts +3 -0
  55. package/dist/analyzer/symbol.js +11 -0
  56. package/dist/analyzer/symbol.js.map +1 -1
  57. package/dist/analyzer/testWalker.js +2 -13
  58. package/dist/analyzer/testWalker.js.map +1 -1
  59. package/dist/analyzer/tracePrinter.js +1 -1
  60. package/dist/analyzer/tracePrinter.js.map +1 -1
  61. package/dist/analyzer/typeEvaluator.js +261 -137
  62. package/dist/analyzer/typeEvaluator.js.map +1 -1
  63. package/dist/analyzer/typeEvaluatorTypes.d.ts +8 -4
  64. package/dist/analyzer/typeEvaluatorTypes.js +15 -2
  65. package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
  66. package/dist/analyzer/typeGuards.js +47 -13
  67. package/dist/analyzer/typeGuards.js.map +1 -1
  68. package/dist/analyzer/typePrinter.js +10 -2
  69. package/dist/analyzer/typePrinter.js.map +1 -1
  70. package/dist/analyzer/typePrinterUtils.js +2 -2
  71. package/dist/analyzer/typePrinterUtils.js.map +1 -1
  72. package/dist/analyzer/typeUtils.d.ts +2 -0
  73. package/dist/analyzer/typeUtils.js +10 -0
  74. package/dist/analyzer/typeUtils.js.map +1 -1
  75. package/dist/analyzer/typedDicts.js +9 -5
  76. package/dist/analyzer/typedDicts.js.map +1 -1
  77. package/dist/analyzer/types.d.ts +9 -2
  78. package/dist/analyzer/types.js +39 -1
  79. package/dist/analyzer/types.js.map +1 -1
  80. package/dist/commands/dumpFileDebugInfoCommand.d.ts +96 -0
  81. package/dist/commands/dumpFileDebugInfoCommand.js +13 -2
  82. package/dist/commands/dumpFileDebugInfoCommand.js.map +1 -1
  83. package/dist/common/cancellationUtils.d.ts +1 -1
  84. package/dist/common/cancellationUtils.js +2 -2
  85. package/dist/common/cancellationUtils.js.map +1 -1
  86. package/dist/common/charCodes.d.ts +1 -1
  87. package/dist/common/charCodes.js +1 -1
  88. package/dist/common/charCodes.js.map +1 -1
  89. package/dist/common/configOptions.d.ts +1 -0
  90. package/dist/common/configOptions.js +5 -0
  91. package/dist/common/configOptions.js.map +1 -1
  92. package/dist/common/core.d.ts +1 -3
  93. package/dist/common/core.js +3 -4
  94. package/dist/common/core.js.map +1 -1
  95. package/dist/common/diagnostic.d.ts +1 -1
  96. package/dist/common/diagnosticRules.d.ts +1 -0
  97. package/dist/common/diagnosticRules.js +1 -0
  98. package/dist/common/diagnosticRules.js.map +1 -1
  99. package/dist/common/docRange.d.ts +6 -0
  100. package/dist/common/docRange.js +10 -0
  101. package/dist/common/docRange.js.map +1 -0
  102. package/dist/common/envVarUtils.js +1 -6
  103. package/dist/common/envVarUtils.js.map +1 -1
  104. package/dist/common/extensibility.d.ts +11 -2
  105. package/dist/common/extensibility.js.map +1 -1
  106. package/dist/common/fileBasedCancellationUtils.d.ts +1 -0
  107. package/dist/common/fileBasedCancellationUtils.js +1 -0
  108. package/dist/common/fileBasedCancellationUtils.js.map +1 -1
  109. package/dist/common/logTracker.d.ts +5 -1
  110. package/dist/common/logTracker.js +43 -26
  111. package/dist/common/logTracker.js.map +1 -1
  112. package/dist/common/pathUtils.d.ts +1 -1
  113. package/dist/common/pathUtils.js +3 -2
  114. package/dist/common/pathUtils.js.map +1 -1
  115. package/dist/common/realFileSystem.d.ts +1 -1
  116. package/dist/common/realFileSystem.js +2 -1
  117. package/dist/common/realFileSystem.js.map +1 -1
  118. package/dist/common/stringUtils.d.ts +0 -1
  119. package/dist/common/stringUtils.js +0 -42
  120. package/dist/common/stringUtils.js.map +1 -1
  121. package/dist/common/textEditTracker.js +5 -3
  122. package/dist/common/textEditTracker.js.map +1 -1
  123. package/dist/common/textRange.d.ts +5 -11
  124. package/dist/common/textRange.js +31 -56
  125. package/dist/common/textRange.js.map +1 -1
  126. package/dist/common/textRangeCollection.js +3 -2
  127. package/dist/common/textRangeCollection.js.map +1 -1
  128. package/dist/common/uri/baseUri.js +2 -1
  129. package/dist/common/uri/baseUri.js.map +1 -1
  130. package/dist/common/uri/uri.d.ts +5 -2
  131. package/dist/common/uri/uri.js +21 -5
  132. package/dist/common/uri/uri.js.map +1 -1
  133. package/dist/common/uri/uriUtils.d.ts +2 -2
  134. package/dist/common/uri/uriUtils.js +4 -3
  135. package/dist/common/uri/uriUtils.js.map +1 -1
  136. package/dist/common/workspaceEditUtils.js +9 -9
  137. package/dist/common/workspaceEditUtils.js.map +1 -1
  138. package/dist/languageServerBase.d.ts +5 -3
  139. package/dist/languageServerBase.js +44 -37
  140. package/dist/languageServerBase.js.map +1 -1
  141. package/dist/languageService/analyzerServiceExecutor.d.ts +3 -0
  142. package/dist/languageService/analyzerServiceExecutor.js +1 -0
  143. package/dist/languageService/analyzerServiceExecutor.js.map +1 -1
  144. package/dist/languageService/autoImporter.d.ts +2 -2
  145. package/dist/languageService/autoImporter.js +3 -3
  146. package/dist/languageService/autoImporter.js.map +1 -1
  147. package/dist/languageService/callHierarchyProvider.js +2 -3
  148. package/dist/languageService/callHierarchyProvider.js.map +1 -1
  149. package/dist/languageService/completionProvider.js +16 -13
  150. package/dist/languageService/completionProvider.js.map +1 -1
  151. package/dist/languageService/definitionProvider.d.ts +2 -1
  152. package/dist/languageService/definitionProvider.js.map +1 -1
  153. package/dist/languageService/documentSymbolCollector.d.ts +4 -1
  154. package/dist/languageService/documentSymbolCollector.js +9 -7
  155. package/dist/languageService/documentSymbolCollector.js.map +1 -1
  156. package/dist/languageService/hoverProvider.js +1 -9
  157. package/dist/languageService/hoverProvider.js.map +1 -1
  158. package/dist/languageService/importSorter.js +1 -0
  159. package/dist/languageService/importSorter.js.map +1 -1
  160. package/dist/languageService/navigationUtils.d.ts +1 -1
  161. package/dist/languageService/referencesProvider.d.ts +2 -1
  162. package/dist/languageService/referencesProvider.js +8 -7
  163. package/dist/languageService/referencesProvider.js.map +1 -1
  164. package/dist/languageService/renameProvider.js +4 -19
  165. package/dist/languageService/renameProvider.js.map +1 -1
  166. package/dist/languageService/tooltipUtils.d.ts +2 -0
  167. package/dist/languageService/tooltipUtils.js +2 -0
  168. package/dist/languageService/tooltipUtils.js.map +1 -1
  169. package/dist/languageService/workspaceSymbolProvider.js +1 -1
  170. package/dist/languageService/workspaceSymbolProvider.js.map +1 -1
  171. package/dist/localization/localize.d.ts +12 -2
  172. package/dist/localization/localize.js +12 -2
  173. package/dist/localization/localize.js.map +1 -1
  174. package/dist/localization/package.nls.cs.json +23 -9
  175. package/dist/localization/package.nls.de.json +18 -4
  176. package/dist/localization/package.nls.en-us.json +36 -2
  177. package/dist/localization/package.nls.es.json +18 -4
  178. package/dist/localization/package.nls.fr.json +22 -8
  179. package/dist/localization/package.nls.it.json +23 -9
  180. package/dist/localization/package.nls.ja.json +18 -4
  181. package/dist/localization/package.nls.ko.json +23 -9
  182. package/dist/localization/package.nls.pl.json +18 -4
  183. package/dist/localization/package.nls.pt-br.json +18 -4
  184. package/dist/localization/package.nls.qps-ploc.json +17 -3
  185. package/dist/localization/package.nls.ru.json +18 -4
  186. package/dist/localization/package.nls.tr.json +23 -9
  187. package/dist/localization/package.nls.zh-cn.json +18 -4
  188. package/dist/localization/package.nls.zh-tw.json +18 -4
  189. package/dist/parser/characters.d.ts +1 -8
  190. package/dist/parser/characters.js +6 -3
  191. package/dist/parser/characters.js.map +1 -1
  192. package/dist/parser/parseNodeUtils.d.ts +12 -0
  193. package/dist/parser/parseNodeUtils.js +136 -0
  194. package/dist/parser/parseNodeUtils.js.map +1 -0
  195. package/dist/parser/parseNodes.d.ts +12 -2
  196. package/dist/parser/parseNodes.js +17 -2
  197. package/dist/parser/parseNodes.js.map +1 -1
  198. package/dist/parser/parser.d.ts +3 -2
  199. package/dist/parser/parser.js +54 -47
  200. package/dist/parser/parser.js.map +1 -1
  201. package/dist/parser/tokenizer.d.ts +3 -3
  202. package/dist/parser/tokenizer.js +58 -38
  203. package/dist/parser/tokenizer.js.map +1 -1
  204. package/dist/parser/tokenizerTypes.d.ts +4 -3
  205. package/dist/parser/tokenizerTypes.js +4 -3
  206. package/dist/parser/tokenizerTypes.js.map +1 -1
  207. package/dist/pyright.js +1 -1
  208. package/dist/pyright.js.map +1 -1
  209. package/dist/server.js +3 -3
  210. package/dist/server.js.map +1 -1
  211. package/dist/tests/checker.test.js +2 -2
  212. package/dist/tests/common.test.js +6 -6
  213. package/dist/tests/common.test.js.map +1 -1
  214. package/dist/tests/fourslash/completions.autoimport.unicode.fourslash.js +29 -0
  215. package/dist/tests/fourslash/completions.autoimport.unicode.fourslash.js.map +1 -0
  216. package/dist/tests/fourslash/completions.declNames.method.fourslash.js +8 -8
  217. package/dist/tests/harness/fourslash/testState.d.ts +3 -2
  218. package/dist/tests/harness/fourslash/testState.js +9 -3
  219. package/dist/tests/harness/fourslash/testState.js.map +1 -1
  220. package/dist/tests/lsp/languageServer.js +1 -1
  221. package/dist/tests/lsp/languageServer.js.map +1 -1
  222. package/dist/tests/lsp/languageServerTestUtils.d.ts +1 -2
  223. package/dist/tests/lsp/languageServerTestUtils.js +2 -2
  224. package/dist/tests/lsp/languageServerTestUtils.js.map +1 -1
  225. package/dist/tests/positionUtils.test.js +1 -1
  226. package/dist/tests/service.test.js +4 -4
  227. package/dist/tests/service.test.js.map +1 -1
  228. package/dist/tests/sourceFile.test.js +19 -1
  229. package/dist/tests/sourceFile.test.js.map +1 -1
  230. package/dist/tests/stringUtils.test.js +0 -12
  231. package/dist/tests/stringUtils.test.js.map +1 -1
  232. package/dist/tests/testStateUtils.js +8 -3
  233. package/dist/tests/testStateUtils.js.map +1 -1
  234. package/dist/tests/tokenizer.test.js +5 -5
  235. package/dist/tests/tokenizer.test.js.map +1 -1
  236. package/dist/tests/typeEvaluator1.test.js +11 -13
  237. package/dist/tests/typeEvaluator1.test.js.map +1 -1
  238. package/dist/tests/typeEvaluator2.test.js +15 -1
  239. package/dist/tests/typeEvaluator2.test.js.map +1 -1
  240. package/dist/tests/typeEvaluator4.test.js +16 -1
  241. package/dist/tests/typeEvaluator4.test.js.map +1 -1
  242. package/dist/tests/typeEvaluator5.test.js +9 -3
  243. package/dist/tests/typeEvaluator5.test.js.map +1 -1
  244. package/dist/tests/typeEvaluator6.test.js +1 -1
  245. package/dist/tests/typeEvaluator7.test.js +9 -0
  246. package/dist/tests/typeEvaluator7.test.js.map +1 -1
  247. package/dist/tests/typeEvaluator8.test.js +4 -0
  248. package/dist/tests/typeEvaluator8.test.js.map +1 -1
  249. package/dist/tests/workspaceEditUtils.test.js +7 -9
  250. package/dist/tests/workspaceEditUtils.test.js.map +1 -1
  251. package/dist/types.d.ts +1 -1
  252. package/dist/workspaceFactory.d.ts +12 -1
  253. package/dist/workspaceFactory.js.map +1 -1
  254. package/package.json +2 -3
  255. package/dist/tests/fourslash/rename.args.fourslash.js +0 -72
  256. package/dist/tests/fourslash/rename.args.fourslash.js.map +0 -1
  257. /package/dist/tests/fourslash/{rename.args.fourslash.d.ts → completions.autoimport.unicode.fourslash.d.ts} +0 -0
@@ -1392,8 +1392,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1392
1392
  // Use the left side of the right expression for comparison purposes.
1393
1393
  rightExpression = rightExpression.d.leftExpr;
1394
1394
  }
1395
- const leftType = this._evaluator.getType(node.d.leftExpr);
1396
- const rightType = this._evaluator.getType(rightExpression);
1395
+ let leftType = this._evaluator.getType(node.d.leftExpr);
1396
+ let rightType = this._evaluator.getType(rightExpression);
1397
1397
  if (!leftType || !rightType) {
1398
1398
  return;
1399
1399
  }
@@ -1405,6 +1405,33 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1405
1405
  ? localize_1.LocMessage.comparisonAlwaysFalse()
1406
1406
  : localize_1.LocMessage.comparisonAlwaysTrue();
1407
1407
  };
1408
+ const replaceEnumTypeWithLiteralValue = (type) => {
1409
+ return (0, typeUtils_1.mapSubtypes)(type, (subtype) => {
1410
+ if (!(0, types_1.isClassInstance)(subtype) ||
1411
+ !types_1.ClassType.isEnumClass(subtype) ||
1412
+ !subtype.shared.mro.some((base) => (0, types_1.isClass)(base) && types_1.ClassType.isBuiltIn(base, ['int', 'str', 'bytes']))) {
1413
+ return subtype;
1414
+ }
1415
+ // If this is an enum literal, replace it with its literal value.
1416
+ if (subtype.priv.literalValue instanceof types_1.EnumLiteral) {
1417
+ return subtype.priv.literalValue.itemType;
1418
+ }
1419
+ // If this is an enum class, replace it with the type of its members.
1420
+ const literalValues = (0, typeGuards_1.enumerateLiteralsForType)(this._evaluator, subtype);
1421
+ if (literalValues && literalValues.length > 0) {
1422
+ return (0, types_1.combineTypes)(literalValues.map((literalClass) => {
1423
+ const literalValue = literalClass.priv.literalValue;
1424
+ (0, debug_1.assert)(literalValue instanceof types_1.EnumLiteral);
1425
+ return literalValue.itemType;
1426
+ }));
1427
+ }
1428
+ return subtype;
1429
+ });
1430
+ };
1431
+ // Handle enum literals that are assignable to another (non-Enum) literal.
1432
+ // This can happen for IntEnum and StrEnum members.
1433
+ leftType = replaceEnumTypeWithLiteralValue(leftType);
1434
+ rightType = replaceEnumTypeWithLiteralValue(rightType);
1408
1435
  // Check for the special case where the LHS and RHS are both literals.
1409
1436
  if ((0, typeUtils_1.isLiteralTypeOrUnion)(rightType) && (0, typeUtils_1.isLiteralTypeOrUnion)(leftType)) {
1410
1437
  if ((0, staticExpressions_1.evaluateStaticBoolExpression)(node, this._fileInfo.executionEnvironment, this._fileInfo.definedConstants) === undefined) {
@@ -1477,7 +1504,9 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1477
1504
  types_1.ClassType.isBuiltIn(declaredReturnType, 'AwaitableGenerator')) {
1478
1505
  // Handle the old-style (pre-await) generator case
1479
1506
  // if the return type explicitly uses AwaitableGenerator.
1480
- generatorType = this._evaluator.getTypingType(node, 'AwaitableGenerator');
1507
+ generatorType =
1508
+ this._evaluator.getTypeCheckerInternalsType(node, 'AwaitableGenerator') ??
1509
+ this._evaluator.getTypingType(node, 'AwaitableGenerator');
1481
1510
  }
1482
1511
  else {
1483
1512
  generatorType = this._evaluator.getTypingType(node, node.d.isAsync ? 'AsyncGenerator' : 'Generator');
@@ -1805,7 +1834,9 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1805
1834
  if (types_1.FunctionType.isInstanceMethod(functionType) && functionType.shared.name === '__get__') {
1806
1835
  return false;
1807
1836
  }
1808
- let flags = 64 /* AssignTypeFlags.SkipReturnTypeCheck */ | 16 /* AssignTypeFlags.OverloadOverlap */;
1837
+ let flags = 64 /* AssignTypeFlags.SkipReturnTypeCheck */ |
1838
+ 16 /* AssignTypeFlags.OverloadOverlap */ |
1839
+ 131072 /* AssignTypeFlags.DisallowExtraKwargsForTd */;
1809
1840
  if (partialOverlap) {
1810
1841
  flags |= 32 /* AssignTypeFlags.PartialOverloadOverlap */;
1811
1842
  }
@@ -1844,7 +1875,10 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1844
1875
  overloadBound = (0, typeUtils_1.makeTypeVarsBound)(overload, liveScopeIds);
1845
1876
  }
1846
1877
  // First check the parameters to see if they are assignable.
1847
- let isConsistent = this._evaluator.assignType(overloadBound, implBound, diag, constraints, 64 /* AssignTypeFlags.SkipReturnTypeCheck */ | 2 /* AssignTypeFlags.Contravariant */ | 512 /* AssignTypeFlags.SkipSelfClsTypeCheck */);
1878
+ let isConsistent = this._evaluator.assignType(overloadBound, implBound, diag, constraints, 64 /* AssignTypeFlags.SkipReturnTypeCheck */ |
1879
+ 2 /* AssignTypeFlags.Contravariant */ |
1880
+ 512 /* AssignTypeFlags.SkipSelfClsTypeCheck */ |
1881
+ 131072 /* AssignTypeFlags.DisallowExtraKwargsForTd */);
1848
1882
  // Now check the return types.
1849
1883
  const overloadReturnType = this._evaluator.solveAndApplyConstraints(types_1.FunctionType.getEffectiveReturnType(overloadBound) ?? this._evaluator.getInferredReturnType(overloadBound), constraints);
1850
1884
  const implReturnType = this._evaluator.solveAndApplyConstraints(types_1.FunctionType.getEffectiveReturnType(implBound) ?? this._evaluator.getInferredReturnType(implBound), constraints);
@@ -1874,7 +1908,14 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
1874
1908
  const start = statement.start;
1875
1909
  const lastStatement = statements[statements.length - 1];
1876
1910
  const end = textRange_1.TextRange.getEnd(lastStatement);
1877
- this._evaluator.addUnreachableCode(statement, reachability, { start, length: end - start });
1911
+ const textRange = { start, length: end - start };
1912
+ if (reachability === typeEvaluatorTypes_1.Reachability.UnreachableByAnalysis ||
1913
+ reachability === typeEvaluatorTypes_1.Reachability.UnreachableStructural) {
1914
+ this._evaluator.addDiagnosticForTextRange(this._fileInfo, diagnosticRules_1.DiagnosticRule.reportUnreachable, reachability === typeEvaluatorTypes_1.Reachability.UnreachableStructural
1915
+ ? localize_1.LocMessage.unreachableCodeStructure()
1916
+ : localize_1.LocMessage.unreachableCodeType(), statement.nodeType === 0 /* ParseNodeType.Error */ ? statement : statement.d.firstToken);
1917
+ }
1918
+ this._evaluator.addUnreachableCode(statement, reachability, textRange);
1878
1919
  reportedUnreachable = true;
1879
1920
  }
1880
1921
  }
@@ -4625,22 +4666,22 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4625
4666
  overrideType = (0, typeUtils_1.makeTypeVarsBound)(overrideType, [childClassType.shared.typeVarScopeId]);
4626
4667
  baseType = (0, typeUtils_1.makeTypeVarsBound)(baseType, [childClassType.shared.typeVarScopeId]);
4627
4668
  }
4628
- if ((0, types_1.isFunctionOrOverloaded)(baseType)) {
4629
- const diagAddendum = new diagnostic_1.DiagnosticAddendum();
4630
- // Determine whether this is an attempt to override a method marked @final.
4631
- if (this._isFinalFunction(memberName, baseType)) {
4632
- const decl = (0, symbolUtils_1.getLastTypedDeclarationForSymbol)(overrideSymbol);
4633
- if (decl && decl.type === 5 /* DeclarationType.Function */) {
4634
- const diag = this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportIncompatibleMethodOverride, localize_1.LocMessage.finalMethodOverride().format({
4635
- name: memberName,
4636
- className: baseClass.shared.name,
4637
- }), decl.node.d.name);
4638
- const origDecl = (0, symbolUtils_1.getLastTypedDeclarationForSymbol)(baseClassAndSymbol.symbol);
4639
- if (diag && origDecl) {
4640
- diag.addRelatedInfo(localize_1.LocAddendum.finalMethod(), origDecl.uri, origDecl.range);
4641
- }
4669
+ // Determine whether this is an attempt to override a method marked @final.
4670
+ if (this._isFinalFunction(memberName, baseClassAndSymbol.symbol, baseType)) {
4671
+ const decl = (0, symbolUtils_1.getLastTypedDeclarationForSymbol)(overrideSymbol);
4672
+ if (decl && decl.type === 5 /* DeclarationType.Function */) {
4673
+ const diag = this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportIncompatibleMethodOverride, localize_1.LocMessage.finalMethodOverride().format({
4674
+ name: memberName,
4675
+ className: baseClass.shared.name,
4676
+ }), decl.node.d.name);
4677
+ const origDecl = (0, symbolUtils_1.getLastTypedDeclarationForSymbol)(baseClassAndSymbol.symbol);
4678
+ if (diag && origDecl) {
4679
+ diag.addRelatedInfo(localize_1.LocAddendum.finalMethod(), origDecl.uri, origDecl.range);
4642
4680
  }
4643
4681
  }
4682
+ }
4683
+ if ((0, types_1.isFunctionOrOverloaded)(baseType)) {
4684
+ const diagAddendum = new diagnostic_1.DiagnosticAddendum();
4644
4685
  // Don't check certain magic functions or private symbols.
4645
4686
  // Also, skip this check if the class is a TypedDict. The methods for a TypedDict
4646
4687
  // are synthesized, and they can result in many overloads. We assume they
@@ -4676,7 +4717,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4676
4717
  // Special-case overrides of methods in '_TypedDict', since
4677
4718
  // TypedDict attributes aren't manifest as attributes but rather
4678
4719
  // as named keys.
4679
- if (types_1.ClassType.isBuiltIn(baseClass, '_TypedDict')) {
4720
+ if (types_1.ClassType.isBuiltIn(baseClass, ['_TypedDict', 'TypedDictFallback'])) {
4680
4721
  return;
4681
4722
  }
4682
4723
  const decls = overrideSymbol.getDeclarations();
@@ -4844,24 +4885,26 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4844
4885
  }
4845
4886
  }
4846
4887
  }
4847
- _isFinalFunction(name, type) {
4888
+ _isFinalFunction(name, symbol, type) {
4848
4889
  if (SymbolNameUtils.isPrivateName(name)) {
4849
4890
  return false;
4850
4891
  }
4851
- if ((0, types_1.isFunction)(type) && types_1.FunctionType.isFinal(type)) {
4852
- return true;
4853
- }
4854
- if ((0, types_1.isOverloaded)(type)) {
4855
- const overloads = types_1.OverloadedType.getOverloads(type);
4856
- const impl = types_1.OverloadedType.getImplementation(type);
4857
- if (overloads.some((overload) => types_1.FunctionType.isFinal(overload))) {
4858
- return true;
4892
+ // Was this declared with a "def" statement?
4893
+ const defDecls = [];
4894
+ symbol.getDeclarations().forEach((decl) => {
4895
+ if (decl.type === 5 /* DeclarationType.Function */ && decl.node.nodeType === 31 /* ParseNodeType.Function */) {
4896
+ defDecls.push(decl.node);
4859
4897
  }
4860
- if (impl && (0, types_1.isFunction)(impl) && types_1.FunctionType.isFinal(impl)) {
4861
- return true;
4898
+ });
4899
+ // Locate all final function declarations.
4900
+ const finalDefDecls = defDecls.filter((decl) => {
4901
+ const undecoratedFuncType = this._evaluator.getTypeOfFunction(decl)?.functionType;
4902
+ if (!undecoratedFuncType) {
4903
+ return false;
4862
4904
  }
4863
- }
4864
- return false;
4905
+ return types_1.FunctionType.isFinal(undecoratedFuncType);
4906
+ });
4907
+ return finalDefDecls.length > 0;
4865
4908
  }
4866
4909
  _validatePropertyOverride(baseClassType, childClassType, baseType, childType, overrideSymbol, memberName) {
4867
4910
  const propMethodInfo = [
@@ -4899,15 +4942,6 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4899
4942
  }
4900
4943
  return;
4901
4944
  }
4902
- else if (this._isFinalFunction(methodName, baseClassPropMethod)) {
4903
- const decl = (0, symbolUtils_1.getLastTypedDeclarationForSymbol)(overrideSymbol);
4904
- if (decl && decl.type === 5 /* DeclarationType.Function */) {
4905
- this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportIncompatibleMethodOverride, localize_1.LocMessage.finalMethodOverride().format({
4906
- name: memberName,
4907
- className: baseClassType.shared.name,
4908
- }), decl.node.d.name);
4909
- }
4910
- }
4911
4945
  const subclassMethodType = (0, typeUtils_1.partiallySpecializeType)(subclassPropMethod, childClassType, this._evaluator.getTypeClassType());
4912
4946
  if (!(0, types_1.isFunction)(subclassMethodType)) {
4913
4947
  return;
@@ -5185,7 +5219,9 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
5185
5219
  types_1.ClassType.isBuiltIn(declaredReturnType, 'AwaitableGenerator')) {
5186
5220
  // Handle the old-style (pre-await) generator case
5187
5221
  // if the return type explicitly uses AwaitableGenerator.
5188
- generatorType = this._evaluator.getTypingType(node, 'AwaitableGenerator');
5222
+ generatorType =
5223
+ this._evaluator.getTypeCheckerInternalsType(node, 'AwaitableGenerator') ??
5224
+ this._evaluator.getTypingType(node, 'AwaitableGenerator');
5189
5225
  }
5190
5226
  else {
5191
5227
  generatorType = this._evaluator.getTypingType(node, enclosingFunctionNode.d.isAsync ? 'AsyncGenerator' : 'Generator');
@@ -5274,6 +5310,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
5274
5310
  // Were all of the exception types overridden?
5275
5311
  if (typesOfThisExcept.length > 0 && typesOfThisExcept.length === overriddenExceptionCount) {
5276
5312
  this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportUnusedExcept, localize_1.LocMessage.unreachableExcept() + diagAddendum.getString(), except.d.typeExpr);
5313
+ this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportUnreachable, localize_1.LocMessage.unreachableCodeType(), except.d.exceptSuite, except.d.exceptToken);
5277
5314
  this._evaluator.addUnreachableCode(except, typeEvaluatorTypes_1.Reachability.UnreachableByAnalysis, except.d.exceptSuite);
5278
5315
  }
5279
5316
  }