@zzzen/pyright-internal 1.2.0-dev.20260823 → 1.2.0-dev.20260906

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 (149) hide show
  1. package/dist/analyzer/analyzerNodeInfo.d.ts +4 -0
  2. package/dist/analyzer/analyzerNodeInfo.js +29 -8
  3. package/dist/analyzer/analyzerNodeInfo.js.map +1 -1
  4. package/dist/analyzer/backgroundAnalysisProgram.d.ts +2 -1
  5. package/dist/analyzer/backgroundAnalysisProgram.js +4 -8
  6. package/dist/analyzer/backgroundAnalysisProgram.js.map +1 -1
  7. package/dist/analyzer/checker.js +31 -25
  8. package/dist/analyzer/checker.js.map +1 -1
  9. package/dist/analyzer/constructorTransform.js +8 -0
  10. package/dist/analyzer/constructorTransform.js.map +1 -1
  11. package/dist/analyzer/dataClasses.js +9 -3
  12. package/dist/analyzer/dataClasses.js.map +1 -1
  13. package/dist/analyzer/parseTreeUtils.js +12 -13
  14. package/dist/analyzer/parseTreeUtils.js.map +1 -1
  15. package/dist/analyzer/program.js +4 -1
  16. package/dist/analyzer/program.js.map +1 -1
  17. package/dist/analyzer/sentinel.d.ts +2 -2
  18. package/dist/analyzer/sentinel.js +3 -3
  19. package/dist/analyzer/sentinel.js.map +1 -1
  20. package/dist/analyzer/service.d.ts +8 -11
  21. package/dist/analyzer/service.js +27 -96
  22. package/dist/analyzer/service.js.map +1 -1
  23. package/dist/analyzer/sourceFile.js +1 -0
  24. package/dist/analyzer/sourceFile.js.map +1 -1
  25. package/dist/analyzer/sourceFileInfo.d.ts +1 -0
  26. package/dist/analyzer/sourceFileInfo.js +3 -0
  27. package/dist/analyzer/sourceFileInfo.js.map +1 -1
  28. package/dist/analyzer/typeEvaluator.js +93 -32
  29. package/dist/analyzer/typeEvaluator.js.map +1 -1
  30. package/dist/analyzer/typeGuards.js +133 -10
  31. package/dist/analyzer/typeGuards.js.map +1 -1
  32. package/dist/analyzer/typeStubGeneration.d.ts +64 -0
  33. package/dist/analyzer/typeStubGeneration.js +226 -0
  34. package/dist/analyzer/typeStubGeneration.js.map +1 -0
  35. package/dist/analyzer/typeStubMessages.d.ts +4 -0
  36. package/dist/analyzer/typeStubMessages.js +25 -0
  37. package/dist/analyzer/typeStubMessages.js.map +1 -0
  38. package/dist/analyzer/typeStubOutput.d.ts +9 -0
  39. package/dist/analyzer/typeStubOutput.js +52 -0
  40. package/dist/analyzer/typeStubOutput.js.map +1 -0
  41. package/dist/analyzer/typeStubRenderer.d.ts +5 -0
  42. package/dist/analyzer/{typeStubWriter.js → typeStubRenderer.js} +11 -93
  43. package/dist/analyzer/typeStubRenderer.js.map +1 -0
  44. package/dist/analyzer/typeUtils.d.ts +1 -0
  45. package/dist/analyzer/typeUtils.js +112 -0
  46. package/dist/analyzer/typeUtils.js.map +1 -1
  47. package/dist/analyzer/types.d.ts +2 -0
  48. package/dist/analyzer/types.js +84 -58
  49. package/dist/analyzer/types.js.map +1 -1
  50. package/dist/backgroundAnalysisBase.d.ts +5 -4
  51. package/dist/backgroundAnalysisBase.js +11 -19
  52. package/dist/backgroundAnalysisBase.js.map +1 -1
  53. package/dist/commands/createTypeStub.d.ts +2 -6
  54. package/dist/commands/createTypeStub.js +14 -27
  55. package/dist/commands/createTypeStub.js.map +1 -1
  56. package/dist/common/commandLineOptions.d.ts +0 -1
  57. package/dist/common/commandLineOptions.js.map +1 -1
  58. package/dist/common/extensibility.d.ts +1 -0
  59. package/dist/common/extensibility.js.map +1 -1
  60. package/dist/languageServerBase.d.ts +1 -1
  61. package/dist/languageServerBase.js +2 -2
  62. package/dist/languageServerBase.js.map +1 -1
  63. package/dist/languageService/analyzerServiceExecutor.d.ts +1 -3
  64. package/dist/languageService/analyzerServiceExecutor.js +8 -28
  65. package/dist/languageService/analyzerServiceExecutor.js.map +1 -1
  66. package/dist/languageService/fileWatcherDynamicFeature.d.ts +6 -4
  67. package/dist/languageService/fileWatcherDynamicFeature.js +19 -15
  68. package/dist/languageService/fileWatcherDynamicFeature.js.map +1 -1
  69. package/dist/languageService/hoverProvider.d.ts +1 -1
  70. package/dist/languageService/hoverProvider.js +13 -8
  71. package/dist/languageService/hoverProvider.js.map +1 -1
  72. package/dist/languageService/tooltipUtils.d.ts +2 -1
  73. package/dist/languageService/tooltipUtils.js +15 -17
  74. package/dist/languageService/tooltipUtils.js.map +1 -1
  75. package/dist/localization/localize.d.ts +1 -0
  76. package/dist/localization/localize.js +1 -0
  77. package/dist/localization/localize.js.map +1 -1
  78. package/dist/localization/package.nls.cs.json +4 -0
  79. package/dist/localization/package.nls.de.json +4 -0
  80. package/dist/localization/package.nls.en-us.json +1 -0
  81. package/dist/localization/package.nls.es.json +4 -0
  82. package/dist/localization/package.nls.fr.json +4 -0
  83. package/dist/localization/package.nls.it.json +4 -0
  84. package/dist/localization/package.nls.ja.json +4 -0
  85. package/dist/localization/package.nls.ko.json +4 -0
  86. package/dist/localization/package.nls.pl.json +4 -0
  87. package/dist/localization/package.nls.pt-br.json +4 -0
  88. package/dist/localization/package.nls.qps-ploc.json +4 -0
  89. package/dist/localization/package.nls.ru.json +4 -0
  90. package/dist/localization/package.nls.tr.json +4 -0
  91. package/dist/localization/package.nls.zh-cn.json +4 -0
  92. package/dist/localization/package.nls.zh-tw.json +4 -0
  93. package/dist/parser/parser.js +7 -1
  94. package/dist/parser/parser.js.map +1 -1
  95. package/dist/parser/tokenizer.js +3 -5
  96. package/dist/parser/tokenizer.js.map +1 -1
  97. package/dist/pyright.js +30 -17
  98. package/dist/pyright.js.map +1 -1
  99. package/dist/tests/analyzerNodeInfo.test.js +32 -0
  100. package/dist/tests/analyzerNodeInfo.test.js.map +1 -1
  101. package/dist/tests/config.test.js +0 -1
  102. package/dist/tests/config.test.js.map +1 -1
  103. package/dist/tests/fourslash/hover.builtinDocstrings.fourslash.js +5 -5
  104. package/dist/tests/fourslash/hover.docFromSrc.stubs-package.fourslash.js +0 -1
  105. package/dist/tests/fourslash/hover.docFromSrc.stubs-package.fourslash.js.map +1 -1
  106. package/dist/tests/fourslash/hover.fourslash.js +1 -1
  107. package/dist/tests/fourslash/hover.import.django.view.fourslash.js +1 -1
  108. package/dist/tests/fourslash/hover.plainText.fourslash.js +1 -1
  109. package/dist/tests/hoverProvider.test.js +2 -2
  110. package/dist/tests/parseTreeUtils.test.js +41 -0
  111. package/dist/tests/parseTreeUtils.test.js.map +1 -1
  112. package/dist/tests/pyrightCli.test.d.ts +1 -0
  113. package/dist/tests/pyrightCli.test.js +205 -0
  114. package/dist/tests/pyrightCli.test.js.map +1 -0
  115. package/dist/tests/service.test.js +152 -0
  116. package/dist/tests/service.test.js.map +1 -1
  117. package/dist/tests/typeEquality.test.d.ts +1 -0
  118. package/dist/tests/typeEquality.test.js +95 -0
  119. package/dist/tests/typeEquality.test.js.map +1 -0
  120. package/dist/tests/typeEvaluator1.test.js +11 -0
  121. package/dist/tests/typeEvaluator1.test.js.map +1 -1
  122. package/dist/tests/typeEvaluator2.test.js +4 -0
  123. package/dist/tests/typeEvaluator2.test.js.map +1 -1
  124. package/dist/tests/typeEvaluator3.test.js +8 -0
  125. package/dist/tests/typeEvaluator3.test.js.map +1 -1
  126. package/dist/tests/typeEvaluator4.test.js +4 -0
  127. package/dist/tests/typeEvaluator4.test.js.map +1 -1
  128. package/dist/tests/typeEvaluator5.test.js +1 -1
  129. package/dist/tests/typeEvaluator6.test.js +5 -1
  130. package/dist/tests/typeEvaluator6.test.js.map +1 -1
  131. package/dist/tests/typeEvaluator8.test.js +4 -0
  132. package/dist/tests/typeEvaluator8.test.js.map +1 -1
  133. package/dist/tests/typeServer/stubGenerator.test.d.ts +1 -0
  134. package/dist/tests/typeServer/stubGenerator.test.js +73 -0
  135. package/dist/tests/typeServer/stubGenerator.test.js.map +1 -0
  136. package/dist/tests/typeStubGeneration.test.d.ts +1 -0
  137. package/dist/tests/typeStubGeneration.test.js +397 -0
  138. package/dist/tests/typeStubGeneration.test.js.map +1 -0
  139. package/dist/tests/typeStubOutput.test.d.ts +1 -0
  140. package/dist/tests/typeStubOutput.test.js +136 -0
  141. package/dist/tests/typeStubOutput.test.js.map +1 -0
  142. package/dist/tests/typeUtils.test.d.ts +1 -0
  143. package/dist/tests/typeUtils.test.js +133 -0
  144. package/dist/tests/typeUtils.test.js.map +1 -0
  145. package/dist/typeServer/stubGenerator.js +32 -7
  146. package/dist/typeServer/stubGenerator.js.map +1 -1
  147. package/package.json +1 -1
  148. package/dist/analyzer/typeStubWriter.d.ts +0 -17
  149. package/dist/analyzer/typeStubWriter.js.map +0 -1
@@ -2260,9 +2260,17 @@ function createTypeEvaluator(importLookup, evaluatorOptions, wrapWithLogger) {
2260
2260
  }
2261
2261
  const iterReturnType = getTypeOfMagicMethodCall(subtype, iterMethodName, [], errorNode)?.type;
2262
2262
  if (!iterReturnType) {
2263
- // There was no __iter__. See if we can fall back to
2264
- // the __getitem__ method instead.
2263
+ // There was no callable __iter__. The legacy sequence protocol
2264
+ // falls back to __getitem__, but CPython does that only when
2265
+ // __iter__ is missing. An explicit `__iter__ = None` (or any
2266
+ // non-callable __iter__) makes the object not iterable.
2267
+ let hasExplicitIterMember = false;
2265
2268
  if (!isAsync && (0, types_1.isClassInstance)(subtype)) {
2269
+ hasExplicitIterMember = !!(0, typeUtils_1.lookUpObjectMember)(subtype, iterMethodName, 16 /* MemberAccessFlags.SkipInstanceMembers */ |
2270
+ 512 /* MemberAccessFlags.SkipAttributeAccessOverride */ |
2271
+ 4 /* MemberAccessFlags.SkipObjectBaseClass */);
2272
+ }
2273
+ if (!isAsync && (0, types_1.isClassInstance)(subtype) && !hasExplicitIterMember) {
2266
2274
  const getItemReturnType = getTypeOfMagicMethodCall(subtype, '__getitem__', [
2267
2275
  {
2268
2276
  type: prefetched?.intClass && (0, types_1.isInstantiableClass)(prefetched.intClass)
@@ -8167,7 +8175,9 @@ function createTypeEvaluator(importLookup, evaluatorOptions, wrapWithLogger) {
8167
8175
  if (expandedCallType.shared.fullName === 'builtins.sentinel' ||
8168
8176
  expandedCallType.shared.fullName === 'typing_extensions.sentinel' ||
8169
8177
  expandedCallType.shared.fullName === 'typing_extensions.Sentinel') {
8170
- return { returnType: (0, sentinel_1.createSentinelType)(evaluatorInterface, errorNode, argList, nodeInfo) };
8178
+ return {
8179
+ returnType: (0, sentinel_1.createSentinelType)(evaluatorInterface, errorNode, argList, expandedCallType, nodeInfo),
8180
+ };
8171
8181
  }
8172
8182
  if (types_1.ClassType.isSpecialFormClass(expandedCallType)) {
8173
8183
  addDiagnostic(diagnosticRules_1.DiagnosticRule.reportCallIssue, localize_1.LocMessage.typeNotIntantiable().format({ type: className }), errorNode);
@@ -8233,6 +8243,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions, wrapWithLogger) {
8233
8243
  const overloadsUsedForCall = constructorResult.overloadsUsedForCall;
8234
8244
  const argumentErrors = constructorResult.argumentErrors;
8235
8245
  const isTypeIncomplete = constructorResult.isTypeIncomplete;
8246
+ const usesBuiltInTypeNew = overloadsUsedForCall?.some((overload) => types_1.FunctionType.isBuiltIn(overload, 'builtins.type.__new__'));
8236
8247
  let returnType = constructorResult.returnType;
8237
8248
  // If the expandedCallType originated from a TypeVar, convert
8238
8249
  // the constructed type back to the TypeVar. For example, if
@@ -8264,10 +8275,23 @@ function createTypeEvaluator(importLookup, evaluatorOptions, wrapWithLogger) {
8264
8275
  }
8265
8276
  }
8266
8277
  const newClassType = types_1.ClassType.createInstantiable(newClassName, '', '', nodeInfo.getFileInfo(errorNode).fileUri, 0 /* ClassTypeFlags.None */, ParseTreeUtils.getTypeSourceId(errorNode), types_1.ClassType.cloneAsInstantiable(returnType), types_1.ClassType.cloneAsInstantiable(returnType));
8267
- newClassType.shared.baseClasses.push(getBuiltInType(errorNode, 'object'));
8278
+ if (usesBuiltInTypeNew && argList.length >= 2) {
8279
+ const baseTupleType = getTypeOfArg(argList[1], /* inferenceContext */ undefined).type;
8280
+ if ((0, types_1.isClassInstance)(baseTupleType)) {
8281
+ const baseClasses = getBaseClassesFromTypeCall(baseTupleType);
8282
+ if (baseClasses) {
8283
+ newClassType.shared.baseClasses.push(...baseClasses);
8284
+ }
8285
+ }
8286
+ }
8287
+ if (newClassType.shared.baseClasses.length === 0) {
8288
+ newClassType.shared.baseClasses.push(getBuiltInType(errorNode, 'object'));
8289
+ }
8268
8290
  newClassType.shared.effectiveMetaclass = expandedCallType;
8269
8291
  newClassType.shared.declaration = returnType.shared.declaration;
8270
- (0, typeUtils_1.computeMroLinearization)(newClassType);
8292
+ if (!(0, typeUtils_1.computeMroLinearization)(newClassType)) {
8293
+ addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.methodOrdering(), errorNode);
8294
+ }
8271
8295
  returnType = newClassType;
8272
8296
  }
8273
8297
  return { returnType, overloadsUsedForCall, argumentErrors, isTypeIncomplete };
@@ -10435,6 +10459,15 @@ function createTypeEvaluator(importLookup, evaluatorOptions, wrapWithLogger) {
10435
10459
  }
10436
10460
  return classType;
10437
10461
  }
10462
+ function getBaseClassesFromTypeCall(baseTupleType) {
10463
+ if (!(0, typeUtils_1.isTupleClass)(baseTupleType) || baseTupleType.priv.tupleTypeArgs === undefined) {
10464
+ return undefined;
10465
+ }
10466
+ return baseTupleType.priv.tupleTypeArgs.map((typeArg) => {
10467
+ const specializedType = makeTopLevelTypeVarsConcrete(typeArg.type);
10468
+ return (0, typeUtils_1.isEffectivelyInstantiable)(specializedType) ? specializedType : types_1.UnknownType.create();
10469
+ });
10470
+ }
10438
10471
  // Implements the semantics of the multi-parameter variant of the "type" call.
10439
10472
  function createClassFromMetaclass(errorNode, argList, metaclass) {
10440
10473
  const fileInfo = nodeInfo.getFileInfo(errorNode);
@@ -10443,21 +10476,16 @@ function createTypeEvaluator(importLookup, evaluatorOptions, wrapWithLogger) {
10443
10476
  return undefined;
10444
10477
  }
10445
10478
  const className = arg0Type.priv.literalValue || '_';
10446
- const arg1Type = getTypeOfArg(argList[1], /* inferenceContext */ undefined).type;
10447
- // TODO - properly handle case where tuple of base classes is provided.
10448
- if (!(0, types_1.isClassInstance)(arg1Type) || !(0, typeUtils_1.isTupleClass)(arg1Type) || arg1Type.priv.tupleTypeArgs === undefined) {
10479
+ const baseTupleType = getTypeOfArg(argList[1], /* inferenceContext */ undefined).type;
10480
+ if (!(0, types_1.isClassInstance)(baseTupleType)) {
10449
10481
  return undefined;
10450
10482
  }
10451
- const classType = types_1.ClassType.createInstantiable(className, ParseTreeUtils.getClassFullName(errorNode, fileInfo.moduleName, className), fileInfo.moduleName, fileInfo.fileUri, 4194304 /* ClassTypeFlags.ValidTypeAliasClass */, ParseTreeUtils.getTypeSourceId(errorNode), metaclass, arg1Type.shared.effectiveMetaclass);
10452
- arg1Type.priv.tupleTypeArgs.forEach((typeArg) => {
10453
- const specializedType = makeTopLevelTypeVarsConcrete(typeArg.type);
10454
- if ((0, typeUtils_1.isEffectivelyInstantiable)(specializedType)) {
10455
- classType.shared.baseClasses.push(specializedType);
10456
- }
10457
- else {
10458
- classType.shared.baseClasses.push(types_1.UnknownType.create());
10459
- }
10460
- });
10483
+ const baseClasses = getBaseClassesFromTypeCall(baseTupleType);
10484
+ if (!baseClasses) {
10485
+ return undefined;
10486
+ }
10487
+ const classType = types_1.ClassType.createInstantiable(className, ParseTreeUtils.getClassFullName(errorNode, fileInfo.moduleName, className), fileInfo.moduleName, fileInfo.fileUri, 4194304 /* ClassTypeFlags.ValidTypeAliasClass */, ParseTreeUtils.getTypeSourceId(errorNode), metaclass, baseTupleType.shared.effectiveMetaclass);
10488
+ classType.shared.baseClasses.push(...baseClasses);
10461
10489
  if (!(0, typeUtils_1.computeMroLinearization)(classType)) {
10462
10490
  addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.methodOrdering(), errorNode);
10463
10491
  }
@@ -20055,6 +20083,24 @@ function createTypeEvaluator(importLookup, evaluatorOptions, wrapWithLogger) {
20055
20083
  srcDetails.positionOnlyParamCount = Math.max(0, srcDetails.params.findIndex((p) => p.kind !== parameterUtils_1.ParamKind.Positional || p.param.category !== 0 /* ParamCategory.Simple */ || !!p.defaultType));
20056
20084
  }
20057
20085
  }
20086
+ // Determines whether the source's variadic **kwargs keyword parameter
20087
+ // is assignable to the keyword form of a destination positional-or-keyword
20088
+ // parameter.
20089
+ function assignNamedParam(destDetails, srcDetails, paramIndex, diag, constraints, flags, recursionCount) {
20090
+ const destParam = destDetails.params[paramIndex];
20091
+ if (srcDetails.kwargsIndex === undefined) {
20092
+ diag?.addMessage(localize_1.LocAddendum.namedParamMissingInSource().format({
20093
+ name: destParam.param.name ?? '',
20094
+ }));
20095
+ return false;
20096
+ }
20097
+ else if (!assignParam(destParam.type, srcDetails.params[srcDetails.kwargsIndex].type, paramIndex, diag?.createAddendum(), constraints, flags, recursionCount)) {
20098
+ return (flags & 32 /* AssignTypeFlags.PartialOverloadOverlap */) !== 0;
20099
+ }
20100
+ else {
20101
+ return true;
20102
+ }
20103
+ }
20058
20104
  function assignFunction(destType, srcType, diag, constraints, flags, recursionCount) {
20059
20105
  let canAssign = true;
20060
20106
  const checkReturnType = (flags & 64 /* AssignTypeFlags.SkipReturnTypeCheck */) === 0;
@@ -20166,14 +20212,12 @@ function createTypeEvaluator(importLookup, evaluatorOptions, wrapWithLogger) {
20166
20212
  else if (destParam.kind !== parameterUtils_1.ParamKind.Positional &&
20167
20213
  destParam.kind !== parameterUtils_1.ParamKind.ExpandedArgs &&
20168
20214
  srcParam.kind === parameterUtils_1.ParamKind.Positional &&
20169
- srcParamDetails.kwargsIndex === undefined &&
20170
20215
  !srcParamDetails.params.some((p) => p.kind === parameterUtils_1.ParamKind.Keyword &&
20171
20216
  p.param.category === 0 /* ParamCategory.Simple */ &&
20172
20217
  p.param.name === destParam.param.name)) {
20173
- diag?.addMessage(localize_1.LocAddendum.namedParamMissingInSource().format({
20174
- name: destParam.param.name ?? '',
20175
- }));
20176
- canAssign = false;
20218
+ if (!assignNamedParam(destParamDetails, srcParamDetails, paramIndex, diag, constraints, flags, recursionCount)) {
20219
+ canAssign = false;
20220
+ }
20177
20221
  }
20178
20222
  }
20179
20223
  if (!types_1.FunctionType.isGradualCallableForm(destType) &&
@@ -20259,13 +20303,10 @@ function createTypeEvaluator(importLookup, evaluatorOptions, wrapWithLogger) {
20259
20303
  canAssign = false;
20260
20304
  }
20261
20305
  const destParamKind = destParamDetails.params[paramIndex].kind;
20262
- if (destParamKind !== parameterUtils_1.ParamKind.Positional &&
20263
- destParamKind !== parameterUtils_1.ParamKind.ExpandedArgs &&
20264
- srcParamDetails.kwargsIndex === undefined) {
20265
- diag?.addMessage(localize_1.LocAddendum.namedParamMissingInSource().format({
20266
- name: destParamDetails.params[paramIndex].param.name ?? '',
20267
- }));
20268
- canAssign = false;
20306
+ if (destParamKind !== parameterUtils_1.ParamKind.Positional && destParamKind !== parameterUtils_1.ParamKind.ExpandedArgs) {
20307
+ if (!assignNamedParam(destParamDetails, srcParamDetails, paramIndex, diag, constraints, flags, recursionCount)) {
20308
+ canAssign = false;
20309
+ }
20269
20310
  }
20270
20311
  }
20271
20312
  }
@@ -20359,7 +20400,10 @@ function createTypeEvaluator(importLookup, evaluatorOptions, wrapWithLogger) {
20359
20400
  srcParamInfo.kind === parameterUtils_1.ParamKind.Positional) {
20360
20401
  return;
20361
20402
  }
20362
- const destParamInfo = destParamMap.get(srcParamInfo.param.name);
20403
+ const destParamInfo = destParamMap.get(srcParamInfo.param.name) ??
20404
+ destParamDetails.params.find((paramInfo) => paramInfo.param.name === srcParamInfo.param.name &&
20405
+ paramInfo.kind === parameterUtils_1.ParamKind.Standard &&
20406
+ paramInfo.param.category === 0 /* ParamCategory.Simple */);
20363
20407
  const paramDiag = diag?.createAddendum();
20364
20408
  const srcParamType = srcParamInfo.type;
20365
20409
  if (!destParamInfo) {
@@ -20390,6 +20434,20 @@ function createTypeEvaluator(importLookup, evaluatorOptions, wrapWithLogger) {
20390
20434
  }
20391
20435
  return;
20392
20436
  }
20437
+ // A keyword-only source parameter was matched to a positional-or-keyword
20438
+ // dest parameter. The dest parameter can be called positionally, but a
20439
+ // keyword-only source parameter with no default would be left unsatisfied.
20440
+ if (destParamInfo.kind === parameterUtils_1.ParamKind.Standard &&
20441
+ srcParamInfo.kind === parameterUtils_1.ParamKind.Keyword &&
20442
+ !srcParamInfo.defaultType) {
20443
+ if ((flags & 32 /* AssignTypeFlags.PartialOverloadOverlap */) === 0) {
20444
+ paramDiag?.addMessage(localize_1.LocAddendum.functionParamDefaultMissing().format({
20445
+ name: srcParamInfo.param.name,
20446
+ }));
20447
+ canAssign = false;
20448
+ return;
20449
+ }
20450
+ }
20393
20451
  // If we're performing a partial overload match and both the source
20394
20452
  // and dest parameters provide defaults, assume that there could
20395
20453
  // be a match.
@@ -20412,7 +20470,10 @@ function createTypeEvaluator(importLookup, evaluatorOptions, wrapWithLogger) {
20412
20470
  destType: printType(srcParamType),
20413
20471
  }));
20414
20472
  }
20415
- canAssign = false;
20473
+ if (destParamInfo.kind !== parameterUtils_1.ParamKind.Standard ||
20474
+ (flags & 32 /* AssignTypeFlags.PartialOverloadOverlap */) === 0) {
20475
+ canAssign = false;
20476
+ }
20416
20477
  }
20417
20478
  if (destParamInfo.defaultType && !srcParamInfo.defaultType) {
20418
20479
  diag?.createAddendum().addMessage(localize_1.LocAddendum.functionParamDefaultMissing().format({