@zzzen/pyright-internal 1.2.0-dev.20230305 → 1.2.0-dev.20230319
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/backgroundAnalysisProgram.d.ts +1 -1
- package/dist/analyzer/backgroundAnalysisProgram.js +1 -1
- package/dist/analyzer/backgroundAnalysisProgram.js.map +1 -1
- package/dist/analyzer/binder.js +23 -3
- package/dist/analyzer/binder.js.map +1 -1
- package/dist/analyzer/cacheManager.d.ts +4 -0
- package/dist/analyzer/cacheManager.js +13 -0
- package/dist/analyzer/cacheManager.js.map +1 -1
- package/dist/analyzer/checker.d.ts +2 -1
- package/dist/analyzer/checker.js +73 -29
- package/dist/analyzer/checker.js.map +1 -1
- package/dist/analyzer/codeFlowEngine.js +17 -11
- package/dist/analyzer/codeFlowEngine.js.map +1 -1
- package/dist/analyzer/commentUtils.js +11 -1
- package/dist/analyzer/commentUtils.js.map +1 -1
- package/dist/analyzer/constructorTransform.d.ts +1 -0
- package/dist/analyzer/constructorTransform.js +19 -2
- package/dist/analyzer/constructorTransform.js.map +1 -1
- package/dist/analyzer/packageTypeVerifier.js +40 -40
- package/dist/analyzer/packageTypeVerifier.js.map +1 -1
- package/dist/analyzer/patternMatching.js +13 -11
- package/dist/analyzer/patternMatching.js.map +1 -1
- package/dist/analyzer/program.d.ts +1 -1
- package/dist/analyzer/program.js +21 -19
- package/dist/analyzer/program.js.map +1 -1
- package/dist/analyzer/properties.js +0 -1
- package/dist/analyzer/properties.js.map +1 -1
- package/dist/analyzer/service.d.ts +2 -1
- package/dist/analyzer/service.js +9 -3
- package/dist/analyzer/service.js.map +1 -1
- package/dist/analyzer/sourceFile.d.ts +2 -2
- package/dist/analyzer/sourceFile.js +14 -3
- package/dist/analyzer/sourceFile.js.map +1 -1
- package/dist/analyzer/sourceFileInfoUtils.d.ts +1 -0
- package/dist/analyzer/sourceFileInfoUtils.js +17 -1
- package/dist/analyzer/sourceFileInfoUtils.js.map +1 -1
- package/dist/analyzer/typeEvaluator.js +195 -87
- package/dist/analyzer/typeEvaluator.js.map +1 -1
- package/dist/analyzer/typeEvaluatorTypes.d.ts +1 -2
- package/dist/analyzer/typeEvaluatorTypes.js +0 -3
- package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
- package/dist/analyzer/typePrinter.js +63 -55
- package/dist/analyzer/typePrinter.js.map +1 -1
- package/dist/analyzer/typeStubWriter.js +2 -0
- package/dist/analyzer/typeStubWriter.js.map +1 -1
- package/dist/analyzer/typeUtils.d.ts +1 -0
- package/dist/analyzer/typeUtils.js +29 -3
- package/dist/analyzer/typeUtils.js.map +1 -1
- package/dist/analyzer/typedDicts.d.ts +2 -1
- package/dist/analyzer/typedDicts.js +84 -40
- package/dist/analyzer/typedDicts.js.map +1 -1
- package/dist/analyzer/types.d.ts +5 -1
- package/dist/analyzer/types.js +11 -1
- package/dist/analyzer/types.js.map +1 -1
- package/dist/commands/dumpFileDebugInfoCommand.js +82 -4
- package/dist/commands/dumpFileDebugInfoCommand.js.map +1 -1
- package/dist/commands/quickActionCommand.js +2 -2
- package/dist/commands/quickActionCommand.js.map +1 -1
- package/dist/common/configOptions.d.ts +1 -0
- package/dist/common/configOptions.js +4 -0
- package/dist/common/configOptions.js.map +1 -1
- package/dist/common/console.d.ts +1 -0
- package/dist/common/console.js +19 -1
- package/dist/common/console.js.map +1 -1
- package/dist/common/diagnosticRules.d.ts +2 -1
- package/dist/common/diagnosticRules.js +1 -0
- package/dist/common/diagnosticRules.js.map +1 -1
- package/dist/common/extensibility.d.ts +2 -2
- package/dist/common/extensibility.js +25 -1
- package/dist/common/extensibility.js.map +1 -1
- package/dist/common/extensions.js +3 -1
- package/dist/common/extensions.js.map +1 -1
- package/dist/languageServerBase.d.ts +21 -46
- package/dist/languageServerBase.js +112 -152
- package/dist/languageServerBase.js.map +1 -1
- package/dist/languageService/analyzerServiceExecutor.d.ts +4 -3
- package/dist/languageService/analyzerServiceExecutor.js +9 -7
- package/dist/languageService/analyzerServiceExecutor.js.map +1 -1
- package/dist/languageService/codeActionProvider.d.ts +2 -2
- package/dist/languageService/codeActionProvider.js +4 -4
- package/dist/languageService/codeActionProvider.js.map +1 -1
- package/dist/languageService/completionProvider.d.ts +4 -2
- package/dist/languageService/completionProvider.js +209 -156
- package/dist/languageService/completionProvider.js.map +1 -1
- package/dist/languageService/definitionProvider.js +1 -1
- package/dist/languageService/definitionProvider.js.map +1 -1
- package/dist/languageService/documentSymbolCollector.d.ts +2 -1
- package/dist/languageService/documentSymbolCollector.js +23 -2
- package/dist/languageService/documentSymbolCollector.js.map +1 -1
- package/dist/languageService/hoverProvider.d.ts +2 -1
- package/dist/languageService/hoverProvider.js +21 -5
- package/dist/languageService/hoverProvider.js.map +1 -1
- package/dist/languageService/referencesProvider.d.ts +3 -2
- package/dist/languageService/referencesProvider.js +4 -4
- package/dist/languageService/referencesProvider.js.map +1 -1
- package/dist/languageService/renameModuleProvider.d.ts +1 -1
- package/dist/languageService/renameModuleProvider.js +8 -1
- package/dist/languageService/renameModuleProvider.js.map +1 -1
- package/dist/languageService/tooltipUtils.js +2 -1
- package/dist/languageService/tooltipUtils.js.map +1 -1
- package/dist/localization/localize.d.ts +17 -6
- package/dist/localization/localize.js +6 -4
- package/dist/localization/localize.js.map +1 -1
- package/dist/localization/package.nls.en-us.json +8 -6
- package/dist/parser/parser.js +24 -7
- package/dist/parser/parser.js.map +1 -1
- package/dist/parser/tokenizer.js +1 -1
- package/dist/server.d.ts +3 -2
- package/dist/server.js +1 -4
- package/dist/server.js.map +1 -1
- package/dist/tests/cacheManager.test.d.ts +1 -0
- package/dist/tests/cacheManager.test.js +69 -0
- package/dist/tests/cacheManager.test.js.map +1 -0
- package/dist/tests/checker.test.js +2 -2
- package/dist/tests/completions.test.js +445 -0
- package/dist/tests/completions.test.js.map +1 -1
- package/dist/tests/fourslash/completions.dictionary.keys.expression.fourslash.js +13 -3
- package/dist/tests/fourslash/completions.dictionary.keys.expression.fourslash.js.map +1 -1
- package/dist/tests/fourslash/completions.dictionary.keys.stringLiterals.fourslash.js +7 -2
- package/dist/tests/fourslash/completions.dictionary.keys.stringLiterals.fourslash.js.map +1 -1
- package/dist/tests/fourslash/missingTypeStub.command.trycatchImport.fourslash.d.ts +7 -0
- package/dist/tests/fourslash/missingTypeStub.command.trycatchImport.fourslash.js +45 -0
- package/dist/tests/fourslash/missingTypeStub.command.trycatchImport.fourslash.js.map +1 -0
- package/dist/tests/harness/fourslash/testLanguageService.d.ts +7 -6
- package/dist/tests/harness/fourslash/testLanguageService.js +14 -13
- package/dist/tests/harness/fourslash/testLanguageService.js.map +1 -1
- package/dist/tests/harness/fourslash/testState.d.ts +5 -4
- package/dist/tests/harness/fourslash/testState.js +14 -13
- package/dist/tests/harness/fourslash/testState.js.map +1 -1
- package/dist/tests/hoverProvider.test.js +1 -1
- package/dist/tests/hoverProvider.test.js.map +1 -1
- package/dist/tests/moveSymbol.misc.test.js +27 -0
- package/dist/tests/moveSymbol.misc.test.js.map +1 -1
- package/dist/tests/service.test.js +4 -4
- package/dist/tests/service.test.js.map +1 -1
- package/dist/tests/signatureHelp.test.js +2 -2
- package/dist/tests/signatureHelp.test.js.map +1 -1
- package/dist/tests/sourceFile.test.js +3 -3
- package/dist/tests/sourceFile.test.js.map +1 -1
- package/dist/tests/typeEvaluator1.test.js +4 -0
- package/dist/tests/typeEvaluator1.test.js.map +1 -1
- package/dist/tests/typeEvaluator2.test.js +6 -2
- package/dist/tests/typeEvaluator2.test.js.map +1 -1
- package/dist/tests/typeEvaluator3.test.js +1 -1
- package/dist/tests/typeEvaluator4.test.js +5 -1
- package/dist/tests/typeEvaluator4.test.js.map +1 -1
- package/dist/tests/typeEvaluator5.test.js +12 -0
- package/dist/tests/typeEvaluator5.test.js.map +1 -1
- package/dist/tests/workspaceEditUtils.test.js +2 -2
- package/dist/tests/workspaceEditUtils.test.js.map +1 -1
- package/dist/workspaceFactory.d.ts +72 -0
- package/dist/workspaceFactory.js +421 -0
- package/dist/workspaceFactory.js.map +1 -0
- package/package.json +4 -4
- package/dist/workspaceMap.d.ts +0 -14
- package/dist/workspaceMap.js +0 -172
- package/dist/workspaceMap.js.map +0 -1
@@ -4,9 +4,13 @@ export interface CacheOwner {
|
|
4
4
|
emptyCache(): void;
|
5
5
|
}
|
6
6
|
export declare class CacheManager {
|
7
|
+
private _pausedCount;
|
7
8
|
private readonly _cacheOwners;
|
8
9
|
registerCacheOwner(provider: CacheOwner): void;
|
9
10
|
unregisterCacheOwner(provider: CacheOwner): void;
|
11
|
+
pauseTracking(): {
|
12
|
+
dispose(): void;
|
13
|
+
};
|
10
14
|
getCacheUsage(): number;
|
11
15
|
emptyCache(console?: ConsoleInterface): void;
|
12
16
|
getUsedHeapRatio(console?: ConsoleInterface): number;
|
@@ -14,6 +14,7 @@ const debug_1 = require("../common/debug");
|
|
14
14
|
const memUtils_1 = require("../common/memUtils");
|
15
15
|
class CacheManager {
|
16
16
|
constructor() {
|
17
|
+
this._pausedCount = 0;
|
17
18
|
this._cacheOwners = [];
|
18
19
|
}
|
19
20
|
registerCacheOwner(provider) {
|
@@ -28,7 +29,19 @@ class CacheManager {
|
|
28
29
|
this._cacheOwners.splice(index, 1);
|
29
30
|
}
|
30
31
|
}
|
32
|
+
pauseTracking() {
|
33
|
+
const local = this;
|
34
|
+
local._pausedCount++;
|
35
|
+
return {
|
36
|
+
dispose() {
|
37
|
+
local._pausedCount--;
|
38
|
+
},
|
39
|
+
};
|
40
|
+
}
|
31
41
|
getCacheUsage() {
|
42
|
+
if (this._pausedCount > 0) {
|
43
|
+
return -1;
|
44
|
+
}
|
32
45
|
let totalUsage = 0;
|
33
46
|
this._cacheOwners.forEach((p) => {
|
34
47
|
totalUsage += p.getCacheUsage();
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"cacheManager.js","sourceRoot":"","sources":["../../../src/analyzer/cacheManager.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAGH,2CAAuC;AACvC,iDAAuD;AAWvD,MAAa,YAAY;IAAzB;
|
1
|
+
{"version":3,"file":"cacheManager.js","sourceRoot":"","sources":["../../../src/analyzer/cacheManager.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAGH,2CAAuC;AACvC,iDAAuD;AAWvD,MAAa,YAAY;IAAzB;QACY,iBAAY,GAAG,CAAC,CAAC;QACR,iBAAY,GAAiB,EAAE,CAAC;IA4ErD,CAAC;IA1EG,kBAAkB,CAAC,QAAoB;QACnC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrC,CAAC;IAED,oBAAoB,CAAC,QAAoB;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC;QACjE,IAAI,KAAK,GAAG,CAAC,EAAE;YACX,IAAA,YAAI,EAAC,oCAAoC,CAAC,CAAC;SAC9C;aAAM;YACH,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;SACtC;IACL,CAAC;IAED,aAAa;QACT,MAAM,KAAK,GAAG,IAAI,CAAC;QACnB,KAAK,CAAC,YAAY,EAAE,CAAC;QACrB,OAAO;YACH,OAAO;gBACH,KAAK,CAAC,YAAY,EAAE,CAAC;YACzB,CAAC;SACJ,CAAC;IACN,CAAC;IAED,aAAa;QACT,IAAI,IAAI,CAAC,YAAY,GAAG,CAAC,EAAE;YACvB,OAAO,CAAC,CAAC,CAAC;SACb;QAED,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YAC5B,UAAU,IAAI,CAAC,CAAC,aAAa,EAAE,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,UAAU,CAAC,OAA0B;QACjC,IAAI,OAAO,EAAE;YACT,MAAM,SAAS,GAAG,IAAA,4BAAiB,GAAE,CAAC;YAEtC,OAAO,CAAC,IAAI,CACR,oDAAoD,IAAI,CAAC,YAAY,CACjE,SAAS,CAAC,cAAc,CAC3B,WAAW,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,eAAe,CAAC,GAAG,CAC9D,CAAC;SACL;QAED,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YAC5B,CAAC,CAAC,UAAU,EAAE,CAAC;QACnB,CAAC,CAAC,CAAC;IACP,CAAC;IAED,gDAAgD;IAChD,gBAAgB,CAAC,OAA0B;QACvC,MAAM,SAAS,GAAG,IAAA,4BAAiB,GAAE,CAAC;QAEtC,IAAI,OAAO,EAAE;YACT,OAAO,CAAC,IAAI,CACR,cAAc;gBACV,mBAAmB,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI;gBACnE,kBAAkB,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI;gBACjE,uBAAuB,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,mBAAmB,CAAC,IAAI;gBAC3E,wBAAwB,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,oBAAoB,CAAC,IAAI;gBAC7E,mBAAmB,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,CACxE,CAAC;SACL;QAED,OAAO,SAAS,CAAC,cAAc,GAAG,SAAS,CAAC,eAAe,CAAC;IAChE,CAAC;IAEO,YAAY,CAAC,KAAa;QAC9B,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC;IACpD,CAAC;CACJ;AA9ED,oCA8EC"}
|
@@ -123,7 +123,8 @@ export declare class Checker extends ParseTreeWalker {
|
|
123
123
|
private _validateMultipleInheritanceCompatibility;
|
124
124
|
private _validateMultipleInheritanceOverride;
|
125
125
|
private _validateBaseClassOverrides;
|
126
|
-
private
|
126
|
+
private _validateOverrideDecoratorPresent;
|
127
|
+
private _validateOverrideDecoratorNotPresent;
|
127
128
|
private _validateBaseClassOverride;
|
128
129
|
private _validateMethod;
|
129
130
|
private _validateSuperCallForMethod;
|
package/dist/analyzer/checker.js
CHANGED
@@ -2561,19 +2561,55 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2561
2561
|
}
|
2562
2562
|
let errorMessage;
|
2563
2563
|
let deprecatedMessage;
|
2564
|
+
function getDeprecatedMessageForOverloadedCall(evaluator, type) {
|
2565
|
+
// Determine if the node is part of a call expression. If so,
|
2566
|
+
// we can determine which overload(s) were used to satisfy
|
2567
|
+
// the call expression and determine whether any of them
|
2568
|
+
// are deprecated.
|
2569
|
+
const callNode = ParseTreeUtils.getCallForName(node);
|
2570
|
+
if (callNode) {
|
2571
|
+
const callTypeResult = evaluator.getTypeResult(callNode);
|
2572
|
+
if (callTypeResult &&
|
2573
|
+
callTypeResult.overloadsUsedForCall &&
|
2574
|
+
callTypeResult.overloadsUsedForCall.length > 0) {
|
2575
|
+
callTypeResult.overloadsUsedForCall.forEach((overload) => {
|
2576
|
+
if (overload.details.deprecatedMessage !== undefined) {
|
2577
|
+
if (node.value === overload.details.name) {
|
2578
|
+
deprecatedMessage = overload.details.deprecatedMessage;
|
2579
|
+
errorMessage = localize_1.Localizer.Diagnostic.deprecatedFunction().format({
|
2580
|
+
name: overload.details.name,
|
2581
|
+
});
|
2582
|
+
}
|
2583
|
+
else if ((0, types_1.isInstantiableClass)(type) && overload.details.name === '__init__') {
|
2584
|
+
deprecatedMessage = overload.details.deprecatedMessage;
|
2585
|
+
errorMessage = localize_1.Localizer.Diagnostic.deprecatedConstructor().format({
|
2586
|
+
name: type.details.name,
|
2587
|
+
});
|
2588
|
+
}
|
2589
|
+
}
|
2590
|
+
});
|
2591
|
+
}
|
2592
|
+
}
|
2593
|
+
}
|
2564
2594
|
(0, typeUtils_1.doForEachSubtype)(type, (subtype) => {
|
2565
2595
|
if ((0, types_1.isClass)(subtype)) {
|
2566
2596
|
if (!subtype.includeSubclasses &&
|
2567
2597
|
subtype.details.deprecatedMessage !== undefined &&
|
2568
2598
|
node.value === subtype.details.name) {
|
2569
2599
|
deprecatedMessage = subtype.details.deprecatedMessage;
|
2570
|
-
errorMessage = localize_1.Localizer.Diagnostic.deprecatedClass();
|
2600
|
+
errorMessage = localize_1.Localizer.Diagnostic.deprecatedClass().format({ name: subtype.details.name });
|
2601
|
+
}
|
2602
|
+
else {
|
2603
|
+
// See if this is part of a call to a constructor.
|
2604
|
+
getDeprecatedMessageForOverloadedCall(this._evaluator, subtype);
|
2571
2605
|
}
|
2572
2606
|
}
|
2573
2607
|
else if ((0, types_1.isFunction)(subtype)) {
|
2574
2608
|
if (subtype.details.deprecatedMessage !== undefined && node.value === subtype.details.name) {
|
2575
2609
|
deprecatedMessage = subtype.details.deprecatedMessage;
|
2576
|
-
errorMessage = localize_1.Localizer.Diagnostic.deprecatedFunction()
|
2610
|
+
errorMessage = localize_1.Localizer.Diagnostic.deprecatedFunction().format({
|
2611
|
+
name: subtype.details.name || '<anonymous>',
|
2612
|
+
});
|
2577
2613
|
}
|
2578
2614
|
}
|
2579
2615
|
else if ((0, types_1.isOverloadedFunction)(subtype)) {
|
@@ -2581,21 +2617,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2581
2617
|
// we can determine which overload(s) were used to satisfy
|
2582
2618
|
// the call expression and determine whether any of them
|
2583
2619
|
// are deprecated.
|
2584
|
-
|
2585
|
-
if (callNode) {
|
2586
|
-
const callTypeResult = this._evaluator.getTypeResult(callNode);
|
2587
|
-
if (callTypeResult &&
|
2588
|
-
callTypeResult.overloadsUsedForCall &&
|
2589
|
-
callTypeResult.overloadsUsedForCall.length > 0) {
|
2590
|
-
callTypeResult.overloadsUsedForCall.forEach((overload) => {
|
2591
|
-
if (overload.details.deprecatedMessage !== undefined &&
|
2592
|
-
node.value === overload.details.name) {
|
2593
|
-
deprecatedMessage = overload.details.deprecatedMessage;
|
2594
|
-
errorMessage = localize_1.Localizer.Diagnostic.deprecatedFunction();
|
2595
|
-
}
|
2596
|
-
});
|
2597
|
-
}
|
2598
|
-
}
|
2620
|
+
getDeprecatedMessageForOverloadedCall(this._evaluator, subtype);
|
2599
2621
|
}
|
2600
2622
|
});
|
2601
2623
|
if (errorMessage) {
|
@@ -3679,7 +3701,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3679
3701
|
if ((0, types_1.isAnyOrUnknown)(typeOfSymbol)) {
|
3680
3702
|
return;
|
3681
3703
|
}
|
3682
|
-
let
|
3704
|
+
let firstOverride;
|
3683
3705
|
for (const baseClass of classType.details.baseClasses) {
|
3684
3706
|
if (!(0, types_1.isClass)(baseClass)) {
|
3685
3707
|
continue;
|
@@ -3694,20 +3716,44 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3694
3716
|
if (!baseClassAndSymbol) {
|
3695
3717
|
continue;
|
3696
3718
|
}
|
3697
|
-
|
3719
|
+
firstOverride = firstOverride !== null && firstOverride !== void 0 ? firstOverride : baseClassAndSymbol;
|
3698
3720
|
this._validateBaseClassOverride(baseClassAndSymbol, symbol, typeOfSymbol, classType, name);
|
3699
3721
|
}
|
3700
|
-
if (!
|
3722
|
+
if (!firstOverride) {
|
3701
3723
|
// If this is a method decorated with @override, validate that there
|
3702
3724
|
// is a base class method of the same name.
|
3703
|
-
this.
|
3725
|
+
this._validateOverrideDecoratorNotPresent(typeOfSymbol);
|
3726
|
+
}
|
3727
|
+
else {
|
3728
|
+
this._validateOverrideDecoratorPresent(typeOfSymbol, firstOverride);
|
3704
3729
|
}
|
3705
3730
|
});
|
3706
3731
|
}
|
3732
|
+
_validateOverrideDecoratorPresent(overrideType, baseMember) {
|
3733
|
+
// Skip this check if disabled.
|
3734
|
+
if (this._fileInfo.diagnosticRuleSet.reportImplicitOverride === 'none') {
|
3735
|
+
return;
|
3736
|
+
}
|
3737
|
+
let overrideFunction;
|
3738
|
+
if ((0, types_1.isFunction)(overrideType)) {
|
3739
|
+
overrideFunction = overrideType;
|
3740
|
+
}
|
3741
|
+
else if ((0, types_1.isOverloadedFunction)(overrideType)) {
|
3742
|
+
overrideFunction = types_1.OverloadedFunctionType.getImplementation(overrideType);
|
3743
|
+
}
|
3744
|
+
if (!(overrideFunction === null || overrideFunction === void 0 ? void 0 : overrideFunction.details.declaration) || types_1.FunctionType.isOverridden(overrideFunction)) {
|
3745
|
+
return;
|
3746
|
+
}
|
3747
|
+
const funcNode = overrideFunction.details.declaration.node;
|
3748
|
+
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.overrideDecoratorMissing().format({
|
3749
|
+
name: funcNode.name.value,
|
3750
|
+
className: this._evaluator.printType((0, typeUtils_1.convertToInstance)(baseMember.classType)),
|
3751
|
+
}), funcNode.name);
|
3752
|
+
}
|
3707
3753
|
// Determines whether the type is a function or overloaded function with an @override
|
3708
3754
|
// decorator. In this case, an error is reported because no base class has declared
|
3709
3755
|
// a method of the same name.
|
3710
|
-
|
3756
|
+
_validateOverrideDecoratorNotPresent(overrideType) {
|
3711
3757
|
let overrideFunction;
|
3712
3758
|
if ((0, types_1.isFunction)(overrideType)) {
|
3713
3759
|
overrideFunction = overrideType;
|
@@ -3715,13 +3761,11 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3715
3761
|
else if ((0, types_1.isOverloadedFunction)(overrideType)) {
|
3716
3762
|
overrideFunction = types_1.OverloadedFunctionType.getImplementation(overrideType);
|
3717
3763
|
}
|
3718
|
-
if (!overrideFunction ||
|
3719
|
-
!types_1.FunctionType.isOverridden(overrideFunction) ||
|
3720
|
-
!overrideFunction.details.declaration) {
|
3764
|
+
if (!(overrideFunction === null || overrideFunction === void 0 ? void 0 : overrideFunction.details.declaration) || !types_1.FunctionType.isOverridden(overrideFunction)) {
|
3721
3765
|
return;
|
3722
3766
|
}
|
3723
3767
|
const funcNode = overrideFunction.details.declaration.node;
|
3724
|
-
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.
|
3768
|
+
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.overriddenMethodNotFound().format({ name: funcNode.name.value }), funcNode.name);
|
3725
3769
|
}
|
3726
3770
|
_validateBaseClassOverride(baseClassAndSymbol, overrideSymbol, overrideType, childClassType, memberName) {
|
3727
3771
|
if (!(0, types_1.isInstantiableClass)(baseClassAndSymbol.classType)) {
|
@@ -3956,7 +4000,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3956
4000
|
// __new__ overrides should have a "cls" parameter.
|
3957
4001
|
if (node.parameters.length === 0 ||
|
3958
4002
|
!node.parameters[0].name ||
|
3959
|
-
!['cls', '_cls', '__cls', '__mcls'].some((name) => node.parameters[0].name.value === name)) {
|
4003
|
+
!['cls', '_cls', '__cls', '__mcls', 'mcls', 'mcs'].some((name) => node.parameters[0].name.value === name)) {
|
3960
4004
|
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportSelfClsParameterName, diagnosticRules_1.DiagnosticRule.reportSelfClsParameterName, localize_1.Localizer.Diagnostic.newClsParam(), node.parameters.length > 0 ? node.parameters[0] : node.name);
|
3961
4005
|
}
|
3962
4006
|
if (classType) {
|
@@ -4029,9 +4073,9 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4029
4073
|
}
|
4030
4074
|
// Instance methods should have a "self" parameter.
|
4031
4075
|
if (firstParamIsSimple && paramName !== 'self') {
|
4032
|
-
// Special-case metaclasses, which can use "cls".
|
4076
|
+
// Special-case metaclasses, which can use "cls" or several variants.
|
4033
4077
|
let isLegalMetaclassName = false;
|
4034
|
-
if (
|
4078
|
+
if (['cls', 'mcls', 'mcs'].some((name) => name === paramName)) {
|
4035
4079
|
const classTypeInfo = this._evaluator.getTypeOfClass(classNode);
|
4036
4080
|
const typeType = this._evaluator.getBuiltInType(classNode, 'type');
|
4037
4081
|
if (typeType &&
|