@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.
- package/dist/analyzer/checker.d.ts +2 -0
- package/dist/analyzer/checker.js +64 -14
- package/dist/analyzer/checker.js.map +1 -1
- package/dist/analyzer/codeFlowEngine.js +2 -2
- package/dist/analyzer/codeFlowEngine.js.map +1 -1
- package/dist/analyzer/constraintSolver.js +6 -0
- package/dist/analyzer/constraintSolver.js.map +1 -1
- package/dist/analyzer/dataClasses.js +2 -2
- package/dist/analyzer/dataClasses.js.map +1 -1
- package/dist/analyzer/decorators.js +9 -9
- package/dist/analyzer/decorators.js.map +1 -1
- package/dist/analyzer/importResolver.d.ts +2 -2
- package/dist/analyzer/importResolver.js +93 -24
- package/dist/analyzer/importResolver.js.map +1 -1
- package/dist/analyzer/operations.js +4 -3
- package/dist/analyzer/operations.js.map +1 -1
- package/dist/analyzer/parseTreeUtils.js +37 -0
- package/dist/analyzer/parseTreeUtils.js.map +1 -1
- package/dist/analyzer/patternMatching.js +4 -4
- package/dist/analyzer/patternMatching.js.map +1 -1
- package/dist/analyzer/program.js +1 -1
- package/dist/analyzer/program.js.map +1 -1
- package/dist/analyzer/protocols.js +27 -20
- package/dist/analyzer/protocols.js.map +1 -1
- package/dist/analyzer/service.d.ts +1 -1
- package/dist/analyzer/service.js +7 -6
- package/dist/analyzer/service.js.map +1 -1
- package/dist/analyzer/sourceFile.d.ts +2 -2
- package/dist/analyzer/sourceFile.js +5 -5
- package/dist/analyzer/sourceFile.js.map +1 -1
- package/dist/analyzer/sourceFileInfoUtils.js +1 -1
- package/dist/analyzer/sourceFileInfoUtils.js.map +1 -1
- package/dist/analyzer/typeEvaluator.js +228 -133
- package/dist/analyzer/typeEvaluator.js.map +1 -1
- package/dist/analyzer/typeEvaluatorTypes.d.ts +4 -3
- package/dist/analyzer/typeEvaluatorTypes.js +2 -4
- package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
- package/dist/analyzer/typeGuards.js +14 -9
- package/dist/analyzer/typeGuards.js.map +1 -1
- package/dist/analyzer/typeUtils.d.ts +2 -1
- package/dist/analyzer/typeUtils.js +13 -0
- package/dist/analyzer/typeUtils.js.map +1 -1
- package/dist/analyzer/types.d.ts +9 -5
- package/dist/analyzer/types.js +38 -23
- package/dist/analyzer/types.js.map +1 -1
- package/dist/backgroundAnalysisBase.d.ts +12 -11
- package/dist/backgroundAnalysisBase.js +60 -64
- package/dist/backgroundAnalysisBase.js.map +1 -1
- package/dist/backgroundThreadBase.d.ts +6 -5
- package/dist/backgroundThreadBase.js +63 -60
- package/dist/backgroundThreadBase.js.map +1 -1
- package/dist/commands/quickActionCommand.js +1 -1
- package/dist/commands/quickActionCommand.js.map +1 -1
- package/dist/common/cancellationUtils.d.ts +6 -3
- package/dist/common/cancellationUtils.js +29 -5
- package/dist/common/cancellationUtils.js.map +1 -1
- package/dist/common/commandUtils.d.ts +2 -0
- package/dist/common/commandUtils.js +24 -0
- package/dist/common/commandUtils.js.map +1 -0
- package/dist/common/extensibility.d.ts +7 -6
- package/dist/common/extensibility.js.map +1 -1
- package/dist/common/fileBasedCancellationUtils.js +19 -13
- package/dist/common/fileBasedCancellationUtils.js.map +1 -1
- package/dist/common/fullAccessHost.d.ts +1 -1
- package/dist/common/fullAccessHost.js +2 -2
- package/dist/common/fullAccessHost.js.map +1 -1
- package/dist/common/host.d.ts +2 -2
- package/dist/common/host.js.map +1 -1
- package/dist/common/realFileSystem.js +8 -8
- package/dist/common/realFileSystem.js.map +1 -1
- package/dist/common/serviceProvider.js +8 -1
- package/dist/common/serviceProvider.js.map +1 -1
- package/dist/common/uri/baseUri.d.ts +4 -1
- package/dist/common/uri/baseUri.js +7 -1
- package/dist/common/uri/baseUri.js.map +1 -1
- package/dist/common/uri/emptyUri.d.ts +3 -0
- package/dist/common/uri/emptyUri.js +9 -0
- package/dist/common/uri/emptyUri.js.map +1 -1
- package/dist/common/uri/fileUri.d.ts +2 -0
- package/dist/common/uri/fileUri.js +6 -0
- package/dist/common/uri/fileUri.js.map +1 -1
- package/dist/common/uri/memoization.js +1 -1
- package/dist/common/uri/memoization.js.map +1 -1
- package/dist/common/uri/uri.d.ts +4 -1
- package/dist/common/uri/uri.js +5 -2
- package/dist/common/uri/uri.js.map +1 -1
- package/dist/common/uri/uriUtils.d.ts +2 -0
- package/dist/common/uri/uriUtils.js +18 -1
- package/dist/common/uri/uriUtils.js.map +1 -1
- package/dist/common/uri/webUri.d.ts +2 -0
- package/dist/common/uri/webUri.js +7 -1
- package/dist/common/uri/webUri.js.map +1 -1
- package/dist/common/workspaceEditUtils.d.ts +6 -5
- package/dist/common/workspaceEditUtils.js +18 -17
- package/dist/common/workspaceEditUtils.js.map +1 -1
- package/dist/languageServerBase.d.ts +1 -0
- package/dist/languageServerBase.js +28 -25
- package/dist/languageServerBase.js.map +1 -1
- package/dist/languageService/analyzerServiceExecutor.d.ts +1 -2
- package/dist/languageService/analyzerServiceExecutor.js +6 -5
- package/dist/languageService/analyzerServiceExecutor.js.map +1 -1
- package/dist/languageService/autoImporter.js +3 -3
- package/dist/languageService/autoImporter.js.map +1 -1
- package/dist/languageService/callHierarchyProvider.js +9 -7
- package/dist/languageService/callHierarchyProvider.js.map +1 -1
- package/dist/languageService/codeActionProvider.js +3 -2
- package/dist/languageService/codeActionProvider.js.map +1 -1
- package/dist/languageService/completionProvider.d.ts +2 -4
- package/dist/languageService/completionProvider.js +14 -18
- package/dist/languageService/completionProvider.js.map +1 -1
- package/dist/languageService/documentSymbolProvider.js +5 -4
- package/dist/languageService/documentSymbolProvider.js.map +1 -1
- package/dist/languageService/navigationUtils.js +2 -1
- package/dist/languageService/navigationUtils.js.map +1 -1
- package/dist/languageService/renameProvider.js +2 -2
- package/dist/languageService/renameProvider.js.map +1 -1
- package/dist/languageService/workspaceSymbolProvider.js +2 -1
- package/dist/languageService/workspaceSymbolProvider.js.map +1 -1
- package/dist/localization/localize.d.ts +5 -4
- package/dist/localization/localize.js +3 -2
- package/dist/localization/localize.js.map +1 -1
- package/dist/localization/package.nls.cs.json +19 -4
- package/dist/localization/package.nls.de.json +19 -4
- package/dist/localization/package.nls.en-us.json +3 -2
- package/dist/localization/package.nls.es.json +19 -4
- package/dist/localization/package.nls.fr.json +18 -3
- package/dist/localization/package.nls.it.json +19 -4
- package/dist/localization/package.nls.ja.json +19 -4
- package/dist/localization/package.nls.ko.json +19 -4
- package/dist/localization/package.nls.pl.json +19 -4
- package/dist/localization/package.nls.pt-br.json +19 -4
- package/dist/localization/package.nls.qps-ploc.json +19 -4
- package/dist/localization/package.nls.ru.json +18 -3
- package/dist/localization/package.nls.tr.json +19 -4
- package/dist/localization/package.nls.zh-cn.json +19 -4
- package/dist/localization/package.nls.zh-tw.json +19 -4
- package/dist/parser/parser.d.ts +0 -3
- package/dist/parser/parser.js.map +1 -1
- package/dist/parser/tokenizer.d.ts +2 -4
- package/dist/parser/tokenizer.js +5 -6
- package/dist/parser/tokenizer.js.map +1 -1
- package/dist/parser/tokenizerTypes.d.ts +2 -2
- package/dist/parser/tokenizerTypes.js.map +1 -1
- package/dist/pyright.js +3 -3
- package/dist/pyright.js.map +1 -1
- package/dist/tests/chainedSourceFiles.test.js +8 -8
- package/dist/tests/chainedSourceFiles.test.js.map +1 -1
- package/dist/tests/completions.test.js +3 -3
- package/dist/tests/completions.test.js.map +1 -1
- package/dist/tests/config.test.js +10 -2
- package/dist/tests/config.test.js.map +1 -1
- package/dist/tests/filesystem.test.js +4 -4
- package/dist/tests/filesystem.test.js.map +1 -1
- package/dist/tests/fourSlashParser.test.js +22 -8
- package/dist/tests/fourSlashParser.test.js.map +1 -1
- package/dist/tests/fourslash/rename.multipleDecl.fourslash.d.ts +1 -1
- package/dist/tests/harness/fourslash/fourSlashParser.js +4 -0
- package/dist/tests/harness/fourslash/fourSlashParser.js.map +1 -1
- package/dist/tests/harness/fourslash/fourSlashTypes.d.ts +3 -0
- package/dist/tests/harness/fourslash/fourSlashTypes.js.map +1 -1
- package/dist/tests/harness/fourslash/testState.d.ts +13 -0
- package/dist/tests/harness/fourslash/testState.js +13 -8
- package/dist/tests/harness/fourslash/testState.js.map +1 -1
- package/dist/tests/harness/vfs/factory.d.ts +1 -1
- package/dist/tests/harness/vfs/factory.js +4 -4
- package/dist/tests/harness/vfs/factory.js.map +1 -1
- package/dist/tests/importStatementUtils.test.js +1 -1
- package/dist/tests/importStatementUtils.test.js.map +1 -1
- package/dist/tests/ipythonMode.test.js +11 -12
- package/dist/tests/ipythonMode.test.js.map +1 -1
- package/dist/tests/serialization.test.d.ts +2 -0
- package/dist/tests/serialization.test.js +88 -0
- package/dist/tests/serialization.test.js.map +1 -0
- package/dist/tests/service.test.js +1 -1
- package/dist/tests/service.test.js.map +1 -1
- package/dist/tests/signatureHelp.test.js +2 -3
- package/dist/tests/signatureHelp.test.js.map +1 -1
- package/dist/tests/sourceFile.test.js +3 -3
- package/dist/tests/sourceFile.test.js.map +1 -1
- package/dist/tests/sourceMapperUtils.test.js +2 -2
- package/dist/tests/sourceMapperUtils.test.js.map +1 -1
- package/dist/tests/testState.test.js +1 -1
- package/dist/tests/testState.test.js.map +1 -1
- package/dist/tests/testStateUtils.js +2 -2
- package/dist/tests/testStateUtils.js.map +1 -1
- package/dist/tests/textEditUtil.test.js +1 -2
- package/dist/tests/textEditUtil.test.js.map +1 -1
- package/dist/tests/typeEvaluator1.test.js +12 -0
- package/dist/tests/typeEvaluator1.test.js.map +1 -1
- package/dist/tests/typeEvaluator2.test.js +6 -6
- package/dist/tests/typeEvaluator2.test.js.map +1 -1
- package/dist/tests/typeEvaluator3.test.js +6 -0
- package/dist/tests/typeEvaluator3.test.js.map +1 -1
- package/dist/tests/typeEvaluator4.test.js +4 -4
- package/dist/tests/typeEvaluator4.test.js.map +1 -1
- package/dist/tests/uri.test.js +30 -7
- package/dist/tests/uri.test.js.map +1 -1
- package/dist/tests/workspaceEditUtils.test.js +8 -8
- package/dist/tests/workspaceEditUtils.test.js.map +1 -1
- package/dist/workspaceFactory.js +1 -1
- package/dist/workspaceFactory.js.map +1 -1
- 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')
|
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,
|
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,
|
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,
|
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,
|
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 =
|
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
|
-
|
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
|
-
|
3497
|
-
|
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
|
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
|
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
|
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
|
5199
|
-
|
5200
|
-
|
5201
|
-
|
5202
|
-
|
5203
|
-
|
5204
|
-
|
5205
|
-
|
5206
|
-
|
5207
|
-
|
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,
|
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,
|
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,
|
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
|
-
|
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 (
|
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.
|
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,
|
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) &&
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
9850
|
-
|
9851
|
-
|
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
|
-
|
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
|
-
|
10196
|
-
if ((0, types_1.
|
10197
|
-
types_1.TypeBase.
|
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
|
-
|
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
|
-
|
10264
|
-
|
10265
|
-
|
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,
|
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 (
|
10669
|
-
types_1.TypeBase.
|
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
|
-
|
10733
|
-
if ((0, types_1.
|
10734
|
-
types_1.TypeBase.
|
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
|
-
|
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
|
-
|
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,
|
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) &&
|
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 =
|
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 {
|
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
|
-
/*
|
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
|
-
/*
|
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,
|
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) && !
|
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 (
|
16511
|
-
|
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) && !
|
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,
|