@zzzen/pyright-internal 1.2.0-dev.20230101 → 1.2.0-dev.20230115

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 (145) hide show
  1. package/dist/analyzer/analyzerFileInfo.js +14 -1
  2. package/dist/analyzer/analyzerFileInfo.js.map +1 -1
  3. package/dist/analyzer/backgroundAnalysisProgram.d.ts +3 -3
  4. package/dist/analyzer/backgroundAnalysisProgram.js +4 -4
  5. package/dist/analyzer/backgroundAnalysisProgram.js.map +1 -1
  6. package/dist/analyzer/checker.d.ts +1 -1
  7. package/dist/analyzer/checker.js +145 -53
  8. package/dist/analyzer/checker.js.map +1 -1
  9. package/dist/analyzer/codeFlowEngine.js +26 -11
  10. package/dist/analyzer/codeFlowEngine.js.map +1 -1
  11. package/dist/analyzer/constraintSolver.js +4 -2
  12. package/dist/analyzer/constraintSolver.js.map +1 -1
  13. package/dist/analyzer/dataClasses.js +6 -1
  14. package/dist/analyzer/dataClasses.js.map +1 -1
  15. package/dist/analyzer/importResolver.d.ts +2 -1
  16. package/dist/analyzer/importResolver.js +18 -3
  17. package/dist/analyzer/importResolver.js.map +1 -1
  18. package/dist/analyzer/patternMatching.js +2 -2
  19. package/dist/analyzer/patternMatching.js.map +1 -1
  20. package/dist/analyzer/program.d.ts +1 -0
  21. package/dist/analyzer/program.js +54 -32
  22. package/dist/analyzer/program.js.map +1 -1
  23. package/dist/analyzer/regions.js +14 -5
  24. package/dist/analyzer/regions.js.map +1 -1
  25. package/dist/analyzer/service.d.ts +3 -2
  26. package/dist/analyzer/service.js +14 -12
  27. package/dist/analyzer/service.js.map +1 -1
  28. package/dist/analyzer/sourceFile.d.ts +4 -3
  29. package/dist/analyzer/sourceFile.js +4 -4
  30. package/dist/analyzer/sourceFile.js.map +1 -1
  31. package/dist/analyzer/sourceMapper.d.ts +2 -2
  32. package/dist/analyzer/sourceMapper.js +14 -5
  33. package/dist/analyzer/sourceMapper.js.map +1 -1
  34. package/dist/analyzer/typeCacheUtils.d.ts +0 -1
  35. package/dist/analyzer/typeCacheUtils.js +3 -3
  36. package/dist/analyzer/typeCacheUtils.js.map +1 -1
  37. package/dist/analyzer/typeDocStringUtils.d.ts +2 -1
  38. package/dist/analyzer/typeDocStringUtils.js +18 -7
  39. package/dist/analyzer/typeDocStringUtils.js.map +1 -1
  40. package/dist/analyzer/typeEvaluator.js +494 -423
  41. package/dist/analyzer/typeEvaluator.js.map +1 -1
  42. package/dist/analyzer/typeEvaluatorTypes.d.ts +20 -13
  43. package/dist/analyzer/typeEvaluatorTypes.js +15 -15
  44. package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
  45. package/dist/analyzer/typeGuards.d.ts +5 -1
  46. package/dist/analyzer/typeGuards.js +204 -44
  47. package/dist/analyzer/typeGuards.js.map +1 -1
  48. package/dist/analyzer/typeUtils.d.ts +8 -0
  49. package/dist/analyzer/typeUtils.js +15 -4
  50. package/dist/analyzer/typeUtils.js.map +1 -1
  51. package/dist/analyzer/types.d.ts +3 -0
  52. package/dist/analyzer/types.js +10 -2
  53. package/dist/analyzer/types.js.map +1 -1
  54. package/dist/backgroundAnalysisBase.d.ts +4 -1
  55. package/dist/backgroundAnalysisBase.js +1 -1
  56. package/dist/backgroundAnalysisBase.js.map +1 -1
  57. package/dist/backgroundThreadBase.d.ts +5 -2
  58. package/dist/backgroundThreadBase.js.map +1 -1
  59. package/dist/commands/createTypeStub.js +3 -0
  60. package/dist/commands/createTypeStub.js.map +1 -1
  61. package/dist/commands/quickActionCommand.js +1 -1
  62. package/dist/commands/quickActionCommand.js.map +1 -1
  63. package/dist/common/collectionUtils.d.ts +1 -0
  64. package/dist/common/collectionUtils.js +9 -1
  65. package/dist/common/collectionUtils.js.map +1 -1
  66. package/dist/common/configOptions.d.ts +1 -0
  67. package/dist/common/configOptions.js +4 -0
  68. package/dist/common/configOptions.js.map +1 -1
  69. package/dist/common/diagnosticRules.d.ts +1 -0
  70. package/dist/common/diagnosticRules.js +1 -0
  71. package/dist/common/diagnosticRules.js.map +1 -1
  72. package/dist/common/fileSystem.d.ts +1 -0
  73. package/dist/common/fileSystem.js.map +1 -1
  74. package/dist/common/textEditUtils.d.ts +3 -2
  75. package/dist/common/textEditUtils.js +11 -10
  76. package/dist/common/textEditUtils.js.map +1 -1
  77. package/dist/languageServerBase.d.ts +1 -1
  78. package/dist/languageServerBase.js +2 -2
  79. package/dist/languageServerBase.js.map +1 -1
  80. package/dist/languageService/completionProvider.d.ts +3 -0
  81. package/dist/languageService/completionProvider.js +212 -159
  82. package/dist/languageService/completionProvider.js.map +1 -1
  83. package/dist/languageService/documentSymbolCollector.d.ts +12 -4
  84. package/dist/languageService/documentSymbolCollector.js +103 -22
  85. package/dist/languageService/documentSymbolCollector.js.map +1 -1
  86. package/dist/languageService/documentSymbolProvider.js +6 -0
  87. package/dist/languageService/documentSymbolProvider.js.map +1 -1
  88. package/dist/languageService/hoverProvider.d.ts +0 -1
  89. package/dist/languageService/hoverProvider.js +7 -20
  90. package/dist/languageService/hoverProvider.js.map +1 -1
  91. package/dist/languageService/indentationUtils.d.ts +1 -1
  92. package/dist/languageService/indentationUtils.js +74 -29
  93. package/dist/languageService/indentationUtils.js.map +1 -1
  94. package/dist/languageService/referencesProvider.d.ts +5 -4
  95. package/dist/languageService/referencesProvider.js +15 -10
  96. package/dist/languageService/referencesProvider.js.map +1 -1
  97. package/dist/languageService/renameModuleProvider.js +11 -11
  98. package/dist/languageService/renameModuleProvider.js.map +1 -1
  99. package/dist/languageService/tooltipUtils.d.ts +5 -1
  100. package/dist/languageService/tooltipUtils.js +28 -4
  101. package/dist/languageService/tooltipUtils.js.map +1 -1
  102. package/dist/localization/localize.d.ts +3 -0
  103. package/dist/localization/localize.js +3 -0
  104. package/dist/localization/localize.js.map +1 -1
  105. package/dist/localization/package.nls.en-us.json +3 -0
  106. package/dist/parser/tokenizer.js +6 -2
  107. package/dist/parser/tokenizer.js.map +1 -1
  108. package/dist/tests/checker.test.js +16 -0
  109. package/dist/tests/checker.test.js.map +1 -1
  110. package/dist/tests/completions.test.d.ts +1 -0
  111. package/dist/tests/completions.test.js +331 -0
  112. package/dist/tests/completions.test.js.map +1 -0
  113. package/dist/tests/documentSymbolCollector.test.js +86 -5
  114. package/dist/tests/documentSymbolCollector.test.js.map +1 -1
  115. package/dist/tests/filesystem.test.js +11 -0
  116. package/dist/tests/filesystem.test.js.map +1 -1
  117. package/dist/tests/fourslash/rename.init.fourslash.d.ts +1 -0
  118. package/dist/tests/fourslash/rename.init.fourslash.js +23 -0
  119. package/dist/tests/fourslash/rename.init.fourslash.js.map +1 -0
  120. package/dist/tests/harness/fourslash/testState.d.ts +2 -2
  121. package/dist/tests/harness/fourslash/testState.js +10 -7
  122. package/dist/tests/harness/fourslash/testState.js.map +1 -1
  123. package/dist/tests/harness/vfs/filesystem.d.ts +2 -2
  124. package/dist/tests/harness/vfs/filesystem.js +5 -1
  125. package/dist/tests/harness/vfs/filesystem.js.map +1 -1
  126. package/dist/tests/hoverProvider.test.d.ts +1 -0
  127. package/dist/tests/hoverProvider.test.js +247 -0
  128. package/dist/tests/hoverProvider.test.js.map +1 -0
  129. package/dist/tests/indentationUtils.ptvs.test.js +13 -13
  130. package/dist/tests/indentationUtils.ptvs.test.js.map +1 -1
  131. package/dist/tests/indentationUtils.test.js +68 -10
  132. package/dist/tests/indentationUtils.test.js.map +1 -1
  133. package/dist/tests/typeEvaluator1.test.js +24 -0
  134. package/dist/tests/typeEvaluator1.test.js.map +1 -1
  135. package/dist/tests/typeEvaluator2.test.js +5 -1
  136. package/dist/tests/typeEvaluator2.test.js.map +1 -1
  137. package/dist/tests/typeEvaluator3.test.js +10 -2
  138. package/dist/tests/typeEvaluator3.test.js.map +1 -1
  139. package/dist/tests/typeEvaluator4.test.js +4 -0
  140. package/dist/tests/typeEvaluator4.test.js.map +1 -1
  141. package/dist/tests/typeEvaluator5.test.js +6 -0
  142. package/dist/tests/typeEvaluator5.test.js.map +1 -1
  143. package/dist/workspaceMap.js +1 -3
  144. package/dist/workspaceMap.js.map +1 -1
  145. package/package.json +6 -6
@@ -10,8 +10,21 @@
10
10
  */
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.isAnnotationEvaluationPostponed = void 0;
13
+ const pythonVersion_1 = require("../common/pythonVersion");
13
14
  function isAnnotationEvaluationPostponed(fileInfo) {
14
- return fileInfo.futureImports.has('annotations') || fileInfo.isStubFile;
15
+ if (fileInfo.isStubFile) {
16
+ return true;
17
+ }
18
+ if (fileInfo.futureImports.has('annotations')) {
19
+ return true;
20
+ }
21
+ // As of November 22, the Python steering council has tentatively
22
+ // approved PEP 649 for Python 3.12.
23
+ // https://discuss.python.org/t/pep-649-deferred-evaluation-of-annotations-tentatively-accepted/21331
24
+ if (fileInfo.executionEnvironment.pythonVersion >= pythonVersion_1.PythonVersion.V3_12) {
25
+ return true;
26
+ }
27
+ return false;
15
28
  }
16
29
  exports.isAnnotationEvaluationPostponed = isAnnotationEvaluationPostponed;
17
30
  //# sourceMappingURL=analyzerFileInfo.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"analyzerFileInfo.js","sourceRoot":"","sources":["../../../src/analyzer/analyzerFileInfo.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AA+CH,SAAgB,+BAA+B,CAAC,QAA0B;IACtE,OAAO,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC;AAC5E,CAAC;AAFD,0EAEC"}
1
+ {"version":3,"file":"analyzerFileInfo.js","sourceRoot":"","sources":["../../../src/analyzer/analyzerFileInfo.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAIH,2DAAwD;AA4CxD,SAAgB,+BAA+B,CAAC,QAA0B;IACtE,IAAI,QAAQ,CAAC,UAAU,EAAE;QACrB,OAAO,IAAI,CAAC;KACf;IAED,IAAI,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE;QAC3C,OAAO,IAAI,CAAC;KACf;IAED,iEAAiE;IACjE,oCAAoC;IACpC,qGAAqG;IACrG,IAAI,QAAQ,CAAC,oBAAoB,CAAC,aAAa,IAAI,6BAAa,CAAC,KAAK,EAAE;QACpE,OAAO,IAAI,CAAC;KACf;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAjBD,0EAiBC"}
@@ -1,6 +1,6 @@
1
1
  import { CancellationToken } from 'vscode-languageserver';
2
2
  import { TextDocumentContentChangeEvent } from 'vscode-languageserver-textdocument';
3
- import { BackgroundAnalysisBase, IndexOptions } from '../backgroundAnalysisBase';
3
+ import { BackgroundAnalysisBase, IndexOptions, RefreshOptions } from '../backgroundAnalysisBase';
4
4
  import { ConfigOptions } from '../common/configOptions';
5
5
  import { ConsoleInterface } from '../common/console';
6
6
  import { Diagnostic } from '../common/diagnostic';
@@ -41,12 +41,12 @@ export declare class BackgroundAnalysisProgram {
41
41
  startAnalysis(token: CancellationToken): boolean;
42
42
  analyzeFile(filePath: string, token: CancellationToken): boolean;
43
43
  startIndexing(indexOptions: IndexOptions): void;
44
- refreshIndexing(): void;
44
+ refreshIndexing(refreshOptions?: RefreshOptions): void;
45
45
  cancelIndexing(): void;
46
46
  getIndexing(filePath: string): Map<string, import("../languageService/documentSymbolProvider").IndexResults> | undefined;
47
47
  getDiagnosticsForRange(filePath: string, range: Range, token: CancellationToken): Promise<Diagnostic[]>;
48
48
  writeTypeStub(targetImportPath: string, targetIsSingleFile: boolean, stubPath: string, token: CancellationToken): Promise<any>;
49
- invalidateAndForceReanalysis(rebuildUserFileIndexing: boolean, rebuildLibraryIndexing: boolean): void;
49
+ invalidateAndForceReanalysis(rebuildUserFileIndexing: boolean, rebuildLibraryIndexing: boolean, refreshOptions?: RefreshOptions): void;
50
50
  restart(): void;
51
51
  dispose(): void;
52
52
  private _ensurePartialStubPackages;
@@ -117,9 +117,9 @@ class BackgroundAnalysisProgram {
117
117
  var _a;
118
118
  (_a = this._backgroundAnalysis) === null || _a === void 0 ? void 0 : _a.startIndexing(indexOptions, this._configOptions, this.importResolver, this.host.kind);
119
119
  }
120
- refreshIndexing() {
120
+ refreshIndexing(refreshOptions) {
121
121
  var _a;
122
- (_a = this._backgroundAnalysis) === null || _a === void 0 ? void 0 : _a.refreshIndexing(this._configOptions, this.importResolver, this.host.kind);
122
+ (_a = this._backgroundAnalysis) === null || _a === void 0 ? void 0 : _a.refreshIndexing(this._configOptions, this.importResolver, this.host.kind, refreshOptions);
123
123
  }
124
124
  cancelIndexing() {
125
125
  var _a;
@@ -143,10 +143,10 @@ class BackgroundAnalysisProgram {
143
143
  /* maxTime */ undefined, this._configOptions, this._onAnalysisCompletion, this._console, token);
144
144
  return this._program.writeTypeStub(targetImportPath, targetIsSingleFile, stubPath, token);
145
145
  }
146
- invalidateAndForceReanalysis(rebuildUserFileIndexing, rebuildLibraryIndexing) {
146
+ invalidateAndForceReanalysis(rebuildUserFileIndexing, rebuildLibraryIndexing, refreshOptions) {
147
147
  var _a;
148
148
  if (rebuildLibraryIndexing) {
149
- this.refreshIndexing();
149
+ this.refreshIndexing(refreshOptions);
150
150
  }
151
151
  (_a = this._backgroundAnalysis) === null || _a === void 0 ? void 0 : _a.invalidateAndForceReanalysis(rebuildUserFileIndexing);
152
152
  // Make sure the import resolver doesn't have invalid
@@ -1 +1 @@
1
- {"version":3,"file":"backgroundAnalysisProgram.js","sourceRoot":"","sources":["../../../src/analyzer/backgroundAnalysisProgram.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"backgroundAnalysisProgram.js","sourceRoot":"","sources":["../../../src/analyzer/backgroundAnalysisProgram.ts"],"names":[],"mappings":"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"}
@@ -106,7 +106,7 @@ export declare class Checker extends ParseTreeWalker {
106
106
  private _conditionallyReportPrivateUsage;
107
107
  private _validateEnumClassOverride;
108
108
  private _validateTypedDictClassSuite;
109
- private _validateStrictTypeGuardFunction;
109
+ private _validateTypeGuardFunction;
110
110
  private _validateDunderSignatures;
111
111
  private _validateFunctionReturn;
112
112
  private _validateFinalMemberOverrides;
@@ -382,9 +382,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
382
382
  }
383
383
  // Verify common dunder signatures.
384
384
  this._validateDunderSignatures(node, functionTypeResult.functionType, containingClassNode !== undefined);
385
- // Verify that strict type guard functions don't violate the constraints
386
- // of strict type guards.
387
- this._validateStrictTypeGuardFunction(node, functionTypeResult.functionType, containingClassNode !== undefined);
385
+ // Verify TypeGuard or StrictTypeGuard functions.
386
+ this._validateTypeGuardFunction(node, functionTypeResult.functionType, containingClassNode !== undefined);
388
387
  this._validateFunctionTypeVarUsage(node, functionTypeResult);
389
388
  }
390
389
  // If we're at the module level within a stub file, report a diagnostic
@@ -531,17 +530,18 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
531
530
  return true;
532
531
  }
533
532
  visitReturn(node) {
534
- let returnType;
533
+ var _a, _b;
534
+ let returnTypeResult;
535
535
  const enclosingFunctionNode = ParseTreeUtils.getEnclosingFunction(node);
536
536
  const declaredReturnType = enclosingFunctionNode
537
537
  ? this._evaluator.getFunctionDeclaredReturnType(enclosingFunctionNode)
538
538
  : undefined;
539
539
  if (node.returnExpression) {
540
- returnType = this._evaluator.getType(node.returnExpression) || types_1.UnknownType.create();
540
+ returnTypeResult = (_a = this._evaluator.getTypeResult(node.returnExpression)) !== null && _a !== void 0 ? _a : { type: types_1.UnknownType.create() };
541
541
  }
542
542
  else {
543
543
  // There is no return expression, so "None" is assumed.
544
- returnType = types_1.NoneType.createInstance();
544
+ returnTypeResult = { type: types_1.NoneType.createInstance() };
545
545
  }
546
546
  // If the enclosing function is async and a generator, the return
547
547
  // statement is not allowed to have an argument. A syntax error occurs
@@ -558,9 +558,9 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
558
558
  this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.noReturnContainsReturn(), node);
559
559
  }
560
560
  else {
561
- const diagAddendum = new diagnostic_1.DiagnosticAddendum();
561
+ let diagAddendum = new diagnostic_1.DiagnosticAddendum();
562
562
  let returnTypeMatches = false;
563
- if (this._evaluator.assignType(declaredReturnType, returnType, diagAddendum, new typeVarContext_1.TypeVarContext(),
563
+ if (this._evaluator.assignType(declaredReturnType, returnTypeResult.type, diagAddendum, new typeVarContext_1.TypeVarContext(),
564
564
  /* srcTypeVarContext */ undefined, 64 /* AllowBoolTypeGuard */)) {
565
565
  returnTypeMatches = true;
566
566
  }
@@ -582,7 +582,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
582
582
  }
583
583
  if (!typeVarContext.isEmpty()) {
584
584
  const adjustedReturnType = (0, typeUtils_1.applySolvedTypeVars)(declaredReturnType, typeVarContext);
585
- if (this._evaluator.assignType(adjustedReturnType, returnType, diagAddendum,
585
+ if (this._evaluator.assignType(adjustedReturnType, returnTypeResult.type, diagAddendum,
586
586
  /* destTypeVarContext */ undefined,
587
587
  /* srcTypeVarContext */ undefined, 64 /* AllowBoolTypeGuard */)) {
588
588
  returnTypeMatches = true;
@@ -591,19 +591,24 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
591
591
  }
592
592
  }
593
593
  if (!returnTypeMatches) {
594
+ // If we have more detailed diagnostic information from
595
+ // bidirectional type inference, use that.
596
+ if (returnTypeResult.expectedTypeDiagAddendum) {
597
+ diagAddendum = returnTypeResult.expectedTypeDiagAddendum;
598
+ }
594
599
  this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.returnTypeMismatch().format({
595
- exprType: this._evaluator.printType(returnType),
600
+ exprType: this._evaluator.printType(returnTypeResult.type),
596
601
  returnType: this._evaluator.printType(declaredReturnType),
597
- }) + diagAddendum.getString(), node.returnExpression ? node.returnExpression : node);
602
+ }) + diagAddendum.getString(), node.returnExpression ? node.returnExpression : node, (_b = returnTypeResult.expectedTypeDiagAddendum) === null || _b === void 0 ? void 0 : _b.getEffectiveTextRange());
598
603
  }
599
604
  }
600
605
  }
601
- if ((0, types_1.isUnknown)(returnType)) {
606
+ if ((0, types_1.isUnknown)(returnTypeResult.type)) {
602
607
  this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportUnknownVariableType, diagnosticRules_1.DiagnosticRule.reportUnknownVariableType, localize_1.Localizer.Diagnostic.returnTypeUnknown(), node.returnExpression);
603
608
  }
604
- else if ((0, typeUtils_1.isPartlyUnknown)(returnType)) {
609
+ else if ((0, typeUtils_1.isPartlyUnknown)(returnTypeResult.type)) {
605
610
  this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportUnknownVariableType, diagnosticRules_1.DiagnosticRule.reportUnknownVariableType, localize_1.Localizer.Diagnostic.returnTypePartiallyUnknown().format({
606
- returnType: this._evaluator.printType(returnType, { expandTypeAlias: true }),
611
+ returnType: this._evaluator.printType(returnTypeResult.type, { expandTypeAlias: true }),
607
612
  }), node.returnExpression);
608
613
  }
609
614
  }
@@ -854,9 +859,9 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
854
859
  if (!this._isUnboundCheckSuppressed) {
855
860
  this._reportUnboundName(node);
856
861
  }
857
- // Report the use of a deprecated symbol. For now, this functionality
858
- // is disabled. We'll leave it in place for the future.
859
- // this._reportDeprecatedUse(node);
862
+ // Report the use of a deprecated symbol.
863
+ const type = this._evaluator.getType(node);
864
+ this._reportDeprecatedUse(node, type);
860
865
  return true;
861
866
  }
862
867
  visitDel(node) {
@@ -867,7 +872,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
867
872
  return false;
868
873
  }
869
874
  visitMemberAccess(node) {
870
- this._evaluator.getType(node);
875
+ const type = this._evaluator.getType(node);
876
+ this._reportDeprecatedUse(node.memberName, type);
871
877
  this._conditionallyReportPrivateUsage(node.memberName);
872
878
  // Walk the leftExpression but not the memberName.
873
879
  this.walk(node.leftExpression);
@@ -905,6 +911,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
905
911
  return true;
906
912
  }
907
913
  visitImportFromAs(node) {
914
+ var _a;
908
915
  if (this._fileInfo.isStubFile) {
909
916
  return false;
910
917
  }
@@ -928,6 +935,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
928
935
  this._addMissingModuleSourceDiagnosticIfNeeded(importResult, node.name);
929
936
  break;
930
937
  }
938
+ const type = this._evaluator.getType((_a = node.alias) !== null && _a !== void 0 ? _a : node.name);
939
+ this._reportDeprecatedUse(node.name, type);
931
940
  return false;
932
941
  }
933
942
  visitModuleName(node) {
@@ -2484,24 +2493,90 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2484
2493
  }
2485
2494
  return false;
2486
2495
  }
2487
- _reportDeprecatedUse(node) {
2496
+ _reportDeprecatedUse(node, type) {
2488
2497
  var _a;
2489
- const deprecatedForm = (_a = deprecatedAliases.get(node.value)) !== null && _a !== void 0 ? _a : deprecatedSpecialForms.get(node.value);
2490
- if (!deprecatedForm) {
2491
- return;
2492
- }
2493
- const type = this._evaluator.getType(node);
2494
2498
  if (!type) {
2495
2499
  return;
2496
2500
  }
2497
- if (!(0, types_1.isInstantiableClass)(type) || type.details.fullName !== deprecatedForm.fullName) {
2498
- return;
2499
- }
2500
- if (this._fileInfo.executionEnvironment.pythonVersion >= deprecatedForm.version) {
2501
- this._evaluator.addDeprecated(localize_1.Localizer.Diagnostic.deprecatedType().format({
2502
- version: (0, pythonVersion_1.versionToString)(deprecatedForm.version),
2503
- replacement: deprecatedForm.replacementText,
2504
- }), node);
2501
+ let errorMessage;
2502
+ let deprecatedMessage;
2503
+ (0, typeUtils_1.doForEachSubtype)(type, (subtype) => {
2504
+ var _a, _b, _c;
2505
+ if ((0, types_1.isClass)(subtype)) {
2506
+ if (!subtype.includeSubclasses &&
2507
+ subtype.details.deprecatedMessage !== undefined &&
2508
+ node.value === subtype.details.name) {
2509
+ deprecatedMessage = subtype.details.deprecatedMessage;
2510
+ errorMessage = localize_1.Localizer.Diagnostic.deprecatedClass();
2511
+ }
2512
+ }
2513
+ else if ((0, types_1.isFunction)(subtype)) {
2514
+ if (subtype.details.deprecatedMessage !== undefined && node.value === subtype.details.name) {
2515
+ deprecatedMessage = subtype.details.deprecatedMessage;
2516
+ errorMessage = localize_1.Localizer.Diagnostic.deprecatedFunction();
2517
+ }
2518
+ }
2519
+ else if ((0, types_1.isOverloadedFunction)(subtype)) {
2520
+ // Determine if the node is part of a call expression. If so,
2521
+ // we can determine which overload(s) were used to satisfy
2522
+ // the call expression and determine whether any of them
2523
+ // are deprecated.
2524
+ let callTypeResult;
2525
+ if (((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 9 /* Call */ && node.parent.leftExpression === node) {
2526
+ callTypeResult = this._evaluator.getTypeResult(node.parent);
2527
+ }
2528
+ else if (((_b = node.parent) === null || _b === void 0 ? void 0 : _b.nodeType) === 35 /* MemberAccess */ &&
2529
+ node.parent.memberName === node &&
2530
+ ((_c = node.parent.parent) === null || _c === void 0 ? void 0 : _c.nodeType) === 9 /* Call */ &&
2531
+ node.parent.parent.leftExpression === node.parent) {
2532
+ callTypeResult = this._evaluator.getTypeResult(node.parent.parent);
2533
+ }
2534
+ if (callTypeResult &&
2535
+ callTypeResult.overloadsUsedForCall &&
2536
+ callTypeResult.overloadsUsedForCall.length > 0) {
2537
+ callTypeResult.overloadsUsedForCall.forEach((overload) => {
2538
+ if (overload.details.deprecatedMessage !== undefined && node.value === overload.details.name) {
2539
+ deprecatedMessage = overload.details.deprecatedMessage;
2540
+ errorMessage = localize_1.Localizer.Diagnostic.deprecatedFunction();
2541
+ }
2542
+ });
2543
+ }
2544
+ }
2545
+ });
2546
+ if (errorMessage) {
2547
+ const diag = new diagnostic_1.DiagnosticAddendum();
2548
+ if (deprecatedMessage) {
2549
+ diag.addMessage(deprecatedMessage);
2550
+ }
2551
+ if (this._fileInfo.diagnosticRuleSet.reportDeprecated === 'none') {
2552
+ this._evaluator.addDeprecated(errorMessage + diag.getString(), node);
2553
+ }
2554
+ else {
2555
+ this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportDeprecated, diagnosticRules_1.DiagnosticRule.reportDeprecated, errorMessage + diag.getString(), node);
2556
+ }
2557
+ }
2558
+ // We'll leave this disabled for now because this would be too noisy for most
2559
+ // code bases. We may want to add it at some future date.
2560
+ if (0) {
2561
+ const deprecatedForm = (_a = deprecatedAliases.get(node.value)) !== null && _a !== void 0 ? _a : deprecatedSpecialForms.get(node.value);
2562
+ if (deprecatedForm) {
2563
+ if ((0, types_1.isInstantiableClass)(type) && type.details.fullName === deprecatedForm.fullName) {
2564
+ if (this._fileInfo.executionEnvironment.pythonVersion >= deprecatedForm.version) {
2565
+ if (this._fileInfo.diagnosticRuleSet.reportDeprecated === 'none') {
2566
+ this._evaluator.addDeprecated(localize_1.Localizer.Diagnostic.deprecatedType().format({
2567
+ version: (0, pythonVersion_1.versionToString)(deprecatedForm.version),
2568
+ replacement: deprecatedForm.replacementText,
2569
+ }), node);
2570
+ }
2571
+ else {
2572
+ this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportDeprecated, diagnosticRules_1.DiagnosticRule.reportDeprecated, localize_1.Localizer.Diagnostic.deprecatedType().format({
2573
+ version: (0, pythonVersion_1.versionToString)(deprecatedForm.version),
2574
+ replacement: deprecatedForm.replacementText,
2575
+ }), node);
2576
+ }
2577
+ }
2578
+ }
2579
+ }
2505
2580
  }
2506
2581
  }
2507
2582
  _reportUnboundName(node) {
@@ -2742,33 +2817,49 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
2742
2817
  }
2743
2818
  });
2744
2819
  }
2745
- _validateStrictTypeGuardFunction(node, functionType, isMethod) {
2820
+ _validateTypeGuardFunction(node, functionType, isMethod) {
2746
2821
  var _a;
2747
- // Is this a strict type guard function?
2748
- if (!functionType.details.declaredReturnType) {
2822
+ const returnType = functionType.details.declaredReturnType;
2823
+ if (!returnType) {
2749
2824
  return;
2750
2825
  }
2751
- if (!(0, types_1.isClassInstance)(functionType.details.declaredReturnType) ||
2752
- !types_1.ClassType.isBuiltIn(functionType.details.declaredReturnType, 'StrictTypeGuard') ||
2753
- !functionType.details.declaredReturnType.typeArguments ||
2754
- functionType.details.declaredReturnType.typeArguments.length < 1) {
2826
+ if (!(0, types_1.isClassInstance)(returnType) || !returnType.typeArguments || returnType.typeArguments.length < 1) {
2755
2827
  return;
2756
2828
  }
2757
- const typeGuardType = functionType.details.declaredReturnType.typeArguments[0];
2758
- // Determine the type of the first parameter.
2759
- const paramIndex = isMethod && !types_1.FunctionType.isStaticMethod(functionType) ? 1 : 0;
2760
- if (paramIndex >= functionType.details.parameters.length) {
2829
+ const isNormalTypeGuard = types_1.ClassType.isBuiltIn(returnType, 'TypeGuard');
2830
+ const isStrictTypeGuard = types_1.ClassType.isBuiltIn(returnType, 'StrictTypeGuard');
2831
+ if (!isNormalTypeGuard && !isStrictTypeGuard) {
2761
2832
  return;
2762
2833
  }
2763
- const paramType = types_1.FunctionType.getEffectiveParameterType(functionType, paramIndex);
2764
- // Verify that the typeGuardType is a narrower type than the paramType.
2765
- if (!this._evaluator.assignType(paramType, typeGuardType)) {
2766
- const returnAnnotation = node.returnTypeAnnotation || ((_a = node.functionAnnotationComment) === null || _a === void 0 ? void 0 : _a.returnTypeAnnotation);
2767
- if (returnAnnotation) {
2768
- this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.strictTypeGuardReturnType().format({
2769
- type: this._evaluator.printType(paramType),
2770
- returnType: this._evaluator.printType(typeGuardType),
2771
- }), returnAnnotation);
2834
+ // Make sure there's at least one input parameter provided.
2835
+ let paramCount = functionType.details.parameters.length;
2836
+ if (isMethod) {
2837
+ if (types_1.FunctionType.isInstanceMethod(functionType) ||
2838
+ types_1.FunctionType.isConstructorMethod(functionType) ||
2839
+ types_1.FunctionType.isClassMethod(functionType)) {
2840
+ paramCount--;
2841
+ }
2842
+ }
2843
+ if (paramCount < 1) {
2844
+ this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.typeGuardParamCount(), node.name);
2845
+ }
2846
+ if (isStrictTypeGuard) {
2847
+ const typeGuardType = returnType.typeArguments[0];
2848
+ // Determine the type of the first parameter.
2849
+ const paramIndex = isMethod && !types_1.FunctionType.isStaticMethod(functionType) ? 1 : 0;
2850
+ if (paramIndex >= functionType.details.parameters.length) {
2851
+ return;
2852
+ }
2853
+ const paramType = types_1.FunctionType.getEffectiveParameterType(functionType, paramIndex);
2854
+ // Verify that the typeGuardType is a narrower type than the paramType.
2855
+ if (!this._evaluator.assignType(paramType, typeGuardType)) {
2856
+ const returnAnnotation = node.returnTypeAnnotation || ((_a = node.functionAnnotationComment) === null || _a === void 0 ? void 0 : _a.returnTypeAnnotation);
2857
+ if (returnAnnotation) {
2858
+ this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.strictTypeGuardReturnType().format({
2859
+ type: this._evaluator.printType(paramType),
2860
+ returnType: this._evaluator.printType(typeGuardType),
2861
+ }), returnAnnotation);
2862
+ }
2772
2863
  }
2773
2864
  }
2774
2865
  }
@@ -4010,7 +4101,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
4010
4101
  if (types_1.FunctionType.isOverloaded(functionType)) {
4011
4102
  return;
4012
4103
  }
4013
- if (!this._evaluator.assignType(paramType, expectedType)) {
4104
+ const typeVarContext = new typeVarContext_1.TypeVarContext((0, typeUtils_1.getTypeVarScopeId)(functionType));
4105
+ if (!this._evaluator.assignType(paramType, expectedType, /* diag */ undefined, typeVarContext)) {
4014
4106
  this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.clsSelfParamTypeMismatch().format({
4015
4107
  name: paramInfo.name,
4016
4108
  classType: this._evaluator.printType(expectedType),