@zzzen/pyright-internal 1.2.0-dev.20240107 → 1.2.0-dev.20240114

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 (202) hide show
  1. package/dist/analyzer/checker.d.ts +2 -0
  2. package/dist/analyzer/checker.js +64 -14
  3. package/dist/analyzer/checker.js.map +1 -1
  4. package/dist/analyzer/codeFlowEngine.js +2 -2
  5. package/dist/analyzer/codeFlowEngine.js.map +1 -1
  6. package/dist/analyzer/constraintSolver.js +6 -0
  7. package/dist/analyzer/constraintSolver.js.map +1 -1
  8. package/dist/analyzer/dataClasses.js +2 -2
  9. package/dist/analyzer/dataClasses.js.map +1 -1
  10. package/dist/analyzer/decorators.js +9 -9
  11. package/dist/analyzer/decorators.js.map +1 -1
  12. package/dist/analyzer/importResolver.d.ts +2 -2
  13. package/dist/analyzer/importResolver.js +93 -24
  14. package/dist/analyzer/importResolver.js.map +1 -1
  15. package/dist/analyzer/operations.js +4 -3
  16. package/dist/analyzer/operations.js.map +1 -1
  17. package/dist/analyzer/parseTreeUtils.js +37 -0
  18. package/dist/analyzer/parseTreeUtils.js.map +1 -1
  19. package/dist/analyzer/patternMatching.js +4 -4
  20. package/dist/analyzer/patternMatching.js.map +1 -1
  21. package/dist/analyzer/program.js +1 -1
  22. package/dist/analyzer/program.js.map +1 -1
  23. package/dist/analyzer/protocols.js +27 -20
  24. package/dist/analyzer/protocols.js.map +1 -1
  25. package/dist/analyzer/service.d.ts +1 -1
  26. package/dist/analyzer/service.js +7 -6
  27. package/dist/analyzer/service.js.map +1 -1
  28. package/dist/analyzer/sourceFile.d.ts +2 -2
  29. package/dist/analyzer/sourceFile.js +5 -5
  30. package/dist/analyzer/sourceFile.js.map +1 -1
  31. package/dist/analyzer/sourceFileInfoUtils.js +1 -1
  32. package/dist/analyzer/sourceFileInfoUtils.js.map +1 -1
  33. package/dist/analyzer/typeEvaluator.js +228 -133
  34. package/dist/analyzer/typeEvaluator.js.map +1 -1
  35. package/dist/analyzer/typeEvaluatorTypes.d.ts +4 -3
  36. package/dist/analyzer/typeEvaluatorTypes.js +2 -4
  37. package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
  38. package/dist/analyzer/typeGuards.js +14 -9
  39. package/dist/analyzer/typeGuards.js.map +1 -1
  40. package/dist/analyzer/typeUtils.d.ts +2 -1
  41. package/dist/analyzer/typeUtils.js +13 -0
  42. package/dist/analyzer/typeUtils.js.map +1 -1
  43. package/dist/analyzer/types.d.ts +9 -5
  44. package/dist/analyzer/types.js +38 -23
  45. package/dist/analyzer/types.js.map +1 -1
  46. package/dist/backgroundAnalysisBase.d.ts +12 -11
  47. package/dist/backgroundAnalysisBase.js +60 -64
  48. package/dist/backgroundAnalysisBase.js.map +1 -1
  49. package/dist/backgroundThreadBase.d.ts +6 -5
  50. package/dist/backgroundThreadBase.js +63 -60
  51. package/dist/backgroundThreadBase.js.map +1 -1
  52. package/dist/commands/quickActionCommand.js +1 -1
  53. package/dist/commands/quickActionCommand.js.map +1 -1
  54. package/dist/common/cancellationUtils.d.ts +6 -3
  55. package/dist/common/cancellationUtils.js +29 -5
  56. package/dist/common/cancellationUtils.js.map +1 -1
  57. package/dist/common/commandUtils.d.ts +2 -0
  58. package/dist/common/commandUtils.js +24 -0
  59. package/dist/common/commandUtils.js.map +1 -0
  60. package/dist/common/extensibility.d.ts +7 -6
  61. package/dist/common/extensibility.js.map +1 -1
  62. package/dist/common/fileBasedCancellationUtils.js +19 -13
  63. package/dist/common/fileBasedCancellationUtils.js.map +1 -1
  64. package/dist/common/fullAccessHost.d.ts +1 -1
  65. package/dist/common/fullAccessHost.js +2 -2
  66. package/dist/common/fullAccessHost.js.map +1 -1
  67. package/dist/common/host.d.ts +2 -2
  68. package/dist/common/host.js.map +1 -1
  69. package/dist/common/realFileSystem.js +8 -8
  70. package/dist/common/realFileSystem.js.map +1 -1
  71. package/dist/common/serviceProvider.js +8 -1
  72. package/dist/common/serviceProvider.js.map +1 -1
  73. package/dist/common/uri/baseUri.d.ts +4 -1
  74. package/dist/common/uri/baseUri.js +7 -1
  75. package/dist/common/uri/baseUri.js.map +1 -1
  76. package/dist/common/uri/emptyUri.d.ts +3 -0
  77. package/dist/common/uri/emptyUri.js +9 -0
  78. package/dist/common/uri/emptyUri.js.map +1 -1
  79. package/dist/common/uri/fileUri.d.ts +2 -0
  80. package/dist/common/uri/fileUri.js +6 -0
  81. package/dist/common/uri/fileUri.js.map +1 -1
  82. package/dist/common/uri/memoization.js +1 -1
  83. package/dist/common/uri/memoization.js.map +1 -1
  84. package/dist/common/uri/uri.d.ts +4 -1
  85. package/dist/common/uri/uri.js +5 -2
  86. package/dist/common/uri/uri.js.map +1 -1
  87. package/dist/common/uri/uriUtils.d.ts +2 -0
  88. package/dist/common/uri/uriUtils.js +18 -1
  89. package/dist/common/uri/uriUtils.js.map +1 -1
  90. package/dist/common/uri/webUri.d.ts +2 -0
  91. package/dist/common/uri/webUri.js +7 -1
  92. package/dist/common/uri/webUri.js.map +1 -1
  93. package/dist/common/workspaceEditUtils.d.ts +6 -5
  94. package/dist/common/workspaceEditUtils.js +18 -17
  95. package/dist/common/workspaceEditUtils.js.map +1 -1
  96. package/dist/languageServerBase.d.ts +1 -0
  97. package/dist/languageServerBase.js +28 -25
  98. package/dist/languageServerBase.js.map +1 -1
  99. package/dist/languageService/analyzerServiceExecutor.d.ts +1 -2
  100. package/dist/languageService/analyzerServiceExecutor.js +6 -5
  101. package/dist/languageService/analyzerServiceExecutor.js.map +1 -1
  102. package/dist/languageService/autoImporter.js +3 -3
  103. package/dist/languageService/autoImporter.js.map +1 -1
  104. package/dist/languageService/callHierarchyProvider.js +9 -7
  105. package/dist/languageService/callHierarchyProvider.js.map +1 -1
  106. package/dist/languageService/codeActionProvider.js +3 -2
  107. package/dist/languageService/codeActionProvider.js.map +1 -1
  108. package/dist/languageService/completionProvider.d.ts +2 -4
  109. package/dist/languageService/completionProvider.js +14 -18
  110. package/dist/languageService/completionProvider.js.map +1 -1
  111. package/dist/languageService/documentSymbolProvider.js +5 -4
  112. package/dist/languageService/documentSymbolProvider.js.map +1 -1
  113. package/dist/languageService/navigationUtils.js +2 -1
  114. package/dist/languageService/navigationUtils.js.map +1 -1
  115. package/dist/languageService/renameProvider.js +2 -2
  116. package/dist/languageService/renameProvider.js.map +1 -1
  117. package/dist/languageService/workspaceSymbolProvider.js +2 -1
  118. package/dist/languageService/workspaceSymbolProvider.js.map +1 -1
  119. package/dist/localization/localize.d.ts +5 -4
  120. package/dist/localization/localize.js +3 -2
  121. package/dist/localization/localize.js.map +1 -1
  122. package/dist/localization/package.nls.cs.json +19 -4
  123. package/dist/localization/package.nls.de.json +19 -4
  124. package/dist/localization/package.nls.en-us.json +3 -2
  125. package/dist/localization/package.nls.es.json +19 -4
  126. package/dist/localization/package.nls.fr.json +18 -3
  127. package/dist/localization/package.nls.it.json +19 -4
  128. package/dist/localization/package.nls.ja.json +19 -4
  129. package/dist/localization/package.nls.ko.json +19 -4
  130. package/dist/localization/package.nls.pl.json +19 -4
  131. package/dist/localization/package.nls.pt-br.json +19 -4
  132. package/dist/localization/package.nls.qps-ploc.json +19 -4
  133. package/dist/localization/package.nls.ru.json +18 -3
  134. package/dist/localization/package.nls.tr.json +19 -4
  135. package/dist/localization/package.nls.zh-cn.json +19 -4
  136. package/dist/localization/package.nls.zh-tw.json +19 -4
  137. package/dist/parser/parser.d.ts +0 -3
  138. package/dist/parser/parser.js.map +1 -1
  139. package/dist/parser/tokenizer.d.ts +2 -4
  140. package/dist/parser/tokenizer.js +5 -6
  141. package/dist/parser/tokenizer.js.map +1 -1
  142. package/dist/parser/tokenizerTypes.d.ts +2 -2
  143. package/dist/parser/tokenizerTypes.js.map +1 -1
  144. package/dist/pyright.js +3 -3
  145. package/dist/pyright.js.map +1 -1
  146. package/dist/tests/chainedSourceFiles.test.js +8 -8
  147. package/dist/tests/chainedSourceFiles.test.js.map +1 -1
  148. package/dist/tests/completions.test.js +3 -3
  149. package/dist/tests/completions.test.js.map +1 -1
  150. package/dist/tests/config.test.js +10 -2
  151. package/dist/tests/config.test.js.map +1 -1
  152. package/dist/tests/filesystem.test.js +4 -4
  153. package/dist/tests/filesystem.test.js.map +1 -1
  154. package/dist/tests/fourSlashParser.test.js +22 -8
  155. package/dist/tests/fourSlashParser.test.js.map +1 -1
  156. package/dist/tests/fourslash/rename.multipleDecl.fourslash.d.ts +1 -1
  157. package/dist/tests/harness/fourslash/fourSlashParser.js +4 -0
  158. package/dist/tests/harness/fourslash/fourSlashParser.js.map +1 -1
  159. package/dist/tests/harness/fourslash/fourSlashTypes.d.ts +3 -0
  160. package/dist/tests/harness/fourslash/fourSlashTypes.js.map +1 -1
  161. package/dist/tests/harness/fourslash/testState.d.ts +13 -0
  162. package/dist/tests/harness/fourslash/testState.js +13 -8
  163. package/dist/tests/harness/fourslash/testState.js.map +1 -1
  164. package/dist/tests/harness/vfs/factory.d.ts +1 -1
  165. package/dist/tests/harness/vfs/factory.js +4 -4
  166. package/dist/tests/harness/vfs/factory.js.map +1 -1
  167. package/dist/tests/importStatementUtils.test.js +1 -1
  168. package/dist/tests/importStatementUtils.test.js.map +1 -1
  169. package/dist/tests/ipythonMode.test.js +11 -12
  170. package/dist/tests/ipythonMode.test.js.map +1 -1
  171. package/dist/tests/serialization.test.d.ts +2 -0
  172. package/dist/tests/serialization.test.js +88 -0
  173. package/dist/tests/serialization.test.js.map +1 -0
  174. package/dist/tests/service.test.js +1 -1
  175. package/dist/tests/service.test.js.map +1 -1
  176. package/dist/tests/signatureHelp.test.js +2 -3
  177. package/dist/tests/signatureHelp.test.js.map +1 -1
  178. package/dist/tests/sourceFile.test.js +3 -3
  179. package/dist/tests/sourceFile.test.js.map +1 -1
  180. package/dist/tests/sourceMapperUtils.test.js +2 -2
  181. package/dist/tests/sourceMapperUtils.test.js.map +1 -1
  182. package/dist/tests/testState.test.js +1 -1
  183. package/dist/tests/testState.test.js.map +1 -1
  184. package/dist/tests/testStateUtils.js +2 -2
  185. package/dist/tests/testStateUtils.js.map +1 -1
  186. package/dist/tests/textEditUtil.test.js +1 -2
  187. package/dist/tests/textEditUtil.test.js.map +1 -1
  188. package/dist/tests/typeEvaluator1.test.js +12 -0
  189. package/dist/tests/typeEvaluator1.test.js.map +1 -1
  190. package/dist/tests/typeEvaluator2.test.js +6 -6
  191. package/dist/tests/typeEvaluator2.test.js.map +1 -1
  192. package/dist/tests/typeEvaluator3.test.js +6 -0
  193. package/dist/tests/typeEvaluator3.test.js.map +1 -1
  194. package/dist/tests/typeEvaluator4.test.js +4 -4
  195. package/dist/tests/typeEvaluator4.test.js.map +1 -1
  196. package/dist/tests/uri.test.js +30 -7
  197. package/dist/tests/uri.test.js.map +1 -1
  198. package/dist/tests/workspaceEditUtils.test.js +8 -8
  199. package/dist/tests/workspaceEditUtils.test.js.map +1 -1
  200. package/dist/workspaceFactory.js +1 -1
  201. package/dist/workspaceFactory.js.map +1 -1
  202. package/package.json +2 -1
@@ -187,6 +187,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
187
187
  let noneType;
188
188
  let objectType;
189
189
  let typeClassType;
190
+ let unionClassType;
190
191
  let awaitableProtocolType;
191
192
  let functionObj;
192
193
  let tupleClassType;
@@ -462,6 +463,10 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
462
463
  objectType = getBuiltInObject(node, 'object');
463
464
  typeClassType = getBuiltInType(node, 'type');
464
465
  functionObj = getBuiltInObject(node, 'function');
466
+ unionClassType = getTypesType(node, 'UnionType');
467
+ if (unionClassType && (0, types_1.isClass)(unionClassType)) {
468
+ unionClassType.details.flags |= 1073741824 /* ClassTypeFlags.SpecialFormClass */;
469
+ }
465
470
  // Initialize and cache "Collection" to break a cyclical dependency
466
471
  // that occurs when resolving tuple below.
467
472
  getTypingType(node, 'Collection');
@@ -482,6 +487,23 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
482
487
  // Fall back on 'Mapping' if 'SupportsKeysAndGetItem' is not available.
483
488
  mappingType = getTypingType(node, 'Mapping');
484
489
  }
490
+ // Wire up the `Any` class to the special-form version of our internal AnyType.
491
+ const objectClass = getBuiltInType(node, 'object');
492
+ if (objectClass &&
493
+ (0, types_1.isInstantiableClass)(objectClass) &&
494
+ typeClassType &&
495
+ (0, types_1.isInstantiableClass)(typeClassType)) {
496
+ const anyClass = types_1.ClassType.createInstantiable('Any', 'typing.Any', 'typing', uri_1.Uri.empty(), 1 /* ClassTypeFlags.BuiltInClass */,
497
+ /* typeSourceId */ -1,
498
+ /* declaredMetaclass */ undefined,
499
+ /* effectiveMetaclass */ typeClassType);
500
+ anyClass.details.baseClasses.push(objectClass);
501
+ (0, typeUtils_1.computeMroLinearization)(anyClass);
502
+ const anySpecialForm = types_1.AnyType.createSpecialForm();
503
+ if ((0, types_1.isAny)(anySpecialForm)) {
504
+ anySpecialForm.specialForm = anyClass;
505
+ }
506
+ }
485
507
  }
486
508
  }
487
509
  function getTypeOfExpression(node, flags = 0 /* EvaluatorFlags.None */, inferenceContext) {
@@ -755,7 +777,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
755
777
  const isEmptyVariadic = (0, types_1.isClassInstance)(typeResult.type) &&
756
778
  types_1.ClassType.isTupleClass(typeResult.type) &&
757
779
  ((_a = typeResult.type.tupleTypeArguments) === null || _a === void 0 ? void 0 : _a.length) === 0;
758
- const isEllipsis = (0, types_1.isClassInstance)(typeResult.type) && types_1.ClassType.isBuiltIn(typeResult.type, 'ellipsis');
780
+ const isEllipsis = (0, types_1.isClassInstance)(typeResult.type) && types_1.ClassType.isBuiltIn(typeResult.type, ['EllipsisType', 'ellipsis']);
759
781
  if (!isEmptyVariadic && !isEllipsis) {
760
782
  addExpectedClassDiagnostic(typeResult.type, node);
761
783
  typeResult.type = types_1.UnknownType.create();
@@ -783,11 +805,12 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
783
805
  return typeResult;
784
806
  }
785
807
  function getTypeOfEllipsis(flags, typeResult, node) {
808
+ var _a, _b;
786
809
  if ((flags & 1 /* EvaluatorFlags.ConvertEllipsisToAny */) !== 0) {
787
810
  typeResult = { type: types_1.AnyType.create(/* isEllipsis */ true) };
788
811
  }
789
812
  else {
790
- const ellipsisType = getBuiltInObject(node, 'ellipsis') || types_1.AnyType.create();
813
+ const ellipsisType = (_b = (_a = getBuiltInObject(node, 'EllipsisType')) !== null && _a !== void 0 ? _a : getBuiltInObject(node, 'ellipsis')) !== null && _b !== void 0 ? _b : types_1.AnyType.create();
791
814
  typeResult = { type: ellipsisType };
792
815
  }
793
816
  return typeResult;
@@ -1637,7 +1660,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
1637
1660
  return getDeclaredTypeForExpression(expression.valueExpression, usage);
1638
1661
  }
1639
1662
  case 35 /* ParseNodeType.MemberAccess */: {
1640
- const baseType = makeTopLevelTypeVarsConcrete(getTypeOfExpression(expression.leftExpression, 16777218 /* EvaluatorFlags.MemberAccessBaseDefaults */).type);
1663
+ const baseType = makeTopLevelTypeVarsConcrete(getTypeOfExpression(expression.leftExpression, 2 /* EvaluatorFlags.MemberAccessBaseDefaults */).type);
1641
1664
  let classMemberInfo;
1642
1665
  if ((0, types_1.isClassInstance)(baseType)) {
1643
1666
  classMemberInfo = (0, typeUtils_1.lookUpObjectMember)(baseType, expression.memberName.value, 64 /* MemberAccessFlags.DeclaredTypesOnly */);
@@ -1924,10 +1947,16 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
1924
1947
  function getNoneType() {
1925
1948
  return noneType !== null && noneType !== void 0 ? noneType : types_1.UnknownType.create();
1926
1949
  }
1950
+ function getUnionClassType() {
1951
+ return unionClassType !== null && unionClassType !== void 0 ? unionClassType : types_1.UnknownType.create();
1952
+ }
1927
1953
  function getTypingType(node, symbolName) {
1928
1954
  var _a;
1929
1955
  return ((_a = getTypeOfModule(node, symbolName, ['typing'])) !== null && _a !== void 0 ? _a : getTypeOfModule(node, symbolName, ['typing_extensions']));
1930
1956
  }
1957
+ function getTypesType(node, symbolName) {
1958
+ return getTypeOfModule(node, symbolName, ['types']);
1959
+ }
1931
1960
  function getTypeshedType(node, symbolName) {
1932
1961
  return getTypeOfModule(node, symbolName, ['_typeshed']);
1933
1962
  }
@@ -2193,7 +2222,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
2193
2222
  writeTypeCache(nameNode, { type: destType, isIncomplete: isTypeIncomplete }, 0 /* EvaluatorFlags.None */);
2194
2223
  }
2195
2224
  function assignTypeToMemberAccessNode(target, type, isTypeIncomplete, srcExpr, expectedTypeDiagAddendum) {
2196
- const baseTypeResult = getTypeOfExpression(target.leftExpression, 16777218 /* EvaluatorFlags.MemberAccessBaseDefaults */);
2225
+ const baseTypeResult = getTypeOfExpression(target.leftExpression, 2 /* EvaluatorFlags.MemberAccessBaseDefaults */);
2197
2226
  const baseType = makeTopLevelTypeVarsConcrete(baseTypeResult.type);
2198
2227
  // Handle member accesses (e.g. self.x or cls.y).
2199
2228
  if (target.leftExpression.nodeType === 38 /* ParseNodeType.Name */) {
@@ -2653,7 +2682,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
2653
2682
  // Is the source expression a TypeVar() call?
2654
2683
  if ((0, types_1.isTypeVar)(type)) {
2655
2684
  if (srcExpr && srcExpr.nodeType === 9 /* ParseNodeType.Call */) {
2656
- const callType = getTypeOfExpression(srcExpr.leftExpression, 16777218 /* EvaluatorFlags.CallBaseDefaults */).type;
2685
+ const callType = getTypeOfExpression(srcExpr.leftExpression, 2 /* EvaluatorFlags.CallBaseDefaults */).type;
2657
2686
  if ((0, types_1.isInstantiableClass)(callType) &&
2658
2687
  (types_1.ClassType.isBuiltIn(callType, 'TypeVar') ||
2659
2688
  types_1.ClassType.isBuiltIn(callType, 'TypeVarTuple') ||
@@ -2812,7 +2841,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
2812
2841
  break;
2813
2842
  }
2814
2843
  case 35 /* ParseNodeType.MemberAccess */: {
2815
- const baseTypeResult = getTypeOfExpression(node.leftExpression, 16777218 /* EvaluatorFlags.MemberAccessBaseDefaults */);
2844
+ const baseTypeResult = getTypeOfExpression(node.leftExpression, 2 /* EvaluatorFlags.MemberAccessBaseDefaults */);
2816
2845
  const delAccessResult = getTypeOfMemberAccessWithBaseType(node, baseTypeResult, { method: 'del' }, 0 /* EvaluatorFlags.None */);
2817
2846
  const resultToCache = {
2818
2847
  type: delAccessResult.type,
@@ -2857,7 +2886,6 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
2857
2886
  }
2858
2887
  }
2859
2888
  function getTypeOfName(node, flags) {
2860
- var _a;
2861
2889
  const fileInfo = AnalyzerNodeInfo.getFileInfo(node);
2862
2890
  const name = node.value;
2863
2891
  let symbol;
@@ -3012,17 +3040,6 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
3012
3040
  if ((flags & 256 /* EvaluatorFlags.ExpectingTypeAnnotation */) === 0) {
3013
3041
  reportUseOfTypeCheckOnly(type, node);
3014
3042
  }
3015
- if ((flags & 16777216 /* EvaluatorFlags.TreatPep695TypeAliasAsObject */) !== 0) {
3016
- if (((_a = type.typeAliasInfo) === null || _a === void 0 ? void 0 : _a.name) && type.typeAliasInfo.isPep695Syntax && types_1.TypeBase.isSpecialForm(type)) {
3017
- const typeAliasType = getTypingType(node, 'TypeAliasType');
3018
- if (typeAliasType && (0, types_1.isInstantiableClass)(typeAliasType)) {
3019
- type = types_1.ClassType.cloneAsInstance(typeAliasType);
3020
- }
3021
- else {
3022
- type = types_1.UnknownType.create();
3023
- }
3024
- }
3025
- }
3026
3043
  if ((flags & 128 /* EvaluatorFlags.ExpectingInstantiableType */) !== 0) {
3027
3044
  if ((flags & 1024 /* EvaluatorFlags.AllowGenericClassType */) === 0) {
3028
3045
  if ((0, types_1.isInstantiableClass)(type) && types_1.ClassType.isBuiltIn(type, 'Generic')) {
@@ -3269,6 +3286,11 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
3269
3286
  if (param.details.defaultType || param.details.isParamSpec) {
3270
3287
  defaultType = (0, typeUtils_1.applySolvedTypeVars)(param, typeVarContext, { unknownIfNotFound: true });
3271
3288
  }
3289
+ else if (param.details.isVariadic && tupleClassType && (0, types_1.isInstantiableClass)(tupleClassType)) {
3290
+ defaultType = types_1.ClassType.cloneForUnpacked((0, typeUtils_1.specializeTupleClass)(types_1.ClassType.cloneAsInstance(tupleClassType), [
3291
+ { type: types_1.UnknownType.create(), isUnbounded: true },
3292
+ ]));
3293
+ }
3272
3294
  else {
3273
3295
  defaultType = types_1.UnknownType.create();
3274
3296
  }
@@ -3390,7 +3412,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
3390
3412
  function getTypeOfMemberAccess(node, flags) {
3391
3413
  var _a;
3392
3414
  // Compute flags specifically for evaluating the left expression.
3393
- let leftExprFlags = 16777218 /* EvaluatorFlags.MemberAccessBaseDefaults */;
3415
+ let leftExprFlags = 2 /* EvaluatorFlags.MemberAccessBaseDefaults */;
3394
3416
  leftExprFlags |=
3395
3417
  flags &
3396
3418
  (256 /* EvaluatorFlags.ExpectingTypeAnnotation */ |
@@ -3461,8 +3483,8 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
3461
3483
  // cases where a type is passed as an argument (e.g. "defaultdict(list)").
3462
3484
  // It can also come up in cases like "isinstance(x, (list, dict))".
3463
3485
  // We need to check for functions as well to handle Callable.
3464
- if ((0, types_1.isInstantiableClass)(typeResult.type) ||
3465
- ((0, types_1.isFunction)(typeResult.type) && types_1.TypeBase.isSpecialForm(typeResult.type))) {
3486
+ if (((0, types_1.isInstantiableClass)(typeResult.type) && !typeResult.type.includeSubclasses) ||
3487
+ typeResult.type.specialForm) {
3466
3488
  const argNode = ParseTreeUtils.getParentNodeOfType(node, 1 /* ParseNodeType.Argument */);
3467
3489
  if (argNode && ((_a = argNode === null || argNode === void 0 ? void 0 : argNode.parent) === null || _a === void 0 ? void 0 : _a.nodeType) === 9 /* ParseNodeType.Call */) {
3468
3490
  skipPartialUnknownCheck = true;
@@ -3493,12 +3515,8 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
3493
3515
  if (baseTypeResult.isIncomplete && (0, types_1.isUnbound)(baseType)) {
3494
3516
  return { type: types_1.UnknownType.create(/* isIncomplete */ true), isIncomplete: true };
3495
3517
  }
3496
- // Handle the special case where the expression is an actual
3497
- // UnionType special form.
3498
- if ((0, types_1.isUnion)(baseType) && types_1.TypeBase.isSpecialForm(baseType)) {
3499
- if (objectType) {
3500
- baseType = objectType;
3501
- }
3518
+ if (baseType.specialForm) {
3519
+ baseType = baseType.specialForm;
3502
3520
  }
3503
3521
  if ((0, types_1.isParamSpec)(baseType) && baseType.paramSpecAccess) {
3504
3522
  baseType = makeTopLevelTypeVarsConcrete(baseType);
@@ -4348,7 +4366,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
4348
4366
  }
4349
4367
  }
4350
4368
  }
4351
- const indexTypeResult = getTypeOfIndexWithBaseType(node, baseTypeResult, { method: 'get' }, flags & ~16777216 /* EvaluatorFlags.TreatPep695TypeAliasAsObject */);
4369
+ const indexTypeResult = getTypeOfIndexWithBaseType(node, baseTypeResult, { method: 'get' }, flags);
4352
4370
  if ((0, codeFlowTypes_1.isCodeFlowSupportedForReference)(node)) {
4353
4371
  // We limit type narrowing for index expressions to built-in types that are
4354
4372
  // known to have symmetric __getitem__ and __setitem__ methods (i.e. the value
@@ -4387,8 +4405,42 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
4387
4405
  // the supplied type arguments to map to the type parameter list.
4388
4406
  function adjustTypeArgumentsForVariadicTypeVar(typeArgs, typeParameters, errorNode) {
4389
4407
  const variadicIndex = typeParameters.findIndex((param) => (0, types_1.isVariadicTypeVar)(param));
4408
+ // Is there a *tuple[T, ...] somewhere in the type arguments that we can expand if needed?
4409
+ let srcUnboundedTupleType;
4410
+ let srcUnboundedTupleIndex = typeArgs.findIndex((arg) => {
4411
+ if ((0, types_1.isUnpackedClass)(arg.type) &&
4412
+ arg.type.tupleTypeArguments &&
4413
+ arg.type.tupleTypeArguments.length === 1 &&
4414
+ arg.type.tupleTypeArguments[0].isUnbounded) {
4415
+ srcUnboundedTupleType = arg.type.tupleTypeArguments[0].type;
4416
+ return true;
4417
+ }
4418
+ return false;
4419
+ });
4420
+ if (srcUnboundedTupleType &&
4421
+ srcUnboundedTupleIndex >= 0 &&
4422
+ variadicIndex >= 0 &&
4423
+ typeArgs.length < typeParameters.length) {
4424
+ // "Smear" the tuple type across type argument slots prior to the variadic type var.
4425
+ while (variadicIndex > srcUnboundedTupleIndex) {
4426
+ typeArgs = [
4427
+ ...typeArgs.slice(0, srcUnboundedTupleIndex),
4428
+ { node: typeArgs[srcUnboundedTupleIndex].node, type: srcUnboundedTupleType },
4429
+ ...typeArgs.slice(srcUnboundedTupleIndex),
4430
+ ];
4431
+ srcUnboundedTupleIndex++;
4432
+ }
4433
+ // "Smear" the tuple type across type argument slots following the variadic type var.
4434
+ while (typeArgs.length < typeParameters.length) {
4435
+ typeArgs = [
4436
+ ...typeArgs.slice(0, srcUnboundedTupleIndex + 1),
4437
+ { node: typeArgs[srcUnboundedTupleIndex].node, type: srcUnboundedTupleType },
4438
+ ...typeArgs.slice(srcUnboundedTupleIndex + 1),
4439
+ ];
4440
+ }
4441
+ }
4390
4442
  // Do we need to adjust the type arguments to map to a variadic type
4391
- // param at the end of the list?
4443
+ // param somewhere in the list?
4392
4444
  if (variadicIndex >= 0) {
4393
4445
  const variadicTypeVar = typeParameters[variadicIndex];
4394
4446
  if (tupleClassType && (0, types_1.isInstantiableClass)(tupleClassType)) {
@@ -4697,7 +4749,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
4697
4749
  }
4698
4750
  if (types_1.ClassType.isSpecialBuiltIn(concreteSubtype, 'Literal')) {
4699
4751
  // Special-case Literal types.
4700
- return createLiteralType(node, flags);
4752
+ return createLiteralType(concreteSubtype, node, flags);
4701
4753
  }
4702
4754
  if (types_1.ClassType.isBuiltIn(concreteSubtype, 'InitVar')) {
4703
4755
  // Special-case InitVar, used in data classes.
@@ -5114,7 +5166,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
5114
5166
  }
5115
5167
  }
5116
5168
  else {
5117
- if (value >= tupleTypeArgs.length) {
5169
+ if (value > tupleTypeArgs.length) {
5118
5170
  return undefined;
5119
5171
  }
5120
5172
  else if (unboundedIndex >= 0 && value > unboundedIndex) {
@@ -5195,16 +5247,18 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
5195
5247
  const typeResult = getTypeArgTypeResult(arg.valueExpression, index);
5196
5248
  if (arg.argumentCategory !== 0 /* ArgumentCategory.Simple */) {
5197
5249
  if (arg.argumentCategory === 1 /* ArgumentCategory.UnpackedList */) {
5198
- if ((0, types_1.isVariadicTypeVar)(typeResult.type) && !typeResult.type.isVariadicUnpacked) {
5199
- typeResult.type = types_1.TypeVarType.cloneForUnpacked(typeResult.type);
5200
- }
5201
- else if ((0, types_1.isInstantiableClass)(typeResult.type) &&
5202
- !typeResult.type.includeSubclasses &&
5203
- (0, typeUtils_1.isTupleClass)(typeResult.type)) {
5204
- typeResult.type = types_1.ClassType.cloneForUnpacked(typeResult.type);
5205
- }
5206
- else {
5207
- addError(localize_1.Localizer.Diagnostic.unpackNotAllowed(), arg.valueExpression);
5250
+ if (!(options === null || options === void 0 ? void 0 : options.isAnnotatedClass) || index === 0) {
5251
+ if ((0, types_1.isVariadicTypeVar)(typeResult.type) && !typeResult.type.isVariadicUnpacked) {
5252
+ typeResult.type = types_1.TypeVarType.cloneForUnpacked(typeResult.type);
5253
+ }
5254
+ else if ((0, types_1.isInstantiableClass)(typeResult.type) &&
5255
+ !typeResult.type.includeSubclasses &&
5256
+ (0, typeUtils_1.isTupleClass)(typeResult.type)) {
5257
+ typeResult.type = types_1.ClassType.cloneForUnpacked(typeResult.type);
5258
+ }
5259
+ else {
5260
+ addError(localize_1.Localizer.Diagnostic.unpackNotAllowed(), arg.valueExpression);
5261
+ }
5208
5262
  }
5209
5263
  }
5210
5264
  }
@@ -5447,7 +5501,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
5447
5501
  baseTypeResult = getTypeOfLambdaForCall(node, inferenceContext);
5448
5502
  }
5449
5503
  else {
5450
- baseTypeResult = getTypeOfExpression(node.leftExpression, 16777218 /* EvaluatorFlags.CallBaseDefaults */ | (flags & 4 /* EvaluatorFlags.AllowForwardReferences */));
5504
+ baseTypeResult = getTypeOfExpression(node.leftExpression, 2 /* EvaluatorFlags.CallBaseDefaults */ | (flags & 4 /* EvaluatorFlags.AllowForwardReferences */));
5451
5505
  }
5452
5506
  const argList = ParseTreeUtils.getArgumentsByRuntimeOrder(node).map((arg) => {
5453
5507
  const functionArg = {
@@ -5578,7 +5632,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
5578
5632
  }
5579
5633
  }
5580
5634
  function getLambdaType() {
5581
- return getTypeOfExpression(node.leftExpression, 16777218 /* EvaluatorFlags.CallBaseDefaults */, (0, typeUtils_1.makeInferenceContext)(expectedType));
5635
+ return getTypeOfExpression(node.leftExpression, 2 /* EvaluatorFlags.CallBaseDefaults */, (0, typeUtils_1.makeInferenceContext)(expectedType));
5582
5636
  }
5583
5637
  // If one or more of the arguments are incomplete, use speculative mode
5584
5638
  // for the lambda evaluation because it may need to be reevaluated once
@@ -5588,7 +5642,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
5588
5642
  : getLambdaType();
5589
5643
  // If bidirectional type inference failed, use normal type inference instead.
5590
5644
  if (typeResult.typeErrors) {
5591
- typeResult = getTypeOfExpression(node.leftExpression, 16777218 /* EvaluatorFlags.CallBaseDefaults */);
5645
+ typeResult = getTypeOfExpression(node.leftExpression, 2 /* EvaluatorFlags.CallBaseDefaults */);
5592
5646
  }
5593
5647
  return typeResult;
5594
5648
  }
@@ -6360,7 +6414,8 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
6360
6414
  return { returnType: types_1.UnknownType.create(), argumentErrors: true, overloadsUsedForCall };
6361
6415
  }
6362
6416
  recursionCount++;
6363
- if (types_1.TypeBase.isSpecialForm(callTypeResult.type)) {
6417
+ // Special forms are not callable.
6418
+ if (callTypeResult.type.specialForm) {
6364
6419
  const exprNode = errorNode.nodeType === 9 /* ParseNodeType.Call */ ? errorNode.leftExpression : errorNode;
6365
6420
  addDiagnostic(AnalyzerNodeInfo.getFileInfo(errorNode).diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.objectNotCallable().format({
6366
6421
  type: printType(callTypeResult.type, { expandTypeAlias: true }),
@@ -6659,14 +6714,10 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
6659
6714
  if (className === 'NewType') {
6660
6715
  return { returnType: createNewType(errorNode, argList) };
6661
6716
  }
6662
- if (className === 'Protocol' ||
6663
- className === 'Generic' ||
6664
- className === 'Callable' ||
6665
- className === 'Concatenate' ||
6666
- className === 'Type') {
6717
+ if (types_1.ClassType.isSpecialFormClass(expandedCallType)) {
6667
6718
  const fileInfo = AnalyzerNodeInfo.getFileInfo(errorNode);
6668
6719
  addDiagnostic(fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.typeNotIntantiable().format({ type: className }), errorNode);
6669
- return { returnType: types_1.AnyType.create(), argumentErrors: true };
6720
+ return { returnType: types_1.UnknownType.create(), argumentErrors: true };
6670
6721
  }
6671
6722
  if ((0, types_1.isClass)(unexpandedCallType) && (0, enums_1.isKnownEnumType)(className)) {
6672
6723
  return {
@@ -8266,8 +8317,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
8266
8317
  ? 512 /* EvaluatorFlags.AllowMissingTypeArgs */ |
8267
8318
  8 /* EvaluatorFlags.EvaluateStringLiteralAsType */ |
8268
8319
  32 /* EvaluatorFlags.DisallowParamSpec */ |
8269
- 64 /* EvaluatorFlags.DisallowTypeVarTuple */ |
8270
- 16777216 /* EvaluatorFlags.TreatPep695TypeAliasAsObject */
8320
+ 64 /* EvaluatorFlags.DisallowTypeVarTuple */
8271
8321
  : 2 /* EvaluatorFlags.DoNotSpecialize */;
8272
8322
  const exprTypeResult = getTypeOfExpression(argParam.argument.valueExpression, flags, (0, typeUtils_1.makeInferenceContext)(expectedType, !!(typeResult === null || typeResult === void 0 ? void 0 : typeResult.isIncomplete), signatureTracker));
8273
8323
  argType = exprTypeResult.type;
@@ -8386,8 +8436,12 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
8386
8436
  }
8387
8437
  }
8388
8438
  }
8439
+ let assignTypeFlags = skipSolveTypeVars ? 8 /* AssignTypeFlags.SkipSolveTypeVars */ : 0 /* AssignTypeFlags.Default */;
8440
+ if (argParam.isinstanceParam) {
8441
+ assignTypeFlags |= 32768 /* AssignTypeFlags.AllowIsinstanceSpecialForms */;
8442
+ }
8389
8443
  if (!assignType(argParam.paramType, argType, diag.createAddendum(), typeVarContext,
8390
- /* srcTypeVarContext */ undefined, skipSolveTypeVars ? 8 /* AssignTypeFlags.SkipSolveTypeVars */ : undefined)) {
8444
+ /* srcTypeVarContext */ undefined, assignTypeFlags)) {
8391
8445
  // Mismatching parameter types are common in untyped code; don't bother spending time
8392
8446
  // printing types if the diagnostic is disabled.
8393
8447
  const fileInfo = AnalyzerNodeInfo.getFileInfo(argParam.errorNode);
@@ -8746,7 +8800,8 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
8746
8800
  functionType.details.paramSpec = typeResult.type;
8747
8801
  return functionType;
8748
8802
  }
8749
- if ((0, types_1.isClassInstance)(typeResult.type) && types_1.ClassType.isBuiltIn(typeResult.type, 'ellipsis')) {
8803
+ if ((0, types_1.isClassInstance)(typeResult.type) &&
8804
+ types_1.ClassType.isBuiltIn(typeResult.type, ['EllipsisType', 'ellipsis'])) {
8750
8805
  types_1.FunctionType.addDefaultParameters(functionType);
8751
8806
  return functionType;
8752
8807
  }
@@ -8902,17 +8957,14 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
8902
8957
  isBaseClassAny = true;
8903
8958
  }
8904
8959
  if (!(0, types_1.isInstantiableClass)(baseClass)) {
8905
- addError(localize_1.Localizer.Diagnostic.newTypeNotAClass(), argList[1].node || errorNode);
8960
+ addDiagnostic(AnalyzerNodeInfo.getFileInfo(errorNode).diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.newTypeNotAClass(), argList[1].node || errorNode);
8906
8961
  return undefined;
8907
8962
  }
8908
8963
  if (types_1.ClassType.isProtocolClass(baseClass) || types_1.ClassType.isTypedDictClass(baseClass)) {
8909
- addError(localize_1.Localizer.Diagnostic.newTypeProtocolClass(), argList[1].node || errorNode);
8964
+ addDiagnostic(AnalyzerNodeInfo.getFileInfo(errorNode).diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.newTypeProtocolClass(), argList[1].node || errorNode);
8910
8965
  }
8911
8966
  else if (baseClass.literalValue !== undefined) {
8912
- addError(localize_1.Localizer.Diagnostic.newTypeLiteral(), argList[1].node || errorNode);
8913
- }
8914
- else if (types_1.ClassType.isNewTypeClass(baseClass)) {
8915
- addError(localize_1.Localizer.Diagnostic.newTypeNewTypeClass(), argList[1].node || errorNode);
8967
+ addDiagnostic(AnalyzerNodeInfo.getFileInfo(errorNode).diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.newTypeLiteral(), argList[1].node || errorNode);
8916
8968
  }
8917
8969
  let classFlags = baseClass.details.flags & ~(1 /* ClassTypeFlags.BuiltInClass */ | 2 /* ClassTypeFlags.SpecialBuiltIn */);
8918
8970
  classFlags |= 4096 /* ClassTypeFlags.Final */ | 268435456 /* ClassTypeFlags.NewTypeClass */ | 536870912 /* ClassTypeFlags.ValidTypeAliasClass */;
@@ -9846,9 +9898,10 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
9846
9898
  // or the final expression contain an "await" operator anywhere within
9847
9899
  // the expression, it is treated as an async generator.
9848
9900
  let isAsync = node.forIfNodes.some((comp) => {
9849
- return ((comp.nodeType === 33 /* ParseNodeType.ListComprehensionFor */ && comp.isAsync) ||
9850
- (comp.nodeType === 34 /* ParseNodeType.ListComprehensionIf */ &&
9851
- ParseTreeUtils.containsAwaitNode(comp.testExpression)));
9901
+ if (comp.nodeType === 33 /* ParseNodeType.ListComprehensionFor */ && comp.isAsync) {
9902
+ return true;
9903
+ }
9904
+ return ParseTreeUtils.containsAwaitNode(comp);
9852
9905
  });
9853
9906
  let type = types_1.UnknownType.create();
9854
9907
  if (ParseTreeUtils.containsAwaitNode(node.expression)) {
@@ -9863,14 +9916,6 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
9863
9916
  typeErrors = true;
9864
9917
  }
9865
9918
  const elementType = elementTypeResult.type;
9866
- // Handle the special case where a generator function (e.g. `(await x for x in y)`)
9867
- // is expected to be an AsyncGenerator.
9868
- if (!isAsync &&
9869
- inferenceContext &&
9870
- (0, types_1.isClassInstance)(inferenceContext.expectedType) &&
9871
- types_1.ClassType.isBuiltIn(inferenceContext.expectedType, 'AsyncGenerator')) {
9872
- isAsync = true;
9873
- }
9874
9919
  const builtInIteratorType = getTypingType(node, isAsync ? 'AsyncGenerator' : 'Generator');
9875
9920
  if (builtInIteratorType && (0, types_1.isInstantiableClass)(builtInIteratorType)) {
9876
9921
  type = types_1.ClassType.cloneAsInstance(types_1.ClassType.cloneForSpecialization(builtInIteratorType, isAsync ? [elementType, getNoneType()] : [elementType, getNoneType(), getNoneType()],
@@ -10057,9 +10102,9 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
10057
10102
  // to two arguments.The first argument, if present, should be an ellipsis,
10058
10103
  // a ParamSpec, a Concatenate, or a list of positional parameter types.
10059
10104
  // The second argument, if present, should specify the return type.
10060
- function createCallableType(typeArgs, errorNode) {
10105
+ function createCallableType(classType, typeArgs, errorNode) {
10061
10106
  const functionType = types_1.FunctionType.createInstantiable(0 /* FunctionTypeFlags.None */);
10062
- types_1.TypeBase.setSpecialForm(functionType);
10107
+ functionType.specialForm = classType;
10063
10108
  functionType.details.declaredReturnType = types_1.UnknownType.create();
10064
10109
  functionType.details.typeVarScopeId = ParseTreeUtils.getScopeIdForNode(errorNode);
10065
10110
  if (typeArgs && typeArgs.length > 0) {
@@ -10192,9 +10237,9 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
10192
10237
  addExpectedClassDiagnostic(typeArg0Type, typeArgs[0].node);
10193
10238
  typeArg0Type = types_1.UnknownType.create();
10194
10239
  }
10195
- const optionalType = (0, types_1.combineTypes)([typeArg0Type, noneClassType !== null && noneClassType !== void 0 ? noneClassType : types_1.UnknownType.create()]);
10196
- if ((0, types_1.isUnion)(optionalType)) {
10197
- types_1.TypeBase.setSpecialForm(optionalType);
10240
+ let optionalType = (0, types_1.combineTypes)([typeArg0Type, noneClassType !== null && noneClassType !== void 0 ? noneClassType : types_1.UnknownType.create()]);
10241
+ if (unionClassType && (0, types_1.isInstantiableClass)(unionClassType)) {
10242
+ optionalType = types_1.TypeBase.cloneAsSpecialForm(optionalType, unionClassType);
10198
10243
  }
10199
10244
  return optionalType;
10200
10245
  }
@@ -10205,15 +10250,17 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
10205
10250
  }
10206
10251
  return types_1.UnknownType.create();
10207
10252
  }
10208
- function cloneBuiltinClassWithLiteral(node, builtInName, value) {
10253
+ function cloneBuiltinClassWithLiteral(node, literalClassType, builtInName, value) {
10209
10254
  const type = getBuiltInType(node, builtInName);
10210
10255
  if ((0, types_1.isInstantiableClass)(type)) {
10211
- return types_1.ClassType.cloneWithLiteral(type, value);
10256
+ const literalType = types_1.ClassType.cloneWithLiteral(type, value);
10257
+ literalType.specialForm = literalClassType;
10258
+ return literalType;
10212
10259
  }
10213
10260
  return types_1.UnknownType.create();
10214
10261
  }
10215
10262
  // Creates a type that represents a Literal.
10216
- function createLiteralType(node, flags) {
10263
+ function createLiteralType(classType, node, flags) {
10217
10264
  if (node.items.length === 0) {
10218
10265
  addError(localize_1.Localizer.Diagnostic.literalEmptyArgs(), node.baseExpression);
10219
10266
  return types_1.UnknownType.create();
@@ -10236,33 +10283,36 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
10236
10283
  const isBytes = (itemExpr.strings[0].token.flags & 32 /* StringTokenFlags.Bytes */) !== 0;
10237
10284
  const value = itemExpr.strings.map((s) => s.value).join('');
10238
10285
  if (isBytes) {
10239
- type = cloneBuiltinClassWithLiteral(node, 'bytes', value);
10286
+ type = cloneBuiltinClassWithLiteral(node, classType, 'bytes', value);
10240
10287
  }
10241
10288
  else {
10242
- type = cloneBuiltinClassWithLiteral(node, 'str', value);
10289
+ type = cloneBuiltinClassWithLiteral(node, classType, 'str', value);
10243
10290
  }
10244
10291
  }
10245
10292
  else if (itemExpr.nodeType === 40 /* ParseNodeType.Number */) {
10246
10293
  if (!itemExpr.isImaginary && itemExpr.isInteger) {
10247
- type = cloneBuiltinClassWithLiteral(node, 'int', itemExpr.value);
10294
+ type = cloneBuiltinClassWithLiteral(node, classType, 'int', itemExpr.value);
10248
10295
  }
10249
10296
  }
10250
10297
  else if (itemExpr.nodeType === 11 /* ParseNodeType.Constant */) {
10251
10298
  if (itemExpr.constType === 33 /* KeywordType.True */) {
10252
- type = cloneBuiltinClassWithLiteral(node, 'bool', true);
10299
+ type = cloneBuiltinClassWithLiteral(node, classType, 'bool', true);
10253
10300
  }
10254
10301
  else if (itemExpr.constType === 15 /* KeywordType.False */) {
10255
- type = cloneBuiltinClassWithLiteral(node, 'bool', false);
10302
+ type = cloneBuiltinClassWithLiteral(node, classType, 'bool', false);
10256
10303
  }
10257
10304
  else if (itemExpr.constType === 26 /* KeywordType.None */) {
10258
10305
  type = noneClassType !== null && noneClassType !== void 0 ? noneClassType : types_1.UnknownType.create();
10259
10306
  }
10260
10307
  }
10261
- else if (itemExpr.nodeType === 55 /* ParseNodeType.UnaryOperation */ &&
10262
- itemExpr.operator === 33 /* OperatorType.Subtract */) {
10263
- if (itemExpr.expression.nodeType === 40 /* ParseNodeType.Number */) {
10264
- if (!itemExpr.expression.isImaginary && itemExpr.expression.isInteger) {
10265
- type = cloneBuiltinClassWithLiteral(node, 'int', -itemExpr.expression.value);
10308
+ else if (itemExpr.nodeType === 55 /* ParseNodeType.UnaryOperation */) {
10309
+ if (itemExpr.operator === 33 /* OperatorType.Subtract */ || itemExpr.operator === 0 /* OperatorType.Add */) {
10310
+ if (itemExpr.expression.nodeType === 40 /* ParseNodeType.Number */) {
10311
+ if (!itemExpr.expression.isImaginary && itemExpr.expression.isInteger) {
10312
+ type = cloneBuiltinClassWithLiteral(node, classType, 'int', itemExpr.operator === 33 /* OperatorType.Subtract */
10313
+ ? -itemExpr.expression.value
10314
+ : itemExpr.expression.value);
10315
+ }
10266
10316
  }
10267
10317
  }
10268
10318
  }
@@ -10561,7 +10611,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
10561
10611
  // Creates one of several "special" types that are defined in typing.pyi
10562
10612
  // but not declared in their entirety. This includes the likes of "Tuple",
10563
10613
  // "Dict", etc.
10564
- function createSpecialType(classType, typeArgs, paramLimit, allowParamSpec = false, isCallable = false) {
10614
+ function createSpecialType(classType, typeArgs, paramLimit, allowParamSpec = false, isSpecialForm = true) {
10565
10615
  const isTupleTypeParam = types_1.ClassType.isTupleClass(classType);
10566
10616
  if (typeArgs) {
10567
10617
  if (isTupleTypeParam && typeArgs.length === 1 && typeArgs[0].isEmptyTupleShorthand) {
@@ -10665,8 +10715,8 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
10665
10715
  else {
10666
10716
  returnType = types_1.ClassType.cloneForSpecialization(classType, typeArgTypes, typeArgs !== undefined);
10667
10717
  }
10668
- if (!isCallable) {
10669
- types_1.TypeBase.setSpecialForm(returnType);
10718
+ if (isSpecialForm) {
10719
+ returnType = types_1.TypeBase.cloneAsSpecialForm(returnType, classType);
10670
10720
  }
10671
10721
  return returnType;
10672
10722
  }
@@ -10729,9 +10779,9 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
10729
10779
  if (types.length === 1 && !allowSingleTypeArg && !(0, typeUtils_1.isNoneInstance)(types[0])) {
10730
10780
  addDiagnostic(fileInfo.diagnosticRuleSet.reportGeneralTypeIssues, diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.Localizer.Diagnostic.unionTypeArgCount(), errorNode);
10731
10781
  }
10732
- const unionType = (0, types_1.combineTypes)(types);
10733
- if ((0, types_1.isUnion)(unionType)) {
10734
- types_1.TypeBase.setSpecialForm(unionType);
10782
+ let unionType = (0, types_1.combineTypes)(types);
10783
+ if (unionClassType && (0, types_1.isInstantiableClass)(unionClassType)) {
10784
+ unionType = types_1.TypeBase.cloneAsSpecialForm(unionType, unionClassType);
10735
10785
  }
10736
10786
  return unionType;
10737
10787
  }
@@ -10822,11 +10872,14 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
10822
10872
  }
10823
10873
  }
10824
10874
  const fileInfo = AnalyzerNodeInfo.getFileInfo(name);
10825
- const typeAlias = types_1.TypeBase.cloneForTypeAlias(type, name.value, ParseTreeUtils.getClassFullName(name, fileInfo.moduleName, name.value), fileInfo.moduleName, fileInfo.fileUri, typeAliasScopeId, isPep695Syntax, typeParameters.length > 0 ? typeParameters : undefined);
10875
+ let typeAlias = types_1.TypeBase.cloneForTypeAlias(type, name.value, ParseTreeUtils.getClassFullName(name, fileInfo.moduleName, name.value), fileInfo.moduleName, fileInfo.fileUri, typeAliasScopeId, isPep695Syntax, typeParameters.length > 0 ? typeParameters : undefined);
10826
10876
  // All PEP 695 type aliases are special forms because they are
10827
10877
  // TypeAliasType objects at runtime.
10828
10878
  if (isPep695Syntax || isPep695TypeVarType) {
10829
- typeAlias.flags |= 8 /* TypeFlags.SpecialForm */;
10879
+ const typeAliasTypeClass = getTypingType(errorNode, 'TypeAliasType');
10880
+ if (typeAliasTypeClass && (0, types_1.isInstantiableClass)(typeAliasTypeClass)) {
10881
+ typeAlias = types_1.TypeBase.cloneAsSpecialForm(typeAlias, typeAliasTypeClass);
10882
+ }
10830
10883
  }
10831
10884
  return typeAlias;
10832
10885
  }
@@ -10837,6 +10890,9 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
10837
10890
  /* typeSourceId */ 0,
10838
10891
  /* declaredMetaclass */ undefined,
10839
10892
  /* effectiveMetaclass */ undefined);
10893
+ if (aliasMapEntry.isSpecialForm) {
10894
+ specialClassType.details.flags |= 1073741824 /* ClassTypeFlags.SpecialFormClass */;
10895
+ }
10840
10896
  const specialBuiltInClassDeclaration = ((_a = AnalyzerNodeInfo.getDeclaration(node)) !== null && _a !== void 0 ? _a : (node.parent ? AnalyzerNodeInfo.getDeclaration(node.parent) : undefined));
10841
10897
  specialClassType.details.declaration = specialBuiltInClassDeclaration;
10842
10898
  if (fileInfo.isTypingExtensionsStubFile) {
@@ -10894,28 +10950,28 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
10894
10950
  const assignedName = nameNode.value;
10895
10951
  const specialTypes = new Map([
10896
10952
  ['Tuple', { alias: 'tuple', module: 'builtins' }],
10897
- ['Generic', { alias: '', module: 'builtins' }],
10898
- ['Protocol', { alias: '', module: 'builtins' }],
10899
- ['Callable', { alias: '', module: 'builtins' }],
10953
+ ['Generic', { alias: '', module: 'builtins', isSpecialForm: true }],
10954
+ ['Protocol', { alias: '', module: 'builtins', isSpecialForm: true }],
10955
+ ['Callable', { alias: '', module: 'builtins', isSpecialForm: true }],
10900
10956
  ['Type', { alias: 'type', module: 'builtins' }],
10901
- ['ClassVar', { alias: '', module: 'builtins' }],
10902
- ['Final', { alias: '', module: 'builtins' }],
10903
- ['Literal', { alias: '', module: 'builtins' }],
10957
+ ['ClassVar', { alias: '', module: 'builtins', isSpecialForm: true }],
10958
+ ['Final', { alias: '', module: 'builtins', isSpecialForm: true }],
10959
+ ['Literal', { alias: '', module: 'builtins', isSpecialForm: true }],
10904
10960
  ['TypedDict', { alias: '_TypedDict', module: 'self' }],
10905
- ['Union', { alias: '', module: 'builtins' }],
10906
- ['Optional', { alias: '', module: 'builtins' }],
10907
- ['Annotated', { alias: '', module: 'builtins' }],
10908
- ['TypeAlias', { alias: '', module: 'builtins' }],
10909
- ['Concatenate', { alias: '', module: 'builtins' }],
10910
- ['TypeGuard', { alias: '', module: 'builtins' }],
10911
- ['Unpack', { alias: '', module: 'builtins' }],
10912
- ['Required', { alias: '', module: 'builtins' }],
10913
- ['NotRequired', { alias: '', module: 'builtins' }],
10914
- ['Self', { alias: '', module: 'builtins' }],
10915
- ['NoReturn', { alias: '', module: 'builtins' }],
10916
- ['Never', { alias: '', module: 'builtins' }],
10917
- ['LiteralString', { alias: '', module: 'builtins' }],
10918
- ['ReadOnly', { alias: '', module: 'builtins' }],
10961
+ ['Union', { alias: '', module: 'builtins', isSpecialForm: true }],
10962
+ ['Optional', { alias: '', module: 'builtins', isSpecialForm: true }],
10963
+ ['Annotated', { alias: '', module: 'builtins', isSpecialForm: true }],
10964
+ ['TypeAlias', { alias: '', module: 'builtins', isSpecialForm: true }],
10965
+ ['Concatenate', { alias: '', module: 'builtins', isSpecialForm: true }],
10966
+ ['TypeGuard', { alias: '', module: 'builtins', isSpecialForm: true }],
10967
+ ['Unpack', { alias: '', module: 'builtins', isSpecialForm: true }],
10968
+ ['Required', { alias: '', module: 'builtins', isSpecialForm: true }],
10969
+ ['NotRequired', { alias: '', module: 'builtins', isSpecialForm: true }],
10970
+ ['Self', { alias: '', module: 'builtins', isSpecialForm: true }],
10971
+ ['NoReturn', { alias: '', module: 'builtins', isSpecialForm: true }],
10972
+ ['Never', { alias: '', module: 'builtins', isSpecialForm: true }],
10973
+ ['LiteralString', { alias: '', module: 'builtins', isSpecialForm: true }],
10974
+ ['ReadOnly', { alias: '', module: 'builtins', isSpecialForm: true }],
10919
10975
  ]);
10920
10976
  const aliasMapEntry = specialTypes.get(assignedName);
10921
10977
  if (aliasMapEntry) {
@@ -11127,7 +11183,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
11127
11183
  callLeftNode.leftExpression.nodeType === 38 /* ParseNodeType.Name */)) {
11128
11184
  // See if this is a call to TypedDict. We want to support
11129
11185
  // recursive type references in a TypedDict call.
11130
- const callType = getTypeOfExpression(callLeftNode, 16777218 /* EvaluatorFlags.CallBaseDefaults */).type;
11186
+ const callType = getTypeOfExpression(callLeftNode, 2 /* EvaluatorFlags.CallBaseDefaults */).type;
11131
11187
  if ((0, types_1.isInstantiableClass)(callType) && types_1.ClassType.isBuiltIn(callType, 'TypedDict')) {
11132
11188
  return true;
11133
11189
  }
@@ -11289,8 +11345,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
11289
11345
  262144 /* EvaluatorFlags.DisallowNakedGeneric */ |
11290
11346
  2048 /* EvaluatorFlags.DisallowTypeVarsWithScopeId */ |
11291
11347
  8192 /* EvaluatorFlags.AssociateTypeVarsWithCurrentScope */ |
11292
- 16384 /* EvaluatorFlags.EnforceTypeVarVarianceConsistency */ |
11293
- 16777216 /* EvaluatorFlags.TreatPep695TypeAliasAsObject */;
11348
+ 16384 /* EvaluatorFlags.EnforceTypeVarVarianceConsistency */;
11294
11349
  if (fileInfo.isStubFile) {
11295
11350
  exprFlags |= 4 /* EvaluatorFlags.AllowForwardReferences */;
11296
11351
  }
@@ -11319,7 +11374,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
11319
11374
  }
11320
11375
  // Any is allowed as a base class. Remove its "special form" flag to avoid
11321
11376
  // false positive errors.
11322
- if ((0, types_1.isAny)(argType) && types_1.TypeBase.isSpecialForm(argType)) {
11377
+ if ((0, types_1.isAny)(argType) && argType.specialForm) {
11323
11378
  argType = types_1.AnyType.create();
11324
11379
  }
11325
11380
  if (!(0, types_1.isAnyOrUnknown)(argType) && !(0, types_1.isUnbound)(argType)) {
@@ -11374,6 +11429,12 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
11374
11429
  addError(localize_1.Localizer.Diagnostic.baseClassCircular(), arg);
11375
11430
  argType = types_1.UnknownType.create();
11376
11431
  }
11432
+ // If the class is attempting to derive from a TypeAliasType,
11433
+ // generate an error.
11434
+ if (argType.specialForm && types_1.ClassType.isBuiltIn(argType.specialForm, 'TypeAliasType')) {
11435
+ addError(localize_1.Localizer.Diagnostic.typeAliasTypeBaseClass(), arg);
11436
+ argType = types_1.UnknownType.create();
11437
+ }
11377
11438
  }
11378
11439
  }
11379
11440
  if ((0, types_1.isUnknown)(argType)) {
@@ -13443,7 +13504,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
13443
13504
  nodeToEvaluate = parent;
13444
13505
  continue;
13445
13506
  }
13446
- flags = 16777218 /* EvaluatorFlags.CallBaseDefaults */;
13507
+ flags = 2 /* EvaluatorFlags.CallBaseDefaults */;
13447
13508
  break;
13448
13509
  }
13449
13510
  }
@@ -13791,7 +13852,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
13791
13852
  const aliasedName = classType.aliasName || classType.details.name;
13792
13853
  switch (aliasedName) {
13793
13854
  case 'Callable': {
13794
- return { type: createCallableType(typeArgs, errorNode) };
13855
+ return { type: createCallableType(classType, typeArgs, errorNode) };
13795
13856
  }
13796
13857
  case 'Never': {
13797
13858
  if (typeArgs && typeArgs.length > 0) {
@@ -13809,7 +13870,9 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
13809
13870
  return { type: createOptionalType(classType, errorNode, typeArgs, flags) };
13810
13871
  }
13811
13872
  case 'Type': {
13812
- let typeType = createSpecialType(classType, typeArgs, 1);
13873
+ let typeType = createSpecialType(classType, typeArgs, 1,
13874
+ /* allowParamSpec */ undefined,
13875
+ /* isSpecialForm */ false);
13813
13876
  if ((0, types_1.isInstantiableClass)(typeType)) {
13814
13877
  typeType = (0, typeUtils_1.explodeGenericClass)(typeType);
13815
13878
  }
@@ -13847,7 +13910,12 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
13847
13910
  break;
13848
13911
  }
13849
13912
  case 'Tuple': {
13850
- return { type: createSpecialType(classType, typeArgs, /* paramLimit */ undefined) };
13913
+ return {
13914
+ type: createSpecialType(classType, typeArgs,
13915
+ /* paramLimit */ undefined,
13916
+ /* allowParamSpec */ false,
13917
+ /* isSpecialForm */ false),
13918
+ };
13851
13919
  }
13852
13920
  case 'Union': {
13853
13921
  return { type: createUnionType(classType, errorNode, typeArgs, flags) };
@@ -13906,7 +13974,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
13906
13974
  if (typeClassType && (0, types_1.isInstantiableClass)(typeClassType)) {
13907
13975
  let typeType = createSpecialType(typeClassType, typeArgs, 1,
13908
13976
  /* allowParamSpec */ undefined,
13909
- /* isCallable */ true);
13977
+ /* isSpecialForm */ false);
13910
13978
  if ((0, types_1.isInstantiableClass)(typeType)) {
13911
13979
  typeType = (0, typeUtils_1.explodeGenericClass)(typeType);
13912
13980
  }
@@ -13920,7 +13988,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
13920
13988
  type: createSpecialType(classType, typeArgs,
13921
13989
  /* paramLimit */ undefined,
13922
13990
  /* allowParamSpec */ undefined,
13923
- /* isCallable */ true),
13991
+ /* isSpecialForm */ false),
13924
13992
  };
13925
13993
  }
13926
13994
  }
@@ -14918,7 +14986,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
14918
14986
  }
14919
14987
  // Special-case calls to certain built-in type functions.
14920
14988
  if (((_a = resolvedDecl.inferredTypeSource) === null || _a === void 0 ? void 0 : _a.nodeType) === 9 /* ParseNodeType.Call */) {
14921
- const baseTypeResult = getTypeOfExpression(resolvedDecl.inferredTypeSource.leftExpression, 16777218 /* EvaluatorFlags.CallBaseDefaults */);
14989
+ const baseTypeResult = getTypeOfExpression(resolvedDecl.inferredTypeSource.leftExpression, 2 /* EvaluatorFlags.CallBaseDefaults */);
14922
14990
  const callType = baseTypeResult.type;
14923
14991
  const exemptBuiltins = [
14924
14992
  'TypeVar',
@@ -16205,6 +16273,21 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
16205
16273
  if (destType === srcType && !(0, typeUtils_1.requiresSpecialization)(destType)) {
16206
16274
  return true;
16207
16275
  }
16276
+ // If the source type is a special form, use the literal special form
16277
+ // class rather than the symbolic form.
16278
+ if (srcType.specialForm) {
16279
+ let isSpecialFormExempt = false;
16280
+ // A few special forms that are normally not compatible with type[T]
16281
+ // are compatible specifically in the context of isinstance and issubclass.
16282
+ if ((flags & 32768 /* AssignTypeFlags.AllowIsinstanceSpecialForms */) !== 0) {
16283
+ if (types_1.ClassType.isBuiltIn(srcType.specialForm, ['Callable', 'UnionType', 'Generic'])) {
16284
+ isSpecialFormExempt = true;
16285
+ }
16286
+ }
16287
+ if (!isSpecialFormExempt) {
16288
+ srcType = srcType.specialForm;
16289
+ }
16290
+ }
16208
16291
  if (recursionCount > types_1.maxTypeRecursionCount) {
16209
16292
  return true;
16210
16293
  }
@@ -16402,7 +16485,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
16402
16485
  if ((0, types_1.isAnyOrUnknown)(destType)) {
16403
16486
  return true;
16404
16487
  }
16405
- if ((0, types_1.isAnyOrUnknown)(srcType) && !types_1.TypeBase.isSpecialForm(srcType)) {
16488
+ if ((0, types_1.isAnyOrUnknown)(srcType) && !srcType.specialForm) {
16406
16489
  const targetTypeVarContext = (flags & 2 /* AssignTypeFlags.ReverseTypeVarMatching */) === 0 ? destTypeVarContext : srcTypeVarContext;
16407
16490
  if (targetTypeVarContext) {
16408
16491
  // If it's an ellipsis type, convert it to a regular "Any"
@@ -16507,8 +16590,9 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
16507
16590
  return false;
16508
16591
  }
16509
16592
  }
16510
- if (assignClass(destType, expandedSrcType, diag, destTypeVarContext, srcTypeVarContext, flags, recursionCount,
16511
- /* reportErrorsUsingObjType */ false)) {
16593
+ if (!isSpecialFormClass(expandedSrcType, flags) &&
16594
+ assignClass(destType, expandedSrcType, diag, destTypeVarContext, srcTypeVarContext, flags, recursionCount,
16595
+ /* reportErrorsUsingObjType */ false)) {
16512
16596
  return true;
16513
16597
  }
16514
16598
  diag === null || diag === void 0 ? void 0 : diag.addMessage(localize_1.Localizer.DiagnosticAddendum.typeAssignmentMismatch().format(printSrcDestTypes(srcType, destType)));
@@ -16530,6 +16614,9 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
16530
16614
  }
16531
16615
  if ((0, types_1.isClassInstance)(destType)) {
16532
16616
  if (types_1.ClassType.isBuiltIn(destType, 'type')) {
16617
+ if ((0, types_1.isInstantiableClass)(srcType) && isSpecialFormClass(srcType, flags)) {
16618
+ return false;
16619
+ }
16533
16620
  if ((0, types_1.isAnyOrUnknown)(srcType) && (flags & 16 /* AssignTypeFlags.OverloadOverlapCheck */) !== 0) {
16534
16621
  return false;
16535
16622
  }
@@ -16631,7 +16718,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
16631
16718
  }
16632
16719
  }
16633
16720
  }
16634
- else if ((0, types_1.isAnyOrUnknown)(concreteSrcType) && !types_1.TypeBase.isSpecialForm(concreteSrcType)) {
16721
+ else if ((0, types_1.isAnyOrUnknown)(concreteSrcType) && !concreteSrcType.specialForm) {
16635
16722
  return (flags & 16 /* AssignTypeFlags.OverloadOverlapCheck */) === 0;
16636
16723
  }
16637
16724
  else if ((0, types_1.isUnion)(concreteSrcType)) {
@@ -16932,6 +17019,12 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
16932
17019
  }
16933
17020
  return true;
16934
17021
  }
17022
+ function isSpecialFormClass(classType, flags) {
17023
+ if ((flags & 32768 /* AssignTypeFlags.AllowIsinstanceSpecialForms */) !== 0) {
17024
+ return false;
17025
+ }
17026
+ return types_1.ClassType.isSpecialFormClass(classType);
17027
+ }
16935
17028
  // Determines whether a type is "subsumed by" (i.e. is a proper subtype of) one
16936
17029
  // of the other type.
16937
17030
  function isTypeSubsumedByOtherType(type, otherType, allowAnyToSubsume, recursionCount = 0) {
@@ -18697,6 +18790,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
18697
18790
  isNodeReachable,
18698
18791
  isAsymmetricAccessorAssignment,
18699
18792
  suppressDiagnostics,
18793
+ isSpecialFormClass,
18700
18794
  getDeclarationsForStringNode,
18701
18795
  getDeclarationsForNameNode,
18702
18796
  getTypeForDeclaration,
@@ -18739,6 +18833,7 @@ function createTypeEvaluator(importLookup, evaluatorOptions) {
18739
18833
  getTupleClassType,
18740
18834
  getObjectType,
18741
18835
  getNoneType,
18836
+ getUnionClassType,
18742
18837
  getBuiltInObject,
18743
18838
  getTypingType,
18744
18839
  assignTypeArguments,