@zzzen/pyright-internal 1.2.0-dev.20260927 → 1.2.0-dev.20261011
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/analyzerNodeInfo.js +7 -2
- package/dist/analyzer/analyzerNodeInfo.js.map +1 -1
- package/dist/analyzer/binder.js +17 -6
- package/dist/analyzer/binder.js.map +1 -1
- package/dist/analyzer/checker.d.ts +0 -2
- package/dist/analyzer/checker.js +23 -47
- package/dist/analyzer/checker.js.map +1 -1
- package/dist/analyzer/codeFlowEngine.d.ts +2 -0
- package/dist/analyzer/codeFlowEngine.js +155 -18
- package/dist/analyzer/codeFlowEngine.js.map +1 -1
- package/dist/analyzer/codeFlowTypes.d.ts +2 -1
- package/dist/analyzer/codeFlowTypes.js +1 -0
- package/dist/analyzer/codeFlowTypes.js.map +1 -1
- package/dist/analyzer/codeFlowUtils.js +4 -1
- package/dist/analyzer/codeFlowUtils.js.map +1 -1
- package/dist/analyzer/constraintSolver.js +3 -2
- package/dist/analyzer/constraintSolver.js.map +1 -1
- package/dist/analyzer/operations.d.ts +2 -0
- package/dist/analyzer/operations.js +2 -1
- package/dist/analyzer/operations.js.map +1 -1
- package/dist/analyzer/parameterUtils.js +2 -1
- package/dist/analyzer/parameterUtils.js.map +1 -1
- package/dist/analyzer/patternMatching.js +80 -11
- package/dist/analyzer/patternMatching.js.map +1 -1
- package/dist/analyzer/program.js +4 -1
- package/dist/analyzer/program.js.map +1 -1
- package/dist/analyzer/properties.d.ts +2 -2
- package/dist/analyzer/properties.js +2 -2
- package/dist/analyzer/properties.js.map +1 -1
- package/dist/analyzer/protocols.d.ts +3 -1
- package/dist/analyzer/protocols.js +35 -5
- package/dist/analyzer/protocols.js.map +1 -1
- package/dist/analyzer/symbolNameUtils.d.ts +1 -0
- package/dist/analyzer/symbolNameUtils.js +5 -0
- package/dist/analyzer/symbolNameUtils.js.map +1 -1
- package/dist/analyzer/typeEvaluator.js +269 -32
- package/dist/analyzer/typeEvaluator.js.map +1 -1
- package/dist/analyzer/typeEvaluatorTypes.d.ts +4 -2
- package/dist/analyzer/typeEvaluatorTypes.js +4 -0
- package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
- package/dist/analyzer/typeGuards.js +208 -68
- package/dist/analyzer/typeGuards.js.map +1 -1
- package/dist/analyzer/typePrinter.js +32 -6
- package/dist/analyzer/typePrinter.js.map +1 -1
- package/dist/analyzer/typeUtils.d.ts +1 -0
- package/dist/analyzer/typeUtils.js +24 -2
- package/dist/analyzer/typeUtils.js.map +1 -1
- package/dist/analyzer/typedDicts.js +8 -4
- package/dist/analyzer/typedDicts.js.map +1 -1
- package/dist/analyzer/types.d.ts +2 -1
- package/dist/analyzer/types.js +9 -0
- package/dist/analyzer/types.js.map +1 -1
- package/dist/common/extensibility.d.ts +1 -0
- package/dist/common/processUtils.d.ts +9 -1
- package/dist/common/processUtils.js +52 -10
- package/dist/common/processUtils.js.map +1 -1
- package/dist/common/windowsProcessTree.d.ts +4 -0
- package/dist/common/windowsProcessTree.js +47 -0
- package/dist/common/windowsProcessTree.js.map +1 -0
- package/dist/common/windowsProcessTree.json +310 -0
- package/dist/languageService/callHierarchyProvider.js +12 -4
- package/dist/languageService/callHierarchyProvider.js.map +1 -1
- package/dist/localization/package.nls.pl.json +2 -2
- package/dist/localization/package.nls.pt-br.json +1 -1
- package/dist/localization/package.nls.zh-cn.json +2 -2
- package/dist/localization/package.nls.zh-tw.json +1 -1
- package/dist/tests/cacheManager.test.js +19 -15
- package/dist/tests/cacheManager.test.js.map +1 -1
- package/dist/tests/constraintSolver.test.d.ts +1 -0
- package/dist/tests/constraintSolver.test.js +39 -0
- package/dist/tests/constraintSolver.test.js.map +1 -0
- package/dist/tests/fourslash/findDefinitions.metaclass.fourslash.d.ts +1 -0
- package/dist/tests/fourslash/findDefinitions.metaclass.fourslash.js +44 -0
- package/dist/tests/fourslash/findDefinitions.metaclass.fourslash.js.map +1 -0
- package/dist/tests/fourslash/findDefinitions.metaclassDict.fourslash.d.ts +1 -0
- package/dist/tests/fourslash/findDefinitions.metaclassDict.fourslash.js +42 -0
- package/dist/tests/fourslash/findDefinitions.metaclassDict.fourslash.js.map +1 -0
- package/dist/tests/fourslash/hover.typedDictUnpacking.dictDisplay.fourslash.d.ts +1 -0
- package/dist/tests/fourslash/hover.typedDictUnpacking.dictDisplay.fourslash.js +16 -0
- package/dist/tests/fourslash/hover.typedDictUnpacking.dictDisplay.fourslash.js.map +1 -0
- package/dist/tests/mypyPrimerAnalysis.test.js +67 -11
- package/dist/tests/mypyPrimerAnalysis.test.js.map +1 -1
- package/dist/tests/mypyPrimerMcp.test.js +2 -1
- package/dist/tests/mypyPrimerMcp.test.js.map +1 -1
- package/dist/tests/service.test.js +36 -0
- package/dist/tests/service.test.js.map +1 -1
- package/dist/tests/typeEquality.test.js +85 -2
- package/dist/tests/typeEquality.test.js.map +1 -1
- package/dist/tests/typeEvaluator1.test.js +55 -2
- package/dist/tests/typeEvaluator1.test.js.map +1 -1
- package/dist/tests/typeEvaluator3.test.js +23 -0
- package/dist/tests/typeEvaluator3.test.js.map +1 -1
- package/dist/tests/typeEvaluator6.test.js +75 -1
- package/dist/tests/typeEvaluator6.test.js.map +1 -1
- package/dist/tests/typeEvaluator7.test.js +22 -0
- package/dist/tests/typeEvaluator7.test.js.map +1 -1
- package/dist/tests/typeEvaluator8.test.js +41 -0
- package/dist/tests/typeEvaluator8.test.js.map +1 -1
- package/dist/tests/typeServer/inProcTypeServerTestUtils.d.ts +7 -2
- package/dist/tests/typeServer/inProcTypeServerTestUtils.js +14 -7
- package/dist/tests/typeServer/inProcTypeServerTestUtils.js.map +1 -1
- package/dist/tests/typeServer/stubGenerator.test.js +29 -0
- package/dist/tests/typeServer/stubGenerator.test.js.map +1 -1
- package/dist/tests/typeServer/typeServer.inProc.test.js +87 -1
- package/dist/tests/typeServer/typeServer.inProc.test.js.map +1 -1
- package/dist/tests/typeServer/typeServer.virtualFileRedirect.test.js +15 -0
- package/dist/tests/typeServer/typeServer.virtualFileRedirect.test.js.map +1 -1
- package/dist/typeServer/stubGenerator.js +5 -6
- package/dist/typeServer/stubGenerator.js.map +1 -1
- package/dist/workspaceFactory.js +5 -0
- package/dist/workspaceFactory.js.map +1 -1
- package/package.json +3 -3
|
@@ -110,7 +110,6 @@ export declare class Checker extends ParseTreeWalker {
|
|
|
110
110
|
private _conditionallyReportUnusedSymbol;
|
|
111
111
|
private _conditionallyReportUnusedDeclaration;
|
|
112
112
|
private _validateIsInstanceCall;
|
|
113
|
-
private _validateUnsafeProtocolOverlap;
|
|
114
113
|
private _isTypeSupportedTypeForIsInstance;
|
|
115
114
|
private _validateNotDataProtocol;
|
|
116
115
|
private _isSymbolPrivate;
|
|
@@ -148,7 +147,6 @@ export declare class Checker extends ParseTreeWalker {
|
|
|
148
147
|
private _validateTypedDictOverrides;
|
|
149
148
|
private _validateBaseClassOverrides;
|
|
150
149
|
private _validateOverrideDecoratorPresent;
|
|
151
|
-
private _isMethodExemptFromLsp;
|
|
152
150
|
private _validateOverrideDecoratorNotPresent;
|
|
153
151
|
private _getCallableVariableOverrideComparison;
|
|
154
152
|
private _markFunctionStatic;
|
package/dist/analyzer/checker.js
CHANGED
|
@@ -1836,22 +1836,23 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
1836
1836
|
}
|
|
1837
1837
|
for (let i = 0; i < prevOverloads.length; i++) {
|
|
1838
1838
|
const prevOverload = prevOverloads[i];
|
|
1839
|
+
const prevReturnType = types_1.FunctionType.getEffectiveReturnType(prevOverload);
|
|
1840
|
+
const returnType = types_1.FunctionType.getEffectiveReturnType(functionType);
|
|
1841
|
+
if (!prevReturnType ||
|
|
1842
|
+
!returnType ||
|
|
1843
|
+
this._evaluator.assignType(returnType, prevReturnType,
|
|
1844
|
+
/* diag */ undefined,
|
|
1845
|
+
/* constraints */ undefined, 262144 /* AssignTypeFlags.RejectCyclicLowerBound */)) {
|
|
1846
|
+
continue;
|
|
1847
|
+
}
|
|
1839
1848
|
if (this._isOverlappingOverload(prevOverload, functionType, /* partialOverlap */ true)) {
|
|
1840
|
-
const
|
|
1841
|
-
|
|
1842
|
-
|
|
1843
|
-
|
|
1844
|
-
|
|
1845
|
-
|
|
1846
|
-
|
|
1847
|
-
const altNode = this._findNodeForOverload(node, prevOverload);
|
|
1848
|
-
this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportOverlappingOverload, localize_1.LocMessage.overloadReturnTypeMismatch().format({
|
|
1849
|
-
name: node.d.name.d.value,
|
|
1850
|
-
newIndex: prevOverloads.length + 1,
|
|
1851
|
-
prevIndex: i + 1,
|
|
1852
|
-
}), (altNode || node).d.name);
|
|
1853
|
-
break;
|
|
1854
|
-
}
|
|
1849
|
+
const altNode = this._findNodeForOverload(node, prevOverload);
|
|
1850
|
+
this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportOverlappingOverload, localize_1.LocMessage.overloadReturnTypeMismatch().format({
|
|
1851
|
+
name: node.d.name.d.value,
|
|
1852
|
+
newIndex: prevOverloads.length + 1,
|
|
1853
|
+
prevIndex: i + 1,
|
|
1854
|
+
}), (altNode || node).d.name);
|
|
1855
|
+
break;
|
|
1855
1856
|
}
|
|
1856
1857
|
}
|
|
1857
1858
|
}
|
|
@@ -2803,7 +2804,10 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
2803
2804
|
}
|
|
2804
2805
|
const action = rule === diagnosticRules_1.DiagnosticRule.reportUnusedImport ? { action: "pyright.unusedImport" /* Commands.unusedImport */ } : undefined;
|
|
2805
2806
|
if (nameNode) {
|
|
2806
|
-
|
|
2807
|
+
const isAllowedUnusedVariable = rule === diagnosticRules_1.DiagnosticRule.reportUnusedVariable && nameNode.d.value.startsWith('_');
|
|
2808
|
+
if (!isAllowedUnusedVariable) {
|
|
2809
|
+
this._fileInfo.diagnosticSink.addUnusedCodeWithTextRange(localize_1.LocMessage.unaccessedSymbol().format({ name: nameNode.d.value }), nameNode, action);
|
|
2810
|
+
}
|
|
2807
2811
|
if (rule !== undefined && message && diagnosticLevel !== 'none') {
|
|
2808
2812
|
this._evaluator.addDiagnostic(rule, message, nameNode);
|
|
2809
2813
|
}
|
|
@@ -2887,7 +2891,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
2887
2891
|
// Check for unsafe protocol overlaps.
|
|
2888
2892
|
classTypeList.forEach((filterType) => {
|
|
2889
2893
|
if ((0, types_1.isInstantiableClass)(filterType)) {
|
|
2890
|
-
this.
|
|
2894
|
+
(0, protocols_1.validateProtocolUnsafeOverlap)(this._evaluator, node.d.args[0].d.valueExpr, types_1.ClassType.cloneAsInstance(filterType), isInstanceCheck ? arg0Type : (0, typeUtils_1.convertToInstance)(arg0Type));
|
|
2891
2895
|
}
|
|
2892
2896
|
});
|
|
2893
2897
|
// Check for unnecessary isinstance or issubclass calls.
|
|
@@ -2916,29 +2920,6 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
2916
2920
|
}
|
|
2917
2921
|
}
|
|
2918
2922
|
}
|
|
2919
|
-
_validateUnsafeProtocolOverlap(errorNode, protocol, testType) {
|
|
2920
|
-
// If this is a protocol class, check for an "unsafe overlap"
|
|
2921
|
-
// with the arg0 type.
|
|
2922
|
-
if (types_1.ClassType.isProtocolClass(protocol)) {
|
|
2923
|
-
let isUnsafeOverlap = false;
|
|
2924
|
-
const diag = new diagnostic_1.DiagnosticAddendum();
|
|
2925
|
-
(0, typeUtils_1.doForEachSubtype)(testType, (testSubtype) => {
|
|
2926
|
-
if ((0, types_1.isClassInstance)(testSubtype)) {
|
|
2927
|
-
if ((0, protocols_1.isProtocolUnsafeOverlap)(this._evaluator, protocol, testSubtype)) {
|
|
2928
|
-
isUnsafeOverlap = true;
|
|
2929
|
-
diag.addMessage(localize_1.LocAddendum.protocolUnsafeOverlap().format({
|
|
2930
|
-
name: testSubtype.shared.name,
|
|
2931
|
-
}));
|
|
2932
|
-
}
|
|
2933
|
-
}
|
|
2934
|
-
});
|
|
2935
|
-
if (isUnsafeOverlap) {
|
|
2936
|
-
this._evaluator.addDiagnostic(diagnosticRules_1.DiagnosticRule.reportGeneralTypeIssues, localize_1.LocMessage.protocolUnsafeOverlap().format({
|
|
2937
|
-
name: protocol.shared.name,
|
|
2938
|
-
}) + diag.getString(), errorNode);
|
|
2939
|
-
}
|
|
2940
|
-
}
|
|
2941
|
-
}
|
|
2942
2923
|
// Determines whether the specified type is allowed as the second argument
|
|
2943
2924
|
// to an isinstance or issubclass check.
|
|
2944
2925
|
_isTypeSupportedTypeForIsInstance(type, isInstanceCheck, diag) {
|
|
@@ -4706,7 +4687,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
4706
4687
|
return;
|
|
4707
4688
|
}
|
|
4708
4689
|
// Constructors are exempt.
|
|
4709
|
-
if (
|
|
4690
|
+
if (SymbolNameUtils.isMethodExemptFromLsp(overrideFunction.shared.name)) {
|
|
4710
4691
|
return;
|
|
4711
4692
|
}
|
|
4712
4693
|
// If the declaration for the override function is not the same as the
|
|
@@ -4724,11 +4705,6 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
4724
4705
|
className: this._evaluator.printType((0, typeUtils_1.convertToInstance)(baseMember.classType)),
|
|
4725
4706
|
}), funcNode.d.name);
|
|
4726
4707
|
}
|
|
4727
|
-
// Determines whether the name is exempt from Liskov Substitution Principle rules.
|
|
4728
|
-
_isMethodExemptFromLsp(name) {
|
|
4729
|
-
const exemptMethods = ['__init__', '__new__', '__init_subclass__', '__post_init__'];
|
|
4730
|
-
return exemptMethods.some((n) => n === name);
|
|
4731
|
-
}
|
|
4732
4708
|
// Determines whether the type is a function or overloaded function with an @override
|
|
4733
4709
|
// decorator. In this case, an error is reported because no base class has declared
|
|
4734
4710
|
// a method of the same name.
|
|
@@ -4877,7 +4853,7 @@ class Checker extends parseTreeWalker_1.ParseTreeWalker {
|
|
|
4877
4853
|
// Also, skip this check if the class is a TypedDict. The methods for a TypedDict
|
|
4878
4854
|
// are synthesized, and they can result in many overloads. We assume they
|
|
4879
4855
|
// are correct and will not produce any errors.
|
|
4880
|
-
if (
|
|
4856
|
+
if (SymbolNameUtils.isMethodExemptFromLsp(memberName) ||
|
|
4881
4857
|
SymbolNameUtils.isPrivateName(memberName) ||
|
|
4882
4858
|
types_1.ClassType.isTypedDictClass(childClassType)) {
|
|
4883
4859
|
return;
|