@zzzen/pyright-internal 1.2.0-dev.20230108 → 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.
- 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 -1
- package/dist/analyzer/checker.js +128 -42
- 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 +4 -2
- 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/program.js +13 -12
- package/dist/analyzer/program.js.map +1 -1
- package/dist/analyzer/service.d.ts +3 -2
- package/dist/analyzer/service.js +14 -12
- 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 +395 -330
- package/dist/analyzer/typeEvaluator.js.map +1 -1
- package/dist/analyzer/typeEvaluatorTypes.d.ts +18 -12
- package/dist/analyzer/typeEvaluatorTypes.js +15 -15
- package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
- package/dist/analyzer/typeGuards.js +25 -2
- package/dist/analyzer/typeGuards.js.map +1 -1
- package/dist/analyzer/typeUtils.d.ts +7 -0
- package/dist/analyzer/typeUtils.js +10 -3
- package/dist/analyzer/typeUtils.js.map +1 -1
- package/dist/analyzer/types.d.ts +3 -0
- package/dist/analyzer/types.js +10 -2
- 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/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/indentationUtils.d.ts +1 -1
- package/dist/languageService/indentationUtils.js +73 -28
- 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 +3 -0
- 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/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 +65 -7
- package/dist/tests/indentationUtils.test.js.map +1 -1
- package/dist/tests/typeEvaluator1.test.js +8 -0
- package/dist/tests/typeEvaluator1.test.js.map +1 -1
- package/dist/tests/typeEvaluator3.test.js +6 -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":"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
|
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,CAAC,cAA+B;;QAC3C,MAAA,IAAI,CAAC,mBAAmB,0CAAE,eAAe,CACrC,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,IAAI,CAAC,IAAI,EACd,cAAc,CACjB,CAAC;IACN,CAAC;IAED,cAAc;;QACV,MAAA,IAAI,CAAC,mBAAmB,0CAAE,cAAc,EAAE,CAAC;IAC/C,CAAC;IAED,WAAW,CAAC,QAAgB;;QACxB,OAAO,MAAA,IAAI,CAAC,WAAW,EAAE,0CAAE,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;IAChG,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,QAAgB,EAAE,KAAY,EAAE,KAAwB;QACjF,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC1B,OAAO,IAAI,CAAC,mBAAmB,CAAC,sBAAsB,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;SAClF;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,aAAa,CACf,gBAAwB,EACxB,kBAA2B,EAC3B,QAAgB,EAChB,KAAwB;QAExB,IAAI,IAAI,CAAC,mBAAmB,EAAE;YAC1B,OAAO,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;SACxG;QAED,IAAA,yBAAc,EACV,IAAI,CAAC,QAAQ;QACb,aAAa,CAAC,SAAS,EACvB,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,qBAAqB,EAC1B,IAAI,CAAC,QAAQ,EACb,KAAK,CACR,CAAC;QACF,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC9F,CAAC;IAED,4BAA4B,CACxB,uBAAgC,EAChC,sBAA+B,EAC/B,cAA+B;;QAE/B,IAAI,sBAAsB,EAAE;YACxB,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC;SACxC;QAED,MAAA,IAAI,CAAC,mBAAmB,0CAAE,4BAA4B,CAAC,uBAAuB,CAAC,CAAC;QAEhF,qDAAqD;QACrD,kBAAkB;QAClB,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,CAAC;QAEvC,gDAAgD;QAChD,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC;IACnE,CAAC;IAED,OAAO;;QACH,MAAA,IAAI,CAAC,mBAAmB,0CAAE,OAAO,EAAE,CAAC;IACxC,CAAC;IAED,OAAO;;QACH,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACxB,MAAA,IAAI,CAAC,mBAAmB,0CAAE,QAAQ,EAAE,CAAC;IACzC,CAAC;IAEO,0BAA0B,CAAC,OAA6B;;QAC5D,MAAA,IAAI,CAAC,mBAAmB,0CAAE,yBAAyB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClE,OAAO,IAAI,CAAC,eAAe,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC;IACnE,CAAC;IAEO,iCAAiC,CAAC,SAA4B;QAClE,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;YACtB,+DAA+D;YAC/D,8DAA8D;YAC9D,qDAAqD;YACrD,IAAI,CAAC,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,qBAAqB,EAAE;gBACzD,IAAI,CAAC,qBAAqB,CAAC;oBACvB,WAAW,EAAE,SAAS;oBACtB,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE;oBAC5C,sBAAsB,EAAE,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE;oBAC9D,qBAAqB,EAAE,IAAI,CAAC,QAAQ,CAAC,uBAAuB,EAAE;oBAC9D,kBAAkB,EAAE,KAAK;oBACzB,wBAAwB,EAAE,KAAK;oBAC/B,WAAW,EAAE,CAAC;iBACjB,CAAC,CAAC;aACN;SACJ;IACL,CAAC;IAES,WAAW;QACjB,OAAO,SAAS,CAAC;IACrB,CAAC;CACJ;AArPD,8DAqPC"}
|
@@ -106,7 +106,7 @@ 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;
|
package/dist/analyzer/checker.js
CHANGED
@@ -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
|
386
|
-
|
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
|
@@ -860,9 +859,9 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
860
859
|
if (!this._isUnboundCheckSuppressed) {
|
861
860
|
this._reportUnboundName(node);
|
862
861
|
}
|
863
|
-
// Report the use of a deprecated symbol.
|
864
|
-
|
865
|
-
|
862
|
+
// Report the use of a deprecated symbol.
|
863
|
+
const type = this._evaluator.getType(node);
|
864
|
+
this._reportDeprecatedUse(node, type);
|
866
865
|
return true;
|
867
866
|
}
|
868
867
|
visitDel(node) {
|
@@ -873,7 +872,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
873
872
|
return false;
|
874
873
|
}
|
875
874
|
visitMemberAccess(node) {
|
876
|
-
this._evaluator.getType(node);
|
875
|
+
const type = this._evaluator.getType(node);
|
876
|
+
this._reportDeprecatedUse(node.memberName, type);
|
877
877
|
this._conditionallyReportPrivateUsage(node.memberName);
|
878
878
|
// Walk the leftExpression but not the memberName.
|
879
879
|
this.walk(node.leftExpression);
|
@@ -911,6 +911,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
911
911
|
return true;
|
912
912
|
}
|
913
913
|
visitImportFromAs(node) {
|
914
|
+
var _a;
|
914
915
|
if (this._fileInfo.isStubFile) {
|
915
916
|
return false;
|
916
917
|
}
|
@@ -934,6 +935,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
934
935
|
this._addMissingModuleSourceDiagnosticIfNeeded(importResult, node.name);
|
935
936
|
break;
|
936
937
|
}
|
938
|
+
const type = this._evaluator.getType((_a = node.alias) !== null && _a !== void 0 ? _a : node.name);
|
939
|
+
this._reportDeprecatedUse(node.name, type);
|
937
940
|
return false;
|
938
941
|
}
|
939
942
|
visitModuleName(node) {
|
@@ -2490,24 +2493,90 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2490
2493
|
}
|
2491
2494
|
return false;
|
2492
2495
|
}
|
2493
|
-
_reportDeprecatedUse(node) {
|
2496
|
+
_reportDeprecatedUse(node, type) {
|
2494
2497
|
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
2498
|
if (!type) {
|
2501
2499
|
return;
|
2502
2500
|
}
|
2503
|
-
|
2504
|
-
|
2505
|
-
|
2506
|
-
|
2507
|
-
|
2508
|
-
|
2509
|
-
|
2510
|
-
|
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
|
+
}
|
2511
2580
|
}
|
2512
2581
|
}
|
2513
2582
|
_reportUnboundName(node) {
|
@@ -2748,33 +2817,49 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2748
2817
|
}
|
2749
2818
|
});
|
2750
2819
|
}
|
2751
|
-
|
2820
|
+
_validateTypeGuardFunction(node, functionType, isMethod) {
|
2752
2821
|
var _a;
|
2753
|
-
|
2754
|
-
if (!
|
2822
|
+
const returnType = functionType.details.declaredReturnType;
|
2823
|
+
if (!returnType) {
|
2755
2824
|
return;
|
2756
2825
|
}
|
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) {
|
2826
|
+
if (!(0, types_1.isClassInstance)(returnType) || !returnType.typeArguments || returnType.typeArguments.length < 1) {
|
2761
2827
|
return;
|
2762
2828
|
}
|
2763
|
-
const
|
2764
|
-
|
2765
|
-
|
2766
|
-
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) {
|
2767
2832
|
return;
|
2768
2833
|
}
|
2769
|
-
|
2770
|
-
|
2771
|
-
if (
|
2772
|
-
|
2773
|
-
|
2774
|
-
|
2775
|
-
|
2776
|
-
|
2777
|
-
|
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
|
+
}
|
2778
2863
|
}
|
2779
2864
|
}
|
2780
2865
|
}
|
@@ -4016,7 +4101,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4016
4101
|
if (types_1.FunctionType.isOverloaded(functionType)) {
|
4017
4102
|
return;
|
4018
4103
|
}
|
4019
|
-
|
4104
|
+
const typeVarContext = new typeVarContext_1.TypeVarContext((0, typeUtils_1.getTypeVarScopeId)(functionType));
|
4105
|
+
if (!this._evaluator.assignType(paramType, expectedType, /* diag */ undefined, typeVarContext)) {
|
4020
4106
|
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.clsSelfParamTypeMismatch().format({
|
4021
4107
|
name: paramInfo.name,
|
4022
4108
|
classType: this._evaluator.printType(expectedType),
|