Bump pyrefly from 0.60.0 to 0.61.1 in /backend (#1690)

Bumps [pyrefly](https://github.com/facebook/pyrefly) from 0.60.0 to
0.61.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/facebook/pyrefly/releases">pyrefly's
releases</a>.</em></p>
<blockquote>
<h2>Pyrefly v0.61.1</h2>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/facebook/pyrefly/compare/0.61.0...0.61.1">https://github.com/facebook/pyrefly/compare/0.61.0...0.61.1</a></p>
<h2>Pyrefly v0.61.0</h2>
<p><strong>Status : BETA</strong>
<em>Release date: April 13, 2026</em></p>
<p>Pyrefly v0.61.0 bundles <strong>85 commits</strong> from <strong>21
contributors</strong>.</p>
<hr />
<h2> New &amp; Improved</h2>
<table>
<thead>
<tr>
<th>Area</th>
<th>What's new</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Type Checking</strong></td>
<td>- Division, floor division, and modulo operations with a literal
zero divisor (e.g., <code>x / 0</code>, <code>y // 0</code>, <code>z %
0</code>) are flagged as errors, catching runtime
<code>ZeroDivisionError</code> before execution. <!-- raw HTML omitted
--><!-- raw HTML omitted -->- Multiple inheritance with conflicting
<code>__slots__</code> definitions is detected and reported as an error,
matching CPython's runtime behavior and preventing layout conflicts.
<!-- raw HTML omitted --><!-- raw HTML omitted -->- Protocol members
assigned a value without an explicit type annotation (e.g., <code>x =
None</code> in a <code>Protocol</code> class body) are flagged as
errors, ensuring protocol members have declared types as required by the
typing specification.</td>
</tr>
<tr>
<td><strong>Language Server</strong></td>
<td>- Variables used exclusively within f-string format specifiers
(e.g., <code>f&quot;{key:&lt;{max_len}}&quot;</code>) are correctly
recognized as used, eliminating false positive unused-variable warnings.
<!-- raw HTML omitted --><!-- raw HTML omitted -->- The VS Code
extension explicitly declares workspace trust capabilities, requiring
trusted workspaces to run and allowing machine-overridable scope for
<code>lspPath</code> and <code>lspArguments</code> settings for improved
security.</td>
</tr>
<tr>
<td><strong>Coverage Reporting</strong></td>
<td>- The <code>pyrefly report</code> command now excludes some dunder
methods and typing-only constructs from coverage metrics. <!-- raw HTML
omitted --><!-- raw HTML omitted -->- Per-module JSON output includes
entity counts (n_functions, n_methods, n_function_params,
n_method_params, n_classes, n_attrs, n_properties, n_type_ignores) for
downstream consumers. <!-- raw HTML omitted --><!-- raw HTML omitted
-->- A new <code>--module &lt;name&gt;</code> CLI flag allows overriding
the module name in JSON output, supporting callers that need canonical
package names instead of filesystem-derived names.</td>
</tr>
<tr>
<td><strong>Pydantic</strong></td>
<td>- Pydantic lax conversion special-cases regex patterns, fixing false
positives when passing compiled patterns to Pydantic models.</td>
</tr>
<tr>
<td><strong>Performance</strong></td>
<td>- Fixed a bug in overload evaluation that caused exponential memory
consumption and indefinite hangs on code with many overloaded
calls.</td>
</tr>
</tbody>
</table>
<hr />
<h2>🐛 bug fixes</h2>
<p>We closed <strong>9</strong> bug issues this release 👏</p>
<ul>
<li><a
href="https://redirect.github.com/facebook/pyrefly/issues/3031">#3031</a>:
Fixed a crash in mypy_primer caused by a variable leak in
<code>LitEnum</code> — types are now deep-forced before storage to
prevent leaking vars into the solver.</li>
<li><a
href="https://redirect.github.com/facebook/pyrefly/issues/2915">#2915</a>:
Division, floor division, and modulo by literal <code>0</code> are now
flagged as errors, catching <code>ZeroDivisionError</code> at static
analysis time instead of runtime.</li>
<li><a
href="https://redirect.github.com/facebook/pyrefly/issues/3009">#3009</a>:
Fixed false positive unused-variable warnings for variables used
exclusively within f-string format specifiers (e.g.,
<code>f&quot;{key:&lt;{max_len}}&quot;</code>). The AST visitor now
correctly descends into <code>format_spec</code> nodes.</li>
<li><a
href="https://redirect.github.com/facebook/pyrefly/issues/2799">#2799</a>:
Fixed false positive <code>[missing-attribute]</code> errors for
<code>dict.setdefault(key, []).append(val)</code> on unannotated dicts.
Overload resolution now creates fresh partial variables for each
overload, preventing incorrect pinning.</li>
<li><a
href="https://redirect.github.com/facebook/pyrefly/issues/2991">#2991</a>:
Fixed Pydantic lax-mode rewriting <code>re.Pattern[str]</code> to
<code>Pattern[LaxStr]</code> and rejecting <code>re.Pattern[str]</code>.
Regex patterns now expand to <code>re.Pattern[T] | T</code> instead of
recursively widening the inner type.</li>
<li><a
href="https://redirect.github.com/facebook/pyrefly/issues/2916">#2916</a>:
Fixed runtime <code>TypeError</code> from multiple inheritance with
conflicting <code>__slots__</code> (same slot names). Pyrefly now
detects and reports this layout conflict during class metadata
computation.</li>
<li><a
href="https://redirect.github.com/facebook/pyrefly/issues/2917">#2917</a>:
Fixed runtime <code>TypeError</code> from multiple inheritance with
conflicting <code>__slots__</code> (different slot names). Pyrefly now
detects non-empty <code>__slots__</code> in multiple bases and reports
the conflict.</li>
<li><a
href="https://redirect.github.com/facebook/pyrefly/issues/3064">#3064</a>:
Fixed false positive when using <code>issubclass()</code> after
<code>isinstance()</code> narrowing with custom metaclasses (e.g.,
Django's <code>ModelBase</code>). Metaclass instances are now correctly
accepted as valid class objects.</li>
<li><a
href="https://redirect.github.com/facebook/pyrefly/issues/3030">#3030</a>:
Fixed false positive <code>LiteralString</code> type error in
<code>map(str.strip, ...)</code>. Overloads with narrower
<code>self</code>-type annotations are now filtered out during unbound
method resolution.</li>
</ul>
<p>Thank-you to all our contributors who found these bugs and reported
them! Did you know this is one of the most helpful contributions you can
make to an open-source project? If you find any bugs in Pyrefly we want
to know about them! Please open a bug report issue <a
href="https://github.com/facebook/pyrefly/issues">here</a></p>
<hr />
<h2>📦 Upgrade</h2>
<pre lang="bash"><code>pip install --upgrade pyrefly==0.61.0
</code></pre>
<h3>How to safely upgrade your codebase</h3>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="582ad83313"><code>582ad83</code></a>
Bump Pyrefly version to 0.61.1</li>
<li><a
href="b71ef04355"><code>b71ef04</code></a>
Bump icu_decimal 2.1.1 -&gt; 2.2.0</li>
<li><a
href="526415af45"><code>526415a</code></a>
Update vendored wasm-bindgen to 0.2.118</li>
<li><a
href="23356019e2"><code>2335601</code></a>
Keep specialization errors arising from hints to overloaded calls</li>
<li><a
href="73b8f638d8"><code>73b8f63</code></a>
Use <code>with_snapshot</code> for is_subset_eq on unions</li>
<li><a
href="ce37688f12"><code>ce37688</code></a>
Take instantiation errors into account in
<code>Subset::with_snapshot</code></li>
<li><a
href="e2e3874cc3"><code>e2e3874</code></a>
Add <code>Solver::has_new_instantiation_errors</code></li>
<li><a
href="251ccae6c2"><code>251ccae</code></a>
Check for key in <code>instantiation_errors</code> before removing
it</li>
<li><a
href="2d69b92125"><code>2d69b92</code></a>
Reduce code repetition in <code>is_subset_eq</code> union case</li>
<li><a
href="2f6fa7a80f"><code>2f6fa7a</code></a>
Restore var state after failed Quantified checks in is_subset_eq</li>
<li>Additional commits viewable in <a
href="https://github.com/facebook/pyrefly/compare/0.60.0...0.61.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=pyrefly&package-manager=uv&previous-version=0.60.0&new-version=0.61.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
This commit is contained in:
dependabot[bot]
2026-05-19 16:29:17 +00:00
committed by GitHub
parent 2146f245a0
commit c5be5378bf
2 changed files with 13 additions and 13 deletions

View File

@@ -55,7 +55,7 @@ dev = [
"mypy==1.20.0",
"pluggy==1.6.0",
"pylint==4.0.2",
"pyrefly==0.60.0",
"pyrefly==0.61.1",
"pytest-asyncio==1.3.0",
"pytest-cov==7.1.0",
"pytest-xdist==3.8.0",

24
backend/uv.lock generated
View File

@@ -408,7 +408,7 @@ dev = [
{ name = "mypy", specifier = "==1.20.0" },
{ name = "pluggy", specifier = "==1.6.0" },
{ name = "pylint", specifier = "==4.0.2" },
{ name = "pyrefly", specifier = "==0.60.0" },
{ name = "pyrefly", specifier = "==0.61.1" },
{ name = "pytest", specifier = "==9.0.3" },
{ name = "pytest-asyncio", specifier = "==1.3.0" },
{ name = "pytest-cov", specifier = "==7.1.0" },
@@ -1446,19 +1446,19 @@ wheels = [
[[package]]
name = "pyrefly"
version = "0.60.0"
version = "0.61.1"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/c6/c7/28d14b64888e2d03815627ebff8d57a9f08389c4bbebfe70ae1ed98a1267/pyrefly-0.60.0.tar.gz", hash = "sha256:2499f5b6ff5342e86dfe1cd94bcce133519bbbc93b7ad5636195fea4f0fa3b81", size = 5500389, upload-time = "2026-04-06T19:57:30.643Z" }
sdist = { url = "https://files.pythonhosted.org/packages/b0/c8/52fce3f0e3718d9ff71d16af41cef925e58613741328004d3aa3fe585057/pyrefly-0.61.1.tar.gz", hash = "sha256:2a871320b7d2b28b8635064b620097d7091e84c49e4808d915ad31dad685d0f5", size = 5535788, upload-time = "2026-04-17T18:47:33.958Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/31/99/6c9984a09220e5eb7dd5c869b7a32d25c3d06b5e8854c6eb679db1145c3e/pyrefly-0.60.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:bf1691af0fee69d0c99c3c6e9d26ab6acd3c8afef96416f9ba2e74934833b7b5", size = 12921262, upload-time = "2026-04-06T19:57:00.745Z" },
{ url = "https://files.pythonhosted.org/packages/05/b3/6216aa3c00c88e59a27eb4149851b5affe86eeea6129f4224034a32dddb0/pyrefly-0.60.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:3e71b70c9b95545cf3b479bc55d1381b531de7b2380eb64411088a1e56b634cb", size = 12424413, upload-time = "2026-04-06T19:57:03.417Z" },
{ url = "https://files.pythonhosted.org/packages/9b/87/eb8dd73abd92a93952ac27a605e463c432fb250fb23186574038c7035594/pyrefly-0.60.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:680ee5f8f98230ea145652d7344708f5375786209c5bf03d8b911fdb0d0d4195", size = 35940884, upload-time = "2026-04-06T19:57:06.909Z" },
{ url = "https://files.pythonhosted.org/packages/0d/34/dc6aeb67b840c745fcee6db358295d554abe6ab555a7eaaf44624bd80bf1/pyrefly-0.60.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d0b20dbbe4aff15b959e8d825b7521a144c4122c11e57022e83b36568c54470", size = 38677220, upload-time = "2026-04-06T19:57:11.235Z" },
{ url = "https://files.pythonhosted.org/packages/66/6b/c863fcf7ef592b7d1db91502acf0d1113be8bed7a2a7143fc6f0dd90616f/pyrefly-0.60.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2911563c8e6b2eaefff68885c94727965469a35375a409235a7a4d2b7157dc15", size = 36907431, upload-time = "2026-04-06T19:57:15.074Z" },
{ url = "https://files.pythonhosted.org/packages/8e/a2/25ea095ab2ecca8e62884669b11a79f14299db93071685b73a97efbaf4f3/pyrefly-0.60.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0a631d9d04705e303fe156f2e62551611bc7ef8066c34708ceebcfb3088bd55", size = 41447898, upload-time = "2026-04-06T19:57:19.382Z" },
{ url = "https://files.pythonhosted.org/packages/8e/2c/097bdc6e8d40676b28eb03710a4577bc3c7b803cd24693ac02bf15de3d67/pyrefly-0.60.0-py3-none-win32.whl", hash = "sha256:a08d69298da5626cf502d3debbb6944fd13d2f405ea6625363751f1ff570d366", size = 11913434, upload-time = "2026-04-06T19:57:22.887Z" },
{ url = "https://files.pythonhosted.org/packages/0a/d4/8d27fe310e830c8d11ab73db38b93f9fd2e218744b6efb1204401c9a74d5/pyrefly-0.60.0-py3-none-win_amd64.whl", hash = "sha256:56cf30654e708ae1dd635ffefcba4fa4b349dd7004a6ccc5c41e3a9bb944320c", size = 12745033, upload-time = "2026-04-06T19:57:25.517Z" },
{ url = "https://files.pythonhosted.org/packages/1f/ad/8eea1f8fb8209f91f6dbfe48000c9d05fd0cdb1b5b3157283c9b1dada55d/pyrefly-0.60.0-py3-none-win_arm64.whl", hash = "sha256:b6d27fba970f4777063c0227c54167d83bece1804ea34f69e7118e409ba038d2", size = 12246390, upload-time = "2026-04-06T19:57:28.141Z" },
{ url = "https://files.pythonhosted.org/packages/61/38/e94ff401405a05fbf81c9bbfa993a34ffd03be84812b545063c8efb56b44/pyrefly-0.61.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:6e3ed857b99291fc4aa3b54ce22deb086c0174cf3a3775eccea7439efd16d925", size = 12969301, upload-time = "2026-04-17T18:47:06.036Z" },
{ url = "https://files.pythonhosted.org/packages/f3/be/53c7f9400696e46633c8cee8b6fd32ce7ab4a965ddf9ac4f4ea9e2034647/pyrefly-0.61.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:cf6335c1baf9470ca8113f7ea8bdbd0b96081c82a911157c576cdfc8a67a9a87", size = 12475413, upload-time = "2026-04-17T18:47:08.863Z" },
{ url = "https://files.pythonhosted.org/packages/77/68/83cc3267620b14f81fa596a84efc7ebcf5c49f79b521499e85d1a4fca6d8/pyrefly-0.61.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:844b5baddc2a631f69648a4756c54c97d86e4b9c07e335b216668e24390b77b6", size = 36074785, upload-time = "2026-04-17T18:47:11.845Z" },
{ url = "https://files.pythonhosted.org/packages/d8/00/e8d437995b8dcea022f5310bc873f5de1dcc71da4876d5be917ee9a93fef/pyrefly-0.61.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eaa294f90622c5b3743af8e9de4263447f22bb0e8b60c80cf83292adb4f2d14b", size = 38802979, upload-time = "2026-04-17T18:47:16.058Z" },
{ url = "https://files.pythonhosted.org/packages/16/3f/f1cbc58e8875608ae740d9575de95c8bc6d4dce202f82b4fe90005727618/pyrefly-0.61.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a8d8c3fe08b9593dce23ad4bc7c393891a379c2d580aa1f263182567721bd6f", size = 37029339, upload-time = "2026-04-17T18:47:19.601Z" },
{ url = "https://files.pythonhosted.org/packages/18/8c/0ff67041c88c28f48b10ce15758831d1e4e60f11db5bfc09dcffd5edb6ba/pyrefly-0.61.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:305f2086f4d7d796244b337884d96cf0d32435420336a77840ca369cf6fa06fd", size = 41595667, upload-time = "2026-04-17T18:47:23.122Z" },
{ url = "https://files.pythonhosted.org/packages/ff/9e/62b8139b140931593a6b29334802ea6b86d033c0bfd9794950279732253b/pyrefly-0.61.1-py3-none-win32.whl", hash = "sha256:3271a019885a72c8dd064e928bb445af807771506842f5f2faaac17d8e6e73a5", size = 11963660, upload-time = "2026-04-17T18:47:25.86Z" },
{ url = "https://files.pythonhosted.org/packages/38/6e/73280243d12bec28f55b6edd4e70c5cf11e3d7de2395ecb4eb36cca7dab4/pyrefly-0.61.1-py3-none-win_amd64.whl", hash = "sha256:3e3763d5d76f505c5b8897db1446bde8e138d50a67751f2aa76d6c6034254836", size = 12804056, upload-time = "2026-04-17T18:47:28.674Z" },
{ url = "https://files.pythonhosted.org/packages/87/32/38ac5af84d96167412024abf5e2f49f15b777987a1942e7a442e8e5fef82/pyrefly-0.61.1-py3-none-win_arm64.whl", hash = "sha256:cef5631e2ab09702274ec2eaaafee28a114891cf85f2d31568b329727e3ff735", size = 12302467, upload-time = "2026-04-17T18:47:31.409Z" },
]
[[package]]