@zzzen/pyright-internal 1.2.0-dev.20260802 → 1.2.0-dev.20260816
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/analyzerNodeInfo.d.ts +4 -1
- package/dist/analyzer/analyzerNodeInfo.js +13 -0
- package/dist/analyzer/analyzerNodeInfo.js.map +1 -1
- package/dist/analyzer/binder.js +88 -1
- package/dist/analyzer/binder.js.map +1 -1
- package/dist/analyzer/checker.d.ts +1 -0
- package/dist/analyzer/checker.js +71 -15
- package/dist/analyzer/checker.js.map +1 -1
- package/dist/analyzer/constraintSolver.js +47 -7
- package/dist/analyzer/constraintSolver.js.map +1 -1
- package/dist/analyzer/constructors.js +18 -8
- package/dist/analyzer/constructors.js.map +1 -1
- package/dist/analyzer/dataClasses.d.ts +1 -0
- package/dist/analyzer/dataClasses.js +98 -19
- package/dist/analyzer/dataClasses.js.map +1 -1
- package/dist/analyzer/decorators.js +18 -0
- package/dist/analyzer/decorators.js.map +1 -1
- package/dist/analyzer/scope.d.ts +3 -0
- package/dist/analyzer/scope.js +10 -0
- package/dist/analyzer/scope.js.map +1 -1
- package/dist/analyzer/symbol.d.ts +4 -1
- package/dist/analyzer/symbol.js +8 -0
- package/dist/analyzer/symbol.js.map +1 -1
- package/dist/analyzer/typeCacheUtils.d.ts +6 -2
- package/dist/analyzer/typeCacheUtils.js +16 -37
- package/dist/analyzer/typeCacheUtils.js.map +1 -1
- package/dist/analyzer/typeEvaluator.js +955 -105
- package/dist/analyzer/typeEvaluator.js.map +1 -1
- package/dist/analyzer/typeGuards.js +11 -8
- package/dist/analyzer/typeGuards.js.map +1 -1
- package/dist/analyzer/types.d.ts +11 -1
- package/dist/analyzer/types.js +48 -0
- package/dist/analyzer/types.js.map +1 -1
- package/dist/localization/localize.d.ts +6 -0
- package/dist/localization/localize.js +4 -0
- package/dist/localization/localize.js.map +1 -1
- package/dist/localization/package.nls.en-us.json +13 -0
- package/dist/tests/typeCacheUtils.test.d.ts +1 -0
- package/dist/tests/typeCacheUtils.test.js +69 -0
- package/dist/tests/typeCacheUtils.test.js.map +1 -0
- package/dist/tests/typeEvaluator3.test.js +8 -0
- package/dist/tests/typeEvaluator3.test.js.map +1 -1
- package/dist/tests/typeEvaluator5.test.js +12 -0
- package/dist/tests/typeEvaluator5.test.js.map +1 -1
- package/dist/tests/typeEvaluator6.test.js +33 -1
- package/dist/tests/typeEvaluator6.test.js.map +1 -1
- package/dist/tests/typeEvaluator7.test.js +37 -0
- package/dist/tests/typeEvaluator7.test.js.map +1 -1
- package/dist/tests/typeEvaluator8.test.js +318 -4
- package/dist/tests/typeEvaluator8.test.js.map +1 -1
- package/dist/tests/types.test.d.ts +1 -0
- package/dist/tests/types.test.js +63 -0
- package/dist/tests/types.test.js.map +1 -0
- package/dist/typeServer/typeGuards.js +4 -3
- package/dist/typeServer/typeGuards.js.map +1 -1
- package/package.json +1 -1
|
@@ -132,6 +132,7 @@ export declare class Checker extends ParseTreeWalker {
|
|
|
132
132
|
private _validateProtocolTypeParamVariance;
|
|
133
133
|
private _validateSlotsClassVarConflict;
|
|
134
134
|
private _validateConstructorConsistency;
|
|
135
|
+
private _validateDisjointBaseClass;
|
|
135
136
|
private _validateMultipleInheritanceBaseClasses;
|
|
136
137
|
private _validateMultipleInheritanceCompatibility;
|
|
137
138
|
private _validateMultipleInheritanceOverride;
|
package/dist/analyzer/checker.js
CHANGED
|
@@ -192,6 +192,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
192
192
|
this._validateBaseClassOverrides(classTypeResult.classType);
|
|
193
193
|
this._validateTypedDictOverrides(classTypeResult.classType);
|
|
194
194
|
this._validateOverloadDecoratorConsistency(classTypeResult.classType);
|
|
195
|
+
this._validateDisjointBaseClass(classTypeResult.classType, node.d.name);
|
|
195
196
|
this._validateMultipleInheritanceBaseClasses(classTypeResult.classType, node.d.name);
|
|
196
197
|
this._validateMultipleInheritanceCompatibility(classTypeResult.classType, node.d.name);
|
|
197
198
|
this._validateConstructorConsistency(classTypeResult.classType, node.d.name);
|
|
@@ -3247,30 +3248,49 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
3247
3248
|
}
|
|
3248
3249
|
});
|
|
3249
3250
|
}
|
|
3250
|
-
// Verifies the rules specified
|
|
3251
|
-
// They cannot have statements other than type annotations, doc
|
|
3252
|
-
//
|
|
3251
|
+
// Verifies the rules specified for TypedDict class bodies.
|
|
3252
|
+
// They cannot have statements other than type annotations, doc strings,
|
|
3253
|
+
// "pass" statements, ellipses, and statically evaluable if statements.
|
|
3253
3254
|
_validateTypedDictClassSuite(suiteNode) {
|
|
3254
3255
|
const emitBadStatementError = (node) => {
|
|
3255
3256
|
this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.typedDictBadVar(), node);
|
|
3256
3257
|
};
|
|
3257
|
-
|
|
3258
|
-
if (
|
|
3259
|
-
|
|
3260
|
-
|
|
3261
|
-
|
|
3262
|
-
|
|
3263
|
-
|
|
3264
|
-
|
|
3265
|
-
|
|
3266
|
-
|
|
3258
|
+
function validateStatement(statement) {
|
|
3259
|
+
if (AnalyzerNodeInfo.isCodeUnreachable(statement)) {
|
|
3260
|
+
return;
|
|
3261
|
+
}
|
|
3262
|
+
if (statement.nodeType === 47 /* ParseNodeType.StatementList */) {
|
|
3263
|
+
for (const substatement of statement.d.statements) {
|
|
3264
|
+
if (substatement.nodeType !== 54 /* ParseNodeType.TypeAnnotation */ &&
|
|
3265
|
+
substatement.nodeType !== 21 /* ParseNodeType.Ellipsis */ &&
|
|
3266
|
+
substatement.nodeType !== 48 /* ParseNodeType.StringList */ &&
|
|
3267
|
+
substatement.nodeType !== 42 /* ParseNodeType.Pass */) {
|
|
3268
|
+
emitBadStatementError(substatement);
|
|
3267
3269
|
}
|
|
3268
3270
|
}
|
|
3269
|
-
|
|
3271
|
+
return;
|
|
3272
|
+
}
|
|
3273
|
+
if (statement.nodeType === 22 /* ParseNodeType.If */) {
|
|
3274
|
+
const conditionValue = AnalyzerNodeInfo.getStaticConditionValue(statement);
|
|
3275
|
+
if (conditionValue === undefined) {
|
|
3270
3276
|
emitBadStatementError(statement);
|
|
3277
|
+
return;
|
|
3278
|
+
}
|
|
3279
|
+
const reachableSuite = conditionValue ? statement.d.ifSuite : statement.d.elseSuite;
|
|
3280
|
+
if (reachableSuite?.nodeType === 22 /* ParseNodeType.If */) {
|
|
3281
|
+
validateStatement(reachableSuite);
|
|
3282
|
+
}
|
|
3283
|
+
else if (reachableSuite) {
|
|
3284
|
+
validateSuite(reachableSuite);
|
|
3271
3285
|
}
|
|
3286
|
+
return;
|
|
3272
3287
|
}
|
|
3273
|
-
|
|
3288
|
+
emitBadStatementError(statement);
|
|
3289
|
+
}
|
|
3290
|
+
function validateSuite(suite) {
|
|
3291
|
+
suite.d.statements.forEach((statement) => validateStatement(statement));
|
|
3292
|
+
}
|
|
3293
|
+
validateSuite(suiteNode);
|
|
3274
3294
|
}
|
|
3275
3295
|
_validateTypeGuardFunction(node, functionType, isMethod) {
|
|
3276
3296
|
const returnType = functionType.shared.declaredReturnType;
|
|
@@ -3978,6 +3998,42 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
3978
3998
|
}
|
|
3979
3999
|
}
|
|
3980
4000
|
}
|
|
4001
|
+
// Verifies that a class has a unique most-derived disjoint base.
|
|
4002
|
+
_validateDisjointBaseClass(classType, errorNode) {
|
|
4003
|
+
if (classType.shared.baseClasses.length < 2) {
|
|
4004
|
+
return;
|
|
4005
|
+
}
|
|
4006
|
+
const candidates = [];
|
|
4007
|
+
for (const baseClass of classType.shared.baseClasses) {
|
|
4008
|
+
if (!(0, types_1.isInstantiableClass)(baseClass)) {
|
|
4009
|
+
// An unknown base may introduce an unknown disjoint base, but it
|
|
4010
|
+
// cannot make two already-incompatible known bases compatible,
|
|
4011
|
+
// so keep collecting the known candidates.
|
|
4012
|
+
continue;
|
|
4013
|
+
}
|
|
4014
|
+
const candidate = types_1.ClassType.getDisjointBase(baseClass);
|
|
4015
|
+
if (!candidate) {
|
|
4016
|
+
// The base class is invalid or its disjoint base is unknown; an
|
|
4017
|
+
// unknown disjoint base cannot relate two otherwise-incompatible
|
|
4018
|
+
// known candidates, so keep collecting the known candidates.
|
|
4019
|
+
continue;
|
|
4020
|
+
}
|
|
4021
|
+
if (!candidates.some((existingCandidate) => types_1.ClassType.isSameGenericClass(existingCandidate, candidate))) {
|
|
4022
|
+
candidates.push(candidate);
|
|
4023
|
+
}
|
|
4024
|
+
}
|
|
4025
|
+
if (candidates.length > 1 && !types_1.ClassType.getMostDerivedDisjointBase(candidates)) {
|
|
4026
|
+
this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.disjointBaseIncompatible().format({
|
|
4027
|
+
// `object` is a disjoint base but is compatible with every
|
|
4028
|
+
// other disjoint base, so including it in the reported names
|
|
4029
|
+
// would be misleading. Filter it out.
|
|
4030
|
+
bases: candidates
|
|
4031
|
+
.filter((candidate) => !types_1.ClassType.isBuiltIn(candidate, 'object'))
|
|
4032
|
+
.map((candidate) => `"${candidate.shared.name}"`)
|
|
4033
|
+
.join(', '),
|
|
4034
|
+
}), errorNode);
|
|
4035
|
+
}
|
|
4036
|
+
}
|
|
3981
4037
|
// Verifies that classes that have more than one base class do not have
|
|
3982
4038
|
// have conflicting type arguments.
|
|
3983
4039
|
_validateMultipleInheritanceBaseClasses(classType, errorNode) {
|