Skip to content

Commit

Permalink
Fixed a bug that results in a false negative when overloads overlap d…
Browse files Browse the repository at this point in the history
…ue to default values. (#8844)
  • Loading branch information
erictraut authored Aug 27, 2024
1 parent 2e11a3c commit 79a46a8
Show file tree
Hide file tree
Showing 3 changed files with 129 additions and 164 deletions.
44 changes: 35 additions & 9 deletions packages/pyright-internal/src/analyzer/typeEvaluator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24995,13 +24995,24 @@ export function createTypeEvaluator(
}
}

if (destParam.defaultType && !srcParam.defaultType && paramIndex !== srcParamDetails.argsIndex) {
diag?.createAddendum().addMessage(
LocAddendum.functionParamDefaultMissing().format({
name: srcParamName,
})
);
canAssign = false;
if (destParam.defaultType) {
if (!srcParam.defaultType && paramIndex !== srcParamDetails.argsIndex) {
diag?.createAddendum().addMessage(
LocAddendum.functionParamDefaultMissing().format({
name: srcParamName,
})
);
canAssign = false;
}

// If we're performing a partial overload match and both the source
// and dest parameters provide defaults, assume that there could
// be a match.
if ((flags & AssignTypeFlags.PartialOverloadOverlap) !== 0) {
if (srcParam.defaultType) {
continue;
}
}
}

// Handle the special case of an overloaded __init__ method whose self
Expand Down Expand Up @@ -25122,7 +25133,9 @@ export function createTypeEvaluator(
recursionCount
)
) {
canAssign = false;
if ((flags & AssignTypeFlags.PartialOverloadOverlap) === 0) {
canAssign = false;
}
}

continue;
Expand Down Expand Up @@ -25203,6 +25216,17 @@ export function createTypeEvaluator(
adjDestPositionalCount--;
}

// If we're doing a partial overload overlap check, ignore dest positional
// params with default values.
if ((flags & AssignTypeFlags.PartialOverloadOverlap) !== 0) {
while (
adjDestPositionalCount > 0 &&
destParamDetails.params[adjDestPositionalCount - 1].defaultType
) {
adjDestPositionalCount--;
}
}

if (srcPositionalCount < adjDestPositionalCount) {
diag?.addMessage(
LocAddendum.functionTooManyParams().format({
Expand Down Expand Up @@ -25343,7 +25367,9 @@ export function createTypeEvaluator(
recursionCount
)
) {
canAssign = false;
if ((flags & AssignTypeFlags.PartialOverloadOverlap) === 0) {
canAssign = false;
}
}
}
} else {
Expand Down
Loading

0 comments on commit 79a46a8

Please sign in to comment.