@zzzen/pyright-internal 1.2.0-dev.20231001 → 1.2.0-dev.20231015
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.
- package/dist/analyzer/checker.d.ts +3 -1
- package/dist/analyzer/checker.js +82 -41
- package/dist/analyzer/checker.js.map +1 -1
- package/dist/analyzer/codeFlowEngine.js +11 -4
- package/dist/analyzer/codeFlowEngine.js.map +1 -1
- package/dist/analyzer/constraintSolver.js +208 -151
- package/dist/analyzer/constraintSolver.js.map +1 -1
- package/dist/analyzer/decorators.d.ts +6 -1
- package/dist/analyzer/decorators.js +34 -25
- package/dist/analyzer/decorators.js.map +1 -1
- package/dist/analyzer/parseTreeUtils.d.ts +2 -1
- package/dist/analyzer/parseTreeUtils.js +21 -2
- package/dist/analyzer/parseTreeUtils.js.map +1 -1
- package/dist/analyzer/program.js +7 -1
- package/dist/analyzer/program.js.map +1 -1
- package/dist/analyzer/properties.d.ts +2 -2
- package/dist/analyzer/properties.js +8 -2
- package/dist/analyzer/properties.js.map +1 -1
- package/dist/analyzer/protocols.js +102 -149
- package/dist/analyzer/protocols.js.map +1 -1
- package/dist/analyzer/scopeUtils.js +3 -2
- package/dist/analyzer/scopeUtils.js.map +1 -1
- package/dist/analyzer/service.js +13 -13
- package/dist/analyzer/service.js.map +1 -1
- package/dist/analyzer/sourceFile.d.ts +3 -2
- package/dist/analyzer/sourceFile.js +21 -7
- package/dist/analyzer/sourceFile.js.map +1 -1
- package/dist/analyzer/sourceFileInfo.d.ts +4 -4
- package/dist/analyzer/sourceFileInfo.js +2 -0
- package/dist/analyzer/sourceFileInfo.js.map +1 -1
- package/dist/analyzer/staticExpressions.js +2 -1
- package/dist/analyzer/staticExpressions.js.map +1 -1
- package/dist/analyzer/typeEvaluator.d.ts +2 -1
- package/dist/analyzer/typeEvaluator.js +171 -244
- package/dist/analyzer/typeEvaluator.js.map +1 -1
- package/dist/analyzer/typeEvaluatorTypes.d.ts +10 -2
- package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
- package/dist/analyzer/typeGuards.d.ts +1 -1
- package/dist/analyzer/typeGuards.js +127 -55
- package/dist/analyzer/typeGuards.js.map +1 -1
- package/dist/analyzer/typeUtils.d.ts +4 -1
- package/dist/analyzer/typeUtils.js +82 -8
- package/dist/analyzer/typeUtils.js.map +1 -1
- package/dist/analyzer/typeVarContext.d.ts +4 -1
- package/dist/analyzer/typeVarContext.js +7 -2
- package/dist/analyzer/typeVarContext.js.map +1 -1
- package/dist/analyzer/types.d.ts +5 -2
- package/dist/analyzer/types.js +25 -14
- package/dist/analyzer/types.js.map +1 -1
- package/dist/backgroundThreadBase.js +5 -1
- package/dist/backgroundThreadBase.js.map +1 -1
- package/dist/commands/dumpFileDebugInfoCommand.js +1 -1
- package/dist/commands/dumpFileDebugInfoCommand.js.map +1 -1
- package/dist/common/configOptions.d.ts +2 -1
- package/dist/common/configOptions.js +9 -5
- package/dist/common/configOptions.js.map +1 -1
- package/dist/common/extensibility.d.ts +19 -8
- package/dist/common/extensibility.js +6 -7
- package/dist/common/extensibility.js.map +1 -1
- package/dist/common/fileSystem.d.ts +9 -4
- package/dist/common/fileSystem.js +8 -1
- package/dist/common/fileSystem.js.map +1 -1
- package/dist/common/pathUtils.d.ts +5 -4
- package/dist/common/pathUtils.js +13 -7
- package/dist/common/pathUtils.js.map +1 -1
- package/dist/common/pythonVersion.d.ts +1 -1
- package/dist/common/pythonVersion.js +1 -1
- package/dist/common/realFileSystem.d.ts +7 -1
- package/dist/common/realFileSystem.js +33 -37
- package/dist/common/realFileSystem.js.map +1 -1
- package/dist/common/serviceProvider.d.ts +1 -1
- package/dist/common/serviceProvider.js.map +1 -1
- package/dist/common/serviceProviderExtensions.d.ts +5 -3
- package/dist/common/serviceProviderExtensions.js +6 -1
- package/dist/common/serviceProviderExtensions.js.map +1 -1
- package/dist/languageServerBase.d.ts +6 -2
- package/dist/languageServerBase.js +31 -4
- package/dist/languageServerBase.js.map +1 -1
- package/dist/languageService/autoImporter.d.ts +1 -1
- package/dist/languageService/callHierarchyProvider.d.ts +0 -1
- package/dist/languageService/callHierarchyProvider.js +33 -16
- package/dist/languageService/callHierarchyProvider.js.map +1 -1
- package/dist/languageService/completionProvider.d.ts +2 -2
- package/dist/languageService/completionProvider.js +20 -23
- package/dist/languageService/completionProvider.js.map +1 -1
- package/dist/languageService/definitionProvider.js +4 -5
- package/dist/languageService/definitionProvider.js.map +1 -1
- package/dist/languageService/documentHighlightProvider.js +5 -2
- package/dist/languageService/documentHighlightProvider.js.map +1 -1
- package/dist/languageService/documentSymbolCollector.d.ts +32 -23
- package/dist/languageService/documentSymbolCollector.js +170 -267
- package/dist/languageService/documentSymbolCollector.js.map +1 -1
- package/dist/languageService/hoverProvider.js +1 -5
- package/dist/languageService/hoverProvider.js.map +1 -1
- package/dist/languageService/navigationUtils.d.ts +1 -1
- package/dist/languageService/navigationUtils.js +2 -2
- package/dist/languageService/navigationUtils.js.map +1 -1
- package/dist/languageService/referencesProvider.d.ts +15 -8
- package/dist/languageService/referencesProvider.js +41 -20
- package/dist/languageService/referencesProvider.js.map +1 -1
- package/dist/languageService/renameProvider.js +3 -3
- package/dist/languageService/renameProvider.js.map +1 -1
- package/dist/localization/localize.d.ts +21 -0
- package/dist/localization/localize.js +7 -0
- package/dist/localization/localize.js.map +1 -1
- package/dist/localization/package.nls.cs.json +5 -0
- package/dist/localization/package.nls.de.json +5 -0
- package/dist/localization/package.nls.en-us.json +7 -0
- package/dist/localization/package.nls.es.json +5 -0
- package/dist/localization/package.nls.fr.json +5 -0
- package/dist/localization/package.nls.it.json +5 -0
- package/dist/localization/package.nls.ja.json +5 -0
- package/dist/localization/package.nls.ko.json +5 -0
- package/dist/localization/package.nls.pl.json +5 -0
- package/dist/localization/package.nls.pt-br.json +5 -0
- package/dist/localization/package.nls.qps-ploc.json +5 -0
- package/dist/localization/package.nls.ru.json +5 -0
- package/dist/localization/package.nls.tr.json +5 -0
- package/dist/localization/package.nls.zh-cn.json +5 -0
- package/dist/localization/package.nls.zh-tw.json +5 -0
- package/dist/parser/stringTokenUtils.js +9 -5
- package/dist/parser/stringTokenUtils.js.map +1 -1
- package/dist/parser/tokenizer.d.ts +1 -0
- package/dist/parser/tokenizer.js +5 -5
- package/dist/parser/tokenizer.js.map +1 -1
- package/dist/pyright.js +2 -1
- package/dist/pyright.js.map +1 -1
- package/dist/pyrightFileSystem.d.ts +0 -1
- package/dist/pyrightFileSystem.js +0 -3
- package/dist/pyrightFileSystem.js.map +1 -1
- package/dist/readonlyAugmentedFileSystem.d.ts +1 -4
- package/dist/readonlyAugmentedFileSystem.js +0 -10
- package/dist/readonlyAugmentedFileSystem.js.map +1 -1
- package/dist/server.js +2 -1
- package/dist/server.js.map +1 -1
- package/dist/tests/checker.test.js +8 -0
- package/dist/tests/checker.test.js.map +1 -1
- package/dist/tests/config.test.js +5 -3
- package/dist/tests/config.test.js.map +1 -1
- package/dist/tests/documentSymbolCollector.test.js +8 -363
- package/dist/tests/documentSymbolCollector.test.js.map +1 -1
- package/dist/tests/fourslash/completions.indexer.keys.getitem.fourslash.js +56 -10
- package/dist/tests/fourslash/completions.indexer.keys.getitem.fourslash.js.map +1 -1
- package/dist/tests/harness/fourslash/testState.d.ts +5 -2
- package/dist/tests/harness/fourslash/testState.js +13 -14
- package/dist/tests/harness/fourslash/testState.js.map +1 -1
- package/dist/tests/harness/vfs/filesystem.d.ts +2 -2
- package/dist/tests/importResolver.test.js +0 -9
- package/dist/tests/importResolver.test.js.map +1 -1
- package/dist/tests/pathUtils.test.js +2 -2
- package/dist/tests/pathUtils.test.js.map +1 -1
- package/dist/tests/testStateUtils.d.ts +3 -0
- package/dist/tests/testStateUtils.js +25 -1
- package/dist/tests/testStateUtils.js.map +1 -1
- package/dist/tests/typeEvaluator1.test.js +5 -1
- package/dist/tests/typeEvaluator1.test.js.map +1 -1
- package/dist/tests/typeEvaluator2.test.js +13 -5
- package/dist/tests/typeEvaluator2.test.js.map +1 -1
- package/dist/tests/typeEvaluator3.test.js +12 -4
- package/dist/tests/typeEvaluator3.test.js.map +1 -1
- package/dist/tests/typeEvaluator4.test.js +17 -9
- package/dist/tests/typeEvaluator4.test.js.map +1 -1
- package/dist/tests/typeEvaluator5.test.js +4 -2
- package/dist/tests/typeEvaluator5.test.js.map +1 -1
- package/dist/workspaceFactory.d.ts +2 -1
- package/dist/workspaceFactory.js +3 -1
- package/dist/workspaceFactory.js.map +1 -1
- package/package.json +1 -1
- package/dist/tests/fourslash/showcallhierarchy.incomingCalls.overriddenFunction.fourslash.d.ts +0 -1
- package/dist/tests/fourslash/showcallhierarchy.incomingCalls.overriddenFunction.fourslash.js +0 -40
- package/dist/tests/fourslash/showcallhierarchy.incomingCalls.overriddenFunction.fourslash.js.map +0 -1
@@ -103,7 +103,9 @@ export declare class Checker extends ParseTreeWalker {
|
|
103
103
|
private _validateIsInstanceCall;
|
104
104
|
private _isTypeSupportedTypeForIsInstance;
|
105
105
|
private _isSymbolPrivate;
|
106
|
-
private
|
106
|
+
private _reportDeprecatedUseForMemberAccess;
|
107
|
+
private _reportDeprecatedUseForType;
|
108
|
+
private _reportDeprecatedDiagnostic;
|
107
109
|
private _reportUnboundName;
|
108
110
|
private _conditionallyReportShadowedModule;
|
109
111
|
private _conditionallyReportShadowedImport;
|
package/dist/analyzer/checker.js
CHANGED
@@ -168,14 +168,12 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
168
168
|
// have the proper variance.
|
169
169
|
this._validateProtocolTypeParamVariance(node, classTypeResult.classType);
|
170
170
|
}
|
171
|
-
// Skip the
|
172
|
-
//
|
173
|
-
// check because class variables declared in a stub file are
|
174
|
-
// interpreted as instance variables.
|
171
|
+
// Skip the slots check because class variables declared in a stub
|
172
|
+
// file are interpreted as instance variables.
|
175
173
|
if (!this._fileInfo.isStubFile) {
|
176
|
-
this._validateBaseClassOverrides(classTypeResult.classType);
|
177
174
|
this._validateSlotsClassVarConflict(classTypeResult.classType);
|
178
175
|
}
|
176
|
+
this._validateBaseClassOverrides(classTypeResult.classType);
|
179
177
|
this._validateMultipleInheritanceBaseClasses(classTypeResult.classType, node.name);
|
180
178
|
this._validateMultipleInheritanceCompatibility(classTypeResult.classType, node.name);
|
181
179
|
this._validateConstructorConsistency(classTypeResult.classType);
|
@@ -590,8 +588,11 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
590
588
|
return true;
|
591
589
|
}
|
592
590
|
visitYield(node) {
|
593
|
-
|
594
|
-
|
591
|
+
var _a;
|
592
|
+
const yieldTypeResult = node.expression
|
593
|
+
? this._evaluator.getTypeResult(node.expression)
|
594
|
+
: { type: types_1.NoneType.createInstance() };
|
595
|
+
this._validateYieldType(node, (_a = yieldTypeResult === null || yieldTypeResult === void 0 ? void 0 : yieldTypeResult.type) !== null && _a !== void 0 ? _a : types_1.UnknownType.create(), yieldTypeResult === null || yieldTypeResult === void 0 ? void 0 : yieldTypeResult.expectedTypeDiagAddendum);
|
595
596
|
return true;
|
596
597
|
}
|
597
598
|
visitYieldFrom(node) {
|
@@ -619,7 +620,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
619
620
|
(_d = (_c = this._evaluator.getTypeOfIterator({ type: yieldFromType }, /* isAsync */ false, node)) === null || _c === void 0 ? void 0 : _c.type) !== null && _d !== void 0 ? _d : types_1.UnknownType.create();
|
620
621
|
}
|
621
622
|
}
|
622
|
-
this._validateYieldType(node, yieldType, sendType);
|
623
|
+
this._validateYieldType(node, yieldType, /* expectedDiagAddendum */ undefined, sendType);
|
623
624
|
return true;
|
624
625
|
}
|
625
626
|
visitRaise(node) {
|
@@ -892,7 +893,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
892
893
|
}
|
893
894
|
// Report the use of a deprecated symbol.
|
894
895
|
const type = this._evaluator.getType(node);
|
895
|
-
this.
|
896
|
+
this._reportDeprecatedUseForType(node, type);
|
896
897
|
return true;
|
897
898
|
}
|
898
899
|
visitDel(node) {
|
@@ -903,9 +904,14 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
903
904
|
return false;
|
904
905
|
}
|
905
906
|
visitMemberAccess(node) {
|
906
|
-
|
907
|
+
var _a;
|
908
|
+
const typeResult = this._evaluator.getTypeResult(node);
|
909
|
+
const type = (_a = typeResult === null || typeResult === void 0 ? void 0 : typeResult.type) !== null && _a !== void 0 ? _a : types_1.UnknownType.create();
|
907
910
|
const leftExprType = this._evaluator.getType(node.leftExpression);
|
908
|
-
this.
|
911
|
+
this._reportDeprecatedUseForType(node.memberName, type, leftExprType && (0, types_1.isModule)(leftExprType) && leftExprType.moduleName === 'typing');
|
912
|
+
if (typeResult === null || typeResult === void 0 ? void 0 : typeResult.memberAccessDeprecationInfo) {
|
913
|
+
this._reportDeprecatedUseForMemberAccess(node.memberName, typeResult.memberAccessDeprecationInfo);
|
914
|
+
}
|
909
915
|
this._conditionallyReportPrivateUsage(node.memberName);
|
910
916
|
// Walk the leftExpression but not the memberName.
|
911
917
|
this.walk(node.leftExpression);
|
@@ -977,7 +983,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
977
983
|
}
|
978
984
|
}
|
979
985
|
const type = this._evaluator.getType((_b = node.alias) !== null && _b !== void 0 ? _b : node.name);
|
980
|
-
this.
|
986
|
+
this._reportDeprecatedUseForType(node.name, type, isImportFromTyping);
|
981
987
|
return false;
|
982
988
|
}
|
983
989
|
visitModuleName(node) {
|
@@ -2541,7 +2547,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2541
2547
|
const filterType = (varType) => {
|
2542
2548
|
const filteredTypes = [];
|
2543
2549
|
for (const filterType of classTypeList) {
|
2544
|
-
const filterIsSuperclass = (0, typeGuards_1.isIsinstanceFilterSuperclass)(this._evaluator, varType, filterType, filterType, isInstanceCheck);
|
2550
|
+
const filterIsSuperclass = (0, typeGuards_1.isIsinstanceFilterSuperclass)(this._evaluator, varType, varType, filterType, filterType, isInstanceCheck);
|
2545
2551
|
const filterIsSubclass = (0, typeGuards_1.isIsinstanceFilterSubclass)(this._evaluator, varType, filterType, isInstanceCheck);
|
2546
2552
|
// Normally, a class should never be both a subclass and a
|
2547
2553
|
// superclass. However, this can happen if one of the classes
|
@@ -2648,7 +2654,9 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2648
2654
|
}
|
2649
2655
|
break;
|
2650
2656
|
case 5 /* Function */:
|
2651
|
-
|
2657
|
+
if (!types_1.TypeBase.isInstantiable(subtype) || subtype.isCallableWithTypeArgs) {
|
2658
|
+
isSupported = false;
|
2659
|
+
}
|
2652
2660
|
break;
|
2653
2661
|
case 9 /* Union */:
|
2654
2662
|
isSupported = this._isTypeSupportedTypeForIsInstance(subtype, isInstanceCheck);
|
@@ -2677,7 +2685,35 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2677
2685
|
}
|
2678
2686
|
return false;
|
2679
2687
|
}
|
2680
|
-
|
2688
|
+
_reportDeprecatedUseForMemberAccess(node, info) {
|
2689
|
+
let errorMessage;
|
2690
|
+
if (info.accessType === 'property') {
|
2691
|
+
if (info.accessMethod === 'get') {
|
2692
|
+
errorMessage = localize_1.Localizer.Diagnostic.deprecatedPropertyGetter().format({ name: node.value });
|
2693
|
+
}
|
2694
|
+
else if (info.accessMethod === 'set') {
|
2695
|
+
errorMessage = localize_1.Localizer.Diagnostic.deprecatedPropertySetter().format({ name: node.value });
|
2696
|
+
}
|
2697
|
+
else {
|
2698
|
+
errorMessage = localize_1.Localizer.Diagnostic.deprecatedPropertyDeleter().format({ name: node.value });
|
2699
|
+
}
|
2700
|
+
}
|
2701
|
+
else if (info.accessType === 'descriptor') {
|
2702
|
+
if (info.accessMethod === 'get') {
|
2703
|
+
errorMessage = localize_1.Localizer.Diagnostic.deprecatedDescriptorGetter().format({ name: node.value });
|
2704
|
+
}
|
2705
|
+
else if (info.accessMethod === 'set') {
|
2706
|
+
errorMessage = localize_1.Localizer.Diagnostic.deprecatedDescriptorSetter().format({ name: node.value });
|
2707
|
+
}
|
2708
|
+
else {
|
2709
|
+
errorMessage = localize_1.Localizer.Diagnostic.deprecatedDescriptorDeleter().format({ name: node.value });
|
2710
|
+
}
|
2711
|
+
}
|
2712
|
+
if (errorMessage) {
|
2713
|
+
this._reportDeprecatedDiagnostic(node, errorMessage, info.deprecationMessage);
|
2714
|
+
}
|
2715
|
+
}
|
2716
|
+
_reportDeprecatedUseForType(node, type, isImportFromTyping = false) {
|
2681
2717
|
var _a, _b;
|
2682
2718
|
if (!type) {
|
2683
2719
|
return;
|
@@ -2765,16 +2801,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2765
2801
|
}
|
2766
2802
|
});
|
2767
2803
|
if (errorMessage) {
|
2768
|
-
|
2769
|
-
if (deprecatedMessage) {
|
2770
|
-
diag.addMessage(deprecatedMessage);
|
2771
|
-
}
|
2772
|
-
if (this._fileInfo.diagnosticRuleSet.reportDeprecated === 'none') {
|
2773
|
-
this._evaluator.addDeprecated(errorMessage + diag.getString(), node);
|
2774
|
-
}
|
2775
|
-
else {
|
2776
|
-
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportDeprecated, diagnosticRules_1.DiagnosticRule.reportDeprecated, errorMessage + diag.getString(), node);
|
2777
|
-
}
|
2804
|
+
this._reportDeprecatedDiagnostic(node, errorMessage, deprecatedMessage);
|
2778
2805
|
}
|
2779
2806
|
if (this._fileInfo.diagnosticRuleSet.deprecateTypingAliases) {
|
2780
2807
|
const deprecatedForm = (_a = deprecatedSymbols_1.deprecatedAliases.get(node.value)) !== null && _a !== void 0 ? _a : deprecatedSymbols_1.deprecatedSpecialForms.get(node.value);
|
@@ -2801,6 +2828,18 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2801
2828
|
}
|
2802
2829
|
}
|
2803
2830
|
}
|
2831
|
+
_reportDeprecatedDiagnostic(node, diagnosticMessage, deprecatedMessage) {
|
2832
|
+
const diag = new diagnostic_1.DiagnosticAddendum();
|
2833
|
+
if (deprecatedMessage) {
|
2834
|
+
diag.addMessage(deprecatedMessage);
|
2835
|
+
}
|
2836
|
+
if (this._fileInfo.diagnosticRuleSet.reportDeprecated === 'none') {
|
2837
|
+
this._evaluator.addDeprecated(diagnosticMessage + diag.getString(), node);
|
2838
|
+
}
|
2839
|
+
else {
|
2840
|
+
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportDeprecated, diagnosticRules_1.DiagnosticRule.reportDeprecated, diagnosticMessage + diag.getString(), node);
|
2841
|
+
}
|
2842
|
+
}
|
2804
2843
|
_reportUnboundName(node) {
|
2805
2844
|
if (this._fileInfo.diagnosticRuleSet.reportUnboundVariable === 'none') {
|
2806
2845
|
return;
|
@@ -4035,7 +4074,9 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4035
4074
|
if (memberName === '_') {
|
4036
4075
|
return;
|
4037
4076
|
}
|
4038
|
-
const
|
4077
|
+
const baseClass = baseClassAndSymbol.classType;
|
4078
|
+
const childClassSelf = (0, typeUtils_1.selfSpecializeClass)(childClassType);
|
4079
|
+
const baseType = (0, typeUtils_1.partiallySpecializeType)(this._evaluator.getEffectiveTypeOfSymbol(baseClassAndSymbol.symbol), baseClass, types_1.ClassType.cloneAsInstance(childClassSelf));
|
4039
4080
|
if ((0, types_1.isFunction)(baseType) || (0, types_1.isOverloadedFunction)(baseType)) {
|
4040
4081
|
const diagAddendum = new diagnostic_1.DiagnosticAddendum();
|
4041
4082
|
if ((0, types_1.isFunction)(overrideType) || (0, types_1.isOverloadedFunction)(overrideType)) {
|
@@ -4054,7 +4095,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4054
4095
|
if (decl) {
|
4055
4096
|
const diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleMethodOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleMethodOverride, localize_1.Localizer.Diagnostic.incompatibleMethodOverride().format({
|
4056
4097
|
name: memberName,
|
4057
|
-
className:
|
4098
|
+
className: baseClass.details.name,
|
4058
4099
|
}) + diagAddendum.getString(), decl.type === 5 /* Function */ ? decl.node.name : decl.node);
|
4059
4100
|
const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
|
4060
4101
|
if (diag && origDecl) {
|
@@ -4070,7 +4111,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4070
4111
|
if (decl && decl.type === 5 /* Function */) {
|
4071
4112
|
const diag = this._evaluator.addError(localize_1.Localizer.Diagnostic.finalMethodOverride().format({
|
4072
4113
|
name: memberName,
|
4073
|
-
className:
|
4114
|
+
className: baseClass.details.name,
|
4074
4115
|
}), decl.node.name);
|
4075
4116
|
const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
|
4076
4117
|
if (diag && origDecl) {
|
@@ -4084,13 +4125,13 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4084
4125
|
// Special-case overrides of methods in '_TypedDict', since
|
4085
4126
|
// TypedDict attributes aren't manifest as attributes but rather
|
4086
4127
|
// as named keys.
|
4087
|
-
if (!types_1.ClassType.isBuiltIn(
|
4128
|
+
if (!types_1.ClassType.isBuiltIn(baseClass, '_TypedDict')) {
|
4088
4129
|
const decls = overrideSymbol.getDeclarations();
|
4089
4130
|
if (decls.length > 0) {
|
4090
4131
|
const lastDecl = decls[decls.length - 1];
|
4091
4132
|
const diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleMethodOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleMethodOverride, localize_1.Localizer.Diagnostic.methodOverridden().format({
|
4092
4133
|
name: memberName,
|
4093
|
-
className:
|
4134
|
+
className: baseClass.details.name,
|
4094
4135
|
type: this._evaluator.printType(overrideType),
|
4095
4136
|
}), lastDecl.node);
|
4096
4137
|
const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
|
@@ -4108,14 +4149,14 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4108
4149
|
if (decls.length > 0) {
|
4109
4150
|
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleMethodOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleMethodOverride, localize_1.Localizer.Diagnostic.propertyOverridden().format({
|
4110
4151
|
name: memberName,
|
4111
|
-
className:
|
4152
|
+
className: baseClass.details.name,
|
4112
4153
|
}), decls[decls.length - 1].node);
|
4113
4154
|
}
|
4114
4155
|
}
|
4115
4156
|
else {
|
4116
4157
|
const basePropFields = baseType.details.fields;
|
4117
4158
|
const subclassPropFields = overrideType.details.fields;
|
4118
|
-
const baseClassType =
|
4159
|
+
const baseClassType = baseClass;
|
4119
4160
|
['fget', 'fset', 'fdel'].forEach((methodName) => {
|
4120
4161
|
const diagAddendum = new diagnostic_1.DiagnosticAddendum();
|
4121
4162
|
const baseClassPropMethod = basePropFields.get(methodName);
|
@@ -4180,9 +4221,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4180
4221
|
let isInvariant = (primaryDecl === null || primaryDecl === void 0 ? void 0 : primaryDecl.type) === 1 /* Variable */ && !primaryDecl.isFinal;
|
4181
4222
|
// If the entry is a member of a frozen dataclass, it is immutable,
|
4182
4223
|
// so it does not need to be invariant.
|
4183
|
-
if (types_1.ClassType.isFrozenDataClass(
|
4184
|
-
|
4185
|
-
const dataclassEntry = baseClassAndSymbol.classType.details.dataClassEntries.find((entry) => entry.name === memberName);
|
4224
|
+
if (types_1.ClassType.isFrozenDataClass(baseClass) && baseClass.details.dataClassEntries) {
|
4225
|
+
const dataclassEntry = baseClass.details.dataClassEntries.find((entry) => entry.name === memberName);
|
4186
4226
|
if (dataclassEntry) {
|
4187
4227
|
isInvariant = false;
|
4188
4228
|
}
|
@@ -4201,7 +4241,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4201
4241
|
}
|
4202
4242
|
const diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleVariableOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleVariableOverride, localize_1.Localizer.Diagnostic.symbolOverridden().format({
|
4203
4243
|
name: memberName,
|
4204
|
-
className:
|
4244
|
+
className: baseClass.details.name,
|
4205
4245
|
}) + diagAddendum.getString(), (_a = (0, declarationUtils_1.getNameNodeForDeclaration)(lastDecl)) !== null && _a !== void 0 ? _a : lastDecl.node);
|
4206
4246
|
const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
|
4207
4247
|
if (diag && origDecl) {
|
@@ -4214,7 +4254,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4214
4254
|
if (!isBaseVarFinal && overrideFinalVarDecl) {
|
4215
4255
|
const diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleVariableOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleVariableOverride, localize_1.Localizer.Diagnostic.variableFinalOverride().format({
|
4216
4256
|
name: memberName,
|
4217
|
-
className:
|
4257
|
+
className: baseClass.details.name,
|
4218
4258
|
}), lastDecl.node);
|
4219
4259
|
if (diag) {
|
4220
4260
|
diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.overriddenSymbol(), overrideFinalVarDecl.path, overrideFinalVarDecl.range);
|
@@ -4243,7 +4283,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4243
4283
|
: localize_1.Localizer.Diagnostic.instanceVarOverridesClassVar();
|
4244
4284
|
const diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleVariableOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleVariableOverride, unformattedMessage.format({
|
4245
4285
|
name: memberName,
|
4246
|
-
className:
|
4286
|
+
className: baseClass.details.name,
|
4247
4287
|
}), (_b = (0, declarationUtils_1.getNameNodeForDeclaration)(lastDecl)) !== null && _b !== void 0 ? _b : lastDecl.node);
|
4248
4288
|
const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
|
4249
4289
|
if (diag && origDecl) {
|
@@ -4487,8 +4527,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4487
4527
|
}
|
4488
4528
|
// Determines whether a yield or yield from node is compatible with the
|
4489
4529
|
// return type annotation of the containing function.
|
4490
|
-
_validateYieldType(node, yieldType, sendType) {
|
4491
|
-
var _a;
|
4530
|
+
_validateYieldType(node, yieldType, expectedDiagAddendum, sendType) {
|
4531
|
+
var _a, _b, _c, _d;
|
4492
4532
|
const enclosingFunctionNode = ParseTreeUtils.getEnclosingFunction(node);
|
4493
4533
|
if (!enclosingFunctionNode || !enclosingFunctionNode.returnTypeAnnotation) {
|
4494
4534
|
return;
|
@@ -4529,7 +4569,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4529
4569
|
const errorMessage = enclosingFunctionNode.isAsync
|
4530
4570
|
? localize_1.Localizer.Diagnostic.generatorAsyncReturnType()
|
4531
4571
|
: localize_1.Localizer.Diagnostic.generatorSyncReturnType();
|
4532
|
-
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, errorMessage.format({ yieldType: this._evaluator.printType(yieldType) }) +
|
4572
|
+
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, errorMessage.format({ yieldType: this._evaluator.printType(yieldType) }) +
|
4573
|
+
((_a = expectedDiagAddendum === null || expectedDiagAddendum === void 0 ? void 0 : expectedDiagAddendum.getString()) !== null && _a !== void 0 ? _a : diagAddendum.getString()), (_b = node.expression) !== null && _b !== void 0 ? _b : node, (_d = (_c = expectedDiagAddendum === null || expectedDiagAddendum === void 0 ? void 0 : expectedDiagAddendum.getEffectiveTextRange()) !== null && _c !== void 0 ? _c : node.expression) !== null && _d !== void 0 ? _d : node);
|
4533
4574
|
}
|
4534
4575
|
}
|
4535
4576
|
// Determines whether any of the except statements are unreachable because
|