@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.
- 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 +145 -53
- package/dist/analyzer/checker.js.map +1 -1
- package/dist/analyzer/codeFlowEngine.js +26 -11
- 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/importResolver.d.ts +2 -1
- package/dist/analyzer/importResolver.js +18 -3
- package/dist/analyzer/importResolver.js.map +1 -1
- package/dist/analyzer/patternMatching.js +2 -2
- package/dist/analyzer/patternMatching.js.map +1 -1
- package/dist/analyzer/program.d.ts +1 -0
- package/dist/analyzer/program.js +54 -32
- package/dist/analyzer/program.js.map +1 -1
- package/dist/analyzer/regions.js +14 -5
- package/dist/analyzer/regions.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 +4 -3
- package/dist/analyzer/sourceFile.js +4 -4
- package/dist/analyzer/sourceFile.js.map +1 -1
- package/dist/analyzer/sourceMapper.d.ts +2 -2
- package/dist/analyzer/sourceMapper.js +14 -5
- package/dist/analyzer/sourceMapper.js.map +1 -1
- package/dist/analyzer/typeCacheUtils.d.ts +0 -1
- package/dist/analyzer/typeCacheUtils.js +3 -3
- package/dist/analyzer/typeCacheUtils.js.map +1 -1
- package/dist/analyzer/typeDocStringUtils.d.ts +2 -1
- package/dist/analyzer/typeDocStringUtils.js +18 -7
- package/dist/analyzer/typeDocStringUtils.js.map +1 -1
- package/dist/analyzer/typeEvaluator.js +494 -423
- package/dist/analyzer/typeEvaluator.js.map +1 -1
- package/dist/analyzer/typeEvaluatorTypes.d.ts +20 -13
- package/dist/analyzer/typeEvaluatorTypes.js +15 -15
- package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
- package/dist/analyzer/typeGuards.d.ts +5 -1
- package/dist/analyzer/typeGuards.js +204 -44
- package/dist/analyzer/typeGuards.js.map +1 -1
- package/dist/analyzer/typeUtils.d.ts +8 -0
- package/dist/analyzer/typeUtils.js +15 -4
- 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/commands/quickActionCommand.js +1 -1
- package/dist/commands/quickActionCommand.js.map +1 -1
- package/dist/common/collectionUtils.d.ts +1 -0
- package/dist/common/collectionUtils.js +9 -1
- package/dist/common/collectionUtils.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/common/textEditUtils.d.ts +3 -2
- package/dist/common/textEditUtils.js +11 -10
- package/dist/common/textEditUtils.js.map +1 -1
- package/dist/languageServerBase.d.ts +1 -1
- package/dist/languageServerBase.js +2 -2
- package/dist/languageServerBase.js.map +1 -1
- package/dist/languageService/completionProvider.d.ts +3 -0
- package/dist/languageService/completionProvider.js +212 -159
- package/dist/languageService/completionProvider.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 +0 -1
- package/dist/languageService/hoverProvider.js +7 -20
- package/dist/languageService/hoverProvider.js.map +1 -1
- package/dist/languageService/indentationUtils.d.ts +1 -1
- package/dist/languageService/indentationUtils.js +74 -29
- 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/languageService/tooltipUtils.d.ts +5 -1
- package/dist/languageService/tooltipUtils.js +28 -4
- package/dist/languageService/tooltipUtils.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/completions.test.d.ts +1 -0
- package/dist/tests/completions.test.js +331 -0
- package/dist/tests/completions.test.js.map +1 -0
- package/dist/tests/documentSymbolCollector.test.js +86 -5
- package/dist/tests/documentSymbolCollector.test.js.map +1 -1
- package/dist/tests/filesystem.test.js +11 -0
- package/dist/tests/filesystem.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 +10 -7
- package/dist/tests/harness/fourslash/testState.js.map +1 -1
- package/dist/tests/harness/vfs/filesystem.d.ts +2 -2
- package/dist/tests/harness/vfs/filesystem.js +5 -1
- package/dist/tests/harness/vfs/filesystem.js.map +1 -1
- package/dist/tests/hoverProvider.test.d.ts +1 -0
- package/dist/tests/hoverProvider.test.js +247 -0
- package/dist/tests/hoverProvider.test.js.map +1 -0
- package/dist/tests/indentationUtils.ptvs.test.js +13 -13
- package/dist/tests/indentationUtils.ptvs.test.js.map +1 -1
- package/dist/tests/indentationUtils.test.js +68 -10
- package/dist/tests/indentationUtils.test.js.map +1 -1
- package/dist/tests/typeEvaluator1.test.js +24 -0
- package/dist/tests/typeEvaluator1.test.js.map +1 -1
- package/dist/tests/typeEvaluator2.test.js +5 -1
- package/dist/tests/typeEvaluator2.test.js.map +1 -1
- package/dist/tests/typeEvaluator3.test.js +10 -2
- package/dist/tests/typeEvaluator3.test.js.map +1 -1
- package/dist/tests/typeEvaluator4.test.js +4 -0
- package/dist/tests/typeEvaluator4.test.js.map +1 -1
- package/dist/tests/typeEvaluator5.test.js +6 -0
- package/dist/tests/typeEvaluator5.test.js.map +1 -1
- package/dist/workspaceMap.js +1 -3
- package/dist/workspaceMap.js.map +1 -1
- 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
|
-
|
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,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
|
@@ -531,17 +530,18 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
531
530
|
return true;
|
532
531
|
}
|
533
532
|
visitReturn(node) {
|
534
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
561
|
+
let diagAddendum = new diagnostic_1.DiagnosticAddendum();
|
562
562
|
let returnTypeMatches = false;
|
563
|
-
if (this._evaluator.assignType(declaredReturnType,
|
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,
|
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(
|
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)(
|
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)(
|
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(
|
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.
|
858
|
-
|
859
|
-
|
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
|
-
|
2498
|
-
|
2499
|
-
|
2500
|
-
|
2501
|
-
|
2502
|
-
|
2503
|
-
|
2504
|
-
|
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
|
-
|
2820
|
+
_validateTypeGuardFunction(node, functionType, isMethod) {
|
2746
2821
|
var _a;
|
2747
|
-
|
2748
|
-
if (!
|
2822
|
+
const returnType = functionType.details.declaredReturnType;
|
2823
|
+
if (!returnType) {
|
2749
2824
|
return;
|
2750
2825
|
}
|
2751
|
-
if (!(0, types_1.isClassInstance)(
|
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
|
2758
|
-
|
2759
|
-
|
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
|
-
|
2764
|
-
|
2765
|
-
if (
|
2766
|
-
|
2767
|
-
|
2768
|
-
|
2769
|
-
|
2770
|
-
|
2771
|
-
|
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
|
-
|
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),
|