@zzzen/pyright-internal 1.2.0-dev.20240623 → 1.2.0-dev.20240707
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/binder.js +1 -1
- package/dist/analyzer/binder.js.map +1 -1
- package/dist/analyzer/checker.js +85 -71
- package/dist/analyzer/checker.js.map +1 -1
- package/dist/analyzer/codeFlowEngine.js +58 -23
- package/dist/analyzer/codeFlowEngine.js.map +1 -1
- package/dist/analyzer/constraintSolver.d.ts +1 -1
- package/dist/analyzer/constraintSolver.js +3 -3
- package/dist/analyzer/constraintSolver.js.map +1 -1
- package/dist/analyzer/constructors.js +61 -31
- package/dist/analyzer/constructors.js.map +1 -1
- package/dist/analyzer/dataClasses.js +6 -3
- package/dist/analyzer/dataClasses.js.map +1 -1
- package/dist/analyzer/declaration.d.ts +1 -1
- package/dist/analyzer/decorators.js +12 -12
- package/dist/analyzer/decorators.js.map +1 -1
- package/dist/analyzer/enums.js +1 -1
- package/dist/analyzer/enums.js.map +1 -1
- package/dist/analyzer/importResolver.d.ts +4 -8
- package/dist/analyzer/importResolver.js +87 -85
- package/dist/analyzer/importResolver.js.map +1 -1
- package/dist/analyzer/operations.d.ts +4 -4
- package/dist/analyzer/operations.js +6 -6
- package/dist/analyzer/operations.js.map +1 -1
- package/dist/analyzer/patternMatching.js +34 -11
- package/dist/analyzer/patternMatching.js.map +1 -1
- package/dist/analyzer/protocols.js +1 -1
- package/dist/analyzer/protocols.js.map +1 -1
- package/dist/analyzer/service.js +1 -1
- package/dist/analyzer/service.js.map +1 -1
- package/dist/analyzer/sourceFile.d.ts +3 -2
- package/dist/analyzer/sourceFile.js +5 -5
- package/dist/analyzer/sourceFile.js.map +1 -1
- package/dist/analyzer/typeEvaluator.js +600 -563
- package/dist/analyzer/typeEvaluator.js.map +1 -1
- package/dist/analyzer/typeEvaluatorTypes.d.ts +28 -27
- package/dist/analyzer/typeEvaluatorTypes.js +45 -41
- package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
- package/dist/analyzer/typeGuards.js +64 -32
- package/dist/analyzer/typeGuards.js.map +1 -1
- package/dist/analyzer/typeUtils.d.ts +12 -6
- package/dist/analyzer/typeUtils.js +52 -18
- package/dist/analyzer/typeUtils.js.map +1 -1
- package/dist/analyzer/types.d.ts +3 -1
- package/dist/analyzer/types.js +9 -1
- package/dist/analyzer/types.js.map +1 -1
- package/dist/backgroundAnalysis.js +3 -1
- package/dist/backgroundAnalysis.js.map +1 -1
- package/dist/backgroundAnalysisBase.js +1 -1
- package/dist/backgroundAnalysisBase.js.map +1 -1
- package/dist/backgroundThreadBase.d.ts +2 -2
- package/dist/common/collectionUtils.d.ts +2 -2
- package/dist/common/collectionUtils.js.map +1 -1
- package/dist/common/core.d.ts +8 -3
- package/dist/common/core.js.map +1 -1
- package/dist/common/diagnostic.d.ts +14 -0
- package/dist/common/diagnostic.js +41 -1
- package/dist/common/diagnostic.js.map +1 -1
- package/dist/common/diagnosticSink.d.ts +4 -0
- package/dist/common/diagnosticSink.js +21 -1
- package/dist/common/diagnosticSink.js.map +1 -1
- package/dist/common/envVarUtils.js.map +1 -1
- package/dist/languageServerBase.js +20 -16
- package/dist/languageServerBase.js.map +1 -1
- package/dist/languageService/autoImporter.d.ts +7 -4
- package/dist/languageService/autoImporter.js +13 -10
- package/dist/languageService/autoImporter.js.map +1 -1
- package/dist/languageService/completionProvider.d.ts +2 -1
- package/dist/languageService/completionProvider.js +24 -19
- package/dist/languageService/completionProvider.js.map +1 -1
- package/dist/localization/localize.d.ts +4 -1
- package/dist/localization/localize.js +3 -2
- package/dist/localization/localize.js.map +1 -1
- package/dist/localization/package.nls.cs.json +4 -3
- package/dist/localization/package.nls.de.json +3 -2
- package/dist/localization/package.nls.en-us.json +2 -1
- package/dist/localization/package.nls.es.json +3 -2
- package/dist/localization/package.nls.fr.json +3 -2
- package/dist/localization/package.nls.it.json +3 -2
- package/dist/localization/package.nls.ja.json +3 -2
- package/dist/localization/package.nls.ko.json +3 -2
- package/dist/localization/package.nls.pl.json +3 -2
- package/dist/localization/package.nls.pt-br.json +4 -3
- package/dist/localization/package.nls.qps-ploc.json +1 -0
- package/dist/localization/package.nls.ru.json +3 -2
- package/dist/localization/package.nls.tr.json +3 -2
- package/dist/localization/package.nls.zh-cn.json +3 -2
- package/dist/localization/package.nls.zh-tw.json +3 -2
- package/dist/parser/parseNodes.d.ts +3 -1
- package/dist/parser/parseNodes.js +3 -1
- package/dist/parser/parseNodes.js.map +1 -1
- package/dist/parser/parser.js +20 -9
- package/dist/parser/parser.js.map +1 -1
- package/dist/pyright.js +265 -5
- package/dist/pyright.js.map +1 -1
- package/dist/tests/completions.test.js +80 -0
- package/dist/tests/completions.test.js.map +1 -1
- package/dist/tests/fourslash/hover.init.fourslash.js +1 -1
- package/dist/tests/fourslash/hover.init.fourslash.js.map +1 -1
- package/dist/tests/languageServer.test.js +39 -4
- package/dist/tests/languageServer.test.js.map +1 -1
- package/dist/tests/lsp/languageServer.js +19 -3
- package/dist/tests/lsp/languageServer.js.map +1 -1
- package/dist/tests/typeEvaluator2.test.js +6 -2
- package/dist/tests/typeEvaluator2.test.js.map +1 -1
- package/dist/tests/typeEvaluator3.test.js +6 -2
- package/dist/tests/typeEvaluator3.test.js.map +1 -1
- package/dist/tests/typeEvaluator4.test.js +1 -1
- package/dist/tests/typeEvaluator6.test.js +4 -0
- package/dist/tests/typeEvaluator6.test.js.map +1 -1
- package/dist/tests/typeEvaluator7.test.js +2 -2
- package/dist/tests/typeEvaluator7.test.js.map +1 -1
- package/dist/tests/typeEvaluator8.test.js +1 -1
- package/package.json +4 -4
package/dist/analyzer/checker.js
CHANGED
@@ -575,7 +575,8 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
575
575
|
else {
|
576
576
|
let diagAddendum = new diagnostic_1.DiagnosticAddendum();
|
577
577
|
let returnTypeMatches = false;
|
578
|
-
if (this._evaluator.assignType(declaredReturnType, returnType, diagAddendum,
|
578
|
+
if (this._evaluator.assignType(declaredReturnType, returnType, diagAddendum,
|
579
|
+
/* destTypeVarContext */ undefined,
|
579
580
|
/* srcTypeVarContext */ undefined, 128 /* AssignTypeFlags.AllowBoolTypeGuard */)) {
|
580
581
|
returnTypeMatches = true;
|
581
582
|
}
|
@@ -2084,82 +2085,91 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2084
2085
|
}
|
2085
2086
|
_reportInvalidOverload(name, symbol) {
|
2086
2087
|
const typedDecls = symbol.getTypedDeclarations();
|
2087
|
-
if (typedDecls.length
|
2088
|
-
|
2089
|
-
|
2090
|
-
|
2091
|
-
|
2092
|
-
|
2093
|
-
|
2094
|
-
|
2095
|
-
|
2096
|
-
|
2097
|
-
|
2098
|
-
|
2099
|
-
|
2100
|
-
|
2101
|
-
|
2102
|
-
|
2103
|
-
|
2104
|
-
|
2105
|
-
|
2106
|
-
|
2107
|
-
|
2108
|
-
|
2109
|
-
|
2110
|
-
|
2111
|
-
|
2112
|
-
|
2113
|
-
|
2114
|
-
|
2115
|
-
|
2116
|
-
|
2088
|
+
if (typedDecls.length === 0) {
|
2089
|
+
return;
|
2090
|
+
}
|
2091
|
+
const primaryDecl = typedDecls[0];
|
2092
|
+
if (primaryDecl.type !== 5 /* DeclarationType.Function */) {
|
2093
|
+
return;
|
2094
|
+
}
|
2095
|
+
const type = this._evaluator.getEffectiveTypeOfSymbol(symbol);
|
2096
|
+
const overloadedFunctions = (0, types_1.isOverloadedFunction)(type)
|
2097
|
+
? types_1.OverloadedFunctionType.getOverloads(type)
|
2098
|
+
: (0, types_1.isFunction)(type) && types_1.FunctionType.isOverloaded(type)
|
2099
|
+
? [type]
|
2100
|
+
: [];
|
2101
|
+
// If the implementation has no name, it was synthesized probably by a
|
2102
|
+
// decorator that used a callable with a ParamSpec that captured the
|
2103
|
+
// overloaded signature. We'll exempt it from this check.
|
2104
|
+
if ((0, types_1.isOverloadedFunction)(type)) {
|
2105
|
+
const overloads = types_1.OverloadedFunctionType.getOverloads(type);
|
2106
|
+
if (overloads.length > 0 && overloads[0].details.name === '') {
|
2107
|
+
return;
|
2108
|
+
}
|
2109
|
+
}
|
2110
|
+
else if ((0, types_1.isFunction)(type)) {
|
2111
|
+
if (type.details.name === '') {
|
2112
|
+
return;
|
2113
|
+
}
|
2114
|
+
}
|
2115
|
+
if (overloadedFunctions.length === 1) {
|
2116
|
+
// There should never be a single overload.
|
2117
|
+
this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportInconsistentOverload, localize_1.LocMessage.singleOverload().format({ name }), primaryDecl.node.name);
|
2118
|
+
}
|
2119
|
+
// If the file is not a stub and this is the first overload,
|
2120
|
+
// verify that there is an implementation.
|
2121
|
+
if (this._fileInfo.isStubFile || overloadedFunctions.length === 0) {
|
2122
|
+
return;
|
2123
|
+
}
|
2124
|
+
let implementationFunction;
|
2125
|
+
if ((0, types_1.isOverloadedFunction)(type)) {
|
2126
|
+
implementationFunction = types_1.OverloadedFunctionType.getImplementation(type);
|
2127
|
+
}
|
2128
|
+
else if ((0, types_1.isFunction)(type) && !types_1.FunctionType.isOverloaded(type)) {
|
2129
|
+
implementationFunction = type;
|
2130
|
+
}
|
2131
|
+
if (!implementationFunction) {
|
2132
|
+
const containingClassNode = ParseTreeUtils.getEnclosingClassOrFunction(primaryDecl.node);
|
2133
|
+
if (containingClassNode && containingClassNode.nodeType === 10 /* ParseNodeType.Class */) {
|
2134
|
+
const classType = this._evaluator.getTypeOfClass(containingClassNode);
|
2135
|
+
if (classType) {
|
2136
|
+
if (types_1.ClassType.isProtocolClass(classType.classType)) {
|
2137
|
+
return;
|
2117
2138
|
}
|
2118
|
-
if (
|
2119
|
-
|
2120
|
-
|
2121
|
-
|
2122
|
-
if (classType) {
|
2123
|
-
if (types_1.ClassType.isProtocolClass(classType.classType)) {
|
2124
|
-
exemptMissingImplementation = true;
|
2125
|
-
}
|
2126
|
-
else if (types_1.ClassType.supportsAbstractMethods(classType.classType)) {
|
2127
|
-
if ((0, types_1.isOverloadedFunction)(type) &&
|
2128
|
-
types_1.OverloadedFunctionType.getOverloads(type).every((overload) => types_1.FunctionType.isAbstractMethod(overload))) {
|
2129
|
-
exemptMissingImplementation = true;
|
2130
|
-
}
|
2131
|
-
}
|
2132
|
-
}
|
2133
|
-
}
|
2134
|
-
// If this is a method within a protocol class, don't require that
|
2135
|
-
// there is an implementation.
|
2136
|
-
if (!exemptMissingImplementation) {
|
2137
|
-
this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportNoOverloadImplementation, localize_1.LocMessage.overloadWithoutImplementation().format({
|
2138
|
-
name: primaryDecl.node.name.value,
|
2139
|
-
}), primaryDecl.node.name);
|
2139
|
+
if (types_1.ClassType.supportsAbstractMethods(classType.classType)) {
|
2140
|
+
if ((0, types_1.isOverloadedFunction)(type) &&
|
2141
|
+
types_1.OverloadedFunctionType.getOverloads(type).every((overload) => types_1.FunctionType.isAbstractMethod(overload))) {
|
2142
|
+
return;
|
2140
2143
|
}
|
2141
2144
|
}
|
2142
|
-
else if ((0, types_1.isOverloadedFunction)(type)) {
|
2143
|
-
// Verify that all overload signatures are assignable to implementation signature.
|
2144
|
-
types_1.OverloadedFunctionType.getOverloads(type).forEach((overload, index) => {
|
2145
|
-
var _a, _b, _c, _d;
|
2146
|
-
const diag = new diagnostic_1.DiagnosticAddendum();
|
2147
|
-
if (!this._isLegalOverloadImplementation(overload, implementationFunction, diag)) {
|
2148
|
-
if (implementationFunction.details.declaration) {
|
2149
|
-
const diagnostic = this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportInconsistentOverload, localize_1.LocMessage.overloadImplementationMismatch().format({
|
2150
|
-
name,
|
2151
|
-
index: index + 1,
|
2152
|
-
}) + diag.getString(), implementationFunction.details.declaration.node.name);
|
2153
|
-
if (diagnostic && overload.details.declaration) {
|
2154
|
-
diagnostic.addRelatedInfo(localize_1.LocAddendum.overloadSignature(), (_b = (_a = overload.details.declaration) === null || _a === void 0 ? void 0 : _a.uri) !== null && _b !== void 0 ? _b : primaryDecl.uri, (_d = (_c = overload.details.declaration) === null || _c === void 0 ? void 0 : _c.range) !== null && _d !== void 0 ? _d : primaryDecl.range);
|
2155
|
-
}
|
2156
|
-
}
|
2157
|
-
}
|
2158
|
-
});
|
2159
|
-
}
|
2160
2145
|
}
|
2161
2146
|
}
|
2147
|
+
// If this is a method within a protocol class, don't require that
|
2148
|
+
// there is an implementation.
|
2149
|
+
this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportNoOverloadImplementation, localize_1.LocMessage.overloadWithoutImplementation().format({
|
2150
|
+
name: primaryDecl.node.name.value,
|
2151
|
+
}), primaryDecl.node.name);
|
2152
|
+
return;
|
2153
|
+
}
|
2154
|
+
if (!(0, types_1.isOverloadedFunction)(type)) {
|
2155
|
+
return;
|
2162
2156
|
}
|
2157
|
+
// Verify that all overload signatures are assignable to implementation signature.
|
2158
|
+
types_1.OverloadedFunctionType.getOverloads(type).forEach((overload, index) => {
|
2159
|
+
var _a, _b, _c, _d;
|
2160
|
+
const diag = new diagnostic_1.DiagnosticAddendum();
|
2161
|
+
if (!this._isLegalOverloadImplementation(overload, implementationFunction, diag)) {
|
2162
|
+
if (implementationFunction.details.declaration) {
|
2163
|
+
const diagnostic = this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportInconsistentOverload, localize_1.LocMessage.overloadImplementationMismatch().format({
|
2164
|
+
name,
|
2165
|
+
index: index + 1,
|
2166
|
+
}) + diag.getString(), implementationFunction.details.declaration.node.name);
|
2167
|
+
if (diagnostic && overload.details.declaration) {
|
2168
|
+
diagnostic.addRelatedInfo(localize_1.LocAddendum.overloadSignature(), (_b = (_a = overload.details.declaration) === null || _a === void 0 ? void 0 : _a.uri) !== null && _b !== void 0 ? _b : primaryDecl.uri, (_d = (_c = overload.details.declaration) === null || _c === void 0 ? void 0 : _c.range) !== null && _d !== void 0 ? _d : primaryDecl.range);
|
2169
|
+
}
|
2170
|
+
}
|
2171
|
+
}
|
2172
|
+
});
|
2163
2173
|
}
|
2164
2174
|
_reportMultipleFinalDeclarations(name, symbol, scopeType) {
|
2165
2175
|
if (!this._evaluator.isFinalVariable(symbol)) {
|
@@ -2876,6 +2886,10 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
2876
2886
|
diag.addMessage(localize_1.LocAddendum.genericClassNotAllowed());
|
2877
2887
|
isSupported = false;
|
2878
2888
|
}
|
2889
|
+
else if (types_1.ClassType.isIllegalIsinstanceClass(subtype)) {
|
2890
|
+
diag.addMessage(localize_1.LocAddendum.isinstanceClassNotSupported().format({ type: subtype.details.name }));
|
2891
|
+
isSupported = false;
|
2892
|
+
}
|
2879
2893
|
else if (types_1.ClassType.isProtocolClass(subtype) &&
|
2880
2894
|
!types_1.ClassType.isRuntimeCheckable(subtype) &&
|
2881
2895
|
!subtype.includeSubclasses) {
|