@zzzen/pyright-internal 1.2.0-dev.20230108 → 1.2.0-dev.20230122
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/analyzerFileInfo.js +14 -1
- package/dist/analyzer/analyzerFileInfo.js.map +1 -1
- package/dist/analyzer/backgroundAnalysisProgram.d.ts +3 -3
- package/dist/analyzer/backgroundAnalysisProgram.js +4 -4
- package/dist/analyzer/backgroundAnalysisProgram.js.map +1 -1
- package/dist/analyzer/checker.d.ts +1 -2
- package/dist/analyzer/checker.js +123 -60
- package/dist/analyzer/checker.js.map +1 -1
- package/dist/analyzer/codeFlowEngine.js +7 -7
- package/dist/analyzer/codeFlowEngine.js.map +1 -1
- package/dist/analyzer/constraintSolver.js +10 -7
- package/dist/analyzer/constraintSolver.js.map +1 -1
- package/dist/analyzer/dataClasses.js +6 -1
- package/dist/analyzer/dataClasses.js.map +1 -1
- package/dist/analyzer/importResolver.d.ts +2 -1
- package/dist/analyzer/importResolver.js +5 -1
- package/dist/analyzer/importResolver.js.map +1 -1
- package/dist/analyzer/parseTreeUtils.d.ts +1 -0
- package/dist/analyzer/parseTreeUtils.js +18 -2
- package/dist/analyzer/parseTreeUtils.js.map +1 -1
- package/dist/analyzer/program.d.ts +1 -1
- package/dist/analyzer/program.js +18 -13
- package/dist/analyzer/program.js.map +1 -1
- package/dist/analyzer/regions.js +8 -12
- package/dist/analyzer/regions.js.map +1 -1
- package/dist/analyzer/service.d.ts +3 -2
- package/dist/analyzer/service.js +15 -13
- package/dist/analyzer/service.js.map +1 -1
- package/dist/analyzer/sourceFile.d.ts +3 -2
- package/dist/analyzer/sourceFile.js +4 -4
- package/dist/analyzer/sourceFile.js.map +1 -1
- package/dist/analyzer/typeCacheUtils.d.ts +2 -1
- package/dist/analyzer/typeCacheUtils.js +5 -1
- package/dist/analyzer/typeCacheUtils.js.map +1 -1
- package/dist/analyzer/typeEvaluator.js +477 -353
- package/dist/analyzer/typeEvaluator.js.map +1 -1
- package/dist/analyzer/typeEvaluatorTypes.d.ts +18 -13
- package/dist/analyzer/typeEvaluatorTypes.js +15 -15
- package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
- package/dist/analyzer/typeGuards.js +27 -2
- package/dist/analyzer/typeGuards.js.map +1 -1
- package/dist/analyzer/typePrinter.js +32 -12
- package/dist/analyzer/typePrinter.js.map +1 -1
- package/dist/analyzer/typeUtils.d.ts +8 -0
- package/dist/analyzer/typeUtils.js +31 -4
- package/dist/analyzer/typeUtils.js.map +1 -1
- package/dist/analyzer/types.d.ts +4 -1
- package/dist/analyzer/types.js +13 -5
- package/dist/analyzer/types.js.map +1 -1
- package/dist/backgroundAnalysisBase.d.ts +4 -1
- package/dist/backgroundAnalysisBase.js +1 -1
- package/dist/backgroundAnalysisBase.js.map +1 -1
- package/dist/backgroundThreadBase.d.ts +5 -2
- package/dist/backgroundThreadBase.js.map +1 -1
- package/dist/commands/createTypeStub.js +3 -0
- package/dist/commands/createTypeStub.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/diagnosticRules.d.ts +1 -0
- package/dist/common/diagnosticRules.js +1 -0
- package/dist/common/diagnosticRules.js.map +1 -1
- package/dist/common/envVarUtils.js +30 -7
- package/dist/common/envVarUtils.js.map +1 -1
- package/dist/common/fileSystem.d.ts +1 -0
- package/dist/common/fileSystem.js.map +1 -1
- package/dist/languageServerBase.js +2 -2
- package/dist/languageServerBase.js.map +1 -1
- package/dist/languageService/documentSymbolCollector.d.ts +12 -4
- package/dist/languageService/documentSymbolCollector.js +103 -22
- package/dist/languageService/documentSymbolCollector.js.map +1 -1
- package/dist/languageService/documentSymbolProvider.js +6 -0
- package/dist/languageService/documentSymbolProvider.js.map +1 -1
- package/dist/languageService/hoverProvider.d.ts +1 -0
- package/dist/languageService/hoverProvider.js +24 -2
- package/dist/languageService/hoverProvider.js.map +1 -1
- package/dist/languageService/indentationUtils.d.ts +1 -1
- package/dist/languageService/indentationUtils.js +86 -30
- package/dist/languageService/indentationUtils.js.map +1 -1
- package/dist/languageService/referencesProvider.d.ts +5 -4
- package/dist/languageService/referencesProvider.js +15 -10
- package/dist/languageService/referencesProvider.js.map +1 -1
- package/dist/languageService/renameModuleProvider.js +11 -11
- package/dist/languageService/renameModuleProvider.js.map +1 -1
- package/dist/localization/localize.d.ts +3 -0
- package/dist/localization/localize.js +3 -0
- package/dist/localization/localize.js.map +1 -1
- package/dist/localization/package.nls.en-us.json +4 -1
- package/dist/parser/stringTokenUtils.js +1 -1
- package/dist/parser/stringTokenUtils.js.map +1 -1
- package/dist/parser/tokenizer.js +6 -2
- package/dist/parser/tokenizer.js.map +1 -1
- package/dist/tests/checker.test.js +16 -0
- package/dist/tests/checker.test.js.map +1 -1
- package/dist/tests/documentSymbolCollector.test.js +86 -5
- package/dist/tests/documentSymbolCollector.test.js.map +1 -1
- package/dist/tests/fourslash/hover.overloadedFunction.fourslash.d.ts +1 -0
- package/dist/tests/fourslash/hover.overloadedFunction.fourslash.js +23 -0
- package/dist/tests/fourslash/hover.overloadedFunction.fourslash.js.map +1 -0
- package/dist/tests/fourslash/rename.init.fourslash.d.ts +1 -0
- package/dist/tests/fourslash/rename.init.fourslash.js +23 -0
- package/dist/tests/fourslash/rename.init.fourslash.js.map +1 -0
- package/dist/tests/harness/fourslash/testState.d.ts +2 -2
- package/dist/tests/harness/fourslash/testState.js +9 -6
- package/dist/tests/harness/fourslash/testState.js.map +1 -1
- package/dist/tests/indentationUtils.ptvs.test.js +12 -12
- package/dist/tests/indentationUtils.ptvs.test.js.map +1 -1
- package/dist/tests/indentationUtils.test.js +116 -7
- package/dist/tests/indentationUtils.test.js.map +1 -1
- package/dist/tests/pathUtils.test.js +10 -0
- package/dist/tests/pathUtils.test.js.map +1 -1
- package/dist/tests/typeEvaluator1.test.js +16 -0
- package/dist/tests/typeEvaluator1.test.js.map +1 -1
- package/dist/tests/typeEvaluator3.test.js +10 -2
- package/dist/tests/typeEvaluator3.test.js.map +1 -1
- package/package.json +3 -3
@@ -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
|
-
|
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;;;
|
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":";AAAA;;;;;;;GAOG;;;AAYH,yCAAsE;AAGtE,uCAA+E;AAE/E,MAAa,yBAAyB;IAIlC,YACY,QAA0B,EAC1B,cAA6B,EAC7B,eAA+B,EACvC,SAAoC,EAC1B,mBAA4C,EAC9C,gBAAkC,EAClC,eAAyB,EACjC,YAA2B;QAPnB,aAAQ,GAAR,QAAQ,CAAkB;QAC1B,mBAAc,GAAd,cAAc,CAAe;QAC7B,oBAAe,GAAf,eAAe,CAAgB;QAE7B,wBAAmB,GAAnB,mBAAmB,CAAyB;QAC9C,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,oBAAe,GAAf,eAAe,CAAU;QAGjC,IAAI,CAAC,QAAQ,GAAG,IAAI,iBAAO,CACvB,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,QAAQ,EACb,SAAS,EACT,SAAS,EACT,IAAI,CAAC,eAAe,EACpB,YAAY,CACf,CAAC;IACN,CAAC;IAED,IAAI,aAAa;QACb,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED,IAAI,cAAc;QACd,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;IAED,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;IACrC,CAAC;IAED,IAAI,kBAAkB;QAClB,OAAO,IAAI,CAAC,mBAAmB,CAAC;IACpC,CAAC;IAED,QAAQ,CAAC,QAAgB;QACrB,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACnD,CAAC;IAED,gBAAgB,CAAC,aAA4B;;QACzC,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;QACpC,MAAA,IAAI,CAAC,mBAAmB,0CAAE,gBAAgB,CAAC,aAAa,CAAC,CAAC;QAC1D,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAClD,CAAC;IAED,iBAAiB,CAAC,cAA8B;;QAC5C,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;QACtC,MAAA,IAAI,CAAC,mBAAmB,0CAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC;QAE5D,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;QAChD,IAAI,CAAC,cAAc,CAAC,wBAAwB,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,CAAC;IACtG,CAAC;IAED,eAAe,CAAC,SAAmB;;QAC/B,MAAA,IAAI,CAAC,mBAAmB,0CAAE,eAAe,CAAC,SAAS,CAAC,CAAC;QACrD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QAC7D,IAAI,CAAC,iCAAiC,CAAC,WAAW,CAAC,CAAC;IACxD,CAAC;IAED,2BAA2B,CAAC,WAAqB;;QAC7C,MAAA,IAAI,CAAC,mBAAmB,0CAAE,2BAA2B,CAAC,WAAW,CAAC,CAAC;QACnE,IAAI,CAAC,QAAQ,CAAC,2BAA2B,CAAC,WAAW,CAAC,CAAC;IAC3D,CAAC;IAED,aAAa,CAAC,QAAgB,EAAE,OAAsB,EAAE,QAAgB,EAAE,OAAwB;;QAC9F,MAAA,IAAI,CAAC,mBAAmB,0CAAE,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;QAC1F,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;IAClF,CAAC;IAED,kBAAkB,CAAC,QAAgB;QAC/B,OAAO,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACtD,CAAC;IAED,qBAAqB,CAAC,QAAgB,EAAE,eAAmC;;QACvE,MAAA,IAAI,CAAC,mBAAmB,0CAAE,qBAAqB,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;QAC3E,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IACnE,CAAC;IAED,sBAAsB,CAClB,IAAY,EACZ,OAAsB,EACtB,QAA0C,EAC1C,OAAwB;;QAExB,MAAA,IAAI,CAAC,mBAAmB,0CAAE,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC1E,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC9D,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,EAAE,2BAA2B,CAAC,IAAI,CAAC,CAAC;IAClE,CAAC;IAED,aAAa,CAAC,QAAgB,EAAE,SAAmB;;QAC/C,MAAA,IAAI,CAAC,mBAAmB,0CAAE,aAAa,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACrE,IAAI,CAAC,iCAAiC,CAAC,WAAW,CAAC,CAAC;IACxD,CAAC;IAED,iBAAiB,CAAC,qBAA8B,EAAE,cAAc,GAAG,IAAI;;QACnE,MAAA,IAAI,CAAC,mBAAmB,0CAAE,iBAAiB,CAAC,qBAAqB,EAAE,cAAc,CAAC,CAAC;QACnF,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,cAAc,CAAC,CAAC;IAC3E,CAAC;IAED,cAAc,CAAC,SAAmB,EAAE,qBAA8B,EAAE,cAAc,GAAG,IAAI;;QACrF,MAAA,IAAI,CAAC,mBAAmB,0CAAE,cAAc,CAAC,SAAS,EAAE,qBAAqB,EAAE,cAAc,CAAC,CAAC;QAC3F,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,SAAS,EAAE,qBAAqB,EAAE,cAAc,CAAC,CAAC;IACnF,CAAC;IAED,qBAAqB,CAAC,QAAmC;;QACrD,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC;QACtC,MAAA,IAAI,CAAC,mBAAmB,0CAAE,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAC9D,CAAC;IAED,aAAa,CAAC,KAAwB;QAClC,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC1B,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,CAAC;YAClE,OAAO,KAAK,CAAC;SAChB;QAED,OAAO,IAAA,yBAAc,EACjB,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,qBAAqB,EAC1B,IAAI,CAAC,QAAQ,EACb,KAAK,CACR,CAAC;IACN,CAAC;IAED,WAAW,CAAC,QAAgB,EAAE,KAAwB;QAClD,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACtD,CAAC;IAED,aAAa,CAAC,YAA0B;;QACpC,MAAA,IAAI,CAAC,mBAAmB,0CAAE,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpH,CAAC;IAED,eAAe;;
|
1
|
+
{"version":3,"file":"backgroundAnalysisProgram.js","sourceRoot":"","sources":["../../../src/analyzer/backgroundAnalysisProgram.ts"],"names":[],"mappings":"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"}
|
@@ -106,12 +106,11 @@ export declare class Checker extends ParseTreeWalker {
|
|
106
106
|
private _conditionallyReportPrivateUsage;
|
107
107
|
private _validateEnumClassOverride;
|
108
108
|
private _validateTypedDictClassSuite;
|
109
|
-
private
|
109
|
+
private _validateTypeGuardFunction;
|
110
110
|
private _validateDunderSignatures;
|
111
111
|
private _validateFunctionReturn;
|
112
112
|
private _validateFinalMemberOverrides;
|
113
113
|
private _reportDuplicateEnumMembers;
|
114
|
-
private _validateInitSubclassArgs;
|
115
114
|
private _validateProtocolCompatibility;
|
116
115
|
private _validateDataClassPostInit;
|
117
116
|
private _validateFinalClassNotAbstract;
|
package/dist/analyzer/checker.js
CHANGED
@@ -215,7 +215,6 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
215
215
|
this._validateFinalClassNotAbstract(classTypeResult.classType, node);
|
216
216
|
this._validateDataClassPostInit(classTypeResult.classType, node);
|
217
217
|
this._validateProtocolCompatibility(classTypeResult.classType, node);
|
218
|
-
this._validateInitSubclassArgs(classTypeResult.classType, node);
|
219
218
|
this._reportDuplicateEnumMembers(classTypeResult.classType);
|
220
219
|
if (types_1.ClassType.isTypedDictClass(classTypeResult.classType)) {
|
221
220
|
this._validateTypedDictClassSuite(node.suite);
|
@@ -382,9 +381,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
382
381
|
}
|
383
382
|
// Verify common dunder signatures.
|
384
383
|
this._validateDunderSignatures(node, functionTypeResult.functionType, containingClassNode !== undefined);
|
385
|
-
// Verify
|
386
|
-
|
387
|
-
this._validateStrictTypeGuardFunction(node, functionTypeResult.functionType, containingClassNode !== undefined);
|
384
|
+
// Verify TypeGuard or StrictTypeGuard functions.
|
385
|
+
this._validateTypeGuardFunction(node, functionTypeResult.functionType, containingClassNode !== undefined);
|
388
386
|
this._validateFunctionTypeVarUsage(node, functionTypeResult);
|
389
387
|
}
|
390
388
|
// If we're at the module level within a stub file, report a diagnostic
|
@@ -860,9 +858,9 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
860
858
|
if (!this._isUnboundCheckSuppressed) {
|
861
859
|
this._reportUnboundName(node);
|
862
860
|
}
|
863
|
-
// Report the use of a deprecated symbol.
|
864
|
-
|
865
|
-
|
861
|
+
// Report the use of a deprecated symbol.
|
862
|
+
const type = this._evaluator.getType(node);
|
863
|
+
this._reportDeprecatedUse(node, type);
|
866
864
|
return true;
|
867
865
|
}
|
868
866
|
visitDel(node) {
|
@@ -873,7 +871,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
873
871
|
return false;
|
874
872
|
}
|
875
873
|
visitMemberAccess(node) {
|
876
|
-
this._evaluator.getType(node);
|
874
|
+
const type = this._evaluator.getType(node);
|
875
|
+
this._reportDeprecatedUse(node.memberName, type);
|
877
876
|
this._conditionallyReportPrivateUsage(node.memberName);
|
878
877
|
// Walk the leftExpression but not the memberName.
|
879
878
|
this.walk(node.leftExpression);
|
@@ -911,6 +910,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
911
910
|
return true;
|
912
911
|
}
|
913
912
|
visitImportFromAs(node) {
|
913
|
+
var _a;
|
914
914
|
if (this._fileInfo.isStubFile) {
|
915
915
|
return false;
|
916
916
|
}
|
@@ -934,6 +934,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
934
934
|
this._addMissingModuleSourceDiagnosticIfNeeded(importResult, node.name);
|
935
935
|
break;
|
936
936
|
}
|
937
|
+
const type = this._evaluator.getType((_a = node.alias) !== null && _a !== void 0 ? _a : node.name);
|
938
|
+
this._reportDeprecatedUse(node.name, type);
|
937
939
|
return false;
|
938
940
|
}
|
939
941
|
visitModuleName(node) {
|
@@ -986,7 +988,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
986
988
|
return false;
|
987
989
|
}
|
988
990
|
_getImportResult(node, filePath) {
|
989
|
-
const execEnv = this._importResolver.
|
991
|
+
const execEnv = this._importResolver.getConfigOptions().findExecEnvironment(filePath);
|
990
992
|
const moduleNameNode = node.parent.module;
|
991
993
|
// Handle both absolute and relative imports.
|
992
994
|
const moduleName = moduleNameNode.leadingDots === 0
|
@@ -2490,24 +2492,84 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2490
2492
|
}
|
2491
2493
|
return false;
|
2492
2494
|
}
|
2493
|
-
_reportDeprecatedUse(node) {
|
2495
|
+
_reportDeprecatedUse(node, type) {
|
2494
2496
|
var _a;
|
2495
|
-
const deprecatedForm = (_a = deprecatedAliases.get(node.value)) !== null && _a !== void 0 ? _a : deprecatedSpecialForms.get(node.value);
|
2496
|
-
if (!deprecatedForm) {
|
2497
|
-
return;
|
2498
|
-
}
|
2499
|
-
const type = this._evaluator.getType(node);
|
2500
2497
|
if (!type) {
|
2501
2498
|
return;
|
2502
2499
|
}
|
2503
|
-
|
2504
|
-
|
2505
|
-
|
2506
|
-
|
2507
|
-
|
2508
|
-
|
2509
|
-
|
2510
|
-
|
2500
|
+
let errorMessage;
|
2501
|
+
let deprecatedMessage;
|
2502
|
+
(0, typeUtils_1.doForEachSubtype)(type, (subtype) => {
|
2503
|
+
if ((0, types_1.isClass)(subtype)) {
|
2504
|
+
if (!subtype.includeSubclasses &&
|
2505
|
+
subtype.details.deprecatedMessage !== undefined &&
|
2506
|
+
node.value === subtype.details.name) {
|
2507
|
+
deprecatedMessage = subtype.details.deprecatedMessage;
|
2508
|
+
errorMessage = localize_1.Localizer.Diagnostic.deprecatedClass();
|
2509
|
+
}
|
2510
|
+
}
|
2511
|
+
else if ((0, types_1.isFunction)(subtype)) {
|
2512
|
+
if (subtype.details.deprecatedMessage !== undefined && node.value === subtype.details.name) {
|
2513
|
+
deprecatedMessage = subtype.details.deprecatedMessage;
|
2514
|
+
errorMessage = localize_1.Localizer.Diagnostic.deprecatedFunction();
|
2515
|
+
}
|
2516
|
+
}
|
2517
|
+
else if ((0, types_1.isOverloadedFunction)(subtype)) {
|
2518
|
+
// Determine if the node is part of a call expression. If so,
|
2519
|
+
// we can determine which overload(s) were used to satisfy
|
2520
|
+
// the call expression and determine whether any of them
|
2521
|
+
// are deprecated.
|
2522
|
+
const callNode = ParseTreeUtils.getCallForName(node);
|
2523
|
+
if (callNode) {
|
2524
|
+
const callTypeResult = this._evaluator.getTypeResult(callNode);
|
2525
|
+
if (callTypeResult &&
|
2526
|
+
callTypeResult.overloadsUsedForCall &&
|
2527
|
+
callTypeResult.overloadsUsedForCall.length > 0) {
|
2528
|
+
callTypeResult.overloadsUsedForCall.forEach((overload) => {
|
2529
|
+
if (overload.details.deprecatedMessage !== undefined &&
|
2530
|
+
node.value === overload.details.name) {
|
2531
|
+
deprecatedMessage = overload.details.deprecatedMessage;
|
2532
|
+
errorMessage = localize_1.Localizer.Diagnostic.deprecatedFunction();
|
2533
|
+
}
|
2534
|
+
});
|
2535
|
+
}
|
2536
|
+
}
|
2537
|
+
}
|
2538
|
+
});
|
2539
|
+
if (errorMessage) {
|
2540
|
+
const diag = new diagnostic_1.DiagnosticAddendum();
|
2541
|
+
if (deprecatedMessage) {
|
2542
|
+
diag.addMessage(deprecatedMessage);
|
2543
|
+
}
|
2544
|
+
if (this._fileInfo.diagnosticRuleSet.reportDeprecated === 'none') {
|
2545
|
+
this._evaluator.addDeprecated(errorMessage + diag.getString(), node);
|
2546
|
+
}
|
2547
|
+
else {
|
2548
|
+
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportDeprecated, diagnosticRules_1.DiagnosticRule.reportDeprecated, errorMessage + diag.getString(), node);
|
2549
|
+
}
|
2550
|
+
}
|
2551
|
+
// We'll leave this disabled for now because this would be too noisy for most
|
2552
|
+
// code bases. We may want to add it at some future date.
|
2553
|
+
if (0) {
|
2554
|
+
const deprecatedForm = (_a = deprecatedAliases.get(node.value)) !== null && _a !== void 0 ? _a : deprecatedSpecialForms.get(node.value);
|
2555
|
+
if (deprecatedForm) {
|
2556
|
+
if ((0, types_1.isInstantiableClass)(type) && type.details.fullName === deprecatedForm.fullName) {
|
2557
|
+
if (this._fileInfo.executionEnvironment.pythonVersion >= deprecatedForm.version) {
|
2558
|
+
if (this._fileInfo.diagnosticRuleSet.reportDeprecated === 'none') {
|
2559
|
+
this._evaluator.addDeprecated(localize_1.Localizer.Diagnostic.deprecatedType().format({
|
2560
|
+
version: (0, pythonVersion_1.versionToString)(deprecatedForm.version),
|
2561
|
+
replacement: deprecatedForm.replacementText,
|
2562
|
+
}), node);
|
2563
|
+
}
|
2564
|
+
else {
|
2565
|
+
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportDeprecated, diagnosticRules_1.DiagnosticRule.reportDeprecated, localize_1.Localizer.Diagnostic.deprecatedType().format({
|
2566
|
+
version: (0, pythonVersion_1.versionToString)(deprecatedForm.version),
|
2567
|
+
replacement: deprecatedForm.replacementText,
|
2568
|
+
}), node);
|
2569
|
+
}
|
2570
|
+
}
|
2571
|
+
}
|
2572
|
+
}
|
2511
2573
|
}
|
2512
2574
|
}
|
2513
2575
|
_reportUnboundName(node) {
|
@@ -2748,33 +2810,49 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2748
2810
|
}
|
2749
2811
|
});
|
2750
2812
|
}
|
2751
|
-
|
2813
|
+
_validateTypeGuardFunction(node, functionType, isMethod) {
|
2752
2814
|
var _a;
|
2753
|
-
|
2754
|
-
if (!
|
2815
|
+
const returnType = functionType.details.declaredReturnType;
|
2816
|
+
if (!returnType) {
|
2755
2817
|
return;
|
2756
2818
|
}
|
2757
|
-
if (!(0, types_1.isClassInstance)(
|
2758
|
-
!types_1.ClassType.isBuiltIn(functionType.details.declaredReturnType, 'StrictTypeGuard') ||
|
2759
|
-
!functionType.details.declaredReturnType.typeArguments ||
|
2760
|
-
functionType.details.declaredReturnType.typeArguments.length < 1) {
|
2819
|
+
if (!(0, types_1.isClassInstance)(returnType) || !returnType.typeArguments || returnType.typeArguments.length < 1) {
|
2761
2820
|
return;
|
2762
2821
|
}
|
2763
|
-
const
|
2764
|
-
|
2765
|
-
|
2766
|
-
if (paramIndex >= functionType.details.parameters.length) {
|
2822
|
+
const isNormalTypeGuard = types_1.ClassType.isBuiltIn(returnType, 'TypeGuard');
|
2823
|
+
const isStrictTypeGuard = types_1.ClassType.isBuiltIn(returnType, 'StrictTypeGuard');
|
2824
|
+
if (!isNormalTypeGuard && !isStrictTypeGuard) {
|
2767
2825
|
return;
|
2768
2826
|
}
|
2769
|
-
|
2770
|
-
|
2771
|
-
if (
|
2772
|
-
|
2773
|
-
|
2774
|
-
|
2775
|
-
|
2776
|
-
|
2777
|
-
|
2827
|
+
// Make sure there's at least one input parameter provided.
|
2828
|
+
let paramCount = functionType.details.parameters.length;
|
2829
|
+
if (isMethod) {
|
2830
|
+
if (types_1.FunctionType.isInstanceMethod(functionType) ||
|
2831
|
+
types_1.FunctionType.isConstructorMethod(functionType) ||
|
2832
|
+
types_1.FunctionType.isClassMethod(functionType)) {
|
2833
|
+
paramCount--;
|
2834
|
+
}
|
2835
|
+
}
|
2836
|
+
if (paramCount < 1) {
|
2837
|
+
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.typeGuardParamCount(), node.name);
|
2838
|
+
}
|
2839
|
+
if (isStrictTypeGuard) {
|
2840
|
+
const typeGuardType = returnType.typeArguments[0];
|
2841
|
+
// Determine the type of the first parameter.
|
2842
|
+
const paramIndex = isMethod && !types_1.FunctionType.isStaticMethod(functionType) ? 1 : 0;
|
2843
|
+
if (paramIndex >= functionType.details.parameters.length) {
|
2844
|
+
return;
|
2845
|
+
}
|
2846
|
+
const paramType = types_1.FunctionType.getEffectiveParameterType(functionType, paramIndex);
|
2847
|
+
// Verify that the typeGuardType is a narrower type than the paramType.
|
2848
|
+
if (!this._evaluator.assignType(paramType, typeGuardType)) {
|
2849
|
+
const returnAnnotation = node.returnTypeAnnotation || ((_a = node.functionAnnotationComment) === null || _a === void 0 ? void 0 : _a.returnTypeAnnotation);
|
2850
|
+
if (returnAnnotation) {
|
2851
|
+
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.strictTypeGuardReturnType().format({
|
2852
|
+
type: this._evaluator.printType(paramType),
|
2853
|
+
returnType: this._evaluator.printType(typeGuardType),
|
2854
|
+
}), returnAnnotation);
|
2855
|
+
}
|
2778
2856
|
}
|
2779
2857
|
}
|
2780
2858
|
}
|
@@ -2914,22 +2992,6 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2914
2992
|
}
|
2915
2993
|
});
|
2916
2994
|
}
|
2917
|
-
_validateInitSubclassArgs(classType, node) {
|
2918
|
-
const argList = [];
|
2919
|
-
// Collect arguments that will be passed to the `__init_subclass__`
|
2920
|
-
// method described in PEP 487.
|
2921
|
-
node.arguments.forEach((arg) => {
|
2922
|
-
if (arg.name && arg.name.value !== 'metaclass') {
|
2923
|
-
argList.push({
|
2924
|
-
argumentCategory: 0 /* Simple */,
|
2925
|
-
node: arg,
|
2926
|
-
name: arg.name,
|
2927
|
-
valueExpression: arg.valueExpression,
|
2928
|
-
});
|
2929
|
-
}
|
2930
|
-
});
|
2931
|
-
this._evaluator.validateInitSubclassArgs(node, classType, argList);
|
2932
|
-
}
|
2933
2995
|
// If a non-protocol class explicitly inherits from a protocol class, this method
|
2934
2996
|
// verifies that any class or instance variables declared but not assigned
|
2935
2997
|
// in the protocol class are implemented in the subclass. It also checks that any
|
@@ -4016,7 +4078,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4016
4078
|
if (types_1.FunctionType.isOverloaded(functionType)) {
|
4017
4079
|
return;
|
4018
4080
|
}
|
4019
|
-
|
4081
|
+
const typeVarContext = new typeVarContext_1.TypeVarContext((0, typeUtils_1.getTypeVarScopeId)(functionType));
|
4082
|
+
if (!this._evaluator.assignType(paramType, expectedType, /* diag */ undefined, typeVarContext)) {
|
4020
4083
|
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.clsSelfParamTypeMismatch().format({
|
4021
4084
|
name: paramInfo.name,
|
4022
4085
|
classType: this._evaluator.printType(expectedType),
|