@zzzen/pyright-internal 1.2.0-dev.20230430 → 1.2.0-dev.20230514
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/backgroundAnalysisProgram.d.ts +4 -1
- package/dist/analyzer/backgroundAnalysisProgram.js +12 -0
- package/dist/analyzer/backgroundAnalysisProgram.js.map +1 -1
- package/dist/analyzer/checker.d.ts +1 -0
- package/dist/analyzer/checker.js +89 -6
- package/dist/analyzer/checker.js.map +1 -1
- package/dist/analyzer/constraintSolver.js +14 -15
- package/dist/analyzer/constraintSolver.js.map +1 -1
- package/dist/analyzer/constructors.d.ts +6 -0
- package/dist/analyzer/constructors.js +513 -0
- package/dist/analyzer/constructors.js.map +1 -0
- package/dist/analyzer/dataClasses.js +86 -2
- package/dist/analyzer/dataClasses.js.map +1 -1
- package/dist/analyzer/docStringConversion.js +1 -1
- package/dist/analyzer/docStringConversion.js.map +1 -1
- package/dist/analyzer/enums.js +62 -8
- package/dist/analyzer/enums.js.map +1 -1
- package/dist/analyzer/importResolver.js +47 -29
- package/dist/analyzer/importResolver.js.map +1 -1
- package/dist/analyzer/importStatementUtils.d.ts +2 -2
- package/dist/analyzer/importStatementUtils.js.map +1 -1
- package/dist/analyzer/namedTuples.js +3 -6
- package/dist/analyzer/namedTuples.js.map +1 -1
- package/dist/analyzer/operations.d.ts +16 -0
- package/dist/analyzer/operations.js +749 -0
- package/dist/analyzer/operations.js.map +1 -0
- package/dist/analyzer/parseTreeUtils.d.ts +4 -2
- package/dist/analyzer/parseTreeUtils.js +32 -1
- package/dist/analyzer/parseTreeUtils.js.map +1 -1
- package/dist/analyzer/patternMatching.js +16 -0
- package/dist/analyzer/patternMatching.js.map +1 -1
- package/dist/analyzer/program.d.ts +11 -33
- package/dist/analyzer/program.js +73 -735
- package/dist/analyzer/program.js.map +1 -1
- package/dist/analyzer/protocols.js +1 -1
- package/dist/analyzer/protocols.js.map +1 -1
- package/dist/analyzer/service.d.ts +5 -21
- package/dist/analyzer/service.js +26 -33
- package/dist/analyzer/service.js.map +1 -1
- package/dist/analyzer/sourceFile.d.ts +9 -41
- package/dist/analyzer/sourceFile.js +219 -238
- package/dist/analyzer/sourceFile.js.map +1 -1
- package/dist/analyzer/sourceFileInfoUtils.d.ts +3 -9
- package/dist/analyzer/sourceFileInfoUtils.js.map +1 -1
- package/dist/analyzer/symbol.d.ts +3 -1
- package/dist/analyzer/symbol.js +5 -0
- package/dist/analyzer/symbol.js.map +1 -1
- package/dist/analyzer/typeEvaluator.js +460 -1425
- package/dist/analyzer/typeEvaluator.js.map +1 -1
- package/dist/analyzer/typeEvaluatorTypes.d.ts +42 -7
- package/dist/analyzer/typeEvaluatorTypes.js +33 -1
- package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
- package/dist/analyzer/typeGuards.js +2 -8
- package/dist/analyzer/typeGuards.js.map +1 -1
- package/dist/analyzer/typePrinter.d.ts +3 -3
- package/dist/analyzer/typePrinter.js +247 -100
- package/dist/analyzer/typePrinter.js.map +1 -1
- package/dist/analyzer/typeUtils.d.ts +14 -7
- package/dist/analyzer/typeUtils.js +204 -49
- package/dist/analyzer/typeUtils.js.map +1 -1
- package/dist/analyzer/typeVarContext.d.ts +6 -7
- package/dist/analyzer/typeVarContext.js +21 -32
- package/dist/analyzer/typeVarContext.js.map +1 -1
- package/dist/analyzer/typedDicts.js +2 -2
- package/dist/analyzer/typedDicts.js.map +1 -1
- package/dist/analyzer/types.d.ts +7 -4
- package/dist/analyzer/types.js +20 -10
- package/dist/analyzer/types.js.map +1 -1
- package/dist/backgroundAnalysisBase.d.ts +1 -1
- package/dist/backgroundAnalysisBase.js +16 -0
- package/dist/backgroundAnalysisBase.js.map +1 -1
- package/dist/commands/dumpFileDebugInfoCommand.js +0 -1
- package/dist/commands/dumpFileDebugInfoCommand.js.map +1 -1
- package/dist/common/extensibility.d.ts +28 -4
- package/dist/common/extensibility.js.map +1 -1
- package/dist/common/logTracker.d.ts +2 -0
- package/dist/common/logTracker.js +8 -1
- package/dist/common/logTracker.js.map +1 -1
- package/dist/common/lspUtils.d.ts +4 -1
- package/dist/common/lspUtils.js +38 -1
- package/dist/common/lspUtils.js.map +1 -1
- package/dist/common/pathUtils.d.ts +11 -11
- package/dist/common/pathUtils.js.map +1 -1
- package/dist/common/pythonVersion.d.ts +2 -1
- package/dist/common/pythonVersion.js +1 -0
- package/dist/common/pythonVersion.js.map +1 -1
- package/dist/common/workspaceEditUtils.d.ts +8 -8
- package/dist/common/workspaceEditUtils.js +10 -10
- package/dist/common/workspaceEditUtils.js.map +1 -1
- package/dist/languageServerBase.d.ts +3 -7
- package/dist/languageServerBase.js +41 -73
- package/dist/languageServerBase.js.map +1 -1
- package/dist/languageService/autoImporter.d.ts +50 -51
- package/dist/languageService/autoImporter.js +125 -210
- package/dist/languageService/autoImporter.js.map +1 -1
- package/dist/languageService/callHierarchyProvider.d.ts +1 -1
- package/dist/languageService/callHierarchyProvider.js +11 -37
- package/dist/languageService/callHierarchyProvider.js.map +1 -1
- package/dist/languageService/completionProvider.d.ts +39 -81
- package/dist/languageService/completionProvider.js +572 -801
- package/dist/languageService/completionProvider.js.map +1 -1
- package/dist/languageService/documentHighlightProvider.js +1 -1
- package/dist/languageService/documentHighlightProvider.js.map +1 -1
- package/dist/languageService/documentSymbolCollector.d.ts +6 -7
- package/dist/languageService/documentSymbolCollector.js +47 -28
- package/dist/languageService/documentSymbolCollector.js.map +1 -1
- package/dist/languageService/documentSymbolProvider.d.ts +13 -35
- package/dist/languageService/documentSymbolProvider.js +52 -264
- package/dist/languageService/documentSymbolProvider.js.map +1 -1
- package/dist/languageService/hoverProvider.d.ts +5 -6
- package/dist/languageService/hoverProvider.js +40 -132
- package/dist/languageService/hoverProvider.js.map +1 -1
- package/dist/languageService/referencesProvider.d.ts +6 -11
- package/dist/languageService/referencesProvider.js +23 -17
- package/dist/languageService/referencesProvider.js.map +1 -1
- package/dist/languageService/renameProvider.d.ts +16 -0
- package/dist/languageService/renameProvider.js +139 -0
- package/dist/languageService/renameProvider.js.map +1 -0
- package/dist/languageService/symbolIndexer.d.ts +31 -0
- package/dist/languageService/symbolIndexer.js +105 -0
- package/dist/languageService/symbolIndexer.js.map +1 -0
- package/dist/languageService/tooltipUtils.d.ts +8 -1
- package/dist/languageService/tooltipUtils.js +102 -1
- package/dist/languageService/tooltipUtils.js.map +1 -1
- package/dist/languageService/workspaceSymbolProvider.d.ts +17 -0
- package/dist/languageService/workspaceSymbolProvider.js +133 -0
- package/dist/languageService/workspaceSymbolProvider.js.map +1 -0
- package/dist/localization/localize.d.ts +33 -15
- package/dist/localization/localize.js +13 -7
- package/dist/localization/localize.js.map +1 -1
- package/dist/localization/package.nls.en-us.json +14 -7
- package/dist/parser/parser.js +3 -0
- package/dist/parser/parser.js.map +1 -1
- package/dist/pyright.js +26 -4
- package/dist/pyright.js.map +1 -1
- package/dist/tests/chainedSourceFiles.test.js +15 -20
- package/dist/tests/chainedSourceFiles.test.js.map +1 -1
- package/dist/tests/checker.test.js +14 -0
- package/dist/tests/checker.test.js.map +1 -1
- package/dist/tests/completions.test.js +11 -236
- package/dist/tests/completions.test.js.map +1 -1
- package/dist/tests/docStringConversion.test.js +36 -2
- package/dist/tests/docStringConversion.test.js.map +1 -1
- package/dist/tests/documentSymbolCollector.test.js +3 -3
- package/dist/tests/documentSymbolCollector.test.js.map +1 -1
- package/dist/tests/fourslash/completions.override2.fourslash.js +1 -16
- package/dist/tests/fourslash/completions.override2.fourslash.js.map +1 -1
- package/dist/tests/fourslash/fourslash.d.ts +4 -4
- package/dist/tests/fourslash/missingTypeStub.codeAction.fourslash.js +1 -1
- package/dist/tests/fourslash/missingTypeStub.codeAction.fourslash.js.map +1 -1
- package/dist/tests/harness/fourslash/testState.d.ts +17 -11
- package/dist/tests/harness/fourslash/testState.js +39 -50
- package/dist/tests/harness/fourslash/testState.js.map +1 -1
- package/dist/tests/importResolver.test.js +81 -1
- package/dist/tests/importResolver.test.js.map +1 -1
- package/dist/tests/sourceFile.test.js +1 -1
- package/dist/tests/sourceFile.test.js.map +1 -1
- package/dist/tests/testStateUtils.d.ts +2 -2
- package/dist/tests/testStateUtils.js +38 -8
- package/dist/tests/testStateUtils.js.map +1 -1
- package/dist/tests/typeEvaluator2.test.js +13 -1
- package/dist/tests/typeEvaluator2.test.js.map +1 -1
- package/dist/tests/typeEvaluator3.test.js +5 -1
- package/dist/tests/typeEvaluator3.test.js.map +1 -1
- package/dist/tests/typeEvaluator4.test.js +9 -1
- package/dist/tests/typeEvaluator4.test.js.map +1 -1
- package/dist/tests/typeEvaluator5.test.js +25 -9
- package/dist/tests/typeEvaluator5.test.js.map +1 -1
- package/dist/tests/workspaceEditUtils.test.js +95 -6
- package/dist/tests/workspaceEditUtils.test.js.map +1 -1
- package/package.json +4 -4
- package/dist/languageService/importAdder.d.ts +0 -40
- package/dist/languageService/importAdder.js +0 -388
- package/dist/languageService/importAdder.js.map +0 -1
- package/dist/languageService/indentationUtils.d.ts +0 -16
- package/dist/languageService/indentationUtils.js +0 -727
- package/dist/languageService/indentationUtils.js.map +0 -1
- package/dist/languageService/insertionPointUtils.d.ts +0 -9
- package/dist/languageService/insertionPointUtils.js +0 -132
- package/dist/languageService/insertionPointUtils.js.map +0 -1
- package/dist/languageService/renameModuleProvider.d.ts +0 -65
- package/dist/languageService/renameModuleProvider.js +0 -939
- package/dist/languageService/renameModuleProvider.js.map +0 -1
- package/dist/tests/fourslash/completions.commitChars.fourslash.d.ts +0 -1
- package/dist/tests/fourslash/completions.commitChars.fourslash.js +0 -81
- package/dist/tests/fourslash/completions.commitChars.fourslash.js.map +0 -1
- package/dist/tests/importAdder.test.d.ts +0 -1
- package/dist/tests/importAdder.test.js +0 -1325
- package/dist/tests/importAdder.test.js.map +0 -1
- package/dist/tests/indentationUtils.ptvs.test.d.ts +0 -1
- package/dist/tests/indentationUtils.ptvs.test.js +0 -324
- package/dist/tests/indentationUtils.ptvs.test.js.map +0 -1
- package/dist/tests/indentationUtils.reindent.test.d.ts +0 -1
- package/dist/tests/indentationUtils.reindent.test.js +0 -372
- package/dist/tests/indentationUtils.reindent.test.js.map +0 -1
- package/dist/tests/indentationUtils.test.d.ts +0 -1
- package/dist/tests/indentationUtils.test.js +0 -502
- package/dist/tests/indentationUtils.test.js.map +0 -1
- package/dist/tests/insertionPointUtils.test.d.ts +0 -1
- package/dist/tests/insertionPointUtils.test.js +0 -154
- package/dist/tests/insertionPointUtils.test.js.map +0 -1
- package/dist/tests/moveSymbol.importAdder.test.d.ts +0 -1
- package/dist/tests/moveSymbol.importAdder.test.js +0 -298
- package/dist/tests/moveSymbol.importAdder.test.js.map +0 -1
- package/dist/tests/moveSymbol.insertion.test.d.ts +0 -1
- package/dist/tests/moveSymbol.insertion.test.js +0 -537
- package/dist/tests/moveSymbol.insertion.test.js.map +0 -1
- package/dist/tests/moveSymbol.misc.test.d.ts +0 -1
- package/dist/tests/moveSymbol.misc.test.js +0 -169
- package/dist/tests/moveSymbol.misc.test.js.map +0 -1
- package/dist/tests/moveSymbol.updateReference.test.d.ts +0 -1
- package/dist/tests/moveSymbol.updateReference.test.js +0 -1071
- package/dist/tests/moveSymbol.updateReference.test.js.map +0 -1
- package/dist/tests/renameModule.folder.test.d.ts +0 -1
- package/dist/tests/renameModule.folder.test.js +0 -229
- package/dist/tests/renameModule.folder.test.js.map +0 -1
- package/dist/tests/renameModule.fromImports.test.d.ts +0 -1
- package/dist/tests/renameModule.fromImports.test.js +0 -790
- package/dist/tests/renameModule.fromImports.test.js.map +0 -1
- package/dist/tests/renameModule.imports.test.d.ts +0 -1
- package/dist/tests/renameModule.imports.test.js +0 -380
- package/dist/tests/renameModule.imports.test.js.map +0 -1
- package/dist/tests/renameModule.misc.test.d.ts +0 -1
- package/dist/tests/renameModule.misc.test.js +0 -615
- package/dist/tests/renameModule.misc.test.js.map +0 -1
- package/dist/tests/renameModule.relativePath.test.d.ts +0 -1
- package/dist/tests/renameModule.relativePath.test.js +0 -231
- package/dist/tests/renameModule.relativePath.test.js.map +0 -1
- package/dist/tests/renameModuleTestUtils.d.ts +0 -4
- package/dist/tests/renameModuleTestUtils.js +0 -76
- package/dist/tests/renameModuleTestUtils.js.map +0 -1
@@ -18,6 +18,7 @@ export declare class BackgroundAnalysisProgram {
|
|
18
18
|
private _program;
|
19
19
|
private _disposed;
|
20
20
|
private _onAnalysisCompletion;
|
21
|
+
private _preEditAnalysis;
|
21
22
|
constructor(_console: ConsoleInterface, _configOptions: ConfigOptions, _importResolver: ImportResolver, _backgroundAnalysis?: BackgroundAnalysisBase | undefined, _maxAnalysisTime?: MaxAnalysisTime | undefined, _disableChecker?: boolean | undefined, cacheManager?: CacheManager);
|
22
23
|
get configOptions(): ConfigOptions;
|
23
24
|
get importResolver(): ImportResolver;
|
@@ -44,12 +45,14 @@ export declare class BackgroundAnalysisProgram {
|
|
44
45
|
startIndexing(indexOptions: IndexOptions): void;
|
45
46
|
refreshIndexing(refreshOptions?: RefreshOptions): void;
|
46
47
|
cancelIndexing(): void;
|
47
|
-
getIndexing(filePath: string): Map<string, import("../languageService/
|
48
|
+
getIndexing(filePath: string): Map<string, import("../languageService/symbolIndexer").IndexResults> | undefined;
|
48
49
|
getDiagnosticsForRange(filePath: string, range: Range, token: CancellationToken): Promise<Diagnostic[]>;
|
49
50
|
writeTypeStub(targetImportPath: string, targetIsSingleFile: boolean, stubPath: string, token: CancellationToken): Promise<any>;
|
50
51
|
invalidateAndForceReanalysis(rebuildUserFileIndexing: boolean, rebuildLibraryIndexing: boolean, refreshOptions?: RefreshOptions): void;
|
51
52
|
restart(): void;
|
52
53
|
dispose(): void;
|
54
|
+
enterEditMode(): void;
|
55
|
+
exitEditMode(): import("../common/editAction").FileEditAction[];
|
53
56
|
protected getIndices(): Indices | undefined;
|
54
57
|
private _ensurePartialStubPackages;
|
55
58
|
private _reportDiagnosticsForRemovedFiles;
|
@@ -174,6 +174,18 @@ class BackgroundAnalysisProgram {
|
|
174
174
|
this._program.dispose();
|
175
175
|
(_a = this._backgroundAnalysis) === null || _a === void 0 ? void 0 : _a.shutdown();
|
176
176
|
}
|
177
|
+
enterEditMode() {
|
178
|
+
// Turn off analysis while in edit mode.
|
179
|
+
this._preEditAnalysis = this._backgroundAnalysis;
|
180
|
+
this._backgroundAnalysis = undefined;
|
181
|
+
// Forward this request to the program.
|
182
|
+
this._program.enterEditMode();
|
183
|
+
}
|
184
|
+
exitEditMode() {
|
185
|
+
this._backgroundAnalysis = this._preEditAnalysis;
|
186
|
+
this._preEditAnalysis = undefined;
|
187
|
+
return this._program.exitEditMode();
|
188
|
+
}
|
177
189
|
getIndices() {
|
178
190
|
return undefined;
|
179
191
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"backgroundAnalysisProgram.js","sourceRoot":"","sources":["../../../src/analyzer/backgroundAnalysisProgram.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAUH,yCAAsE;AAGtE,uCAA+E;AAE/E,MAAa,yBAAyB;
|
1
|
+
{"version":3,"file":"backgroundAnalysisProgram.js","sourceRoot":"","sources":["../../../src/analyzer/backgroundAnalysisProgram.ts"],"names":[],"mappings":"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"}
|
@@ -71,6 +71,7 @@ export declare class Checker extends ParseTreeWalker {
|
|
71
71
|
visitError(node: ErrorNode): boolean;
|
72
72
|
private _getImportResult;
|
73
73
|
private _addMissingModuleSourceDiagnosticIfNeeded;
|
74
|
+
private _validateConditionalIsBool;
|
74
75
|
private _reportUnnecessaryConditionExpression;
|
75
76
|
private _reportUnusedExpression;
|
76
77
|
private _validateExhaustiveMatch;
|
package/dist/analyzer/checker.js
CHANGED
@@ -213,7 +213,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
213
213
|
this._validateMultipleInheritanceCompatibility(classTypeResult.classType, node.name);
|
214
214
|
this._validateConstructorConsistency(classTypeResult.classType);
|
215
215
|
this._validateFinalMemberOverrides(classTypeResult.classType);
|
216
|
-
this._validateInstanceVariableInitialization(classTypeResult.classType);
|
216
|
+
this._validateInstanceVariableInitialization(node, classTypeResult.classType);
|
217
217
|
this._validateFinalClassNotAbstract(classTypeResult.classType, node);
|
218
218
|
this._validateDataClassPostInit(classTypeResult.classType, node);
|
219
219
|
this._validateProtocolCompatibility(classTypeResult.classType, node);
|
@@ -510,16 +510,17 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
510
510
|
return true;
|
511
511
|
}
|
512
512
|
visitListComprehensionIf(node) {
|
513
|
+
this._validateConditionalIsBool(node.testExpression);
|
513
514
|
this._reportUnnecessaryConditionExpression(node.testExpression);
|
514
515
|
return true;
|
515
516
|
}
|
516
517
|
visitIf(node) {
|
517
|
-
this.
|
518
|
+
this._validateConditionalIsBool(node.testExpression);
|
518
519
|
this._reportUnnecessaryConditionExpression(node.testExpression);
|
519
520
|
return true;
|
520
521
|
}
|
521
522
|
visitWhile(node) {
|
522
|
-
this.
|
523
|
+
this._validateConditionalIsBool(node.testExpression);
|
523
524
|
this._reportUnnecessaryConditionExpression(node.testExpression);
|
524
525
|
return true;
|
525
526
|
}
|
@@ -694,6 +695,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
694
695
|
if (node.exceptionExpression) {
|
695
696
|
this._evaluator.getType(node.exceptionExpression);
|
696
697
|
}
|
698
|
+
this._validateConditionalIsBool(node.testExpression);
|
697
699
|
// Specifically look for a common programming error where the two arguments
|
698
700
|
// to an assert are enclosed in parens and interpreted as a two-element tuple.
|
699
701
|
// assert (x > 3, "bad value x")
|
@@ -776,6 +778,10 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
776
778
|
return true;
|
777
779
|
}
|
778
780
|
visitBinaryOperation(node) {
|
781
|
+
if (node.operator === 36 /* And */ || node.operator === 37 /* Or */) {
|
782
|
+
this._validateConditionalIsBool(node.leftExpression);
|
783
|
+
this._validateConditionalIsBool(node.rightExpression);
|
784
|
+
}
|
779
785
|
if (node.operator === 12 /* Equals */ || node.operator === 28 /* NotEquals */) {
|
780
786
|
// Don't apply this rule if it's within an assert.
|
781
787
|
if (!ParseTreeUtils.isWithinAssertExpression(node)) {
|
@@ -810,11 +816,15 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
810
816
|
return true;
|
811
817
|
}
|
812
818
|
visitUnaryOperation(node) {
|
819
|
+
if (node.operator === 38 /* Not */) {
|
820
|
+
this._validateConditionalIsBool(node.expression);
|
821
|
+
}
|
813
822
|
this._evaluator.getType(node);
|
814
823
|
return true;
|
815
824
|
}
|
816
825
|
visitTernary(node) {
|
817
826
|
this._evaluator.getType(node);
|
827
|
+
this._validateConditionalIsBool(node.testExpression);
|
818
828
|
this._reportUnnecessaryConditionExpression(node.testExpression);
|
819
829
|
return true;
|
820
830
|
}
|
@@ -989,7 +999,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
989
999
|
}
|
990
1000
|
visitCase(node) {
|
991
1001
|
if (node.guardExpression) {
|
992
|
-
this.
|
1002
|
+
this._validateConditionalIsBool(node.guardExpression);
|
993
1003
|
}
|
994
1004
|
this._evaluator.evaluateTypesForStatement(node.pattern);
|
995
1005
|
return true;
|
@@ -1036,6 +1046,44 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
1036
1046
|
importName: importResult.importName,
|
1037
1047
|
}), node);
|
1038
1048
|
}
|
1049
|
+
_validateConditionalIsBool(node) {
|
1050
|
+
const operandType = this._evaluator.getType(node);
|
1051
|
+
if (!operandType) {
|
1052
|
+
return;
|
1053
|
+
}
|
1054
|
+
let isTypeBool = true;
|
1055
|
+
const diag = new diagnostic_1.DiagnosticAddendum();
|
1056
|
+
this._evaluator.mapSubtypesExpandTypeVars(operandType, /* conditionFilter */ undefined, (expandedSubtype) => {
|
1057
|
+
if ((0, types_1.isAnyOrUnknown)(expandedSubtype)) {
|
1058
|
+
return undefined;
|
1059
|
+
}
|
1060
|
+
// If it's a bool (the common case), we're good.
|
1061
|
+
if ((0, types_1.isClassInstance)(expandedSubtype) && types_1.ClassType.isBuiltIn(expandedSubtype, 'bool')) {
|
1062
|
+
return undefined;
|
1063
|
+
}
|
1064
|
+
// Invoke the __bool__ method on the type.
|
1065
|
+
const boolReturnType = this._evaluator.getTypeOfMagicMethodReturn(expandedSubtype, [], '__bool__', node,
|
1066
|
+
/* inferenceContext */ undefined);
|
1067
|
+
if (!boolReturnType || (0, types_1.isAnyOrUnknown)(boolReturnType)) {
|
1068
|
+
return undefined;
|
1069
|
+
}
|
1070
|
+
if ((0, types_1.isClassInstance)(boolReturnType) && types_1.ClassType.isBuiltIn(boolReturnType, 'bool')) {
|
1071
|
+
return undefined;
|
1072
|
+
}
|
1073
|
+
// All other types are problematic.
|
1074
|
+
isTypeBool = false;
|
1075
|
+
diag.addMessage(localize_1.Localizer.DiagnosticAddendum.conditionalRequiresBool().format({
|
1076
|
+
operandType: this._evaluator.printType(expandedSubtype),
|
1077
|
+
boolReturnType: this._evaluator.printType(boolReturnType),
|
1078
|
+
}));
|
1079
|
+
return undefined;
|
1080
|
+
});
|
1081
|
+
if (!isTypeBool) {
|
1082
|
+
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.conditionalOperandInvalid().format({
|
1083
|
+
type: this._evaluator.printType(operandType),
|
1084
|
+
}) + diag.getString(), node);
|
1085
|
+
}
|
1086
|
+
}
|
1039
1087
|
_reportUnnecessaryConditionExpression(expression) {
|
1040
1088
|
if (expression.nodeType === 7 /* BinaryOperation */) {
|
1041
1089
|
if (expression.operator === 36 /* And */ || expression.operator === 37 /* Or */) {
|
@@ -1385,7 +1433,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
1385
1433
|
``;
|
1386
1434
|
if (nameType && (0, types_1.isTypeVar)(nameType) && !nameType.details.isSynthesizedSelf) {
|
1387
1435
|
// Does this name refer to a TypeVar that is scoped to this function?
|
1388
|
-
if (nameType.scopeId ===
|
1436
|
+
if (nameType.scopeId === ParseTreeUtils.getScopeIdForNode(node)) {
|
1389
1437
|
// We exempt constrained TypeVars, bound TypeVars that are type arguments of
|
1390
1438
|
// other types, and ParamSpecs. There are legitimate uses for singleton
|
1391
1439
|
// instances in these particular cases.
|
@@ -3249,7 +3297,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3249
3297
|
}
|
3250
3298
|
// Reports the case where an instance variable is not declared or initialized
|
3251
3299
|
// within the class body or constructor method.
|
3252
|
-
_validateInstanceVariableInitialization(classType) {
|
3300
|
+
_validateInstanceVariableInitialization(node, classType) {
|
3253
3301
|
// This check doesn't apply to stub files.
|
3254
3302
|
if (this._fileInfo.isStubFile) {
|
3255
3303
|
return;
|
@@ -3265,7 +3313,14 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3265
3313
|
(types_1.ClassType.supportsAbstractMethods(classType) && !types_1.ClassType.isFinal(classType))) {
|
3266
3314
|
return;
|
3267
3315
|
}
|
3316
|
+
// If the class is final, see if it has any abstract base classes that define
|
3317
|
+
// variables. We need to make sure these are initialized.
|
3318
|
+
const abstractSymbols = new Map();
|
3319
|
+
if (types_1.ClassType.isFinal(classType)) {
|
3320
|
+
(0, typeUtils_1.getProtocolSymbolsRecursive)(classType, abstractSymbols, 512 /* SupportsAbstractMethods */);
|
3321
|
+
}
|
3268
3322
|
classType.details.fields.forEach((localSymbol, name) => {
|
3323
|
+
abstractSymbols.delete(name);
|
3269
3324
|
// This applies only to instance members.
|
3270
3325
|
if (!localSymbol.isInstanceMember()) {
|
3271
3326
|
return;
|
@@ -3317,6 +3372,31 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3317
3372
|
// Report the variable as uninitialized only on the first decl.
|
3318
3373
|
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportUninitializedInstanceVariable, diagnosticRules_1.DiagnosticRule.reportUninitializedInstanceVariable, localize_1.Localizer.Diagnostic.uninitializedInstanceVariable().format({ name: name }), decls[0].node);
|
3319
3374
|
});
|
3375
|
+
// See if there are any variables from abstract base classes
|
3376
|
+
// that are not initialized.
|
3377
|
+
const diagAddendum = new diagnostic_1.DiagnosticAddendum();
|
3378
|
+
abstractSymbols.forEach((member, name) => {
|
3379
|
+
const decls = member.symbol.getDeclarations();
|
3380
|
+
if (decls.length === 0 || !(0, types_1.isClass)(member.classType)) {
|
3381
|
+
return;
|
3382
|
+
}
|
3383
|
+
if (decls[0].type === 1 /* Variable */) {
|
3384
|
+
// If none of the declarations involve assignments, assume it's
|
3385
|
+
// not implemented in the protocol.
|
3386
|
+
if (!decls.some((decl) => decl.type === 1 /* Variable */ && !!decl.inferredTypeSource)) {
|
3387
|
+
// This is a variable declaration that is not implemented in the
|
3388
|
+
// protocol base class. Make sure it's implemented in the derived class.
|
3389
|
+
diagAddendum.addMessage(localize_1.Localizer.DiagnosticAddendum.uninitializedAbstractVariable().format({
|
3390
|
+
name,
|
3391
|
+
classType: member.classType.details.name,
|
3392
|
+
}));
|
3393
|
+
}
|
3394
|
+
}
|
3395
|
+
});
|
3396
|
+
if (!diagAddendum.isEmpty()) {
|
3397
|
+
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportUninitializedInstanceVariable, diagnosticRules_1.DiagnosticRule.reportUninitializedInstanceVariable, localize_1.Localizer.Diagnostic.uninitializedAbstractVariables().format({ classType: classType.details.name }) +
|
3398
|
+
diagAddendum.getString(), node.name);
|
3399
|
+
}
|
3320
3400
|
}
|
3321
3401
|
// Validates that the type variables used in a generic protocol class have
|
3322
3402
|
// the proper variance (invariant, covariant, contravariant). See PEP 544
|
@@ -3805,6 +3885,9 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3805
3885
|
if (!(0, types_1.isInstantiableClass)(baseClassAndSymbol.classType)) {
|
3806
3886
|
return;
|
3807
3887
|
}
|
3888
|
+
if (baseClassAndSymbol.symbol.isIgnoredForOverrideChecks()) {
|
3889
|
+
return;
|
3890
|
+
}
|
3808
3891
|
// If the base class doesn't provide a type declaration, we won't bother
|
3809
3892
|
// proceeding with additional checks. Type inference is too inaccurate
|
3810
3893
|
// in this case, plus it would be very slow.
|