@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.
Files changed (157) hide show
  1. package/dist/analyzer/backgroundAnalysisProgram.d.ts +1 -1
  2. package/dist/analyzer/backgroundAnalysisProgram.js +1 -1
  3. package/dist/analyzer/backgroundAnalysisProgram.js.map +1 -1
  4. package/dist/analyzer/binder.js +23 -3
  5. package/dist/analyzer/binder.js.map +1 -1
  6. package/dist/analyzer/cacheManager.d.ts +4 -0
  7. package/dist/analyzer/cacheManager.js +13 -0
  8. package/dist/analyzer/cacheManager.js.map +1 -1
  9. package/dist/analyzer/checker.d.ts +2 -1
  10. package/dist/analyzer/checker.js +73 -29
  11. package/dist/analyzer/checker.js.map +1 -1
  12. package/dist/analyzer/codeFlowEngine.js +17 -11
  13. package/dist/analyzer/codeFlowEngine.js.map +1 -1
  14. package/dist/analyzer/commentUtils.js +11 -1
  15. package/dist/analyzer/commentUtils.js.map +1 -1
  16. package/dist/analyzer/constructorTransform.d.ts +1 -0
  17. package/dist/analyzer/constructorTransform.js +19 -2
  18. package/dist/analyzer/constructorTransform.js.map +1 -1
  19. package/dist/analyzer/packageTypeVerifier.js +40 -40
  20. package/dist/analyzer/packageTypeVerifier.js.map +1 -1
  21. package/dist/analyzer/patternMatching.js +13 -11
  22. package/dist/analyzer/patternMatching.js.map +1 -1
  23. package/dist/analyzer/program.d.ts +1 -1
  24. package/dist/analyzer/program.js +21 -19
  25. package/dist/analyzer/program.js.map +1 -1
  26. package/dist/analyzer/properties.js +0 -1
  27. package/dist/analyzer/properties.js.map +1 -1
  28. package/dist/analyzer/service.d.ts +2 -1
  29. package/dist/analyzer/service.js +9 -3
  30. package/dist/analyzer/service.js.map +1 -1
  31. package/dist/analyzer/sourceFile.d.ts +2 -2
  32. package/dist/analyzer/sourceFile.js +14 -3
  33. package/dist/analyzer/sourceFile.js.map +1 -1
  34. package/dist/analyzer/sourceFileInfoUtils.d.ts +1 -0
  35. package/dist/analyzer/sourceFileInfoUtils.js +17 -1
  36. package/dist/analyzer/sourceFileInfoUtils.js.map +1 -1
  37. package/dist/analyzer/typeEvaluator.js +195 -87
  38. package/dist/analyzer/typeEvaluator.js.map +1 -1
  39. package/dist/analyzer/typeEvaluatorTypes.d.ts +1 -2
  40. package/dist/analyzer/typeEvaluatorTypes.js +0 -3
  41. package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
  42. package/dist/analyzer/typePrinter.js +63 -55
  43. package/dist/analyzer/typePrinter.js.map +1 -1
  44. package/dist/analyzer/typeStubWriter.js +2 -0
  45. package/dist/analyzer/typeStubWriter.js.map +1 -1
  46. package/dist/analyzer/typeUtils.d.ts +1 -0
  47. package/dist/analyzer/typeUtils.js +29 -3
  48. package/dist/analyzer/typeUtils.js.map +1 -1
  49. package/dist/analyzer/typedDicts.d.ts +2 -1
  50. package/dist/analyzer/typedDicts.js +84 -40
  51. package/dist/analyzer/typedDicts.js.map +1 -1
  52. package/dist/analyzer/types.d.ts +5 -1
  53. package/dist/analyzer/types.js +11 -1
  54. package/dist/analyzer/types.js.map +1 -1
  55. package/dist/commands/dumpFileDebugInfoCommand.js +82 -4
  56. package/dist/commands/dumpFileDebugInfoCommand.js.map +1 -1
  57. package/dist/commands/quickActionCommand.js +2 -2
  58. package/dist/commands/quickActionCommand.js.map +1 -1
  59. package/dist/common/configOptions.d.ts +1 -0
  60. package/dist/common/configOptions.js +4 -0
  61. package/dist/common/configOptions.js.map +1 -1
  62. package/dist/common/console.d.ts +1 -0
  63. package/dist/common/console.js +19 -1
  64. package/dist/common/console.js.map +1 -1
  65. package/dist/common/diagnosticRules.d.ts +2 -1
  66. package/dist/common/diagnosticRules.js +1 -0
  67. package/dist/common/diagnosticRules.js.map +1 -1
  68. package/dist/common/extensibility.d.ts +2 -2
  69. package/dist/common/extensibility.js +25 -1
  70. package/dist/common/extensibility.js.map +1 -1
  71. package/dist/common/extensions.js +3 -1
  72. package/dist/common/extensions.js.map +1 -1
  73. package/dist/languageServerBase.d.ts +21 -46
  74. package/dist/languageServerBase.js +112 -152
  75. package/dist/languageServerBase.js.map +1 -1
  76. package/dist/languageService/analyzerServiceExecutor.d.ts +4 -3
  77. package/dist/languageService/analyzerServiceExecutor.js +9 -7
  78. package/dist/languageService/analyzerServiceExecutor.js.map +1 -1
  79. package/dist/languageService/codeActionProvider.d.ts +2 -2
  80. package/dist/languageService/codeActionProvider.js +4 -4
  81. package/dist/languageService/codeActionProvider.js.map +1 -1
  82. package/dist/languageService/completionProvider.d.ts +4 -2
  83. package/dist/languageService/completionProvider.js +209 -156
  84. package/dist/languageService/completionProvider.js.map +1 -1
  85. package/dist/languageService/definitionProvider.js +1 -1
  86. package/dist/languageService/definitionProvider.js.map +1 -1
  87. package/dist/languageService/documentSymbolCollector.d.ts +2 -1
  88. package/dist/languageService/documentSymbolCollector.js +23 -2
  89. package/dist/languageService/documentSymbolCollector.js.map +1 -1
  90. package/dist/languageService/hoverProvider.d.ts +2 -1
  91. package/dist/languageService/hoverProvider.js +21 -5
  92. package/dist/languageService/hoverProvider.js.map +1 -1
  93. package/dist/languageService/referencesProvider.d.ts +3 -2
  94. package/dist/languageService/referencesProvider.js +4 -4
  95. package/dist/languageService/referencesProvider.js.map +1 -1
  96. package/dist/languageService/renameModuleProvider.d.ts +1 -1
  97. package/dist/languageService/renameModuleProvider.js +8 -1
  98. package/dist/languageService/renameModuleProvider.js.map +1 -1
  99. package/dist/languageService/tooltipUtils.js +2 -1
  100. package/dist/languageService/tooltipUtils.js.map +1 -1
  101. package/dist/localization/localize.d.ts +17 -6
  102. package/dist/localization/localize.js +6 -4
  103. package/dist/localization/localize.js.map +1 -1
  104. package/dist/localization/package.nls.en-us.json +8 -6
  105. package/dist/parser/parser.js +24 -7
  106. package/dist/parser/parser.js.map +1 -1
  107. package/dist/parser/tokenizer.js +1 -1
  108. package/dist/server.d.ts +3 -2
  109. package/dist/server.js +1 -4
  110. package/dist/server.js.map +1 -1
  111. package/dist/tests/cacheManager.test.d.ts +1 -0
  112. package/dist/tests/cacheManager.test.js +69 -0
  113. package/dist/tests/cacheManager.test.js.map +1 -0
  114. package/dist/tests/checker.test.js +2 -2
  115. package/dist/tests/completions.test.js +445 -0
  116. package/dist/tests/completions.test.js.map +1 -1
  117. package/dist/tests/fourslash/completions.dictionary.keys.expression.fourslash.js +13 -3
  118. package/dist/tests/fourslash/completions.dictionary.keys.expression.fourslash.js.map +1 -1
  119. package/dist/tests/fourslash/completions.dictionary.keys.stringLiterals.fourslash.js +7 -2
  120. package/dist/tests/fourslash/completions.dictionary.keys.stringLiterals.fourslash.js.map +1 -1
  121. package/dist/tests/fourslash/missingTypeStub.command.trycatchImport.fourslash.d.ts +7 -0
  122. package/dist/tests/fourslash/missingTypeStub.command.trycatchImport.fourslash.js +45 -0
  123. package/dist/tests/fourslash/missingTypeStub.command.trycatchImport.fourslash.js.map +1 -0
  124. package/dist/tests/harness/fourslash/testLanguageService.d.ts +7 -6
  125. package/dist/tests/harness/fourslash/testLanguageService.js +14 -13
  126. package/dist/tests/harness/fourslash/testLanguageService.js.map +1 -1
  127. package/dist/tests/harness/fourslash/testState.d.ts +5 -4
  128. package/dist/tests/harness/fourslash/testState.js +14 -13
  129. package/dist/tests/harness/fourslash/testState.js.map +1 -1
  130. package/dist/tests/hoverProvider.test.js +1 -1
  131. package/dist/tests/hoverProvider.test.js.map +1 -1
  132. package/dist/tests/moveSymbol.misc.test.js +27 -0
  133. package/dist/tests/moveSymbol.misc.test.js.map +1 -1
  134. package/dist/tests/service.test.js +4 -4
  135. package/dist/tests/service.test.js.map +1 -1
  136. package/dist/tests/signatureHelp.test.js +2 -2
  137. package/dist/tests/signatureHelp.test.js.map +1 -1
  138. package/dist/tests/sourceFile.test.js +3 -3
  139. package/dist/tests/sourceFile.test.js.map +1 -1
  140. package/dist/tests/typeEvaluator1.test.js +4 -0
  141. package/dist/tests/typeEvaluator1.test.js.map +1 -1
  142. package/dist/tests/typeEvaluator2.test.js +6 -2
  143. package/dist/tests/typeEvaluator2.test.js.map +1 -1
  144. package/dist/tests/typeEvaluator3.test.js +1 -1
  145. package/dist/tests/typeEvaluator4.test.js +5 -1
  146. package/dist/tests/typeEvaluator4.test.js.map +1 -1
  147. package/dist/tests/typeEvaluator5.test.js +12 -0
  148. package/dist/tests/typeEvaluator5.test.js.map +1 -1
  149. package/dist/tests/workspaceEditUtils.test.js +2 -2
  150. package/dist/tests/workspaceEditUtils.test.js.map +1 -1
  151. package/dist/workspaceFactory.d.ts +72 -0
  152. package/dist/workspaceFactory.js +421 -0
  153. package/dist/workspaceFactory.js.map +1 -0
  154. package/package.json +4 -4
  155. package/dist/workspaceMap.d.ts +0 -14
  156. package/dist/workspaceMap.js +0 -172
  157. 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;QACqB,iBAAY,GAAiB,EAAE,CAAC;IA8DrD,CAAC;IA5DG,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,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;AA/DD,oCA+DC"}
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 _validateOverrideDecorator;
126
+ private _validateOverrideDecoratorPresent;
127
+ private _validateOverrideDecoratorNotPresent;
127
128
  private _validateBaseClassOverride;
128
129
  private _validateMethod;
129
130
  private _validateSuperCallForMethod;
@@ -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
- const callNode = ParseTreeUtils.getCallForName(node);
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 foundOverride = false;
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
- foundOverride = true;
3719
+ firstOverride = firstOverride !== null && firstOverride !== void 0 ? firstOverride : baseClassAndSymbol;
3698
3720
  this._validateBaseClassOverride(baseClassAndSymbol, symbol, typeOfSymbol, classType, name);
3699
3721
  }
3700
- if (!foundOverride) {
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._validateOverrideDecorator(typeOfSymbol);
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
- _validateOverrideDecorator(overrideType) {
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.overrideNotFound().format({ name: funcNode.name.value }), funcNode.name);
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 (paramName === 'cls') {
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 &&