Improved error message for set invariance type violations. This comes from mypy issue https://github.com/python/mypy/issues/16631.

This commit is contained in:
Eric Traut 2023-12-07 10:52:16 -08:00
parent a5b352d929
commit 9c8a0f1a4a
4 changed files with 5 additions and 1 deletions

View File

@ -75,7 +75,7 @@ Most mutable container types also have immutable counterparts.
| ----------------- | -------------- |
| list | Sequence |
| dict | Mapping |
| set | AbstractSet |
| set | Container |
| n/a | tuple |

View File

@ -22375,6 +22375,8 @@ export function createTypeEvaluator(importLookup: ImportLookup, evaluatorOptions
childDiag.addMessage(Localizer.DiagnosticAddendum.invariantSuggestionDict());
} else if (ClassType.isBuiltIn(destType, 'list')) {
childDiag.addMessage(Localizer.DiagnosticAddendum.invariantSuggestionList());
} else if (ClassType.isBuiltIn(destType, 'set')) {
childDiag.addMessage(Localizer.DiagnosticAddendum.invariantSuggestionSet());
}
}
} else {

View File

@ -1208,6 +1208,7 @@ export namespace Localizer {
new ParameterizedString<{ name: string }>(getRawString('DiagnosticAddendum.initSubclassLocation'));
export const invariantSuggestionDict = () => getRawString('DiagnosticAddendum.invariantSuggestionDict');
export const invariantSuggestionList = () => getRawString('DiagnosticAddendum.invariantSuggestionList');
export const invariantSuggestionSet = () => getRawString('DiagnosticAddendum.invariantSuggestionSet');
export const functionTooManyParams = () =>
new ParameterizedString<{ expected: number; received: number }>(
getRawString('DiagnosticAddendum.functionTooManyParams')

View File

@ -622,6 +622,7 @@
"initSubclassLocation": "The __init_subclass__ method is defined in class \"{name}\"",
"invariantSuggestionDict": "Consider switching from \"dict\" to \"Mapping\" which is covariant in the value type",
"invariantSuggestionList": "Consider switching from \"list\" to \"Sequence\" which is covariant",
"invariantSuggestionSet": "Consider switching from \"set\" to \"Container\" which is covariant",
"kwargsParamMissing": "Parameter \"**{paramName}\" has no corresponding parameter",
"listAssignmentMismatch": "Type \"{type}\" is incompatible with target list",
"literalAssignmentMismatch": "\"{sourceType}\" cannot be assigned to type \"{destType}\"",