@zzzen/pyright-internal 1.2.0-dev.20240602 → 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 (95) hide show
  1. package/dist/analyzer/binder.js +14 -8
  2. package/dist/analyzer/binder.js.map +1 -1
  3. package/dist/analyzer/checker.js +47 -30
  4. package/dist/analyzer/checker.js.map +1 -1
  5. package/dist/analyzer/constraintSolver.js +26 -34
  6. package/dist/analyzer/constraintSolver.js.map +1 -1
  7. package/dist/analyzer/constructorTransform.js +1 -1
  8. package/dist/analyzer/constructorTransform.js.map +1 -1
  9. package/dist/analyzer/constructors.js +2 -5
  10. package/dist/analyzer/constructors.js.map +1 -1
  11. package/dist/analyzer/dataClasses.js +1 -1
  12. package/dist/analyzer/dataClasses.js.map +1 -1
  13. package/dist/analyzer/enums.d.ts +1 -1
  14. package/dist/analyzer/enums.js +19 -16
  15. package/dist/analyzer/enums.js.map +1 -1
  16. package/dist/analyzer/operations.js +6 -7
  17. package/dist/analyzer/operations.js.map +1 -1
  18. package/dist/analyzer/parameterUtils.js +1 -13
  19. package/dist/analyzer/parameterUtils.js.map +1 -1
  20. package/dist/analyzer/patternMatching.js +4 -4
  21. package/dist/analyzer/patternMatching.js.map +1 -1
  22. package/dist/analyzer/properties.js +2 -2
  23. package/dist/analyzer/properties.js.map +1 -1
  24. package/dist/analyzer/protocols.js +2 -2
  25. package/dist/analyzer/protocols.js.map +1 -1
  26. package/dist/analyzer/sourceFile.js +3 -3
  27. package/dist/analyzer/sourceFile.js.map +1 -1
  28. package/dist/analyzer/typeEvaluator.js +279 -209
  29. package/dist/analyzer/typeEvaluator.js.map +1 -1
  30. package/dist/analyzer/typeEvaluatorTypes.d.ts +2 -3
  31. package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
  32. package/dist/analyzer/typeGuards.js +3 -2
  33. package/dist/analyzer/typeGuards.js.map +1 -1
  34. package/dist/analyzer/typePrinter.js +21 -14
  35. package/dist/analyzer/typePrinter.js.map +1 -1
  36. package/dist/analyzer/typeUtils.d.ts +3 -4
  37. package/dist/analyzer/typeUtils.js +89 -124
  38. package/dist/analyzer/typeUtils.js.map +1 -1
  39. package/dist/analyzer/typeVarContext.js +4 -0
  40. package/dist/analyzer/typeVarContext.js.map +1 -1
  41. package/dist/analyzer/types.d.ts +11 -12
  42. package/dist/analyzer/types.js +137 -169
  43. package/dist/analyzer/types.js.map +1 -1
  44. package/dist/backgroundAnalysisBase.d.ts +1 -1
  45. package/dist/backgroundAnalysisBase.js +3 -3
  46. package/dist/commands/dumpFileDebugInfoCommand.js +1 -1
  47. package/dist/commands/dumpFileDebugInfoCommand.js.map +1 -1
  48. package/dist/common/configOptions.d.ts +2 -1
  49. package/dist/common/configOptions.js +12 -3
  50. package/dist/common/configOptions.js.map +1 -1
  51. package/dist/common/realFileSystem.d.ts +3 -3
  52. package/dist/common/realFileSystem.js +6 -6
  53. package/dist/common/realFileSystem.js.map +1 -1
  54. package/dist/languageServerBase.js +1 -1
  55. package/dist/languageServerBase.js.map +1 -1
  56. package/dist/languageService/workspaceSymbolProvider.js +1 -1
  57. package/dist/localization/localize.d.ts +6 -0
  58. package/dist/localization/localize.js +3 -0
  59. package/dist/localization/localize.js.map +1 -1
  60. package/dist/localization/package.nls.cs.json +2 -2
  61. package/dist/localization/package.nls.de.json +2 -2
  62. package/dist/localization/package.nls.en-us.json +3 -0
  63. package/dist/localization/package.nls.es.json +2 -2
  64. package/dist/localization/package.nls.fr.json +2 -2
  65. package/dist/localization/package.nls.it.json +2 -2
  66. package/dist/localization/package.nls.ja.json +2 -2
  67. package/dist/localization/package.nls.ko.json +3 -3
  68. package/dist/localization/package.nls.pl.json +2 -2
  69. package/dist/localization/package.nls.pt-br.json +2 -2
  70. package/dist/localization/package.nls.qps-ploc.json +2 -2
  71. package/dist/localization/package.nls.ru.json +2 -2
  72. package/dist/localization/package.nls.tr.json +2 -2
  73. package/dist/localization/package.nls.zh-cn.json +2 -2
  74. package/dist/localization/package.nls.zh-tw.json +2 -2
  75. package/dist/pyright.js +3 -0
  76. package/dist/pyright.js.map +1 -1
  77. package/dist/tests/config.test.js +2 -2
  78. package/dist/tests/config.test.js.map +1 -1
  79. package/dist/tests/diagnosticOverrides.test.js +7 -6
  80. package/dist/tests/diagnosticOverrides.test.js.map +1 -1
  81. package/dist/tests/testState.test.js +1 -1
  82. package/dist/tests/testState.test.js.map +1 -1
  83. package/dist/tests/testUtils.js +1 -1
  84. package/dist/tests/testUtils.js.map +1 -1
  85. package/dist/tests/typeEvaluator2.test.js +4 -0
  86. package/dist/tests/typeEvaluator2.test.js.map +1 -1
  87. package/dist/tests/typeEvaluator3.test.js +8 -0
  88. package/dist/tests/typeEvaluator3.test.js.map +1 -1
  89. package/dist/tests/typeEvaluator4.test.js +7 -3
  90. package/dist/tests/typeEvaluator4.test.js.map +1 -1
  91. package/dist/tests/typeEvaluator7.test.js +15 -9
  92. package/dist/tests/typeEvaluator7.test.js.map +1 -1
  93. package/dist/tests/typePrinter.test.js +2 -2
  94. package/dist/tests/typePrinter.test.js.map +1 -1
  95. 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
  }
@@ -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
  }
@@ -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;
@@ -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,
@@ -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),
@@ -2471,7 +2482,7 @@ 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
  }
@@ -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);
@@ -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,
@@ -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
  }