@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.
Files changed (112) hide show
  1. package/dist/analyzer/analyzerNodeInfo.js +7 -2
  2. package/dist/analyzer/analyzerNodeInfo.js.map +1 -1
  3. package/dist/analyzer/binder.js +17 -6
  4. package/dist/analyzer/binder.js.map +1 -1
  5. package/dist/analyzer/checker.d.ts +0 -2
  6. package/dist/analyzer/checker.js +23 -47
  7. package/dist/analyzer/checker.js.map +1 -1
  8. package/dist/analyzer/codeFlowEngine.d.ts +2 -0
  9. package/dist/analyzer/codeFlowEngine.js +155 -18
  10. package/dist/analyzer/codeFlowEngine.js.map +1 -1
  11. package/dist/analyzer/codeFlowTypes.d.ts +2 -1
  12. package/dist/analyzer/codeFlowTypes.js +1 -0
  13. package/dist/analyzer/codeFlowTypes.js.map +1 -1
  14. package/dist/analyzer/codeFlowUtils.js +4 -1
  15. package/dist/analyzer/codeFlowUtils.js.map +1 -1
  16. package/dist/analyzer/constraintSolver.js +3 -2
  17. package/dist/analyzer/constraintSolver.js.map +1 -1
  18. package/dist/analyzer/operations.d.ts +2 -0
  19. package/dist/analyzer/operations.js +2 -1
  20. package/dist/analyzer/operations.js.map +1 -1
  21. package/dist/analyzer/parameterUtils.js +2 -1
  22. package/dist/analyzer/parameterUtils.js.map +1 -1
  23. package/dist/analyzer/patternMatching.js +80 -11
  24. package/dist/analyzer/patternMatching.js.map +1 -1
  25. package/dist/analyzer/program.js +4 -1
  26. package/dist/analyzer/program.js.map +1 -1
  27. package/dist/analyzer/properties.d.ts +2 -2
  28. package/dist/analyzer/properties.js +2 -2
  29. package/dist/analyzer/properties.js.map +1 -1
  30. package/dist/analyzer/protocols.d.ts +3 -1
  31. package/dist/analyzer/protocols.js +35 -5
  32. package/dist/analyzer/protocols.js.map +1 -1
  33. package/dist/analyzer/symbolNameUtils.d.ts +1 -0
  34. package/dist/analyzer/symbolNameUtils.js +5 -0
  35. package/dist/analyzer/symbolNameUtils.js.map +1 -1
  36. package/dist/analyzer/typeEvaluator.js +269 -32
  37. package/dist/analyzer/typeEvaluator.js.map +1 -1
  38. package/dist/analyzer/typeEvaluatorTypes.d.ts +4 -2
  39. package/dist/analyzer/typeEvaluatorTypes.js +4 -0
  40. package/dist/analyzer/typeEvaluatorTypes.js.map +1 -1
  41. package/dist/analyzer/typeGuards.js +208 -68
  42. package/dist/analyzer/typeGuards.js.map +1 -1
  43. package/dist/analyzer/typePrinter.js +32 -6
  44. package/dist/analyzer/typePrinter.js.map +1 -1
  45. package/dist/analyzer/typeUtils.d.ts +1 -0
  46. package/dist/analyzer/typeUtils.js +24 -2
  47. package/dist/analyzer/typeUtils.js.map +1 -1
  48. package/dist/analyzer/typedDicts.js +8 -4
  49. package/dist/analyzer/typedDicts.js.map +1 -1
  50. package/dist/analyzer/types.d.ts +2 -1
  51. package/dist/analyzer/types.js +9 -0
  52. package/dist/analyzer/types.js.map +1 -1
  53. package/dist/common/extensibility.d.ts +1 -0
  54. package/dist/common/processUtils.d.ts +9 -1
  55. package/dist/common/processUtils.js +52 -10
  56. package/dist/common/processUtils.js.map +1 -1
  57. package/dist/common/windowsProcessTree.d.ts +4 -0
  58. package/dist/common/windowsProcessTree.js +47 -0
  59. package/dist/common/windowsProcessTree.js.map +1 -0
  60. package/dist/common/windowsProcessTree.json +310 -0
  61. package/dist/languageService/callHierarchyProvider.js +12 -4
  62. package/dist/languageService/callHierarchyProvider.js.map +1 -1
  63. package/dist/localization/package.nls.pl.json +2 -2
  64. package/dist/localization/package.nls.pt-br.json +1 -1
  65. package/dist/localization/package.nls.zh-cn.json +2 -2
  66. package/dist/localization/package.nls.zh-tw.json +1 -1
  67. package/dist/tests/cacheManager.test.js +19 -15
  68. package/dist/tests/cacheManager.test.js.map +1 -1
  69. package/dist/tests/constraintSolver.test.d.ts +1 -0
  70. package/dist/tests/constraintSolver.test.js +39 -0
  71. package/dist/tests/constraintSolver.test.js.map +1 -0
  72. package/dist/tests/fourslash/findDefinitions.metaclass.fourslash.d.ts +1 -0
  73. package/dist/tests/fourslash/findDefinitions.metaclass.fourslash.js +44 -0
  74. package/dist/tests/fourslash/findDefinitions.metaclass.fourslash.js.map +1 -0
  75. package/dist/tests/fourslash/findDefinitions.metaclassDict.fourslash.d.ts +1 -0
  76. package/dist/tests/fourslash/findDefinitions.metaclassDict.fourslash.js +42 -0
  77. package/dist/tests/fourslash/findDefinitions.metaclassDict.fourslash.js.map +1 -0
  78. package/dist/tests/fourslash/hover.typedDictUnpacking.dictDisplay.fourslash.d.ts +1 -0
  79. package/dist/tests/fourslash/hover.typedDictUnpacking.dictDisplay.fourslash.js +16 -0
  80. package/dist/tests/fourslash/hover.typedDictUnpacking.dictDisplay.fourslash.js.map +1 -0
  81. package/dist/tests/mypyPrimerAnalysis.test.js +67 -11
  82. package/dist/tests/mypyPrimerAnalysis.test.js.map +1 -1
  83. package/dist/tests/mypyPrimerMcp.test.js +2 -1
  84. package/dist/tests/mypyPrimerMcp.test.js.map +1 -1
  85. package/dist/tests/service.test.js +36 -0
  86. package/dist/tests/service.test.js.map +1 -1
  87. package/dist/tests/typeEquality.test.js +85 -2
  88. package/dist/tests/typeEquality.test.js.map +1 -1
  89. package/dist/tests/typeEvaluator1.test.js +55 -2
  90. package/dist/tests/typeEvaluator1.test.js.map +1 -1
  91. package/dist/tests/typeEvaluator3.test.js +23 -0
  92. package/dist/tests/typeEvaluator3.test.js.map +1 -1
  93. package/dist/tests/typeEvaluator6.test.js +75 -1
  94. package/dist/tests/typeEvaluator6.test.js.map +1 -1
  95. package/dist/tests/typeEvaluator7.test.js +22 -0
  96. package/dist/tests/typeEvaluator7.test.js.map +1 -1
  97. package/dist/tests/typeEvaluator8.test.js +41 -0
  98. package/dist/tests/typeEvaluator8.test.js.map +1 -1
  99. package/dist/tests/typeServer/inProcTypeServerTestUtils.d.ts +7 -2
  100. package/dist/tests/typeServer/inProcTypeServerTestUtils.js +14 -7
  101. package/dist/tests/typeServer/inProcTypeServerTestUtils.js.map +1 -1
  102. package/dist/tests/typeServer/stubGenerator.test.js +29 -0
  103. package/dist/tests/typeServer/stubGenerator.test.js.map +1 -1
  104. package/dist/tests/typeServer/typeServer.inProc.test.js +87 -1
  105. package/dist/tests/typeServer/typeServer.inProc.test.js.map +1 -1
  106. package/dist/tests/typeServer/typeServer.virtualFileRedirect.test.js +15 -0
  107. package/dist/tests/typeServer/typeServer.virtualFileRedirect.test.js.map +1 -1
  108. package/dist/typeServer/stubGenerator.js +5 -6
  109. package/dist/typeServer/stubGenerator.js.map +1 -1
  110. package/dist/workspaceFactory.js +5 -0
  111. package/dist/workspaceFactory.js.map +1 -1
  112. 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;
@@ -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 prevReturnType = types_1.FunctionType.getEffectiveReturnType(prevOverload);
1841
- const returnType = types_1.FunctionType.getEffectiveReturnType(functionType);
1842
- if (prevReturnType &&
1843
- returnType &&
1844
- !this._evaluator.assignType(returnType, prevReturnType,
1845
- /* diag */ undefined,
1846
- /* constraints */ undefined, 0 /* AssignTypeFlags.Default */)) {
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
- this._fileInfo.diagnosticSink.addUnusedCodeWithTextRange(localize_1.LocMessage.unaccessedSymbol().format({ name: nameNode.d.value }), nameNode, action);
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._validateUnsafeProtocolOverlap(node.d.args[0].d.valueExpr, types_1.ClassType.cloneAsInstance(filterType), isInstanceCheck ? arg0Type : (0, typeUtils_1.convertToInstance)(arg0Type));
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 (this._isMethodExemptFromLsp(overrideFunction.shared.name)) {
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 (this._isMethodExemptFromLsp(memberName) ||
4856
+ if (SymbolNameUtils.isMethodExemptFromLsp(memberName) ||
4881
4857
  SymbolNameUtils.isPrivateName(memberName) ||
4882
4858
  types_1.ClassType.isTypedDictClass(childClassType)) {
4883
4859
  return;