@zzzen/pyright-internal 1.2.0-dev.20231029 → 1.2.0-dev.20231112
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.map +1 -1
- package/dist/analyzer/checker.js +99 -105
- package/dist/analyzer/checker.js.map +1 -1
- package/dist/analyzer/codeFlowEngine.js +12 -33
- package/dist/analyzer/codeFlowEngine.js.map +1 -1
- package/dist/analyzer/codeFlowUtils.js +4 -2
- package/dist/analyzer/codeFlowUtils.js.map +1 -1
- package/dist/analyzer/constraintSolver.js +21 -23
- package/dist/analyzer/constraintSolver.js.map +1 -1
- package/dist/analyzer/constructorTransform.js +4 -6
- package/dist/analyzer/constructorTransform.js.map +1 -1
- package/dist/analyzer/constructors.d.ts +6 -3
- package/dist/analyzer/constructors.js +66 -41
- package/dist/analyzer/constructors.js.map +1 -1
- package/dist/analyzer/dataClasses.js +13 -18
- package/dist/analyzer/dataClasses.js.map +1 -1
- package/dist/analyzer/declarationUtils.js +1 -1
- package/dist/analyzer/declarationUtils.js.map +1 -1
- package/dist/analyzer/decorators.js +1 -1
- package/dist/analyzer/decorators.js.map +1 -1
- package/dist/analyzer/enums.d.ts +2 -5
- package/dist/analyzer/enums.js +5 -3
- package/dist/analyzer/enums.js.map +1 -1
- package/dist/analyzer/functionTransform.js +1 -1
- package/dist/analyzer/functionTransform.js.map +1 -1
- package/dist/analyzer/importResolver.d.ts +4 -2
- package/dist/analyzer/importResolver.js +30 -10
- package/dist/analyzer/importResolver.js.map +1 -1
- package/dist/analyzer/importStatementUtils.d.ts +1 -1
- package/dist/analyzer/importStatementUtils.js +33 -5
- package/dist/analyzer/importStatementUtils.js.map +1 -1
- package/dist/analyzer/namedTuples.js +3 -2
- package/dist/analyzer/namedTuples.js.map +1 -1
- package/dist/analyzer/operations.js +34 -31
- package/dist/analyzer/operations.js.map +1 -1
- package/dist/analyzer/packageTypeVerifier.js +28 -26
- package/dist/analyzer/packageTypeVerifier.js.map +1 -1
- package/dist/analyzer/parseTreeUtils.d.ts +1 -0
- package/dist/analyzer/parseTreeUtils.js +17 -2
- package/dist/analyzer/parseTreeUtils.js.map +1 -1
- package/dist/analyzer/patternMatching.js +6 -6
- package/dist/analyzer/patternMatching.js.map +1 -1
- package/dist/analyzer/program.d.ts +1 -1
- package/dist/analyzer/program.js +34 -21
- package/dist/analyzer/program.js.map +1 -1
- package/dist/analyzer/properties.js +25 -28
- package/dist/analyzer/properties.js.map +1 -1
- package/dist/analyzer/protocols.d.ts +1 -1
- package/dist/analyzer/protocols.js +15 -19
- package/dist/analyzer/protocols.js.map +1 -1
- package/dist/analyzer/service.js +12 -6
- package/dist/analyzer/service.js.map +1 -1
- package/dist/analyzer/sourceFile.d.ts +1 -0
- package/dist/analyzer/sourceFile.js +36 -2
- package/dist/analyzer/sourceFile.js.map +1 -1
- package/dist/analyzer/sourceFileInfoUtils.d.ts +1 -1
- package/dist/analyzer/sourceFileInfoUtils.js +9 -3
- package/dist/analyzer/sourceFileInfoUtils.js.map +1 -1
- package/dist/analyzer/tracePrinter.js +11 -13
- package/dist/analyzer/tracePrinter.js.map +1 -1
- package/dist/analyzer/typeDocStringUtils.js +3 -3
- package/dist/analyzer/typeDocStringUtils.js.map +1 -1
- package/dist/analyzer/typeEvaluator.d.ts +3 -1
- package/dist/analyzer/typeEvaluator.js +1184 -1270
- package/dist/analyzer/typeEvaluator.js.map +1 -1
- package/dist/analyzer/typeEvaluatorTypes.d.ts +13 -26
- package/dist/analyzer/typeEvaluatorTypes.js +1 -36
- package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
- package/dist/analyzer/typeGuards.js +37 -32
- package/dist/analyzer/typeGuards.js.map +1 -1
- package/dist/analyzer/typePrinter.js +19 -18
- package/dist/analyzer/typePrinter.js.map +1 -1
- package/dist/analyzer/typeUtils.d.ts +17 -8
- package/dist/analyzer/typeUtils.js +149 -94
- package/dist/analyzer/typeUtils.js.map +1 -1
- package/dist/analyzer/typeVarContext.js +6 -7
- package/dist/analyzer/typeVarContext.js.map +1 -1
- package/dist/analyzer/typeWalker.d.ts +1 -2
- package/dist/analyzer/typeWalker.js +7 -13
- package/dist/analyzer/typeWalker.js.map +1 -1
- package/dist/analyzer/typedDicts.js +10 -10
- package/dist/analyzer/typedDicts.js.map +1 -1
- package/dist/analyzer/types.d.ts +11 -20
- package/dist/analyzer/types.js +45 -77
- package/dist/analyzer/types.js.map +1 -1
- package/dist/commands/dumpFileDebugInfoCommand.js +7 -9
- package/dist/commands/dumpFileDebugInfoCommand.js.map +1 -1
- package/dist/common/commandLineOptions.d.ts +2 -1
- package/dist/common/commandLineOptions.js +1 -1
- package/dist/common/commandLineOptions.js.map +1 -1
- package/dist/common/configOptions.d.ts +3 -2
- package/dist/common/configOptions.js +40 -25
- package/dist/common/configOptions.js.map +1 -1
- package/dist/common/extensibility.d.ts +3 -0
- package/dist/common/pathUtils.d.ts +1 -1
- package/dist/common/pathUtils.js +11 -10
- package/dist/common/pathUtils.js.map +1 -1
- package/dist/common/realFileSystem.js +4 -6
- package/dist/common/realFileSystem.js.map +1 -1
- package/dist/common/serviceProviderExtensions.d.ts +2 -1
- package/dist/common/serviceProviderExtensions.js +1 -0
- package/dist/common/serviceProviderExtensions.js.map +1 -1
- package/dist/common/textEditTracker.js +2 -2
- package/dist/common/textEditTracker.js.map +1 -1
- package/dist/languageServerBase.d.ts +3 -3
- package/dist/languageServerBase.js +18 -15
- package/dist/languageServerBase.js.map +1 -1
- package/dist/languageService/analyzerServiceExecutor.js +1 -1
- package/dist/languageService/analyzerServiceExecutor.js.map +1 -1
- package/dist/languageService/callHierarchyProvider.js +3 -3
- package/dist/languageService/callHierarchyProvider.js.map +1 -1
- package/dist/languageService/completionProvider.d.ts +2 -1
- package/dist/languageService/completionProvider.js +12 -10
- package/dist/languageService/completionProvider.js.map +1 -1
- package/dist/languageService/completionProviderUtils.js +1 -1
- package/dist/languageService/definitionProvider.js +1 -1
- package/dist/languageService/documentSymbolCollector.js +1 -1
- package/dist/languageService/hoverProvider.js +1 -1
- package/dist/languageService/signatureHelpProvider.js +0 -14
- package/dist/languageService/signatureHelpProvider.js.map +1 -1
- package/dist/languageService/tooltipUtils.js +4 -4
- package/dist/languageService/tooltipUtils.js.map +1 -1
- package/dist/localization/localize.d.ts +16 -0
- package/dist/localization/localize.js +6 -0
- package/dist/localization/localize.js.map +1 -1
- package/dist/localization/package.nls.cs.json +4 -1
- package/dist/localization/package.nls.de.json +4 -1
- package/dist/localization/package.nls.en-us.json +7 -1
- package/dist/localization/package.nls.es.json +4 -1
- package/dist/localization/package.nls.fr.json +4 -1
- package/dist/localization/package.nls.it.json +4 -1
- package/dist/localization/package.nls.ja.json +4 -1
- package/dist/localization/package.nls.ko.json +4 -1
- package/dist/localization/package.nls.pl.json +4 -1
- package/dist/localization/package.nls.pt-br.json +4 -1
- package/dist/localization/package.nls.qps-ploc.json +3 -0
- package/dist/localization/package.nls.ru.json +4 -1
- package/dist/localization/package.nls.tr.json +4 -1
- package/dist/localization/package.nls.zh-cn.json +4 -1
- package/dist/localization/package.nls.zh-tw.json +4 -1
- package/dist/pyright.js +3 -6
- package/dist/pyright.js.map +1 -1
- package/dist/server.d.ts +1 -0
- package/dist/server.js +10 -1
- package/dist/server.js.map +1 -1
- package/dist/tests/diagnosticOverrides.test.js +4 -2
- package/dist/tests/diagnosticOverrides.test.js.map +1 -1
- package/dist/tests/fourslash/{completions.importInterimFile.fourslash.js → completions.importInterimFile.fourslash.disabled.js} +2 -2
- package/dist/tests/fourslash/completions.importInterimFile.fourslash.disabled.js.map +1 -0
- package/dist/tests/fourslash/fourslash.d.ts +1 -1
- package/dist/tests/fourslash/signature.complicated.fourslash.js +6 -6
- package/dist/tests/fourslash/signature.complicated.fourslash.js.map +1 -1
- package/dist/tests/fourslash/signature.dunderNew.fourslash.js +1 -1
- package/dist/tests/fourslash/signature.dunderNew.fourslash.js.map +1 -1
- package/dist/tests/harness/fourslash/testState.d.ts +1 -1
- package/dist/tests/harness/fourslash/testState.js +4 -4
- package/dist/tests/harness/fourslash/testState.js.map +1 -1
- package/dist/tests/harness/vfs/filesystem.js +1 -1
- package/dist/tests/harness/vfs/filesystem.js.map +1 -1
- package/dist/tests/logger.test.js +0 -1
- package/dist/tests/logger.test.js.map +1 -1
- package/dist/tests/parseTreeUtils.test.js +15 -0
- package/dist/tests/parseTreeUtils.test.js.map +1 -1
- package/dist/tests/pathUtils.test.js +30 -1
- package/dist/tests/pathUtils.test.js.map +1 -1
- package/dist/tests/testUtils.js +2 -1
- package/dist/tests/testUtils.js.map +1 -1
- package/dist/tests/textEditUtil.test.js +25 -0
- package/dist/tests/textEditUtil.test.js.map +1 -1
- package/dist/tests/typeEvaluator1.test.js +7 -3
- package/dist/tests/typeEvaluator1.test.js.map +1 -1
- package/dist/tests/typeEvaluator2.test.js +5 -1
- package/dist/tests/typeEvaluator2.test.js.map +1 -1
- package/dist/tests/typeEvaluator3.test.js +10 -4
- package/dist/tests/typeEvaluator3.test.js.map +1 -1
- package/dist/tests/typeEvaluator4.test.js +11 -7
- package/dist/tests/typeEvaluator4.test.js.map +1 -1
- package/dist/tests/typePrinter.test.js +12 -16
- package/dist/tests/typePrinter.test.js.map +1 -1
- package/dist/tests/zipfs.test.js +2 -0
- package/dist/tests/zipfs.test.js.map +1 -1
- package/package.json +1 -1
- package/dist/tests/fourslash/completions.importInterimFile.fourslash.js.map +0 -1
- /package/dist/tests/fourslash/{completions.importInterimFile.fourslash.d.ts → completions.importInterimFile.fourslash.disabled.d.ts} +0 -0
@@ -10,15 +10,18 @@ export interface ClassMember {
|
|
10
10
|
isTypeDeclared: boolean;
|
11
11
|
skippedUndeclaredType: boolean;
|
12
12
|
}
|
13
|
-
export declare const enum
|
13
|
+
export declare const enum MemberAccessFlags {
|
14
14
|
Default = 0,
|
15
15
|
SkipOriginalClass = 1,
|
16
16
|
SkipBaseClasses = 2,
|
17
17
|
SkipObjectBaseClass = 4,
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
18
|
+
SkipTypeBaseClass = 8,
|
19
|
+
SkipInstanceMembers = 16,
|
20
|
+
SkipClassMembers = 32,
|
21
|
+
DeclaredTypesOnly = 64,
|
22
|
+
DisallowClassVarWrites = 128,
|
23
|
+
TreatConstructorAsClassMethod = 256,
|
24
|
+
SkipAttributeAccessOverride = 512
|
22
25
|
}
|
23
26
|
export declare const enum ClassIteratorFlags {
|
24
27
|
Default = 0,
|
@@ -70,12 +73,16 @@ export declare class UniqueSignatureTracker {
|
|
70
73
|
addSignature(signature: FunctionType | OverloadedFunctionType, offset: number): void;
|
71
74
|
}
|
72
75
|
export declare function isOptionalType(type: Type): boolean;
|
76
|
+
export declare function isNoneInstance(type: Type): boolean;
|
77
|
+
export declare function isNoneTypeClass(type: Type): boolean;
|
78
|
+
export declare function removeNoneFromUnion(type: Type): Type;
|
73
79
|
export declare function isIncompleteUnknown(type: Type): boolean;
|
74
80
|
export declare function isTypeVarSame(type1: TypeVarType, type2: Type): boolean;
|
75
81
|
export declare function makeInferenceContext(expectedType: undefined, isTypeIncomplete?: boolean, signatureTracker?: UniqueSignatureTracker): undefined;
|
76
82
|
export declare function makeInferenceContext(expectedType: Type, isTypeIncomplete?: boolean, signatureTracker?: UniqueSignatureTracker): InferenceContext;
|
77
83
|
export declare function makeInferenceContext(expectedType: Type | undefined, isTypeIncomplete?: boolean, signatureTracker?: UniqueSignatureTracker): InferenceContext | undefined;
|
78
84
|
export declare function mapSubtypes(type: Type, callback: (type: Type) => Type | undefined, sortSubtypes?: boolean): Type;
|
85
|
+
export declare function mapSignatures(type: FunctionType | OverloadedFunctionType, callback: (type: FunctionType, index: number) => FunctionType | undefined): OverloadedFunctionType | FunctionType | undefined;
|
79
86
|
export declare function cleanIncompleteUnknown(type: Type, recursionCount?: number): Type;
|
80
87
|
export declare function sortTypes(types: Type[]): Type[];
|
81
88
|
export declare function doForEachSubtype(type: Type, callback: (type: Type, index: number, allSubtypes: Type[]) => void, sortSubtypes?: boolean): void;
|
@@ -125,9 +132,9 @@ export declare function transformExpectedType(expectedType: Type, liveTypeVarSco
|
|
125
132
|
export declare function getProtocolSymbols(classType: ClassType): Map<string, ClassMember>;
|
126
133
|
export declare function getProtocolSymbolsRecursive(classType: ClassType, symbolMap: Map<string, ClassMember>, classFlags?: ClassTypeFlags, recursionCount?: number): void;
|
127
134
|
export declare function getContainerDepth(type: Type, recursionCount?: number): number;
|
128
|
-
export declare function lookUpObjectMember(objectType: ClassType, memberName: string, flags?:
|
129
|
-
export declare function lookUpClassMember(classType: ClassType, memberName: string, flags?:
|
130
|
-
export declare function getClassMemberIterator(classType: ClassType | AnyType | UnknownType, memberName: string, flags?:
|
135
|
+
export declare function lookUpObjectMember(objectType: ClassType, memberName: string, flags?: MemberAccessFlags, skipMroClass?: ClassType | undefined): ClassMember | undefined;
|
136
|
+
export declare function lookUpClassMember(classType: ClassType, memberName: string, flags?: MemberAccessFlags, skipMroClass?: ClassType | undefined): ClassMember | undefined;
|
137
|
+
export declare function getClassMemberIterator(classType: ClassType | AnyType | UnknownType, memberName: string, flags?: MemberAccessFlags, skipMroClass?: ClassType | undefined): Generator<ClassMember, undefined, unknown>;
|
131
138
|
export declare function getClassIterator(classType: Type, flags?: ClassIteratorFlags, skipMroClass?: ClassType): Generator<Type[], undefined, unknown>;
|
132
139
|
export declare function getClassFieldsRecursive(classType: ClassType): Map<string, ClassMember>;
|
133
140
|
export declare function addTypeVarsToListIfUnique(list1: TypeVarType[], list2: TypeVarType[]): void;
|
@@ -146,6 +153,8 @@ export declare function getGeneratorYieldType(declaredReturnType: Type, isAsync:
|
|
146
153
|
export declare function isInstantiableMetaclass(type: Type): boolean;
|
147
154
|
export declare function isMetaclassInstance(type: Type): boolean;
|
148
155
|
export declare function isEffectivelyInstantiable(type: Type): boolean;
|
156
|
+
export declare function convertToInstance(type: ClassType, includeSubclasses?: boolean): ClassType;
|
157
|
+
export declare function convertToInstance(type: TypeVarType, includeSubclasses?: boolean): TypeVarType;
|
149
158
|
export declare function convertToInstance(type: Type, includeSubclasses?: boolean): Type;
|
150
159
|
export declare function convertToInstantiable(type: Type, includeSubclasses?: boolean): Type;
|
151
160
|
export declare function getMembersForClass(classType: ClassType, symbolTable: SymbolTable, includeInstanceVars: boolean): void;
|
@@ -8,8 +8,9 @@
|
|
8
8
|
* Functions that operate on Type objects.
|
9
9
|
*/
|
10
10
|
Object.defineProperty(exports, "__esModule", { value: true });
|
11
|
-
exports.
|
12
|
-
exports.
|
11
|
+
exports.populateTypeVarContextForSelfType = exports.partiallySpecializeType = exports.isTupleIndexUnambiguous = exports.isUnboundedTupleClass = exports.isTupleClass = exports.isMaybeDescriptorInstance = exports.isDescriptorInstance = exports.isCallableType = exports.isProperty = exports.isEllipsisType = exports.getUnionSubtypeCount = exports.getLiteralTypeClassName = exports.containsLiteralType = exports.isLiteralTypeOrUnion = exports.isLiteralType = exports.getSpecializedTupleType = exports.selfSpecializeClass = exports.getUnknownTypeForParamSpec = exports.getUnknownTypeForTypeVar = exports.specializeWithUnknown = exports.specializeWithDefaultTypeArgs = exports.getTypeVarScopeIds = exports.getTypeVarScopeId = exports.transformPossibleRecursiveTypeAlias = exports.isTypeAliasRecursive = exports.isTypeAliasPlaceholder = exports.getTypeCondition = exports.addConditionToType = exports.getFullNameOfType = exports.derivesFromAnyOrUnknown = exports.isUnionableType = exports.preserveUnknown = exports.areTypesSame = exports.doForEachSignature = exports.doForEachSubtype = exports.sortTypes = exports.cleanIncompleteUnknown = exports.mapSignatures = exports.mapSubtypes = exports.makeInferenceContext = exports.isTypeVarSame = exports.isIncompleteUnknown = exports.removeNoneFromUnion = exports.isNoneTypeClass = exports.isNoneInstance = exports.isOptionalType = exports.UniqueSignatureTracker = exports.AssignTypeFlags = exports.ClassIteratorFlags = exports.MemberAccessFlags = void 0;
|
12
|
+
exports.computeMroLinearization = exports.isVarianceOfTypeArgumentCompatible = exports.combineVariances = exports.requiresSpecialization = exports.requiresTypeArguments = exports.getGeneratorTypeArgs = exports.removeParamSpecVariadicsFromFunction = exports.removeParamSpecVariadicsFromSignature = exports.specializeTupleClass = exports.combineSameSizedTuples = exports.explodeGenericClass = exports.isPartlyUnknown = exports.containsAnyOrUnknown = exports.containsAnyRecursive = exports.getMembersForModule = exports.getMembersForClass = exports.convertToInstantiable = exports.convertToInstance = exports.isEffectivelyInstantiable = exports.isMetaclassInstance = exports.isInstantiableMetaclass = exports.getGeneratorYieldType = exports.getDeclaredGeneratorReturnType = exports.synthesizeTypeVarForSelfCls = exports.derivesFromClassRecursive = exports.derivesFromStdlibClass = exports.specializeForBaseClass = exports.buildTypeVarContext = exports.buildTypeVarContextFromSpecializedClass = exports.setTypeArgumentsRecursive = exports.specializeClassType = exports.isTypeVarLimitedToCallable = exports.getTypeVarArgumentsRecursive = exports.addTypeVarsToListIfUnique = exports.getClassFieldsRecursive = exports.getClassIterator = exports.getClassMemberIterator = exports.lookUpClassMember = exports.lookUpObjectMember = exports.getContainerDepth = exports.getProtocolSymbolsRecursive = exports.getProtocolSymbols = exports.transformExpectedType = exports.replaceTypeVarsWithAny = exports.validateTypeVarDefault = exports.applyInScopePlaceholders = exports.applySourceContextTypeVarsToSignature = exports.applySourceContextTypeVars = exports.applySolvedTypeVars = exports.ensureFunctionSignaturesAreUnique = void 0;
|
13
|
+
exports.convertParamSpecValueToType = exports.convertTypeToParamSpecValue = exports.getDeclaringModulesForType = void 0;
|
13
14
|
const collectionUtils_1 = require("../common/collectionUtils");
|
14
15
|
const debug_1 = require("../common/debug");
|
15
16
|
const symbol_1 = require("./symbol");
|
@@ -17,32 +18,43 @@ const symbolUtils_1 = require("./symbolUtils");
|
|
17
18
|
const types_1 = require("./types");
|
18
19
|
const typeVarContext_1 = require("./typeVarContext");
|
19
20
|
const typeWalker_1 = require("./typeWalker");
|
20
|
-
var
|
21
|
-
(function (
|
22
|
-
|
21
|
+
var MemberAccessFlags;
|
22
|
+
(function (MemberAccessFlags) {
|
23
|
+
MemberAccessFlags[MemberAccessFlags["Default"] = 0] = "Default";
|
23
24
|
// By default, the original (derived) class is searched along
|
24
25
|
// with its base classes. If this flag is set, the original
|
25
26
|
// class is skipped and only the base classes are searched.
|
26
|
-
|
27
|
+
MemberAccessFlags[MemberAccessFlags["SkipOriginalClass"] = 1] = "SkipOriginalClass";
|
27
28
|
// By default, base classes are searched as well as the
|
28
29
|
// original (derived) class. If this flag is set, no recursion
|
29
30
|
// is performed.
|
30
|
-
|
31
|
+
MemberAccessFlags[MemberAccessFlags["SkipBaseClasses"] = 2] = "SkipBaseClasses";
|
31
32
|
// Skip the 'object' base class in particular.
|
32
|
-
|
33
|
+
MemberAccessFlags[MemberAccessFlags["SkipObjectBaseClass"] = 4] = "SkipObjectBaseClass";
|
34
|
+
// Skip the 'type' base class in particular.
|
35
|
+
MemberAccessFlags[MemberAccessFlags["SkipTypeBaseClass"] = 8] = "SkipTypeBaseClass";
|
33
36
|
// By default, both class and instance variables are searched.
|
34
37
|
// If this flag is set, the instance variables are skipped.
|
35
|
-
|
38
|
+
MemberAccessFlags[MemberAccessFlags["SkipInstanceMembers"] = 16] = "SkipInstanceMembers";
|
36
39
|
// By default, both class and instance variables are searched.
|
37
40
|
// If this flag is set, the class variables are skipped.
|
38
|
-
|
41
|
+
MemberAccessFlags[MemberAccessFlags["SkipClassMembers"] = 32] = "SkipClassMembers";
|
39
42
|
// By default, the first symbol is returned even if it has only
|
40
43
|
// an inferred type associated with it. If this flag is set,
|
41
44
|
// the search looks only for symbols with declared types.
|
42
|
-
|
43
|
-
//
|
44
|
-
|
45
|
-
|
45
|
+
MemberAccessFlags[MemberAccessFlags["DeclaredTypesOnly"] = 64] = "DeclaredTypesOnly";
|
46
|
+
// Consider writes to symbols flagged as ClassVars as an error.
|
47
|
+
MemberAccessFlags[MemberAccessFlags["DisallowClassVarWrites"] = 128] = "DisallowClassVarWrites";
|
48
|
+
// Normally __new__ is treated as a static method, but when
|
49
|
+
// it is invoked implicitly through a constructor call, it
|
50
|
+
// acts like a class method instead.
|
51
|
+
MemberAccessFlags[MemberAccessFlags["TreatConstructorAsClassMethod"] = 256] = "TreatConstructorAsClassMethod";
|
52
|
+
// If an attribute cannot be found when looking for instance
|
53
|
+
// members, normally an attribute access override method
|
54
|
+
// (__getattr__, etc.) may provide the missing attribute type.
|
55
|
+
// This disables this check.
|
56
|
+
MemberAccessFlags[MemberAccessFlags["SkipAttributeAccessOverride"] = 512] = "SkipAttributeAccessOverride";
|
57
|
+
})(MemberAccessFlags = exports.MemberAccessFlags || (exports.MemberAccessFlags = {}));
|
46
58
|
var ClassIteratorFlags;
|
47
59
|
(function (ClassIteratorFlags) {
|
48
60
|
ClassIteratorFlags[ClassIteratorFlags["Default"] = 0] = "Default";
|
@@ -156,11 +168,25 @@ class UniqueSignatureTracker {
|
|
156
168
|
exports.UniqueSignatureTracker = UniqueSignatureTracker;
|
157
169
|
function isOptionalType(type) {
|
158
170
|
if ((0, types_1.isUnion)(type)) {
|
159
|
-
return (0, types_1.findSubtype)(type, (subtype) =>
|
171
|
+
return (0, types_1.findSubtype)(type, (subtype) => isNoneInstance(subtype)) !== undefined;
|
160
172
|
}
|
161
173
|
return false;
|
162
174
|
}
|
163
175
|
exports.isOptionalType = isOptionalType;
|
176
|
+
function isNoneInstance(type) {
|
177
|
+
return (0, types_1.isClassInstance)(type) && types_1.ClassType.isBuiltIn(type, 'NoneType');
|
178
|
+
}
|
179
|
+
exports.isNoneInstance = isNoneInstance;
|
180
|
+
function isNoneTypeClass(type) {
|
181
|
+
return (0, types_1.isInstantiableClass)(type) && types_1.ClassType.isBuiltIn(type, 'NoneType');
|
182
|
+
}
|
183
|
+
exports.isNoneTypeClass = isNoneTypeClass;
|
184
|
+
// If the type is a union, remove an "None" type from the union,
|
185
|
+
// returning only the known types.
|
186
|
+
function removeNoneFromUnion(type) {
|
187
|
+
return (0, types_1.removeFromUnion)(type, (t) => isNoneInstance(t));
|
188
|
+
}
|
189
|
+
exports.removeNoneFromUnion = removeNoneFromUnion;
|
164
190
|
function isIncompleteUnknown(type) {
|
165
191
|
return (0, types_1.isUnknown)(type) && type.isIncomplete;
|
166
192
|
}
|
@@ -226,7 +252,7 @@ function mapSubtypes(type, callback, sortSubtypes = false) {
|
|
226
252
|
}
|
227
253
|
const newType = (0, types_1.combineTypes)(typesToCombine);
|
228
254
|
// Do our best to retain type aliases.
|
229
|
-
if (newType.category ===
|
255
|
+
if (newType.category === 8 /* Union */) {
|
230
256
|
types_1.UnionType.addTypeAliasSource(newType, type);
|
231
257
|
}
|
232
258
|
return newType;
|
@@ -241,6 +267,35 @@ function mapSubtypes(type, callback, sortSubtypes = false) {
|
|
241
267
|
return transformedSubtype;
|
242
268
|
}
|
243
269
|
exports.mapSubtypes = mapSubtypes;
|
270
|
+
// Iterates over each signature in a function or overload, allowing the
|
271
|
+
// caller to replace one or more signatures with new ones.
|
272
|
+
function mapSignatures(type, callback) {
|
273
|
+
if ((0, types_1.isFunction)(type)) {
|
274
|
+
return callback(type, 0);
|
275
|
+
}
|
276
|
+
const newSignatures = [];
|
277
|
+
let changeMade = false;
|
278
|
+
types_1.OverloadedFunctionType.getOverloads(type).forEach((overload, index) => {
|
279
|
+
const newOverload = callback(overload, index);
|
280
|
+
if (newOverload !== overload) {
|
281
|
+
changeMade = true;
|
282
|
+
}
|
283
|
+
if (newOverload) {
|
284
|
+
newSignatures.push(newOverload);
|
285
|
+
}
|
286
|
+
});
|
287
|
+
if (!changeMade) {
|
288
|
+
return type;
|
289
|
+
}
|
290
|
+
if (newSignatures.length === 0) {
|
291
|
+
return undefined;
|
292
|
+
}
|
293
|
+
if (newSignatures.length === 1) {
|
294
|
+
return newSignatures[0];
|
295
|
+
}
|
296
|
+
return types_1.OverloadedFunctionType.create(newSignatures);
|
297
|
+
}
|
298
|
+
exports.mapSignatures = mapSignatures;
|
244
299
|
// The code flow engine uses a special form of the UnknownType (with the
|
245
300
|
// isIncomplete flag set) to distinguish between an unknown that was generated
|
246
301
|
// in a loop because it was temporarily incomplete versus an unknown that is
|
@@ -311,12 +366,11 @@ function compareTypes(a, b, recursionCount = 0) {
|
|
311
366
|
case 0 /* Unbound */:
|
312
367
|
case 1 /* Unknown */:
|
313
368
|
case 2 /* Any */:
|
314
|
-
case 3 /*
|
315
|
-
case
|
316
|
-
case 9 /* Union */: {
|
369
|
+
case 3 /* Never */:
|
370
|
+
case 8 /* Union */: {
|
317
371
|
return 0;
|
318
372
|
}
|
319
|
-
case
|
373
|
+
case 4 /* Function */: {
|
320
374
|
const bFunc = b;
|
321
375
|
const aParamCount = a.details.parameters.length;
|
322
376
|
const bParamCount = bFunc.details.parameters.length;
|
@@ -329,12 +383,12 @@ function compareTypes(a, b, recursionCount = 0) {
|
|
329
383
|
if (aParam.category !== bParam.category) {
|
330
384
|
return bParam.category - aParam.category;
|
331
385
|
}
|
332
|
-
const typeComparison = compareTypes(
|
386
|
+
const typeComparison = compareTypes(types_1.FunctionType.getEffectiveParameterType(a, i), types_1.FunctionType.getEffectiveParameterType(bFunc, i));
|
333
387
|
if (typeComparison !== 0) {
|
334
388
|
return typeComparison;
|
335
389
|
}
|
336
390
|
}
|
337
|
-
const returnTypeComparison = compareTypes((_a =
|
391
|
+
const returnTypeComparison = compareTypes((_a = types_1.FunctionType.getSpecializedReturnType(a)) !== null && _a !== void 0 ? _a : types_1.UnknownType.create(), (_b = types_1.FunctionType.getSpecializedReturnType(bFunc)) !== null && _b !== void 0 ? _b : types_1.UnknownType.create());
|
338
392
|
if (returnTypeComparison !== 0) {
|
339
393
|
return returnTypeComparison;
|
340
394
|
}
|
@@ -348,7 +402,7 @@ function compareTypes(a, b, recursionCount = 0) {
|
|
348
402
|
}
|
349
403
|
return 0;
|
350
404
|
}
|
351
|
-
case
|
405
|
+
case 5 /* OverloadedFunction */: {
|
352
406
|
const bOver = b;
|
353
407
|
const aOverloadCount = a.overloads.length;
|
354
408
|
const bOverloadCount = bOver.overloads.length;
|
@@ -363,7 +417,7 @@ function compareTypes(a, b, recursionCount = 0) {
|
|
363
417
|
}
|
364
418
|
return 0;
|
365
419
|
}
|
366
|
-
case
|
420
|
+
case 6 /* Class */: {
|
367
421
|
const bClass = b;
|
368
422
|
// Sort instances before instantiables.
|
369
423
|
if ((0, types_1.isClassInstance)(a) && (0, types_1.isInstantiableClass)(bClass)) {
|
@@ -381,6 +435,13 @@ function compareTypes(a, b, recursionCount = 0) {
|
|
381
435
|
else if (isLiteralType(bClass)) {
|
382
436
|
return 1;
|
383
437
|
}
|
438
|
+
// Always sort NoneType at the end.
|
439
|
+
if (types_1.ClassType.isBuiltIn(a, 'NoneType')) {
|
440
|
+
return 1;
|
441
|
+
}
|
442
|
+
else if (types_1.ClassType.isBuiltIn(bClass, 'NoneType')) {
|
443
|
+
return -1;
|
444
|
+
}
|
384
445
|
// Sort non-generics before generics.
|
385
446
|
if (a.details.typeParameters.length > 0 || isTupleClass(a)) {
|
386
447
|
if (bClass.details.typeParameters.length === 0) {
|
@@ -417,12 +478,12 @@ function compareTypes(a, b, recursionCount = 0) {
|
|
417
478
|
}
|
418
479
|
return 0;
|
419
480
|
}
|
420
|
-
case
|
481
|
+
case 7 /* Module */: {
|
421
482
|
const aName = a.moduleName;
|
422
483
|
const bName = b.moduleName;
|
423
484
|
return aName < bName ? -1 : aName === bName ? 0 : 1;
|
424
485
|
}
|
425
|
-
case
|
486
|
+
case 9 /* TypeVar */: {
|
426
487
|
const aName = a.details.name;
|
427
488
|
const bName = b.details.name;
|
428
489
|
return aName < bName ? -1 : aName === bName ? 0 : 1;
|
@@ -527,15 +588,13 @@ function getFullNameOfType(type) {
|
|
527
588
|
case 2 /* Any */:
|
528
589
|
case 1 /* Unknown */:
|
529
590
|
return 'typing.Any';
|
530
|
-
case
|
531
|
-
return 'builtins.None';
|
532
|
-
case 7 /* Class */:
|
591
|
+
case 6 /* Class */:
|
533
592
|
return type.details.fullName;
|
534
|
-
case
|
593
|
+
case 4 /* Function */:
|
535
594
|
return type.details.fullName;
|
536
|
-
case
|
595
|
+
case 7 /* Module */:
|
537
596
|
return type.moduleName;
|
538
|
-
case
|
597
|
+
case 5 /* OverloadedFunction */:
|
539
598
|
return type.overloads[0].details.fullName;
|
540
599
|
}
|
541
600
|
return undefined;
|
@@ -549,18 +608,17 @@ function addConditionToType(type, condition) {
|
|
549
608
|
case 0 /* Unbound */:
|
550
609
|
case 1 /* Unknown */:
|
551
610
|
case 2 /* Any */:
|
552
|
-
case
|
553
|
-
case
|
554
|
-
case
|
611
|
+
case 3 /* Never */:
|
612
|
+
case 7 /* Module */:
|
613
|
+
case 9 /* TypeVar */:
|
555
614
|
return type;
|
556
|
-
case
|
557
|
-
case 5 /* Function */:
|
615
|
+
case 4 /* Function */:
|
558
616
|
return types_1.TypeBase.cloneForCondition(type, types_1.TypeCondition.combine(type.condition, condition));
|
559
|
-
case
|
617
|
+
case 5 /* OverloadedFunction */:
|
560
618
|
return types_1.OverloadedFunctionType.create(type.overloads.map((t) => addConditionToType(t, condition)));
|
561
|
-
case
|
619
|
+
case 6 /* Class */:
|
562
620
|
return types_1.TypeBase.cloneForCondition(type, types_1.TypeCondition.combine(type.condition, condition));
|
563
|
-
case
|
621
|
+
case 8 /* Union */:
|
564
622
|
return (0, types_1.combineTypes)(type.subtypes.map((t) => addConditionToType(t, condition)));
|
565
623
|
}
|
566
624
|
}
|
@@ -570,15 +628,14 @@ function getTypeCondition(type) {
|
|
570
628
|
case 0 /* Unbound */:
|
571
629
|
case 1 /* Unknown */:
|
572
630
|
case 2 /* Any */:
|
573
|
-
case
|
574
|
-
case
|
575
|
-
case
|
576
|
-
case
|
577
|
-
case
|
631
|
+
case 3 /* Never */:
|
632
|
+
case 7 /* Module */:
|
633
|
+
case 9 /* TypeVar */:
|
634
|
+
case 5 /* OverloadedFunction */:
|
635
|
+
case 8 /* Union */:
|
578
636
|
return undefined;
|
579
|
-
case
|
580
|
-
case
|
581
|
-
case 5 /* Function */:
|
637
|
+
case 6 /* Class */:
|
638
|
+
case 4 /* Function */:
|
582
639
|
return type.condition;
|
583
640
|
}
|
584
641
|
}
|
@@ -593,7 +650,7 @@ exports.isTypeAliasPlaceholder = isTypeAliasPlaceholder;
|
|
593
650
|
// within the specified type. It's OK if it's used indirectly as
|
594
651
|
// a type argument.
|
595
652
|
function isTypeAliasRecursive(typeAliasPlaceholder, type) {
|
596
|
-
if (type.category !==
|
653
|
+
if (type.category !== 8 /* Union */) {
|
597
654
|
if (type === typeAliasPlaceholder) {
|
598
655
|
return true;
|
599
656
|
}
|
@@ -830,7 +887,7 @@ function isCallableType(type) {
|
|
830
887
|
if (types_1.TypeBase.isInstantiable(type)) {
|
831
888
|
return true;
|
832
889
|
}
|
833
|
-
const callMember = lookUpObjectMember(type, '__call__',
|
890
|
+
const callMember = lookUpObjectMember(type, '__call__', 16 /* SkipInstanceMembers */);
|
834
891
|
return !!callMember;
|
835
892
|
}
|
836
893
|
if ((0, types_1.isUnion)(type)) {
|
@@ -898,7 +955,7 @@ exports.isTupleIndexUnambiguous = isTupleIndexUnambiguous;
|
|
898
955
|
function partiallySpecializeType(type, contextClassType, selfClass, typeClassType) {
|
899
956
|
// If the context class is not specialized (or doesn't need specialization),
|
900
957
|
// then there's no need to do any more work.
|
901
|
-
if (types_1.ClassType.isUnspecialized(contextClassType)) {
|
958
|
+
if (types_1.ClassType.isUnspecialized(contextClassType) && !selfClass) {
|
902
959
|
return type;
|
903
960
|
}
|
904
961
|
// Partially specialize the type using the specialized class type vars.
|
@@ -922,7 +979,9 @@ function populateTypeVarContextForSelfType(typeVarContext, contextClassType, sel
|
|
922
979
|
}
|
923
980
|
return subtype;
|
924
981
|
});
|
925
|
-
|
982
|
+
if (!(0, types_1.isTypeSame)(synthesizedSelfTypeVar, selfWithoutLiteral)) {
|
983
|
+
typeVarContext.setTypeVarType(synthesizedSelfTypeVar, selfInstance, selfWithoutLiteral);
|
984
|
+
}
|
926
985
|
}
|
927
986
|
exports.populateTypeVarContextForSelfType = populateTypeVarContextForSelfType;
|
928
987
|
// Looks for duplicate function types within the type and ensures that
|
@@ -1127,7 +1186,7 @@ exports.lookUpClassMember = lookUpClassMember;
|
|
1127
1186
|
// If skipMroClass is defined, all MRO classes up to and including that class
|
1128
1187
|
// are skipped.
|
1129
1188
|
function* getClassMemberIterator(classType, memberName, flags = 0 /* Default */, skipMroClass) {
|
1130
|
-
const declaredTypesOnly = (flags &
|
1189
|
+
const declaredTypesOnly = (flags & 64 /* DeclaredTypesOnly */) !== 0;
|
1131
1190
|
let skippedUndeclaredType = false;
|
1132
1191
|
if ((0, types_1.isClass)(classType)) {
|
1133
1192
|
let classFlags = 0 /* Default */;
|
@@ -1142,7 +1201,7 @@ function* getClassMemberIterator(classType, memberName, flags = 0 /* Default */,
|
|
1142
1201
|
if (flags & 4 /* SkipObjectBaseClass */) {
|
1143
1202
|
classFlags = classFlags | 2 /* SkipObjectBaseClass */;
|
1144
1203
|
}
|
1145
|
-
if (flags &
|
1204
|
+
if (flags & 8 /* SkipTypeBaseClass */) {
|
1146
1205
|
classFlags = classFlags | 4 /* SkipTypeBaseClass */;
|
1147
1206
|
}
|
1148
1207
|
const classItr = getClassIterator(classType, classFlags, skipMroClass);
|
@@ -1169,7 +1228,7 @@ function* getClassMemberIterator(classType, memberName, flags = 0 /* Default */,
|
|
1169
1228
|
}
|
1170
1229
|
const memberFields = specializedMroClass.details.fields;
|
1171
1230
|
// Look at instance members first if requested.
|
1172
|
-
if ((flags &
|
1231
|
+
if ((flags & 16 /* SkipInstanceMembers */) === 0) {
|
1173
1232
|
const symbol = memberFields.get(memberName);
|
1174
1233
|
if (symbol && symbol.isInstanceMember()) {
|
1175
1234
|
const hasDeclaredType = symbol.hasTypedDeclarations();
|
@@ -1191,7 +1250,7 @@ function* getClassMemberIterator(classType, memberName, flags = 0 /* Default */,
|
|
1191
1250
|
}
|
1192
1251
|
}
|
1193
1252
|
// Next look at class members.
|
1194
|
-
if ((flags &
|
1253
|
+
if ((flags & 32 /* SkipClassMembers */) === 0) {
|
1195
1254
|
const symbol = memberFields.get(memberName);
|
1196
1255
|
if (symbol && symbol.isClassMember()) {
|
1197
1256
|
const hasDeclaredType = symbol.hasTypedDeclarations();
|
@@ -1490,12 +1549,12 @@ function setTypeArgumentsRecursive(destType, srcType, typeVarContext, recursionC
|
|
1490
1549
|
return;
|
1491
1550
|
}
|
1492
1551
|
switch (destType.category) {
|
1493
|
-
case
|
1552
|
+
case 8 /* Union */:
|
1494
1553
|
doForEachSubtype(destType, (subtype) => {
|
1495
1554
|
setTypeArgumentsRecursive(subtype, srcType, typeVarContext, recursionCount);
|
1496
1555
|
});
|
1497
1556
|
break;
|
1498
|
-
case
|
1557
|
+
case 6 /* Class */:
|
1499
1558
|
if (destType.typeArguments) {
|
1500
1559
|
destType.typeArguments.forEach((typeArg) => {
|
1501
1560
|
setTypeArgumentsRecursive(typeArg, srcType, typeVarContext, recursionCount);
|
@@ -1507,7 +1566,7 @@ function setTypeArgumentsRecursive(destType, srcType, typeVarContext, recursionC
|
|
1507
1566
|
});
|
1508
1567
|
}
|
1509
1568
|
break;
|
1510
|
-
case
|
1569
|
+
case 4 /* Function */:
|
1511
1570
|
if (destType.specializedTypes) {
|
1512
1571
|
destType.specializedTypes.parameterTypes.forEach((paramType) => {
|
1513
1572
|
setTypeArgumentsRecursive(paramType, srcType, typeVarContext, recursionCount);
|
@@ -1531,12 +1590,12 @@ function setTypeArgumentsRecursive(destType, srcType, typeVarContext, recursionC
|
|
1531
1590
|
}
|
1532
1591
|
}
|
1533
1592
|
break;
|
1534
|
-
case
|
1593
|
+
case 5 /* OverloadedFunction */:
|
1535
1594
|
destType.overloads.forEach((subtype) => {
|
1536
1595
|
setTypeArgumentsRecursive(subtype, srcType, typeVarContext, recursionCount);
|
1537
1596
|
});
|
1538
1597
|
break;
|
1539
|
-
case
|
1598
|
+
case 9 /* TypeVar */:
|
1540
1599
|
if (!typeVarContext.getPrimarySignature().getTypeVar(destType)) {
|
1541
1600
|
typeVarContext.setTypeVarType(destType, srcType);
|
1542
1601
|
}
|
@@ -1729,7 +1788,7 @@ function convertToInstance(type, includeSubclasses = true) {
|
|
1729
1788
|
}
|
1730
1789
|
let result = mapSubtypes(type, (subtype) => {
|
1731
1790
|
switch (subtype.category) {
|
1732
|
-
case
|
1791
|
+
case 6 /* Class */: {
|
1733
1792
|
// Handle type[x] as a special case.
|
1734
1793
|
if (types_1.ClassType.isBuiltIn(subtype, 'type')) {
|
1735
1794
|
if (types_1.TypeBase.isInstance(subtype)) {
|
@@ -1742,26 +1801,21 @@ function convertToInstance(type, includeSubclasses = true) {
|
|
1742
1801
|
}
|
1743
1802
|
else {
|
1744
1803
|
if (subtype.typeArguments && subtype.typeArguments.length > 0) {
|
1745
|
-
|
1804
|
+
if (!(0, types_1.isAnyOrUnknown)(subtype.typeArguments[0])) {
|
1805
|
+
return convertToInstantiable(subtype.typeArguments[0]);
|
1806
|
+
}
|
1746
1807
|
}
|
1747
1808
|
}
|
1748
1809
|
}
|
1749
|
-
// Handle NoneType as a special case.
|
1750
|
-
if (types_1.TypeBase.isInstantiable(subtype) && types_1.ClassType.isBuiltIn(subtype, 'NoneType')) {
|
1751
|
-
return types_1.NoneType.createInstance();
|
1752
|
-
}
|
1753
1810
|
return types_1.ClassType.cloneAsInstance(subtype, includeSubclasses);
|
1754
1811
|
}
|
1755
|
-
case
|
1756
|
-
return types_1.NoneType.createInstance();
|
1757
|
-
}
|
1758
|
-
case 5 /* Function */: {
|
1812
|
+
case 4 /* Function */: {
|
1759
1813
|
if (types_1.TypeBase.isInstantiable(subtype)) {
|
1760
1814
|
return types_1.FunctionType.cloneAsInstance(subtype);
|
1761
1815
|
}
|
1762
1816
|
break;
|
1763
1817
|
}
|
1764
|
-
case
|
1818
|
+
case 9 /* TypeVar */: {
|
1765
1819
|
if (types_1.TypeBase.isInstantiable(subtype)) {
|
1766
1820
|
return types_1.TypeVarType.cloneAsInstance(subtype);
|
1767
1821
|
}
|
@@ -1795,16 +1849,13 @@ function convertToInstantiable(type, includeSubclasses = true) {
|
|
1795
1849
|
}
|
1796
1850
|
let result = mapSubtypes(type, (subtype) => {
|
1797
1851
|
switch (subtype.category) {
|
1798
|
-
case
|
1852
|
+
case 6 /* Class */: {
|
1799
1853
|
return types_1.ClassType.cloneAsInstantiable(subtype, includeSubclasses);
|
1800
1854
|
}
|
1801
|
-
case
|
1802
|
-
return types_1.NoneType.createType();
|
1803
|
-
}
|
1804
|
-
case 5 /* Function */: {
|
1855
|
+
case 4 /* Function */: {
|
1805
1856
|
return types_1.FunctionType.cloneAsInstantiable(subtype);
|
1806
1857
|
}
|
1807
|
-
case
|
1858
|
+
case 9 /* TypeVar */: {
|
1808
1859
|
return types_1.TypeVarType.cloneAsInstantiable(subtype);
|
1809
1860
|
}
|
1810
1861
|
}
|
@@ -2216,7 +2267,7 @@ exports.requiresSpecialization = requiresSpecialization;
|
|
2216
2267
|
function _requiresSpecialization(type, options, recursionCount = 0) {
|
2217
2268
|
var _a;
|
2218
2269
|
switch (type.category) {
|
2219
|
-
case
|
2270
|
+
case 6 /* Class */: {
|
2220
2271
|
if (types_1.ClassType.isPseudoGenericClass(type) && (options === null || options === void 0 ? void 0 : options.ignorePseudoGeneric)) {
|
2221
2272
|
return false;
|
2222
2273
|
}
|
@@ -2228,7 +2279,7 @@ function _requiresSpecialization(type, options, recursionCount = 0) {
|
|
2228
2279
|
}
|
2229
2280
|
return types_1.ClassType.getTypeParameters(type).length > 0;
|
2230
2281
|
}
|
2231
|
-
case
|
2282
|
+
case 4 /* Function */: {
|
2232
2283
|
if (type.details.paramSpec) {
|
2233
2284
|
return true;
|
2234
2285
|
}
|
@@ -2252,13 +2303,13 @@ function _requiresSpecialization(type, options, recursionCount = 0) {
|
|
2252
2303
|
}
|
2253
2304
|
return false;
|
2254
2305
|
}
|
2255
|
-
case
|
2306
|
+
case 5 /* OverloadedFunction */: {
|
2256
2307
|
return type.overloads.some((overload) => requiresSpecialization(overload, options, recursionCount));
|
2257
2308
|
}
|
2258
|
-
case
|
2309
|
+
case 8 /* Union */: {
|
2259
2310
|
return type.subtypes.some((subtype) => requiresSpecialization(subtype, options, recursionCount));
|
2260
2311
|
}
|
2261
|
-
case
|
2312
|
+
case 9 /* TypeVar */: {
|
2262
2313
|
// Most TypeVar types need to be specialized.
|
2263
2314
|
if (!type.details.recursiveTypeAliasName) {
|
2264
2315
|
if (type.details.isSynthesizedSelf && (options === null || options === void 0 ? void 0 : options.ignoreSelf)) {
|
@@ -2350,9 +2401,9 @@ function computeMroLinearization(classType) {
|
|
2350
2401
|
// Generic has some special-case logic (see description of __mro_entries__
|
2351
2402
|
// in PEP 560) that we need to account for here.
|
2352
2403
|
if (types_1.ClassType.isBuiltIn(baseClass, 'Generic')) {
|
2353
|
-
// If the class is a Protocol, the generic is ignored for
|
2354
|
-
// of computing the MRO.
|
2355
|
-
if (types_1.ClassType.isProtocolClass(classType)) {
|
2404
|
+
// If the class is a Protocol or TypedDict, the generic is ignored for
|
2405
|
+
// the purposes of computing the MRO.
|
2406
|
+
if (types_1.ClassType.isProtocolClass(classType) || types_1.ClassType.isTypedDictClass(classType)) {
|
2356
2407
|
return false;
|
2357
2408
|
}
|
2358
2409
|
// If the class contains any specialized generic classes after
|
@@ -2475,27 +2526,27 @@ function addDeclaringModuleNamesForType(type, moduleList, recursionCount = 0) {
|
|
2475
2526
|
}
|
2476
2527
|
};
|
2477
2528
|
switch (type.category) {
|
2478
|
-
case
|
2529
|
+
case 6 /* Class */: {
|
2479
2530
|
addIfUnique(type.details.moduleName);
|
2480
2531
|
break;
|
2481
2532
|
}
|
2482
|
-
case
|
2533
|
+
case 4 /* Function */: {
|
2483
2534
|
addIfUnique(type.details.moduleName);
|
2484
2535
|
break;
|
2485
2536
|
}
|
2486
|
-
case
|
2537
|
+
case 5 /* OverloadedFunction */: {
|
2487
2538
|
type.overloads.forEach((overload) => {
|
2488
2539
|
addDeclaringModuleNamesForType(overload, moduleList, recursionCount);
|
2489
2540
|
});
|
2490
2541
|
break;
|
2491
2542
|
}
|
2492
|
-
case
|
2543
|
+
case 8 /* Union */: {
|
2493
2544
|
doForEachSubtype(type, (subtype) => {
|
2494
2545
|
addDeclaringModuleNamesForType(subtype, moduleList, recursionCount);
|
2495
2546
|
});
|
2496
2547
|
break;
|
2497
2548
|
}
|
2498
|
-
case
|
2549
|
+
case 7 /* Module */: {
|
2499
2550
|
addIfUnique(type.moduleName);
|
2500
2551
|
break;
|
2501
2552
|
}
|
@@ -2583,7 +2634,7 @@ class TypeVarTransformer {
|
|
2583
2634
|
if ((0, types_1.isAnyOrUnknown)(type)) {
|
2584
2635
|
return type;
|
2585
2636
|
}
|
2586
|
-
if (
|
2637
|
+
if (isNoneInstance(type)) {
|
2587
2638
|
return type;
|
2588
2639
|
}
|
2589
2640
|
if ((0, types_1.isTypeVar)(type)) {
|
@@ -2963,7 +3014,9 @@ class TypeVarTransformer {
|
|
2963
3014
|
return types_1.FunctionType.cloneForSpecialization(functionType, specializedParameters, specializedInferredReturnType);
|
2964
3015
|
}
|
2965
3016
|
// Unpack the tuple and synthesize a new function in the process.
|
2966
|
-
const newFunctionType = types_1.
|
3017
|
+
const newFunctionType = types_1.TypeBase.isInstantiable(functionType)
|
3018
|
+
? types_1.FunctionType.createInstantiable(functionType.details.flags | 64 /* SynthesizedMethod */)
|
3019
|
+
: types_1.FunctionType.createSynthesizedInstance('', functionType.details.flags);
|
2967
3020
|
let insertKeywordOnlySeparator = false;
|
2968
3021
|
let swallowPositionOnlySeparator = false;
|
2969
3022
|
specializedParameters.parameterTypes.forEach((paramType, index) => {
|
@@ -2972,7 +3025,9 @@ class TypeVarTransformer {
|
|
2972
3025
|
// Unpack the tuple into individual parameters.
|
2973
3026
|
variadicTypesToUnpack.forEach((unpackedType) => {
|
2974
3027
|
types_1.FunctionType.addParameter(newFunctionType, {
|
2975
|
-
category: unpackedType.isUnbounded
|
3028
|
+
category: unpackedType.isUnbounded || (0, types_1.isVariadicTypeVar)(unpackedType.type)
|
3029
|
+
? 1 /* ArgsList */
|
3030
|
+
: 0 /* Simple */,
|
2976
3031
|
name: `__p${newFunctionType.details.parameters.length}`,
|
2977
3032
|
isNameSynthesized: true,
|
2978
3033
|
type: unpackedType.type,
|