@zzzen/pyright-internal 1.2.0-dev.20221204 → 1.2.0-dev.20221218
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/aliasDeclarationUtils.js +23 -9
- package/dist/analyzer/aliasDeclarationUtils.js.map +1 -1
- package/dist/analyzer/analyzerFileInfo.d.ts +1 -0
- package/dist/analyzer/analyzerFileInfo.js.map +1 -1
- package/dist/analyzer/backgroundAnalysisProgram.d.ts +1 -0
- package/dist/analyzer/backgroundAnalysisProgram.js +3 -0
- package/dist/analyzer/backgroundAnalysisProgram.js.map +1 -1
- package/dist/analyzer/binder.js +2 -2
- package/dist/analyzer/binder.js.map +1 -1
- package/dist/analyzer/checker.js +63 -38
- package/dist/analyzer/checker.js.map +1 -1
- package/dist/analyzer/constraintSolver.js +5 -0
- package/dist/analyzer/constraintSolver.js.map +1 -1
- package/dist/analyzer/declarationUtils.d.ts +2 -1
- package/dist/analyzer/declarationUtils.js +7 -4
- package/dist/analyzer/declarationUtils.js.map +1 -1
- package/dist/analyzer/importResolver.js +2 -2
- package/dist/analyzer/importResolver.js.map +1 -1
- package/dist/analyzer/program.d.ts +1 -0
- package/dist/analyzer/program.js +15 -3
- package/dist/analyzer/program.js.map +1 -1
- package/dist/analyzer/service.js +8 -4
- package/dist/analyzer/service.js.map +1 -1
- package/dist/analyzer/sourceFile.js +5 -2
- package/dist/analyzer/sourceFile.js.map +1 -1
- package/dist/analyzer/typeDocStringUtils.d.ts +2 -0
- package/dist/analyzer/typeDocStringUtils.js +14 -13
- package/dist/analyzer/typeDocStringUtils.js.map +1 -1
- package/dist/analyzer/typeEvaluator.d.ts +0 -1
- package/dist/analyzer/typeEvaluator.js +182 -46
- package/dist/analyzer/typeEvaluator.js.map +1 -1
- package/dist/analyzer/typeEvaluatorTypes.d.ts +1 -0
- package/dist/analyzer/typeUtils.d.ts +1 -1
- package/dist/analyzer/typeUtils.js +2 -1
- package/dist/analyzer/typeUtils.js.map +1 -1
- package/dist/analyzer/types.d.ts +3 -1
- package/dist/analyzer/types.js +27 -4
- package/dist/analyzer/types.js.map +1 -1
- package/dist/backgroundAnalysisBase.d.ts +1 -1
- package/dist/common/commandLineOptions.d.ts +1 -1
- package/dist/common/commandLineOptions.js +0 -2
- package/dist/common/commandLineOptions.js.map +1 -1
- package/dist/common/configOptions.d.ts +1 -1
- package/dist/common/configOptions.js +4 -3
- 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/pathUtils.js +1 -1
- package/dist/common/pathUtils.js.map +1 -1
- package/dist/common/positionUtils.js +3 -9
- package/dist/common/positionUtils.js.map +1 -1
- package/dist/languageServerBase.js +2 -0
- package/dist/languageServerBase.js.map +1 -1
- package/dist/languageService/completionProvider.d.ts +1 -0
- package/dist/languageService/completionProvider.js +13 -1
- package/dist/languageService/completionProvider.js.map +1 -1
- package/dist/languageService/documentSymbolProvider.d.ts +1 -1
- package/dist/languageService/documentSymbolProvider.js +1 -1
- package/dist/languageService/documentSymbolProvider.js.map +1 -1
- package/dist/languageService/hoverProvider.d.ts +1 -0
- package/dist/languageService/hoverProvider.js +19 -3
- package/dist/languageService/hoverProvider.js.map +1 -1
- package/dist/localization/localize.d.ts +10 -2
- package/dist/localization/localize.js +5 -2
- package/dist/localization/localize.js.map +1 -1
- package/dist/localization/package.nls.en-us.json +5 -2
- package/dist/pyright.js +55 -13
- package/dist/pyright.js.map +1 -1
- package/dist/tests/fourslash/hover.docFromSrc.fourslash.js +9 -7
- package/dist/tests/fourslash/hover.docFromSrc.fourslash.js.map +1 -1
- package/dist/tests/fourslash/hover.docFromSrc.pkg-vs-module2.fourslash.js +4 -1
- package/dist/tests/fourslash/hover.docFromSrc.pkg-vs-module2.fourslash.js.map +1 -1
- package/dist/tests/fourslash/hover.docFromSrc.relativeImport2.fourslash.js +2 -1
- package/dist/tests/fourslash/hover.docFromSrc.relativeImport2.fourslash.js.map +1 -1
- package/dist/tests/fourslash/hover.docFromSrc.relativeImport3.fourslash.js +8 -1
- package/dist/tests/fourslash/hover.docFromSrc.relativeImport3.fourslash.js.map +1 -1
- package/dist/tests/fourslash/shadowedImports.fourslash.js +12 -0
- package/dist/tests/fourslash/shadowedImports.fourslash.js.map +1 -1
- package/dist/tests/pathUtils.test.js +20 -5
- package/dist/tests/pathUtils.test.js.map +1 -1
- package/dist/tests/typeEvaluator3.test.js +28 -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 +1 -1
- package/package.json +2 -2
package/dist/analyzer/checker.js
CHANGED
@@ -232,6 +232,11 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
232
232
|
if (node.typeParameters) {
|
233
233
|
this.walk(node.typeParameters);
|
234
234
|
}
|
235
|
+
if (!this._fileInfo.diagnosticRuleSet.analyzeUnannotatedFunctions && !this._fileInfo.isStubFile) {
|
236
|
+
if (ParseTreeUtils.isUnannotatedFunction(node)) {
|
237
|
+
this._evaluator.addInformation(localize_1.Localizer.Diagnostic.unannotatedFunctionSkipped().format({ name: node.name.value }), node.name);
|
238
|
+
}
|
239
|
+
}
|
235
240
|
const functionTypeResult = this._evaluator.getTypeOfFunction(node);
|
236
241
|
const containingClassNode = ParseTreeUtils.getEnclosingClass(node, /* stopAtFunction */ true);
|
237
242
|
if (functionTypeResult) {
|
@@ -295,13 +300,6 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
295
300
|
}
|
296
301
|
}
|
297
302
|
}
|
298
|
-
// If it's a stub file, report an issue of the default value expression is not "...".
|
299
|
-
if (param.defaultValue && this._fileInfo.isStubFile) {
|
300
|
-
const defaultValueType = this._evaluator.getType(param.defaultValue);
|
301
|
-
if (!defaultValueType || !(0, typeUtils_1.isEllipsisType)(defaultValueType)) {
|
302
|
-
this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportInvalidStubStatement, diagnosticRules_1.DiagnosticRule.reportInvalidStubStatement, localize_1.Localizer.Diagnostic.defaultValueNotEllipsis(), param.defaultValue);
|
303
|
-
}
|
304
|
-
}
|
305
303
|
});
|
306
304
|
// Check for invalid use of ParamSpec P.args and P.kwargs.
|
307
305
|
const paramSpecParams = functionTypeResult.functionType.details.parameters.filter((param) => {
|
@@ -2554,9 +2552,20 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2554
2552
|
}
|
2555
2553
|
}
|
2556
2554
|
_conditionallyReportShadowedImport(node) {
|
2555
|
+
var _a, _b;
|
2557
2556
|
if (this._fileInfo.diagnosticRuleSet.reportShadowedImports === 'none') {
|
2558
2557
|
return;
|
2559
2558
|
}
|
2559
|
+
// Skip this check for relative imports.
|
2560
|
+
const nodeModule = node.nodeType === 23 /* ImportFromAs */
|
2561
|
+
? ((_a = node.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 22 /* ImportFrom */
|
2562
|
+
? (_b = node.parent) === null || _b === void 0 ? void 0 : _b.module
|
2563
|
+
: undefined
|
2564
|
+
: node.module;
|
2565
|
+
if (nodeModule === null || nodeModule === void 0 ? void 0 : nodeModule.leadingDots) {
|
2566
|
+
return;
|
2567
|
+
}
|
2568
|
+
// Otherwise use the name to determine if a match for a stdlib module.
|
2560
2569
|
const namePartNodes = node.nodeType === 21 /* ImportAs */
|
2561
2570
|
? node.module.nameParts
|
2562
2571
|
: node.nodeType === 23 /* ImportFromAs */
|
@@ -3389,7 +3398,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3389
3398
|
return;
|
3390
3399
|
}
|
3391
3400
|
// Build maps of symbols for each of the base classes.
|
3392
|
-
const
|
3401
|
+
const baseClassSymbolMaps = baseClasses.map((baseClass) => {
|
3393
3402
|
const specializedBaseClass = classType.details.mro.find((c) => (0, types_1.isClass)(c) && types_1.ClassType.isSameGenericClass(c, baseClass));
|
3394
3403
|
if (!specializedBaseClass || !(0, types_1.isClass)(specializedBaseClass)) {
|
3395
3404
|
return new Map();
|
@@ -3397,30 +3406,37 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3397
3406
|
// Retrieve all of the specialized symbols from the base class and its ancestors.
|
3398
3407
|
return (0, typeUtils_1.getClassFieldsRecursive)(specializedBaseClass);
|
3399
3408
|
});
|
3400
|
-
|
3401
|
-
|
3402
|
-
|
3409
|
+
const childClassSymbolMap = (0, typeUtils_1.getClassFieldsRecursive)(classType);
|
3410
|
+
for (let symbolMapBaseIndex = 1; symbolMapBaseIndex < baseClassSymbolMaps.length; symbolMapBaseIndex++) {
|
3411
|
+
const baseSymbolMap = baseClassSymbolMaps[symbolMapBaseIndex];
|
3412
|
+
for (const [name, overriddenClassAndSymbol] of baseSymbolMap) {
|
3403
3413
|
// Special-case dundered methods, which can differ in signature. Also
|
3404
3414
|
// exempt private symbols.
|
3405
3415
|
if (SymbolNameUtils.isDunderName(name) || SymbolNameUtils.isPrivateName(name)) {
|
3406
3416
|
continue;
|
3407
3417
|
}
|
3408
|
-
const
|
3409
|
-
if (!(0, types_1.isClass)(
|
3418
|
+
const overriddenClassType = overriddenClassAndSymbol.classType;
|
3419
|
+
if (!(0, types_1.isClass)(overriddenClassType)) {
|
3410
3420
|
continue;
|
3411
3421
|
}
|
3412
|
-
|
3413
|
-
|
3414
|
-
const
|
3415
|
-
|
3416
|
-
|
3422
|
+
const overrideClassAndSymbol = childClassSymbolMap.get(name);
|
3423
|
+
if (overrideClassAndSymbol) {
|
3424
|
+
const overrideClassType = overrideClassAndSymbol.classType;
|
3425
|
+
// If the override is the same as the overridden, then there's nothing
|
3426
|
+
// to check. If the override is the child class, then we can also skip
|
3427
|
+
// the check because the normal override checks will report the error.
|
3428
|
+
if (!(0, types_1.isClass)(overrideClassType) ||
|
3429
|
+
types_1.ClassType.isSameGenericClass(overrideClassType, overriddenClassType) ||
|
3430
|
+
types_1.ClassType.isSameGenericClass(overrideClassType, classType)) {
|
3431
|
+
continue;
|
3417
3432
|
}
|
3433
|
+
this._validateMultipleInheritanceOverride(overriddenClassAndSymbol, overrideClassAndSymbol, classType, name, errorNode);
|
3418
3434
|
}
|
3419
3435
|
}
|
3420
3436
|
}
|
3421
3437
|
}
|
3422
|
-
_validateMultipleInheritanceOverride(
|
3423
|
-
if (!(0, types_1.isClass)(
|
3438
|
+
_validateMultipleInheritanceOverride(overriddenClassAndSymbol, overrideClassAndSymbol, childClassType, memberName, errorNode) {
|
3439
|
+
if (!(0, types_1.isClass)(overriddenClassAndSymbol.classType) || !(0, types_1.isClass)(overrideClassAndSymbol.classType)) {
|
3424
3440
|
return;
|
3425
3441
|
}
|
3426
3442
|
// Special case the '_' symbol, which is used in single dispatch
|
@@ -3428,15 +3444,19 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3428
3444
|
if (memberName === '_') {
|
3429
3445
|
return;
|
3430
3446
|
}
|
3431
|
-
let
|
3432
|
-
|
3447
|
+
let overriddenType = this._evaluator.getEffectiveTypeOfSymbol(overriddenClassAndSymbol.symbol);
|
3448
|
+
overriddenType = (0, typeUtils_1.partiallySpecializeType)(overriddenType, overriddenClassAndSymbol.classType);
|
3433
3449
|
const overrideSymbol = overrideClassAndSymbol.symbol;
|
3434
3450
|
let overrideType = this._evaluator.getEffectiveTypeOfSymbol(overrideSymbol);
|
3435
3451
|
overrideType = (0, typeUtils_1.partiallySpecializeType)(overrideType, overrideClassAndSymbol.classType);
|
3452
|
+
const childOverrideSymbol = childClassType.details.fields.get(memberName);
|
3453
|
+
const childOverrideType = childOverrideSymbol
|
3454
|
+
? this._evaluator.getEffectiveTypeOfSymbol(childOverrideSymbol)
|
3455
|
+
: undefined;
|
3436
3456
|
let diag;
|
3437
3457
|
const overrideDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(overrideClassAndSymbol.symbol);
|
3438
|
-
const
|
3439
|
-
if ((0, types_1.isFunction)(
|
3458
|
+
const overriddenDecl = (0, symbolUtils_1.getLastTypedDeclaredForSymbol)(overriddenClassAndSymbol.symbol);
|
3459
|
+
if ((0, types_1.isFunction)(overriddenType) || (0, types_1.isOverloadedFunction)(overriddenType)) {
|
3440
3460
|
const diagAddendum = new diagnostic_1.DiagnosticAddendum();
|
3441
3461
|
let overrideFunction;
|
3442
3462
|
if ((0, types_1.isFunction)(overrideType)) {
|
@@ -3451,7 +3471,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3451
3471
|
}
|
3452
3472
|
}
|
3453
3473
|
if (overrideFunction) {
|
3454
|
-
if (!this._evaluator.validateOverrideMethod(
|
3474
|
+
if (!this._evaluator.validateOverrideMethod(overriddenType, overrideFunction, diagAddendum,
|
3455
3475
|
/* enforceParamNameMatch */ true)) {
|
3456
3476
|
const decl = overrideFunction.details.declaration;
|
3457
3477
|
if (decl && decl.type === 5 /* Function */) {
|
@@ -3463,7 +3483,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3463
3483
|
}
|
3464
3484
|
}
|
3465
3485
|
}
|
3466
|
-
else if ((0, typeUtils_1.isProperty)(
|
3486
|
+
else if ((0, typeUtils_1.isProperty)(overriddenType)) {
|
3467
3487
|
// Handle properties specially.
|
3468
3488
|
if (!(0, typeUtils_1.isProperty)(overrideType) && !(0, types_1.isAnyOrUnknown)(overrideType)) {
|
3469
3489
|
const decls = overrideSymbol.getDeclarations();
|
@@ -3482,23 +3502,28 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
3482
3502
|
// This check can be expensive, so don't perform it if the corresponding
|
3483
3503
|
// rule is disabled.
|
3484
3504
|
if (this._fileInfo.diagnosticRuleSet.reportIncompatibleVariableOverride !== 'none') {
|
3485
|
-
if (!(0, types_1.isAnyOrUnknown)(
|
3486
|
-
|
3487
|
-
|
3488
|
-
|
3489
|
-
|
3505
|
+
if (!(0, types_1.isAnyOrUnknown)(overriddenType) && !(0, types_1.isAnyOrUnknown)(overrideType)) {
|
3506
|
+
// If the child class overrides this symbol with its own type, make sure
|
3507
|
+
// the override is compatible with the overridden symbol. Otherwise use the
|
3508
|
+
// override type.
|
3509
|
+
if (!this._evaluator.assignType(overriddenType, childOverrideType !== null && childOverrideType !== void 0 ? childOverrideType : overrideType)) {
|
3510
|
+
diag = this._evaluator.addDiagnostic(this._fileInfo.diagnosticRuleSet.reportIncompatibleVariableOverride, diagnosticRules_1.DiagnosticRule.reportIncompatibleVariableOverride, localize_1.Localizer.Diagnostic.baseClassVariableTypeIncompatible().format({
|
3511
|
+
classType: childClassType.details.name,
|
3512
|
+
name: memberName,
|
3513
|
+
}), errorNode);
|
3514
|
+
}
|
3490
3515
|
}
|
3491
3516
|
}
|
3492
3517
|
}
|
3493
|
-
if (diag && overrideDecl &&
|
3494
|
-
diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.
|
3495
|
-
baseClass: this._evaluator.printType((0, typeUtils_1.convertToInstance)(
|
3518
|
+
if (diag && overrideDecl && overriddenDecl) {
|
3519
|
+
diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.baseClassOverriddenType().format({
|
3520
|
+
baseClass: this._evaluator.printType((0, typeUtils_1.convertToInstance)(overriddenClassAndSymbol.classType)),
|
3521
|
+
type: this._evaluator.printType(overriddenType),
|
3522
|
+
}), overriddenDecl.path, overriddenDecl.range);
|
3523
|
+
diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.baseClassOverridesType().format({
|
3524
|
+
baseClass: this._evaluator.printType((0, typeUtils_1.convertToInstance)(overrideClassAndSymbol.classType)),
|
3496
3525
|
type: this._evaluator.printType(overrideType),
|
3497
3526
|
}), overrideDecl.path, overrideDecl.range);
|
3498
|
-
diag.addRelatedInfo(localize_1.Localizer.DiagnosticAddendum.baseClassProvidesType().format({
|
3499
|
-
baseClass: this._evaluator.printType((0, typeUtils_1.convertToInstance)(baseClass2)),
|
3500
|
-
type: this._evaluator.printType(baseType),
|
3501
|
-
}), baseDecl.path, baseDecl.range);
|
3502
3527
|
}
|
3503
3528
|
}
|
3504
3529
|
// Validates that any overridden methods or variables contain the same
|