@zzzen/pyright-internal 1.2.0-dev.20231008 → 1.2.0-dev.20231015
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/checker.js +27 -24
- package/dist/analyzer/checker.js.map +1 -1
- package/dist/analyzer/codeFlowEngine.js +2 -2
- package/dist/analyzer/codeFlowEngine.js.map +1 -1
- package/dist/analyzer/constraintSolver.js +208 -151
- package/dist/analyzer/constraintSolver.js.map +1 -1
- package/dist/analyzer/decorators.js +3 -1
- package/dist/analyzer/decorators.js.map +1 -1
- package/dist/analyzer/parseTreeUtils.d.ts +1 -1
- package/dist/analyzer/program.js +7 -1
- package/dist/analyzer/program.js.map +1 -1
- package/dist/analyzer/properties.d.ts +2 -2
- package/dist/analyzer/properties.js +4 -2
- package/dist/analyzer/properties.js.map +1 -1
- package/dist/analyzer/protocols.js +95 -148
- package/dist/analyzer/protocols.js.map +1 -1
- package/dist/analyzer/service.js +13 -13
- package/dist/analyzer/service.js.map +1 -1
- package/dist/analyzer/sourceFile.d.ts +3 -2
- package/dist/analyzer/sourceFile.js +21 -7
- package/dist/analyzer/sourceFile.js.map +1 -1
- package/dist/analyzer/sourceFileInfo.d.ts +4 -4
- package/dist/analyzer/sourceFileInfo.js +2 -0
- package/dist/analyzer/sourceFileInfo.js.map +1 -1
- package/dist/analyzer/staticExpressions.js +2 -1
- package/dist/analyzer/staticExpressions.js.map +1 -1
- package/dist/analyzer/typeEvaluator.js +24 -22
- package/dist/analyzer/typeEvaluator.js.map +1 -1
- package/dist/analyzer/typeEvaluatorTypes.d.ts +3 -2
- package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
- package/dist/analyzer/typeGuards.js +73 -13
- package/dist/analyzer/typeGuards.js.map +1 -1
- package/dist/analyzer/typeUtils.d.ts +4 -1
- package/dist/analyzer/typeUtils.js +81 -7
- package/dist/analyzer/typeUtils.js.map +1 -1
- package/dist/analyzer/typeVarContext.d.ts +4 -1
- package/dist/analyzer/typeVarContext.js +7 -2
- package/dist/analyzer/typeVarContext.js.map +1 -1
- package/dist/analyzer/types.d.ts +4 -2
- package/dist/analyzer/types.js +22 -14
- package/dist/analyzer/types.js.map +1 -1
- package/dist/backgroundThreadBase.js +5 -1
- package/dist/backgroundThreadBase.js.map +1 -1
- package/dist/common/configOptions.d.ts +2 -1
- package/dist/common/configOptions.js +9 -5
- package/dist/common/configOptions.js.map +1 -1
- package/dist/common/extensibility.d.ts +0 -2
- package/dist/common/extensibility.js.map +1 -1
- package/dist/common/fileSystem.d.ts +9 -4
- package/dist/common/fileSystem.js +8 -1
- package/dist/common/fileSystem.js.map +1 -1
- package/dist/common/pathUtils.d.ts +5 -4
- package/dist/common/pathUtils.js +13 -7
- package/dist/common/pathUtils.js.map +1 -1
- package/dist/common/realFileSystem.d.ts +7 -1
- package/dist/common/realFileSystem.js +24 -21
- package/dist/common/realFileSystem.js.map +1 -1
- package/dist/common/serviceProviderExtensions.d.ts +2 -1
- package/dist/common/serviceProviderExtensions.js +4 -0
- package/dist/common/serviceProviderExtensions.js.map +1 -1
- package/dist/languageServerBase.d.ts +4 -2
- package/dist/languageServerBase.js +3 -3
- package/dist/languageServerBase.js.map +1 -1
- package/dist/languageService/autoImporter.d.ts +1 -1
- package/dist/languageService/completionProvider.d.ts +2 -2
- package/dist/languageService/completionProvider.js +20 -23
- package/dist/languageService/completionProvider.js.map +1 -1
- package/dist/languageService/navigationUtils.d.ts +1 -1
- package/dist/languageService/navigationUtils.js +2 -2
- package/dist/languageService/navigationUtils.js.map +1 -1
- package/dist/languageService/referencesProvider.d.ts +9 -2
- package/dist/languageService/referencesProvider.js +18 -12
- package/dist/languageService/referencesProvider.js.map +1 -1
- package/dist/localization/package.nls.cs.json +1 -0
- package/dist/localization/package.nls.de.json +1 -0
- package/dist/localization/package.nls.es.json +1 -0
- package/dist/localization/package.nls.fr.json +1 -0
- package/dist/localization/package.nls.it.json +1 -0
- package/dist/localization/package.nls.ja.json +1 -0
- package/dist/localization/package.nls.ko.json +1 -0
- package/dist/localization/package.nls.pl.json +1 -0
- package/dist/localization/package.nls.pt-br.json +1 -0
- package/dist/localization/package.nls.qps-ploc.json +1 -0
- package/dist/localization/package.nls.ru.json +1 -0
- package/dist/localization/package.nls.tr.json +1 -0
- package/dist/localization/package.nls.zh-cn.json +1 -0
- package/dist/localization/package.nls.zh-tw.json +1 -0
- package/dist/pyright.js +2 -1
- package/dist/pyright.js.map +1 -1
- package/dist/pyrightFileSystem.d.ts +0 -1
- package/dist/pyrightFileSystem.js +0 -3
- package/dist/pyrightFileSystem.js.map +1 -1
- package/dist/readonlyAugmentedFileSystem.d.ts +1 -4
- package/dist/readonlyAugmentedFileSystem.js +0 -10
- package/dist/readonlyAugmentedFileSystem.js.map +1 -1
- package/dist/server.js +2 -1
- package/dist/server.js.map +1 -1
- package/dist/tests/config.test.js +5 -3
- package/dist/tests/config.test.js.map +1 -1
- package/dist/tests/fourslash/completions.indexer.keys.getitem.fourslash.js +56 -10
- package/dist/tests/fourslash/completions.indexer.keys.getitem.fourslash.js.map +1 -1
- package/dist/tests/harness/fourslash/testState.d.ts +5 -2
- package/dist/tests/harness/fourslash/testState.js +13 -14
- package/dist/tests/harness/fourslash/testState.js.map +1 -1
- package/dist/tests/harness/vfs/filesystem.d.ts +2 -2
- package/dist/tests/importResolver.test.js +0 -9
- package/dist/tests/importResolver.test.js.map +1 -1
- package/dist/tests/pathUtils.test.js +2 -2
- package/dist/tests/pathUtils.test.js.map +1 -1
- package/dist/tests/typeEvaluator1.test.js +4 -0
- package/dist/tests/typeEvaluator1.test.js.map +1 -1
- package/dist/tests/typeEvaluator2.test.js +4 -0
- 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 +10 -2
- package/dist/tests/typeEvaluator4.test.js.map +1 -1
- package/package.json +1 -1
package/dist/analyzer/checker.js
CHANGED
@@ -168,14 +168,12 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
168
168
|
// have the proper variance.
|
169
169
|
this._validateProtocolTypeParamVariance(node, classTypeResult.classType);
|
170
170
|
}
|
171
|
-
// Skip the
|
172
|
-
//
|
173
|
-
// check because class variables declared in a stub file are
|
174
|
-
// interpreted as instance variables.
|
171
|
+
// Skip the slots check because class variables declared in a stub
|
172
|
+
// file are interpreted as instance variables.
|
175
173
|
if (!this._fileInfo.isStubFile) {
|
176
|
-
this._validateBaseClassOverrides(classTypeResult.classType);
|
177
174
|
this._validateSlotsClassVarConflict(classTypeResult.classType);
|
178
175
|
}
|
176
|
+
this._validateBaseClassOverrides(classTypeResult.classType);
|
179
177
|
this._validateMultipleInheritanceBaseClasses(classTypeResult.classType, node.name);
|
180
178
|
this._validateMultipleInheritanceCompatibility(classTypeResult.classType, node.name);
|
181
179
|
this._validateConstructorConsistency(classTypeResult.classType);
|
@@ -590,8 +588,11 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
590
588
|
return true;
|
591
589
|
}
|
592
590
|
visitYield(node) {
|
593
|
-
|
594
|
-
|
591
|
+
var _a;
|
592
|
+
const yieldTypeResult = node.expression
|
593
|
+
? this._evaluator.getTypeResult(node.expression)
|
594
|
+
: { type: types_1.NoneType.createInstance() };
|
595
|
+
this._validateYieldType(node, (_a = yieldTypeResult === null || yieldTypeResult === void 0 ? void 0 : yieldTypeResult.type) !== null && _a !== void 0 ? _a : types_1.UnknownType.create(), yieldTypeResult === null || yieldTypeResult === void 0 ? void 0 : yieldTypeResult.expectedTypeDiagAddendum);
|
595
596
|
return true;
|
596
597
|
}
|
597
598
|
visitYieldFrom(node) {
|
@@ -619,7 +620,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
619
620
|
(_d = (_c = this._evaluator.getTypeOfIterator({ type: yieldFromType }, /* isAsync */ false, node)) === null || _c === void 0 ? void 0 : _c.type) !== null && _d !== void 0 ? _d : types_1.UnknownType.create();
|
620
621
|
}
|
621
622
|
}
|
622
|
-
this._validateYieldType(node, yieldType, sendType);
|
623
|
+
this._validateYieldType(node, yieldType, /* expectedDiagAddendum */ undefined, sendType);
|
623
624
|
return true;
|
624
625
|
}
|
625
626
|
visitRaise(node) {
|
@@ -4073,7 +4074,9 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4073
4074
|
if (memberName === '_') {
|
4074
4075
|
return;
|
4075
4076
|
}
|
4076
|
-
const
|
4077
|
+
const baseClass = baseClassAndSymbol.classType;
|
4078
|
+
const childClassSelf = (0, typeUtils_1.selfSpecializeClass)(childClassType);
|
4079
|
+
const baseType = (0, typeUtils_1.partiallySpecializeType)(this._evaluator.getEffectiveTypeOfSymbol(baseClassAndSymbol.symbol), baseClass, types_1.ClassType.cloneAsInstance(childClassSelf));
|
4077
4080
|
if ((0, types_1.isFunction)(baseType) || (0, types_1.isOverloadedFunction)(baseType)) {
|
4078
4081
|
const diagAddendum = new diagnostic_1.DiagnosticAddendum();
|
4079
4082
|
if ((0, types_1.isFunction)(overrideType) || (0, types_1.isOverloadedFunction)(overrideType)) {
|
@@ -4092,7 +4095,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4092
4095
|
if (decl) {
|
4093
4096
|
const diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleMethodOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleMethodOverride, localize_1.Localizer.Diagnostic.incompatibleMethodOverride().format({
|
4094
4097
|
name: memberName,
|
4095
|
-
className:
|
4098
|
+
className: baseClass.details.name,
|
4096
4099
|
}) + diagAddendum.getString(), decl.type === 5 /* Function */ ? decl.node.name : decl.node);
|
4097
4100
|
const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
|
4098
4101
|
if (diag && origDecl) {
|
@@ -4108,7 +4111,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4108
4111
|
if (decl && decl.type === 5 /* Function */) {
|
4109
4112
|
const diag = this._evaluator.addError(localize_1.Localizer.Diagnostic.finalMethodOverride().format({
|
4110
4113
|
name: memberName,
|
4111
|
-
className:
|
4114
|
+
className: baseClass.details.name,
|
4112
4115
|
}), decl.node.name);
|
4113
4116
|
const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
|
4114
4117
|
if (diag && origDecl) {
|
@@ -4122,13 +4125,13 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4122
4125
|
// Special-case overrides of methods in '_TypedDict', since
|
4123
4126
|
// TypedDict attributes aren't manifest as attributes but rather
|
4124
4127
|
// as named keys.
|
4125
|
-
if (!types_1.ClassType.isBuiltIn(
|
4128
|
+
if (!types_1.ClassType.isBuiltIn(baseClass, '_TypedDict')) {
|
4126
4129
|
const decls = overrideSymbol.getDeclarations();
|
4127
4130
|
if (decls.length > 0) {
|
4128
4131
|
const lastDecl = decls[decls.length - 1];
|
4129
4132
|
const diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleMethodOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleMethodOverride, localize_1.Localizer.Diagnostic.methodOverridden().format({
|
4130
4133
|
name: memberName,
|
4131
|
-
className:
|
4134
|
+
className: baseClass.details.name,
|
4132
4135
|
type: this._evaluator.printType(overrideType),
|
4133
4136
|
}), lastDecl.node);
|
4134
4137
|
const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
|
@@ -4146,14 +4149,14 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4146
4149
|
if (decls.length > 0) {
|
4147
4150
|
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleMethodOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleMethodOverride, localize_1.Localizer.Diagnostic.propertyOverridden().format({
|
4148
4151
|
name: memberName,
|
4149
|
-
className:
|
4152
|
+
className: baseClass.details.name,
|
4150
4153
|
}), decls[decls.length - 1].node);
|
4151
4154
|
}
|
4152
4155
|
}
|
4153
4156
|
else {
|
4154
4157
|
const basePropFields = baseType.details.fields;
|
4155
4158
|
const subclassPropFields = overrideType.details.fields;
|
4156
|
-
const baseClassType =
|
4159
|
+
const baseClassType = baseClass;
|
4157
4160
|
['fget', 'fset', 'fdel'].forEach((methodName) => {
|
4158
4161
|
const diagAddendum = new diagnostic_1.DiagnosticAddendum();
|
4159
4162
|
const baseClassPropMethod = basePropFields.get(methodName);
|
@@ -4218,9 +4221,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4218
4221
|
let isInvariant = (primaryDecl === null || primaryDecl === void 0 ? void 0 : primaryDecl.type) === 1 /* Variable */ && !primaryDecl.isFinal;
|
4219
4222
|
// If the entry is a member of a frozen dataclass, it is immutable,
|
4220
4223
|
// so it does not need to be invariant.
|
4221
|
-
if (types_1.ClassType.isFrozenDataClass(
|
4222
|
-
|
4223
|
-
const dataclassEntry = baseClassAndSymbol.classType.details.dataClassEntries.find((entry) => entry.name === memberName);
|
4224
|
+
if (types_1.ClassType.isFrozenDataClass(baseClass) && baseClass.details.dataClassEntries) {
|
4225
|
+
const dataclassEntry = baseClass.details.dataClassEntries.find((entry) => entry.name === memberName);
|
4224
4226
|
if (dataclassEntry) {
|
4225
4227
|
isInvariant = false;
|
4226
4228
|
}
|
@@ -4239,7 +4241,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4239
4241
|
}
|
4240
4242
|
const diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleVariableOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleVariableOverride, localize_1.Localizer.Diagnostic.symbolOverridden().format({
|
4241
4243
|
name: memberName,
|
4242
|
-
className:
|
4244
|
+
className: baseClass.details.name,
|
4243
4245
|
}) + diagAddendum.getString(), (_a = (0, declarationUtils_1.getNameNodeForDeclaration)(lastDecl)) !== null && _a !== void 0 ? _a : lastDecl.node);
|
4244
4246
|
const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
|
4245
4247
|
if (diag && origDecl) {
|
@@ -4252,7 +4254,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4252
4254
|
if (!isBaseVarFinal && overrideFinalVarDecl) {
|
4253
4255
|
const diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleVariableOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleVariableOverride, localize_1.Localizer.Diagnostic.variableFinalOverride().format({
|
4254
4256
|
name: memberName,
|
4255
|
-
className:
|
4257
|
+
className: baseClass.details.name,
|
4256
4258
|
}), lastDecl.node);
|
4257
4259
|
if (diag) {
|
4258
4260
|
diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.overriddenSymbol(), overrideFinalVarDecl.path, overrideFinalVarDecl.range);
|
@@ -4281,7 +4283,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4281
4283
|
: localize_1.Localizer.Diagnostic.instanceVarOverridesClassVar();
|
4282
4284
|
const diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleVariableOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleVariableOverride, unformattedMessage.format({
|
4283
4285
|
name: memberName,
|
4284
|
-
className:
|
4286
|
+
className: baseClass.details.name,
|
4285
4287
|
}), (_b = (0, declarationUtils_1.getNameNodeForDeclaration)(lastDecl)) !== null && _b !== void 0 ? _b : lastDecl.node);
|
4286
4288
|
const origDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(baseClassAndSymbol.symbol);
|
4287
4289
|
if (diag && origDecl) {
|
@@ -4525,8 +4527,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4525
4527
|
}
|
4526
4528
|
// Determines whether a yield or yield from node is compatible with the
|
4527
4529
|
// return type annotation of the containing function.
|
4528
|
-
_validateYieldType(node, yieldType, sendType) {
|
4529
|
-
var _a;
|
4530
|
+
_validateYieldType(node, yieldType, expectedDiagAddendum, sendType) {
|
4531
|
+
var _a, _b, _c, _d;
|
4530
4532
|
const enclosingFunctionNode = ParseTreeUtils.getEnclosingFunction(node);
|
4531
4533
|
if (!enclosingFunctionNode || !enclosingFunctionNode.returnTypeAnnotation) {
|
4532
4534
|
return;
|
@@ -4567,7 +4569,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
4567
4569
|
const errorMessage = enclosingFunctionNode.isAsync
|
4568
4570
|
? localize_1.Localizer.Diagnostic.generatorAsyncReturnType()
|
4569
4571
|
: localize_1.Localizer.Diagnostic.generatorSyncReturnType();
|
4570
|
-
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, errorMessage.format({ yieldType: this._evaluator.printType(yieldType) }) +
|
4572
|
+
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, errorMessage.format({ yieldType: this._evaluator.printType(yieldType) }) +
|
4573
|
+
((_a = expectedDiagAddendum === null || expectedDiagAddendum === void 0 ? void 0 : expectedDiagAddendum.getString()) !== null && _a !== void 0 ? _a : diagAddendum.getString()), (_b = node.expression) !== null && _b !== void 0 ? _b : node, (_d = (_c = expectedDiagAddendum === null || expectedDiagAddendum === void 0 ? void 0 : expectedDiagAddendum.getEffectiveTextRange()) !== null && _c !== void 0 ? _c : node.expression) !== null && _d !== void 0 ? _d : node);
|
4571
4574
|
}
|
4572
4575
|
}
|
4573
4576
|
// Determines whether any of the except statements are unreachable because
|