@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.
Files changed (185) hide show
  1. package/dist/analyzer/analyzerFileInfo.d.ts +1 -0
  2. package/dist/analyzer/analyzerFileInfo.js.map +1 -1
  3. package/dist/analyzer/checker.js +99 -105
  4. package/dist/analyzer/checker.js.map +1 -1
  5. package/dist/analyzer/codeFlowEngine.js +12 -33
  6. package/dist/analyzer/codeFlowEngine.js.map +1 -1
  7. package/dist/analyzer/codeFlowUtils.js +4 -2
  8. package/dist/analyzer/codeFlowUtils.js.map +1 -1
  9. package/dist/analyzer/constraintSolver.js +21 -23
  10. package/dist/analyzer/constraintSolver.js.map +1 -1
  11. package/dist/analyzer/constructorTransform.js +4 -6
  12. package/dist/analyzer/constructorTransform.js.map +1 -1
  13. package/dist/analyzer/constructors.d.ts +6 -3
  14. package/dist/analyzer/constructors.js +66 -41
  15. package/dist/analyzer/constructors.js.map +1 -1
  16. package/dist/analyzer/dataClasses.js +13 -18
  17. package/dist/analyzer/dataClasses.js.map +1 -1
  18. package/dist/analyzer/declarationUtils.js +1 -1
  19. package/dist/analyzer/declarationUtils.js.map +1 -1
  20. package/dist/analyzer/decorators.js +1 -1
  21. package/dist/analyzer/decorators.js.map +1 -1
  22. package/dist/analyzer/enums.d.ts +2 -5
  23. package/dist/analyzer/enums.js +5 -3
  24. package/dist/analyzer/enums.js.map +1 -1
  25. package/dist/analyzer/functionTransform.js +1 -1
  26. package/dist/analyzer/functionTransform.js.map +1 -1
  27. package/dist/analyzer/importResolver.d.ts +4 -2
  28. package/dist/analyzer/importResolver.js +30 -10
  29. package/dist/analyzer/importResolver.js.map +1 -1
  30. package/dist/analyzer/importStatementUtils.d.ts +1 -1
  31. package/dist/analyzer/importStatementUtils.js +33 -5
  32. package/dist/analyzer/importStatementUtils.js.map +1 -1
  33. package/dist/analyzer/namedTuples.js +3 -2
  34. package/dist/analyzer/namedTuples.js.map +1 -1
  35. package/dist/analyzer/operations.js +34 -31
  36. package/dist/analyzer/operations.js.map +1 -1
  37. package/dist/analyzer/packageTypeVerifier.js +28 -26
  38. package/dist/analyzer/packageTypeVerifier.js.map +1 -1
  39. package/dist/analyzer/parseTreeUtils.d.ts +1 -0
  40. package/dist/analyzer/parseTreeUtils.js +17 -2
  41. package/dist/analyzer/parseTreeUtils.js.map +1 -1
  42. package/dist/analyzer/patternMatching.js +6 -6
  43. package/dist/analyzer/patternMatching.js.map +1 -1
  44. package/dist/analyzer/program.d.ts +1 -1
  45. package/dist/analyzer/program.js +34 -21
  46. package/dist/analyzer/program.js.map +1 -1
  47. package/dist/analyzer/properties.js +25 -28
  48. package/dist/analyzer/properties.js.map +1 -1
  49. package/dist/analyzer/protocols.d.ts +1 -1
  50. package/dist/analyzer/protocols.js +15 -19
  51. package/dist/analyzer/protocols.js.map +1 -1
  52. package/dist/analyzer/service.js +12 -6
  53. package/dist/analyzer/service.js.map +1 -1
  54. package/dist/analyzer/sourceFile.d.ts +1 -0
  55. package/dist/analyzer/sourceFile.js +36 -2
  56. package/dist/analyzer/sourceFile.js.map +1 -1
  57. package/dist/analyzer/sourceFileInfoUtils.d.ts +1 -1
  58. package/dist/analyzer/sourceFileInfoUtils.js +9 -3
  59. package/dist/analyzer/sourceFileInfoUtils.js.map +1 -1
  60. package/dist/analyzer/tracePrinter.js +11 -13
  61. package/dist/analyzer/tracePrinter.js.map +1 -1
  62. package/dist/analyzer/typeDocStringUtils.js +3 -3
  63. package/dist/analyzer/typeDocStringUtils.js.map +1 -1
  64. package/dist/analyzer/typeEvaluator.d.ts +3 -1
  65. package/dist/analyzer/typeEvaluator.js +1184 -1270
  66. package/dist/analyzer/typeEvaluator.js.map +1 -1
  67. package/dist/analyzer/typeEvaluatorTypes.d.ts +13 -26
  68. package/dist/analyzer/typeEvaluatorTypes.js +1 -36
  69. package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
  70. package/dist/analyzer/typeGuards.js +37 -32
  71. package/dist/analyzer/typeGuards.js.map +1 -1
  72. package/dist/analyzer/typePrinter.js +19 -18
  73. package/dist/analyzer/typePrinter.js.map +1 -1
  74. package/dist/analyzer/typeUtils.d.ts +17 -8
  75. package/dist/analyzer/typeUtils.js +149 -94
  76. package/dist/analyzer/typeUtils.js.map +1 -1
  77. package/dist/analyzer/typeVarContext.js +6 -7
  78. package/dist/analyzer/typeVarContext.js.map +1 -1
  79. package/dist/analyzer/typeWalker.d.ts +1 -2
  80. package/dist/analyzer/typeWalker.js +7 -13
  81. package/dist/analyzer/typeWalker.js.map +1 -1
  82. package/dist/analyzer/typedDicts.js +10 -10
  83. package/dist/analyzer/typedDicts.js.map +1 -1
  84. package/dist/analyzer/types.d.ts +11 -20
  85. package/dist/analyzer/types.js +45 -77
  86. package/dist/analyzer/types.js.map +1 -1
  87. package/dist/commands/dumpFileDebugInfoCommand.js +7 -9
  88. package/dist/commands/dumpFileDebugInfoCommand.js.map +1 -1
  89. package/dist/common/commandLineOptions.d.ts +2 -1
  90. package/dist/common/commandLineOptions.js +1 -1
  91. package/dist/common/commandLineOptions.js.map +1 -1
  92. package/dist/common/configOptions.d.ts +3 -2
  93. package/dist/common/configOptions.js +40 -25
  94. package/dist/common/configOptions.js.map +1 -1
  95. package/dist/common/extensibility.d.ts +3 -0
  96. package/dist/common/pathUtils.d.ts +1 -1
  97. package/dist/common/pathUtils.js +11 -10
  98. package/dist/common/pathUtils.js.map +1 -1
  99. package/dist/common/realFileSystem.js +4 -6
  100. package/dist/common/realFileSystem.js.map +1 -1
  101. package/dist/common/serviceProviderExtensions.d.ts +2 -1
  102. package/dist/common/serviceProviderExtensions.js +1 -0
  103. package/dist/common/serviceProviderExtensions.js.map +1 -1
  104. package/dist/common/textEditTracker.js +2 -2
  105. package/dist/common/textEditTracker.js.map +1 -1
  106. package/dist/languageServerBase.d.ts +3 -3
  107. package/dist/languageServerBase.js +18 -15
  108. package/dist/languageServerBase.js.map +1 -1
  109. package/dist/languageService/analyzerServiceExecutor.js +1 -1
  110. package/dist/languageService/analyzerServiceExecutor.js.map +1 -1
  111. package/dist/languageService/callHierarchyProvider.js +3 -3
  112. package/dist/languageService/callHierarchyProvider.js.map +1 -1
  113. package/dist/languageService/completionProvider.d.ts +2 -1
  114. package/dist/languageService/completionProvider.js +12 -10
  115. package/dist/languageService/completionProvider.js.map +1 -1
  116. package/dist/languageService/completionProviderUtils.js +1 -1
  117. package/dist/languageService/definitionProvider.js +1 -1
  118. package/dist/languageService/documentSymbolCollector.js +1 -1
  119. package/dist/languageService/hoverProvider.js +1 -1
  120. package/dist/languageService/signatureHelpProvider.js +0 -14
  121. package/dist/languageService/signatureHelpProvider.js.map +1 -1
  122. package/dist/languageService/tooltipUtils.js +4 -4
  123. package/dist/languageService/tooltipUtils.js.map +1 -1
  124. package/dist/localization/localize.d.ts +16 -0
  125. package/dist/localization/localize.js +6 -0
  126. package/dist/localization/localize.js.map +1 -1
  127. package/dist/localization/package.nls.cs.json +4 -1
  128. package/dist/localization/package.nls.de.json +4 -1
  129. package/dist/localization/package.nls.en-us.json +7 -1
  130. package/dist/localization/package.nls.es.json +4 -1
  131. package/dist/localization/package.nls.fr.json +4 -1
  132. package/dist/localization/package.nls.it.json +4 -1
  133. package/dist/localization/package.nls.ja.json +4 -1
  134. package/dist/localization/package.nls.ko.json +4 -1
  135. package/dist/localization/package.nls.pl.json +4 -1
  136. package/dist/localization/package.nls.pt-br.json +4 -1
  137. package/dist/localization/package.nls.qps-ploc.json +3 -0
  138. package/dist/localization/package.nls.ru.json +4 -1
  139. package/dist/localization/package.nls.tr.json +4 -1
  140. package/dist/localization/package.nls.zh-cn.json +4 -1
  141. package/dist/localization/package.nls.zh-tw.json +4 -1
  142. package/dist/pyright.js +3 -6
  143. package/dist/pyright.js.map +1 -1
  144. package/dist/server.d.ts +1 -0
  145. package/dist/server.js +10 -1
  146. package/dist/server.js.map +1 -1
  147. package/dist/tests/diagnosticOverrides.test.js +4 -2
  148. package/dist/tests/diagnosticOverrides.test.js.map +1 -1
  149. package/dist/tests/fourslash/{completions.importInterimFile.fourslash.js → completions.importInterimFile.fourslash.disabled.js} +2 -2
  150. package/dist/tests/fourslash/completions.importInterimFile.fourslash.disabled.js.map +1 -0
  151. package/dist/tests/fourslash/fourslash.d.ts +1 -1
  152. package/dist/tests/fourslash/signature.complicated.fourslash.js +6 -6
  153. package/dist/tests/fourslash/signature.complicated.fourslash.js.map +1 -1
  154. package/dist/tests/fourslash/signature.dunderNew.fourslash.js +1 -1
  155. package/dist/tests/fourslash/signature.dunderNew.fourslash.js.map +1 -1
  156. package/dist/tests/harness/fourslash/testState.d.ts +1 -1
  157. package/dist/tests/harness/fourslash/testState.js +4 -4
  158. package/dist/tests/harness/fourslash/testState.js.map +1 -1
  159. package/dist/tests/harness/vfs/filesystem.js +1 -1
  160. package/dist/tests/harness/vfs/filesystem.js.map +1 -1
  161. package/dist/tests/logger.test.js +0 -1
  162. package/dist/tests/logger.test.js.map +1 -1
  163. package/dist/tests/parseTreeUtils.test.js +15 -0
  164. package/dist/tests/parseTreeUtils.test.js.map +1 -1
  165. package/dist/tests/pathUtils.test.js +30 -1
  166. package/dist/tests/pathUtils.test.js.map +1 -1
  167. package/dist/tests/testUtils.js +2 -1
  168. package/dist/tests/testUtils.js.map +1 -1
  169. package/dist/tests/textEditUtil.test.js +25 -0
  170. package/dist/tests/textEditUtil.test.js.map +1 -1
  171. package/dist/tests/typeEvaluator1.test.js +7 -3
  172. package/dist/tests/typeEvaluator1.test.js.map +1 -1
  173. package/dist/tests/typeEvaluator2.test.js +5 -1
  174. package/dist/tests/typeEvaluator2.test.js.map +1 -1
  175. package/dist/tests/typeEvaluator3.test.js +10 -4
  176. package/dist/tests/typeEvaluator3.test.js.map +1 -1
  177. package/dist/tests/typeEvaluator4.test.js +11 -7
  178. package/dist/tests/typeEvaluator4.test.js.map +1 -1
  179. package/dist/tests/typePrinter.test.js +12 -16
  180. package/dist/tests/typePrinter.test.js.map +1 -1
  181. package/dist/tests/zipfs.test.js +2 -0
  182. package/dist/tests/zipfs.test.js.map +1 -1
  183. package/package.json +1 -1
  184. package/dist/tests/fourslash/completions.importInterimFile.fourslash.js.map +0 -1
  185. /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 ClassMemberLookupFlags {
13
+ export declare const enum MemberAccessFlags {
14
14
  Default = 0,
15
15
  SkipOriginalClass = 1,
16
16
  SkipBaseClasses = 2,
17
17
  SkipObjectBaseClass = 4,
18
- SkipInstanceVariables = 8,
19
- SkipClassVariables = 16,
20
- DeclaredTypesOnly = 32,
21
- SkipTypeBaseClass = 64
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?: ClassMemberLookupFlags, skipMroClass?: ClassType | undefined): ClassMember | undefined;
129
- export declare function lookUpClassMember(classType: ClassType, memberName: string, flags?: ClassMemberLookupFlags, skipMroClass?: ClassType | undefined): ClassMember | undefined;
130
- export declare function getClassMemberIterator(classType: ClassType | AnyType | UnknownType, memberName: string, flags?: ClassMemberLookupFlags, skipMroClass?: ClassType | undefined): Generator<ClassMember, undefined, unknown>;
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.applySourceContextTypeVarsToSignature = exports.applySourceContextTypeVars = exports.applySolvedTypeVars = exports.ensureFunctionSignaturesAreUnique = 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.mapSubtypes = exports.makeInferenceContext = exports.isTypeVarSame = exports.isIncompleteUnknown = exports.isOptionalType = exports.UniqueSignatureTracker = exports.AssignTypeFlags = exports.ClassIteratorFlags = exports.ClassMemberLookupFlags = void 0;
12
- exports.convertParamSpecValueToType = exports.convertTypeToParamSpecValue = exports.getDeclaringModulesForType = 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 = void 0;
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 ClassMemberLookupFlags;
21
- (function (ClassMemberLookupFlags) {
22
- ClassMemberLookupFlags[ClassMemberLookupFlags["Default"] = 0] = "Default";
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
- ClassMemberLookupFlags[ClassMemberLookupFlags["SkipOriginalClass"] = 1] = "SkipOriginalClass";
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
- ClassMemberLookupFlags[ClassMemberLookupFlags["SkipBaseClasses"] = 2] = "SkipBaseClasses";
31
+ MemberAccessFlags[MemberAccessFlags["SkipBaseClasses"] = 2] = "SkipBaseClasses";
31
32
  // Skip the 'object' base class in particular.
32
- ClassMemberLookupFlags[ClassMemberLookupFlags["SkipObjectBaseClass"] = 4] = "SkipObjectBaseClass";
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
- ClassMemberLookupFlags[ClassMemberLookupFlags["SkipInstanceVariables"] = 8] = "SkipInstanceVariables";
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
- ClassMemberLookupFlags[ClassMemberLookupFlags["SkipClassVariables"] = 16] = "SkipClassVariables";
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
- ClassMemberLookupFlags[ClassMemberLookupFlags["DeclaredTypesOnly"] = 32] = "DeclaredTypesOnly";
43
- // Skip the 'type' base class in particular.
44
- ClassMemberLookupFlags[ClassMemberLookupFlags["SkipTypeBaseClass"] = 64] = "SkipTypeBaseClass";
45
- })(ClassMemberLookupFlags = exports.ClassMemberLookupFlags || (exports.ClassMemberLookupFlags = {}));
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) => (0, types_1.isNoneInstance)(subtype)) !== undefined;
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 === 9 /* Union */) {
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 /* None */:
315
- case 4 /* Never */:
316
- case 9 /* Union */: {
369
+ case 3 /* Never */:
370
+ case 8 /* Union */: {
317
371
  return 0;
318
372
  }
319
- case 5 /* Function */: {
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(aParam.type, bParam.type);
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 = a.details.declaredReturnType) !== null && _a !== void 0 ? _a : types_1.UnknownType.create(), (_b = bFunc.details.declaredReturnType) !== null && _b !== void 0 ? _b : types_1.UnknownType.create());
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 6 /* OverloadedFunction */: {
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 7 /* Class */: {
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 8 /* Module */: {
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 10 /* TypeVar */: {
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 3 /* None */:
531
- return 'builtins.None';
532
- case 7 /* Class */:
591
+ case 6 /* Class */:
533
592
  return type.details.fullName;
534
- case 5 /* Function */:
593
+ case 4 /* Function */:
535
594
  return type.details.fullName;
536
- case 8 /* Module */:
595
+ case 7 /* Module */:
537
596
  return type.moduleName;
538
- case 6 /* OverloadedFunction */:
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 4 /* Never */:
553
- case 8 /* Module */:
554
- case 10 /* TypeVar */:
611
+ case 3 /* Never */:
612
+ case 7 /* Module */:
613
+ case 9 /* TypeVar */:
555
614
  return type;
556
- case 3 /* None */:
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 6 /* OverloadedFunction */:
617
+ case 5 /* OverloadedFunction */:
560
618
  return types_1.OverloadedFunctionType.create(type.overloads.map((t) => addConditionToType(t, condition)));
561
- case 7 /* Class */:
619
+ case 6 /* Class */:
562
620
  return types_1.TypeBase.cloneForCondition(type, types_1.TypeCondition.combine(type.condition, condition));
563
- case 9 /* Union */:
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 4 /* Never */:
574
- case 8 /* Module */:
575
- case 10 /* TypeVar */:
576
- case 6 /* OverloadedFunction */:
577
- case 9 /* Union */:
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 3 /* None */:
580
- case 7 /* Class */:
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 !== 9 /* Union */) {
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__', 8 /* SkipInstanceVariables */);
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
- typeVarContext.setTypeVarType(synthesizedSelfTypeVar, selfInstance, selfWithoutLiteral);
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 & 32 /* DeclaredTypesOnly */) !== 0;
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 & 64 /* SkipTypeBaseClass */) {
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 & 8 /* SkipInstanceVariables */) === 0) {
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 & 16 /* SkipClassVariables */) === 0) {
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 9 /* Union */:
1552
+ case 8 /* Union */:
1494
1553
  doForEachSubtype(destType, (subtype) => {
1495
1554
  setTypeArgumentsRecursive(subtype, srcType, typeVarContext, recursionCount);
1496
1555
  });
1497
1556
  break;
1498
- case 7 /* Class */:
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 5 /* Function */:
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 6 /* OverloadedFunction */:
1593
+ case 5 /* OverloadedFunction */:
1535
1594
  destType.overloads.forEach((subtype) => {
1536
1595
  setTypeArgumentsRecursive(subtype, srcType, typeVarContext, recursionCount);
1537
1596
  });
1538
1597
  break;
1539
- case 10 /* TypeVar */:
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 7 /* Class */: {
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
- return convertToInstantiable(subtype.typeArguments[0]);
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 3 /* None */: {
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 10 /* TypeVar */: {
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 7 /* Class */: {
1852
+ case 6 /* Class */: {
1799
1853
  return types_1.ClassType.cloneAsInstantiable(subtype, includeSubclasses);
1800
1854
  }
1801
- case 3 /* None */: {
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 10 /* TypeVar */: {
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 7 /* Class */: {
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 5 /* Function */: {
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 6 /* OverloadedFunction */: {
2306
+ case 5 /* OverloadedFunction */: {
2256
2307
  return type.overloads.some((overload) => requiresSpecialization(overload, options, recursionCount));
2257
2308
  }
2258
- case 9 /* Union */: {
2309
+ case 8 /* Union */: {
2259
2310
  return type.subtypes.some((subtype) => requiresSpecialization(subtype, options, recursionCount));
2260
2311
  }
2261
- case 10 /* TypeVar */: {
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 the purposes
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 7 /* Class */: {
2529
+ case 6 /* Class */: {
2479
2530
  addIfUnique(type.details.moduleName);
2480
2531
  break;
2481
2532
  }
2482
- case 5 /* Function */: {
2533
+ case 4 /* Function */: {
2483
2534
  addIfUnique(type.details.moduleName);
2484
2535
  break;
2485
2536
  }
2486
- case 6 /* OverloadedFunction */: {
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 9 /* Union */: {
2543
+ case 8 /* Union */: {
2493
2544
  doForEachSubtype(type, (subtype) => {
2494
2545
  addDeclaringModuleNamesForType(subtype, moduleList, recursionCount);
2495
2546
  });
2496
2547
  break;
2497
2548
  }
2498
- case 8 /* Module */: {
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 ((0, types_1.isNoneInstance)(type)) {
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.FunctionType.createSynthesizedInstance('', functionType.details.flags);
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 ? 1 /* ArgsList */ : 0 /* Simple */,
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,