@zzzen/pyright-internal 1.2.0-dev.20230514 → 1.2.0-dev.20230521
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.d.ts +1 -0
- package/dist/analyzer/analyzerFileInfo.js +4 -3
- package/dist/analyzer/analyzerFileInfo.js.map +1 -1
- package/dist/analyzer/backgroundAnalysisProgram.d.ts +17 -15
- package/dist/analyzer/backgroundAnalysisProgram.js +43 -53
- package/dist/analyzer/backgroundAnalysisProgram.js.map +1 -1
- package/dist/analyzer/binder.d.ts +0 -2
- package/dist/analyzer/binder.js +2 -20
- package/dist/analyzer/binder.js.map +1 -1
- package/dist/analyzer/checker.d.ts +1 -1
- package/dist/analyzer/checker.js +61 -28
- package/dist/analyzer/checker.js.map +1 -1
- package/dist/analyzer/constructorTransform.js +5 -1
- package/dist/analyzer/constructorTransform.js.map +1 -1
- package/dist/analyzer/constructors.js +14 -12
- package/dist/analyzer/constructors.js.map +1 -1
- package/dist/analyzer/dataClasses.js +3 -0
- package/dist/analyzer/dataClasses.js.map +1 -1
- package/dist/analyzer/declarationUtils.js +1 -0
- package/dist/analyzer/declarationUtils.js.map +1 -1
- package/dist/analyzer/importResolver.d.ts +4 -4
- package/dist/analyzer/importResolver.js +46 -40
- package/dist/analyzer/importResolver.js.map +1 -1
- package/dist/analyzer/importResult.d.ts +2 -2
- package/dist/analyzer/importStatementUtils.js +2 -2
- package/dist/analyzer/importStatementUtils.js.map +1 -1
- package/dist/analyzer/packageTypeVerifier.js +1 -1
- package/dist/analyzer/packageTypeVerifier.js.map +1 -1
- package/dist/analyzer/parseTreeUtils.js +2 -34
- package/dist/analyzer/parseTreeUtils.js.map +1 -1
- package/dist/analyzer/parseTreeWalker.js +2 -2
- package/dist/analyzer/parseTreeWalker.js.map +1 -1
- package/dist/analyzer/patternMatching.js +1 -0
- package/dist/analyzer/patternMatching.js.map +1 -1
- package/dist/analyzer/program.d.ts +12 -18
- package/dist/analyzer/program.js +25 -12
- package/dist/analyzer/program.js.map +1 -1
- package/dist/analyzer/protocols.js +3 -1
- package/dist/analyzer/protocols.js.map +1 -1
- package/dist/analyzer/service.d.ts +4 -4
- package/dist/analyzer/service.js +21 -24
- package/dist/analyzer/service.js.map +1 -1
- package/dist/analyzer/sourceFile.d.ts +1 -6
- package/dist/analyzer/sourceFile.js +7 -26
- package/dist/analyzer/sourceFile.js.map +1 -1
- package/dist/analyzer/sourceMapper.js +1 -1
- package/dist/analyzer/sourceMapper.js.map +1 -1
- package/dist/analyzer/typeDocStringUtils.js +1 -1
- package/dist/analyzer/typeDocStringUtils.js.map +1 -1
- package/dist/analyzer/typeEvaluator.d.ts +2 -2
- package/dist/analyzer/typeEvaluator.js +134 -55
- 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 +1 -0
- package/dist/analyzer/typeGuards.js.map +1 -1
- package/dist/analyzer/typePrinter.js +8 -1
- package/dist/analyzer/typePrinter.js.map +1 -1
- package/dist/analyzer/typeUtils.js +1 -1
- package/dist/analyzer/typeUtils.js.map +1 -1
- package/dist/analyzer/typeVarContext.js +2 -2
- package/dist/analyzer/typeVarContext.js.map +1 -1
- package/dist/analyzer/typedDicts.js +138 -41
- package/dist/analyzer/typedDicts.js.map +1 -1
- package/dist/analyzer/types.d.ts +7 -1
- package/dist/analyzer/types.js +19 -6
- package/dist/analyzer/types.js.map +1 -1
- package/dist/backgroundAnalysisBase.d.ts +25 -19
- package/dist/backgroundAnalysisBase.js +145 -115
- package/dist/backgroundAnalysisBase.js.map +1 -1
- package/dist/backgroundThreadBase.d.ts +1 -1
- package/dist/backgroundThreadBase.js +1 -1
- package/dist/backgroundThreadBase.js.map +1 -1
- package/dist/commands/dumpFileDebugInfoCommand.js +3 -3
- package/dist/commands/dumpFileDebugInfoCommand.js.map +1 -1
- package/dist/common/configOptions.js +1 -1
- package/dist/common/configOptions.js.map +1 -1
- package/dist/common/extensibility.d.ts +2 -4
- package/dist/common/extensibility.js.map +1 -1
- package/dist/common/textRange.js +1 -1
- package/dist/common/textRange.js.map +1 -1
- package/dist/common/workspaceEditUtils.d.ts +1 -1
- package/dist/common/workspaceEditUtils.js +5 -7
- package/dist/common/workspaceEditUtils.js.map +1 -1
- package/dist/languageServerBase.js +2 -2
- package/dist/languageServerBase.js.map +1 -1
- package/dist/languageService/autoImporter.d.ts +3 -3
- package/dist/languageService/autoImporter.js +3 -3
- package/dist/languageService/autoImporter.js.map +1 -1
- package/dist/languageService/callHierarchyProvider.js +3 -2
- package/dist/languageService/callHierarchyProvider.js.map +1 -1
- package/dist/languageService/completionProvider.d.ts +2 -2
- package/dist/languageService/completionProvider.js +37 -30
- package/dist/languageService/completionProvider.js.map +1 -1
- package/dist/languageService/documentSymbolCollector.js +9 -9
- package/dist/languageService/documentSymbolCollector.js.map +1 -1
- package/dist/languageService/referencesProvider.js +1 -1
- package/dist/languageService/referencesProvider.js.map +1 -1
- package/dist/languageService/signatureHelpProvider.js +1 -1
- package/dist/languageService/signatureHelpProvider.js.map +1 -1
- package/dist/languageService/symbolIndexer.d.ts +0 -8
- package/dist/languageService/symbolIndexer.js.map +1 -1
- package/dist/localization/localize.d.ts +22 -3
- package/dist/localization/localize.js +12 -3
- package/dist/localization/localize.js.map +1 -1
- package/dist/localization/package.nls.en-us.json +14 -5
- package/dist/parser/parseNodes.d.ts +8 -8
- package/dist/parser/parseNodes.js +20 -10
- package/dist/parser/parseNodes.js.map +1 -1
- package/dist/parser/parser.d.ts +3 -3
- package/dist/parser/parser.js +133 -159
- package/dist/parser/parser.js.map +1 -1
- package/dist/parser/stringTokenUtils.d.ts +3 -13
- package/dist/parser/stringTokenUtils.js +8 -181
- package/dist/parser/stringTokenUtils.js.map +1 -1
- package/dist/parser/tokenizer.d.ts +3 -0
- package/dist/parser/tokenizer.js +211 -24
- package/dist/parser/tokenizer.js.map +1 -1
- package/dist/parser/tokenizerTypes.d.ts +31 -1
- package/dist/parser/tokenizerTypes.js +51 -1
- package/dist/parser/tokenizerTypes.js.map +1 -1
- package/dist/readonlyAugmentedFileSystem.js +1 -1
- package/dist/readonlyAugmentedFileSystem.js.map +1 -1
- package/dist/tests/harness/fourslash/testLanguageService.js +1 -1
- package/dist/tests/harness/fourslash/testLanguageService.js.map +1 -1
- package/dist/tests/harness/fourslash/testState.js +2 -1
- package/dist/tests/harness/fourslash/testState.js.map +1 -1
- package/dist/tests/importResolver.test.js +3 -3
- package/dist/tests/importResolver.test.js.map +1 -1
- package/dist/tests/textRange.test.d.ts +1 -0
- package/dist/tests/textRange.test.js +45 -0
- package/dist/tests/textRange.test.js.map +1 -0
- package/dist/tests/tokenizer.test.js +272 -58
- package/dist/tests/tokenizer.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 +10 -0
- package/dist/tests/typeEvaluator3.test.js.map +1 -1
- package/dist/tests/typeEvaluator4.test.js +7 -2
- package/dist/tests/typeEvaluator4.test.js.map +1 -1
- package/dist/tests/typeEvaluator5.test.js +8 -0
- package/dist/tests/typeEvaluator5.test.js.map +1 -1
- package/dist/workspaceFactory.js +3 -5
- package/dist/workspaceFactory.js.map +1 -1
- package/package.json +1 -1
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"typeDocStringUtils.js","sourceRoot":"","sources":["../../../src/analyzer/typeDocStringUtils.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;;;;;;;;;;;;;;;;;;;;AAEH,yDAUiC;AACjC,2EAA6D;AAC7D,2DAAoE;AACpE,6CAU2B;AAC3B,+
|
1
|
+
{"version":3,"file":"typeDocStringUtils.js","sourceRoot":"","sources":["../../../src/analyzer/typeDocStringUtils.ts"],"names":[],"mappings":"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"}
|
@@ -2,9 +2,9 @@ import { ImportLookup } from './analyzerFileInfo';
|
|
2
2
|
import { TypeEvaluator } from './typeEvaluatorTypes';
|
3
3
|
import * as TypePrinter from './typePrinter';
|
4
4
|
import { Type } from './types';
|
5
|
-
export interface
|
5
|
+
export interface MemberAccessTypeResult {
|
6
6
|
type: Type;
|
7
|
-
|
7
|
+
isAsymmetricAccessor: boolean;
|
8
8
|
}
|
9
9
|
export declare const maxCodeComplexity = 768;
|
10
10
|
export interface EvaluatorOptions {
|
@@ -166,7 +166,7 @@ const printExpressionTypes = false;
|
|
166
166
|
exports.maxCodeComplexity = 768;
|
167
167
|
function createTypeEvaluator(importLookup, evaluatorOptions) {
|
168
168
|
const symbolResolutionStack = [];
|
169
|
-
const
|
169
|
+
const asymmetricAccessorAssignmentCache = new Set();
|
170
170
|
const speculativeTypeTracker = new typeCacheUtils_1.SpeculativeTypeTracker();
|
171
171
|
const suppressedNodeStack = [];
|
172
172
|
let functionRecursionMap = new Set();
|
@@ -300,10 +300,10 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
300
300
|
if (isSpeculativeModeInUse(/* node */ undefined)) {
|
301
301
|
return;
|
302
302
|
}
|
303
|
-
|
303
|
+
asymmetricAccessorAssignmentCache.add(node.id);
|
304
304
|
}
|
305
|
-
function
|
306
|
-
return
|
305
|
+
function isAsymmetricAccessorAssignment(node) {
|
306
|
+
return asymmetricAccessorAssignmentCache.has(node.id);
|
307
307
|
}
|
308
308
|
// Determines whether the specified node is contained within
|
309
309
|
// the function node corresponding to the function that we
|
@@ -822,7 +822,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
822
822
|
let isLiteralString = true;
|
823
823
|
// If all of the format expressions are of type LiteralString, then
|
824
824
|
// the resulting formatted string is also LiteralString.
|
825
|
-
node.
|
825
|
+
node.fieldExpressions.forEach((expr) => {
|
826
826
|
const exprType = getTypeOfExpression(expr).type;
|
827
827
|
(0, typeUtils_1.doForEachSubtype)(exprType, (exprSubtype) => {
|
828
828
|
if (!(0, types_1.isClassInstance)(exprSubtype)) {
|
@@ -1225,7 +1225,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
1225
1225
|
type: memberInfo.type,
|
1226
1226
|
classType: memberInfo.classType,
|
1227
1227
|
isIncomplete: !!memberInfo.isTypeIncomplete,
|
1228
|
-
|
1228
|
+
isAsymmetricAccessor: memberInfo.isAsymmetricAccessor,
|
1229
1229
|
};
|
1230
1230
|
}
|
1231
1231
|
return undefined;
|
@@ -1272,7 +1272,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
1272
1272
|
return {
|
1273
1273
|
type: memberInfo.type,
|
1274
1274
|
isIncomplete: !!memberInfo.isTypeIncomplete,
|
1275
|
-
|
1275
|
+
isAsymmetricAccessor: memberInfo.isAsymmetricAccessor,
|
1276
1276
|
};
|
1277
1277
|
}
|
1278
1278
|
// Determine whether to use the class or metaclass diagnostic addendum.
|
@@ -2102,7 +2102,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
2102
2102
|
setErrorNode: srcExpr,
|
2103
2103
|
setExpectedTypeDiag: expectedTypeDiagAddendum,
|
2104
2104
|
}, 0 /* None */);
|
2105
|
-
if (setTypeResult.
|
2105
|
+
if (setTypeResult.isAsymmetricAccessor) {
|
2106
2106
|
setAsymmetricDescriptorAssignment(target);
|
2107
2107
|
}
|
2108
2108
|
writeTypeCache(target.memberName, { type, isIncomplete: isTypeIncomplete }, 0 /* None */);
|
@@ -2322,6 +2322,9 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
2322
2322
|
// If this is a TypeVarTuple *Ts, convert it to an unpacked tuple
|
2323
2323
|
// *tuple[*Ts].
|
2324
2324
|
if ((0, types_1.isVariadicTypeVar)(subtype)) {
|
2325
|
+
if (subtype.isVariadicInUnion) {
|
2326
|
+
return subtype;
|
2327
|
+
}
|
2325
2328
|
if (tupleClassType && (0, types_1.isInstantiableClass)(tupleClassType)) {
|
2326
2329
|
return (0, typeUtils_1.convertToInstance)((0, typeUtils_1.specializeTupleClass)(tupleClassType, [{ type: subtype, isUnbounded: false }],
|
2327
2330
|
/* isTypeArgumentExplicit */ true,
|
@@ -3295,7 +3298,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
3295
3298
|
const fileInfo = AnalyzerNodeInfo.getFileInfo(node);
|
3296
3299
|
let type;
|
3297
3300
|
let isIncomplete = !!baseTypeResult.isIncomplete;
|
3298
|
-
let
|
3301
|
+
let isAsymmetricAccessor;
|
3299
3302
|
const isRequired = false;
|
3300
3303
|
const isNotRequired = false;
|
3301
3304
|
// If the base type was incomplete and unbound, don't proceed
|
@@ -3354,7 +3357,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
3354
3357
|
}
|
3355
3358
|
return { type: types_1.UnknownType.create(isIncomplete), isIncomplete };
|
3356
3359
|
}
|
3357
|
-
if (flags &
|
3360
|
+
if (flags & 256 /* ExpectingTypeAnnotation */) {
|
3358
3361
|
if (!isIncomplete) {
|
3359
3362
|
addDiagnostic(AnalyzerNodeInfo.getFileInfo(node).diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.typeVarNoMember().format({
|
3360
3363
|
type: printType(baseType),
|
@@ -3379,8 +3382,8 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
3379
3382
|
if (typeResult === null || typeResult === void 0 ? void 0 : typeResult.isIncomplete) {
|
3380
3383
|
isIncomplete = true;
|
3381
3384
|
}
|
3382
|
-
if (typeResult === null || typeResult === void 0 ? void 0 : typeResult.
|
3383
|
-
|
3385
|
+
if (typeResult === null || typeResult === void 0 ? void 0 : typeResult.isAsymmetricAccessor) {
|
3386
|
+
isAsymmetricAccessor = true;
|
3384
3387
|
}
|
3385
3388
|
}
|
3386
3389
|
else {
|
@@ -3397,8 +3400,8 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
3397
3400
|
if (typeResult === null || typeResult === void 0 ? void 0 : typeResult.isIncomplete) {
|
3398
3401
|
isIncomplete = true;
|
3399
3402
|
}
|
3400
|
-
if (typeResult === null || typeResult === void 0 ? void 0 : typeResult.
|
3401
|
-
|
3403
|
+
if (typeResult === null || typeResult === void 0 ? void 0 : typeResult.isAsymmetricAccessor) {
|
3404
|
+
isAsymmetricAccessor = true;
|
3402
3405
|
}
|
3403
3406
|
}
|
3404
3407
|
break;
|
@@ -3598,7 +3601,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
3598
3601
|
/* ignoreEmptyContainers */ false);
|
3599
3602
|
}
|
3600
3603
|
}
|
3601
|
-
return { type, isIncomplete,
|
3604
|
+
return { type, isIncomplete, isAsymmetricAccessor, isRequired, isNotRequired };
|
3602
3605
|
}
|
3603
3606
|
function getTypeOfClassMemberName(errorNode, classType, isAccessedThroughObject, memberName, usage, diag, flags, bindToType) {
|
3604
3607
|
var _a, _b;
|
@@ -3733,7 +3736,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
3733
3736
|
isClassMember: !memberInfo.isInstanceMember,
|
3734
3737
|
isClassVar: memberInfo.isClassVar,
|
3735
3738
|
classType: memberInfo.classType,
|
3736
|
-
|
3739
|
+
isAsymmetricAccessor: descriptorResult.isAsymmetricAccessor,
|
3737
3740
|
};
|
3738
3741
|
}
|
3739
3742
|
// No attribute of that name was found. If this is a member access
|
@@ -3745,11 +3748,11 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
3745
3748
|
if (generalAttrType) {
|
3746
3749
|
return {
|
3747
3750
|
symbol: undefined,
|
3748
|
-
type: generalAttrType,
|
3751
|
+
type: generalAttrType.type,
|
3749
3752
|
isTypeIncomplete: false,
|
3750
3753
|
isClassMember: false,
|
3751
3754
|
isClassVar: false,
|
3752
|
-
|
3755
|
+
isAsymmetricAccessor: generalAttrType.isAsymmetricAccessor,
|
3753
3756
|
};
|
3754
3757
|
}
|
3755
3758
|
}
|
@@ -3762,7 +3765,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
3762
3765
|
function applyDescriptorAccessMethod(type, memberInfo, baseTypeClass, bindToType, isAccessedThroughObject, flags, errorNode, memberName, usage, diag) {
|
3763
3766
|
const treatConstructorAsClassMember = (flags & 16 /* TreatConstructorAsClassMethod */) !== 0;
|
3764
3767
|
let isTypeValid = true;
|
3765
|
-
let
|
3768
|
+
let isAsymmetricAccessor = false;
|
3766
3769
|
type = (0, typeUtils_1.mapSubtypes)(type, (subtype) => {
|
3767
3770
|
var _a, _b, _c;
|
3768
3771
|
const concreteSubtype = makeTopLevelTypeVarsConcrete(subtype);
|
@@ -3947,7 +3950,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
3947
3950
|
// Determine if we're calling __set__ on an asymmetric descriptor or property.
|
3948
3951
|
if (usage.method === 'set' && (0, types_1.isClass)(accessMethod.classType)) {
|
3949
3952
|
if (isAsymmetricDescriptorClass(accessMethod.classType)) {
|
3950
|
-
|
3953
|
+
isAsymmetricAccessor = true;
|
3951
3954
|
}
|
3952
3955
|
}
|
3953
3956
|
if (returnType) {
|
@@ -4051,7 +4054,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
4051
4054
|
if (!isTypeValid) {
|
4052
4055
|
return undefined;
|
4053
4056
|
}
|
4054
|
-
return { type,
|
4057
|
+
return { type, isAsymmetricAccessor };
|
4055
4058
|
}
|
4056
4059
|
function isAsymmetricDescriptorClass(classType) {
|
4057
4060
|
var _a;
|
@@ -4085,6 +4088,38 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
4085
4088
|
classType.isAsymmetricDescriptor = isAsymmetric;
|
4086
4089
|
return isAsymmetric;
|
4087
4090
|
}
|
4091
|
+
function isClassWithAsymmetricAttributeAccessor(classType) {
|
4092
|
+
var _a;
|
4093
|
+
// If the value has already been cached in this type, return the cached value.
|
4094
|
+
if (classType.isAsymmetricAttributeAccessor !== undefined) {
|
4095
|
+
return classType.isAsymmetricAttributeAccessor;
|
4096
|
+
}
|
4097
|
+
let isAsymmetric = false;
|
4098
|
+
const getterSymbolResult = (0, typeUtils_1.lookUpClassMember)(classType, '__getattr__', 2 /* SkipBaseClasses */);
|
4099
|
+
const setterSymbolResult = (0, typeUtils_1.lookUpClassMember)(classType, '__setattr__', 2 /* SkipBaseClasses */);
|
4100
|
+
if (!getterSymbolResult || !setterSymbolResult) {
|
4101
|
+
isAsymmetric = false;
|
4102
|
+
}
|
4103
|
+
else {
|
4104
|
+
const getterType = getEffectiveTypeOfSymbol(getterSymbolResult.symbol);
|
4105
|
+
const setterType = getEffectiveTypeOfSymbol(setterSymbolResult.symbol);
|
4106
|
+
// If either the setter or getter is an overload (or some other non-function type),
|
4107
|
+
// conservatively assume that it's not asymmetric.
|
4108
|
+
if ((0, types_1.isFunction)(getterType) && (0, types_1.isFunction)(setterType)) {
|
4109
|
+
// If there's no declared return type on the getter, assume it's symmetric.
|
4110
|
+
if (setterType.details.parameters.length >= 3 && getterType.details.declaredReturnType) {
|
4111
|
+
const setterValueType = types_1.FunctionType.getEffectiveParameterType(setterType, 2);
|
4112
|
+
const getterReturnType = (_a = types_1.FunctionType.getSpecializedReturnType(getterType)) !== null && _a !== void 0 ? _a : types_1.UnknownType.create();
|
4113
|
+
if (!(0, types_1.isTypeSame)(setterValueType, getterReturnType)) {
|
4114
|
+
isAsymmetric = true;
|
4115
|
+
}
|
4116
|
+
}
|
4117
|
+
}
|
4118
|
+
}
|
4119
|
+
// Cache the value for next time.
|
4120
|
+
classType.isAsymmetricAttributeAccessor = isAsymmetric;
|
4121
|
+
return isAsymmetric;
|
4122
|
+
}
|
4088
4123
|
// Applies the __getattr__, __setattr__ or __delattr__ method if present.
|
4089
4124
|
function applyAttributeAccessOverride(classType, errorNode, usage, memberName) {
|
4090
4125
|
var _a, _b, _c, _d, _e;
|
@@ -4139,7 +4174,14 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
4139
4174
|
const typeVarContext = new typeVarContext_1.TypeVarContext((0, typeUtils_1.getTypeVarScopeId)(boundMethodType));
|
4140
4175
|
const callResult = validateCallArguments(errorNode, argList, { type: boundMethodType }, typeVarContext,
|
4141
4176
|
/* skipUnknownArgCheck */ true);
|
4142
|
-
|
4177
|
+
let isAsymmetricAccessor = false;
|
4178
|
+
if (usage.method === 'set') {
|
4179
|
+
isAsymmetricAccessor = isClassWithAsymmetricAttributeAccessor(classType);
|
4180
|
+
}
|
4181
|
+
return {
|
4182
|
+
type: (_e = callResult.returnType) !== null && _e !== void 0 ? _e : types_1.UnknownType.create(),
|
4183
|
+
isAsymmetricAccessor,
|
4184
|
+
};
|
4143
4185
|
}
|
4144
4186
|
}
|
4145
4187
|
}
|
@@ -4475,6 +4517,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
4475
4517
|
let isIncomplete = baseTypeResult.isIncomplete;
|
4476
4518
|
let isRequired = false;
|
4477
4519
|
let isNotRequired = false;
|
4520
|
+
let isReadOnly = false;
|
4478
4521
|
const type = mapSubtypesExpandTypeVars(baseTypeResult.type,
|
4479
4522
|
/* conditionFilter */ undefined, (concreteSubtype, unexpandedSubtype) => {
|
4480
4523
|
var _a;
|
@@ -4581,6 +4624,9 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
4581
4624
|
else if (result.isNotRequired) {
|
4582
4625
|
isNotRequired = true;
|
4583
4626
|
}
|
4627
|
+
if (result.isReadOnly) {
|
4628
|
+
isReadOnly = true;
|
4629
|
+
}
|
4584
4630
|
return result.type;
|
4585
4631
|
}
|
4586
4632
|
if ((0, types_1.isClassInstance)(concreteSubtype)) {
|
@@ -4612,7 +4658,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
4612
4658
|
}
|
4613
4659
|
});
|
4614
4660
|
}
|
4615
|
-
return { type, isIncomplete, isRequired, isNotRequired };
|
4661
|
+
return { type, isIncomplete, isReadOnly, isRequired, isNotRequired };
|
4616
4662
|
}
|
4617
4663
|
// Determines the effective variance of the type parameters for a generic
|
4618
4664
|
// type alias. Normally, variance is not important for type aliases, but
|
@@ -6077,7 +6123,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
6077
6123
|
if (functionResult.isTypeIncomplete) {
|
6078
6124
|
isTypeIncomplete = true;
|
6079
6125
|
}
|
6080
|
-
|
6126
|
+
(0, collectionUtils_1.appendArray)(overloadsUsedForCall, functionResult.overloadsUsedForCall);
|
6081
6127
|
if (functionResult.argumentErrors) {
|
6082
6128
|
argumentErrors = true;
|
6083
6129
|
}
|
@@ -6123,7 +6169,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
6123
6169
|
return (0, typeUtils_1.convertToInstance)(castToType);
|
6124
6170
|
}
|
6125
6171
|
const functionResult = validateOverloadedFunctionArguments(errorNode, argList, { type: expandedSubtype, isIncomplete: callTypeResult.isIncomplete }, typeVarContext, skipUnknownArgCheck, inferenceContext);
|
6126
|
-
|
6172
|
+
(0, collectionUtils_1.appendArray)(overloadsUsedForCall, functionResult.overloadsUsedForCall);
|
6127
6173
|
if (functionResult.isTypeIncomplete) {
|
6128
6174
|
isTypeIncomplete = true;
|
6129
6175
|
}
|
@@ -6265,7 +6311,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
6265
6311
|
}
|
6266
6312
|
// Assume this is a call to the constructor.
|
6267
6313
|
const constructorResult = (0, constructors_1.validateConstructorArguments)(evaluatorInterface, errorNode, argList, expandedSubtype, skipUnknownArgCheck, inferenceContext);
|
6268
|
-
|
6314
|
+
(0, collectionUtils_1.appendArray)(overloadsUsedForCall, constructorResult.overloadsUsedForCall);
|
6269
6315
|
if (constructorResult.argumentErrors) {
|
6270
6316
|
argumentErrors = true;
|
6271
6317
|
}
|
@@ -6308,7 +6354,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
6308
6354
|
/* diag */ undefined, 64 /* SkipAttributeAccessOverride */)) === null || _e === void 0 ? void 0 : _e.type;
|
6309
6355
|
if (memberType) {
|
6310
6356
|
const functionResult = validateCallArguments(errorNode, argList, { type: memberType }, typeVarContext, skipUnknownArgCheck, inferenceContext, recursionCount);
|
6311
|
-
|
6357
|
+
(0, collectionUtils_1.appendArray)(overloadsUsedForCall, functionResult.overloadsUsedForCall);
|
6312
6358
|
if (functionResult.argumentErrors) {
|
6313
6359
|
argumentErrors = true;
|
6314
6360
|
}
|
@@ -6353,7 +6399,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
6353
6399
|
case 10 /* TypeVar */: {
|
6354
6400
|
expandedSubtype = (0, typeUtils_1.transformPossibleRecursiveTypeAlias)(expandedSubtype);
|
6355
6401
|
const callResult = validateCallArguments(errorNode, argList, { type: expandedSubtype }, typeVarContext, skipUnknownArgCheck, inferenceContext, recursionCount);
|
6356
|
-
|
6402
|
+
(0, collectionUtils_1.appendArray)(overloadsUsedForCall, callResult.overloadsUsedForCall);
|
6357
6403
|
if (callResult.argumentErrors) {
|
6358
6404
|
argumentErrors = true;
|
6359
6405
|
}
|
@@ -7057,7 +7103,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
7057
7103
|
// (i.e. an arg starting with a "**"), we will assume that all parameters
|
7058
7104
|
// are matched.
|
7059
7105
|
if (!unpackedDictionaryArgType && !types_1.FunctionType.isDefaultParameterCheckDisabled(typeResult.type)) {
|
7060
|
-
const unassignedParams =
|
7106
|
+
const unassignedParams = Array.from(paramMap.keys()).filter((name) => {
|
7061
7107
|
const entry = paramMap.get(name);
|
7062
7108
|
return !entry || entry.argsReceived < entry.argsNeeded;
|
7063
7109
|
});
|
@@ -7691,7 +7737,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
7691
7737
|
});
|
7692
7738
|
// Report any missing parameters.
|
7693
7739
|
if (!reportedArgError) {
|
7694
|
-
let unassignedParams =
|
7740
|
+
let unassignedParams = Array.from(paramMap.keys());
|
7695
7741
|
// Parameters that have defaults can be left unspecified.
|
7696
7742
|
unassignedParams = unassignedParams.filter((name) => {
|
7697
7743
|
const paramInfo = paramMap.get(name);
|
@@ -8400,7 +8446,8 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
8400
8446
|
else if (baseClass.literalValue !== undefined) {
|
8401
8447
|
addError(localize_1.Localizer.Diagnostic.newTypeLiteral(), argList[1].node || errorNode);
|
8402
8448
|
}
|
8403
|
-
|
8449
|
+
let classFlags = baseClass.details.flags & ~(1 /* BuiltInClass */ | 2 /* SpecialBuiltIn */);
|
8450
|
+
classFlags |= 4096 /* Final */;
|
8404
8451
|
const classType = types_1.ClassType.createInstantiable(className, ParseTreeUtils.getClassFullName(errorNode, fileInfo.moduleName, className), fileInfo.moduleName, fileInfo.filePath, classFlags, ParseTreeUtils.getTypeSourceId(errorNode),
|
8405
8452
|
/* declaredMetaclass */ undefined, baseClass.details.effectiveMetaclass);
|
8406
8453
|
classType.details.baseClasses.push(isBaseClassAny ? types_1.AnyType.create() : baseClass);
|
@@ -9764,7 +9811,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
9764
9811
|
}
|
9765
9812
|
return (0, typeUtils_1.synthesizeTypeVarForSelfCls)(enclosingClassTypeResult.classType, /* isClsParam */ true);
|
9766
9813
|
}
|
9767
|
-
function
|
9814
|
+
function createRequiredOrReadOnlyType(classType, errorNode, typeArgs, flags) {
|
9768
9815
|
// If no type arguments are provided, the resulting type
|
9769
9816
|
// depends on whether we're evaluating a type annotation or
|
9770
9817
|
// we're in some other context.
|
@@ -9772,7 +9819,11 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
9772
9819
|
return { type: classType };
|
9773
9820
|
}
|
9774
9821
|
if (!typeArgs || typeArgs.length !== 1) {
|
9775
|
-
addError(
|
9822
|
+
addError(classType.details.name === 'ReadOnly'
|
9823
|
+
? localize_1.Localizer.Diagnostic.readOnlyArgCount()
|
9824
|
+
: classType.details.name === 'Required'
|
9825
|
+
? localize_1.Localizer.Diagnostic.requiredArgCount()
|
9826
|
+
: localize_1.Localizer.Diagnostic.notRequiredArgCount(), errorNode);
|
9776
9827
|
return { type: classType };
|
9777
9828
|
}
|
9778
9829
|
const typeArgType = typeArgs[0].type;
|
@@ -9791,17 +9842,35 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
9791
9842
|
if ((flags & 1048576 /* AllowRequired */) !== 0) {
|
9792
9843
|
isUsageLegal = true;
|
9793
9844
|
}
|
9794
|
-
|
9795
|
-
|
9796
|
-
|
9845
|
+
let isReadOnly = typeArgs[0].isReadOnly;
|
9846
|
+
let isRequired = typeArgs[0].isRequired;
|
9847
|
+
let isNotRequired = typeArgs[0].isNotRequired;
|
9848
|
+
if (classType.details.name === 'ReadOnly') {
|
9849
|
+
// Nested ReadOnly are not allowed.
|
9850
|
+
if (typeArgs[0].isReadOnly) {
|
9851
|
+
isUsageLegal = false;
|
9852
|
+
}
|
9853
|
+
isReadOnly = true;
|
9797
9854
|
}
|
9855
|
+
else {
|
9856
|
+
// Nested Required/NotRequired are not allowed.
|
9857
|
+
if (typeArgs[0].isRequired || typeArgs[0].isNotRequired) {
|
9858
|
+
isUsageLegal = false;
|
9859
|
+
}
|
9860
|
+
isRequired = classType.details.name === 'Required';
|
9861
|
+
isNotRequired = classType.details.name === 'NotRequired';
|
9862
|
+
}
|
9863
|
+
isRequired = classType.details.name === 'Required';
|
9864
|
+
isNotRequired = classType.details.name === 'NotRequired';
|
9798
9865
|
if (!isUsageLegal) {
|
9799
|
-
addError(
|
9800
|
-
? localize_1.Localizer.Diagnostic.
|
9801
|
-
:
|
9866
|
+
addError(classType.details.name === 'ReadOnly'
|
9867
|
+
? localize_1.Localizer.Diagnostic.readOnlyNotInTypedDict()
|
9868
|
+
: classType.details.name === 'Required'
|
9869
|
+
? localize_1.Localizer.Diagnostic.requiredNotInTypedDict()
|
9870
|
+
: localize_1.Localizer.Diagnostic.notRequiredNotInTypedDict(), errorNode);
|
9802
9871
|
return { type: types_1.ClassType.cloneForSpecialization(classType, [(0, typeUtils_1.convertToInstance)(typeArgType)], !!typeArgs) };
|
9803
9872
|
}
|
9804
|
-
return { type: typeArgType, isRequired, isNotRequired
|
9873
|
+
return { type: typeArgType, isReadOnly, isRequired, isNotRequired };
|
9805
9874
|
}
|
9806
9875
|
function createUnpackType(classType, errorNode, typeArgs, flags) {
|
9807
9876
|
// If no type arguments are provided, the resulting type
|
@@ -9888,6 +9957,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
9888
9957
|
}
|
9889
9958
|
return {
|
9890
9959
|
type: types_1.TypeBase.cloneForAnnotated(typeArgs[0].type),
|
9960
|
+
isReadOnly: typeArgs[0].isReadOnly,
|
9891
9961
|
isRequired: typeArgs[0].isRequired,
|
9892
9962
|
isNotRequired: typeArgs[0].isNotRequired,
|
9893
9963
|
};
|
@@ -10166,7 +10236,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
10166
10236
|
// methods that are abstract are overridden and shouldn't
|
10167
10237
|
// cause the TypedDict to be marked as abstract.
|
10168
10238
|
if ((0, types_1.isInstantiableClass)(baseClass) && types_1.ClassType.isBuiltIn(baseClass, '_TypedDict')) {
|
10169
|
-
baseClass.details.flags &= ~
|
10239
|
+
baseClass.details.flags &= ~1024 /* SupportsAbstractMethods */;
|
10170
10240
|
}
|
10171
10241
|
}
|
10172
10242
|
}
|
@@ -10222,6 +10292,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
10222
10292
|
['NoReturn', { alias: '', module: 'builtins' }],
|
10223
10293
|
['Never', { alias: '', module: 'builtins' }],
|
10224
10294
|
['LiteralString', { alias: '', module: 'builtins' }],
|
10295
|
+
['ReadOnly', { alias: '', module: 'builtins' }],
|
10225
10296
|
]);
|
10226
10297
|
const aliasMapEntry = specialTypes.get(assignedName);
|
10227
10298
|
if (aliasMapEntry) {
|
@@ -10611,7 +10682,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
10611
10682
|
argType = types_1.UnknownType.create();
|
10612
10683
|
}
|
10613
10684
|
else {
|
10614
|
-
argType = getTypeOfExpression(arg.valueExpression, exprFlags).type;
|
10685
|
+
argType = makeTopLevelTypeVarsConcrete(getTypeOfExpression(arg.valueExpression, exprFlags).type);
|
10615
10686
|
}
|
10616
10687
|
// In some stub files, classes are conditionally defined (e.g. based
|
10617
10688
|
// on platform type). We'll assume that the conditional logic is correct
|
@@ -10708,7 +10779,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
10708
10779
|
// built-in protocol classes.
|
10709
10780
|
if (types_1.ClassType.supportsAbstractMethods(argType) ||
|
10710
10781
|
(types_1.ClassType.isProtocolClass(argType) && !types_1.ClassType.isBuiltIn(argType))) {
|
10711
|
-
classType.details.flags |=
|
10782
|
+
classType.details.flags |= 1024 /* SupportsAbstractMethods */;
|
10712
10783
|
}
|
10713
10784
|
if (types_1.ClassType.isPropertyClass(argType)) {
|
10714
10785
|
classType.details.flags |= 2048 /* PropertyClass */;
|
@@ -10760,16 +10831,20 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
10760
10831
|
metaclassNode = arg.valueExpression;
|
10761
10832
|
}
|
10762
10833
|
}
|
10763
|
-
else if (
|
10764
|
-
|
10834
|
+
else if (types_1.ClassType.isTypedDictClass(classType) &&
|
10835
|
+
(arg.name.value === 'total' || arg.name.value === 'readonly')) {
|
10836
|
+
// The "total" and "readonly" parameters apply only for TypedDict classes.
|
10765
10837
|
// PEP 589 specifies that the parameter must be either True or False.
|
10766
10838
|
const constArgValue = (0, staticExpressions_1.evaluateStaticBoolExpression)(arg.valueExpression, fileInfo.executionEnvironment, fileInfo.definedConstants);
|
10767
10839
|
if (constArgValue === undefined) {
|
10768
|
-
addError(localize_1.Localizer.Diagnostic.
|
10840
|
+
addError(localize_1.Localizer.Diagnostic.typedDictBoolParam().format({ name: arg.name.value }), arg.valueExpression);
|
10769
10841
|
}
|
10770
|
-
else if (!constArgValue) {
|
10842
|
+
else if (arg.name.value === 'total' && !constArgValue) {
|
10771
10843
|
classType.details.flags |= 256 /* CanOmitDictValues */;
|
10772
10844
|
}
|
10845
|
+
else if (arg.name.value === 'readonly' && constArgValue) {
|
10846
|
+
classType.details.flags |= 512 /* DictValuesReadOnly */;
|
10847
|
+
}
|
10773
10848
|
}
|
10774
10849
|
else {
|
10775
10850
|
// Collect arguments that will be passed to the `__init_subclass__`
|
@@ -10906,7 +10981,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
10906
10981
|
classType.details.flags |= 1048576 /* EnumClass */;
|
10907
10982
|
}
|
10908
10983
|
else if (types_1.ClassType.isBuiltIn(metaclassType, 'ABCMeta')) {
|
10909
|
-
classType.details.flags |=
|
10984
|
+
classType.details.flags |= 1024 /* SupportsAbstractMethods */;
|
10910
10985
|
}
|
10911
10986
|
}
|
10912
10987
|
}
|
@@ -10981,7 +11056,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
10981
11056
|
// This needs to be done after dataclass processing.
|
10982
11057
|
if (classType.details.localSlotsNames) {
|
10983
11058
|
let isLimitedToSlots = true;
|
10984
|
-
const extendedSlotsNames =
|
11059
|
+
const extendedSlotsNames = Array.from(classType.details.localSlotsNames);
|
10985
11060
|
classType.details.baseClasses.forEach((baseClass) => {
|
10986
11061
|
if ((0, types_1.isInstantiableClass)(baseClass)) {
|
10987
11062
|
if (!types_1.ClassType.isBuiltIn(baseClass, 'object') &&
|
@@ -13364,8 +13439,9 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
13364
13439
|
return { type: createUnpackType(classType, errorNode, typeArgs, flags) };
|
13365
13440
|
}
|
13366
13441
|
case 'Required':
|
13367
|
-
case 'NotRequired':
|
13368
|
-
|
13442
|
+
case 'NotRequired':
|
13443
|
+
case 'ReadOnly': {
|
13444
|
+
return createRequiredOrReadOnlyType(classType, errorNode, typeArgs, flags);
|
13369
13445
|
}
|
13370
13446
|
case 'Self': {
|
13371
13447
|
return { type: createSelfType(classType, errorNode, typeArgs) };
|
@@ -16005,10 +16081,10 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
16005
16081
|
/* diag */ undefined, destTypeVarContextClone, srcTypeVarContextClone, flags, recursionCount)) {
|
16006
16082
|
filteredOverloads.push(overload);
|
16007
16083
|
if (destTypeVarContextClone) {
|
16008
|
-
|
16084
|
+
(0, collectionUtils_1.appendArray)(destTypeVarSignatures, destTypeVarContextClone.getSignatureContexts());
|
16009
16085
|
}
|
16010
16086
|
if (srcTypeVarContextClone) {
|
16011
|
-
|
16087
|
+
(0, collectionUtils_1.appendArray)(srcTypeVarSignatures, srcTypeVarContextClone.getSignatureContexts());
|
16012
16088
|
}
|
16013
16089
|
}
|
16014
16090
|
});
|
@@ -17783,7 +17859,10 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
17783
17859
|
const textValue = node.strings[0].value;
|
17784
17860
|
// Determine the offset within the file where the string
|
17785
17861
|
// literal's contents begin.
|
17786
|
-
|
17862
|
+
let valueOffset = node.strings[0].start;
|
17863
|
+
if (node.strings[0].nodeType === 49 /* String */) {
|
17864
|
+
valueOffset += node.strings[0].token.prefixLength + node.strings[0].token.quoteMarkLength;
|
17865
|
+
}
|
17787
17866
|
const parseOptions = new parser_1.ParseOptions();
|
17788
17867
|
parseOptions.isStubFile = fileInfo.isStubFile;
|
17789
17868
|
parseOptions.pythonVersion = fileInfo.executionEnvironment.pythonVersion;
|
@@ -17859,7 +17938,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
|
|
17859
17938
|
validateOverloadedFunctionArguments,
|
17860
17939
|
isAfterNodeReachable,
|
17861
17940
|
isNodeReachable,
|
17862
|
-
isAsymmetricDescriptorAssignment,
|
17941
|
+
isAsymmetricDescriptorAssignment: isAsymmetricAccessorAssignment,
|
17863
17942
|
suppressDiagnostics,
|
17864
17943
|
getDeclarationsForStringNode,
|
17865
17944
|
getDeclarationsForNameNode,
|