From dce9f629fe1b91193555d5dfecbc0107a6cad1e4 Mon Sep 17 00:00:00 2001 From: jorenham Date: Thu, 23 Jul 2026 23:35:57 +0200 Subject: [PATCH 1/4] Run stubtest in CI --- .github/workflows/main.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 02bbcbfe..8405dcca 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -30,6 +30,7 @@ jobs: uv run ruff check src/sh/ tests/ uv run ruff format --check src/sh tests/ uv run mypy src/sh/ + uv run stubtest sh uv run rstcheck README.rst test: From 1c814561878512fc39c4ebfd7fa0b6ccbabd0bda Mon Sep 17 00:00:00 2001 From: jorenham Date: Thu, 23 Jul 2026 23:36:13 +0200 Subject: [PATCH 2/4] Run stubtest in tox --- tox.ini | 1 + 1 file changed, 1 insertion(+) diff --git a/tox.ini b/tox.ini index b46161d0..93beeac8 100644 --- a/tox.ini +++ b/tox.ini @@ -26,4 +26,5 @@ commands = ruff check src/sh/ tests/ ruff format --check src/sh tests/ mypy src/sh/ + stubtest sh rstcheck README.rst \ No newline at end of file From 9161e26b077cbdbd4eb049cfc4edd5450f9866a6 Mon Sep 17 00:00:00 2001 From: jorenham Date: Fri, 24 Jul 2026 00:01:49 +0200 Subject: [PATCH 3/4] Add pyrefly as development dependency --- pyproject.toml | 1 + uv.lock | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index 91c52aa0..33206466 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -45,6 +45,7 @@ dev = [ "sphinx-rtd-theme>=1.2.2", "pytest>=7.4.0", "mypy>=1.4.1", + "pyrefly>=1.1.1", ] [tool.ruff] diff --git a/uv.lock b/uv.lock index 126cdc48..95da146a 100644 --- a/uv.lock +++ b/uv.lock @@ -853,6 +853,25 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/79/d7/29e1e5e882f79133631f7bcace42d23db493f616463c157a1ab614bf69dd/pyproject_api-1.10.1-py3-none-any.whl", hash = "sha256:fa9e6f66c35b5017e909825d8f2b5d5482ea699d7be809d21c03bd1f7317f36a", size = 12992, upload-time = "2026-05-28T14:22:12.711Z" }, ] +[[package]] +name = "pyrefly" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8e/20/976165fa4b1517a1a92f393b3f4d4badabfff1165eff09d4cd4908428183/pyrefly-1.1.1.tar.gz", hash = "sha256:6deda959f8603a7dbdf112c48983e2275b2903cf33c8c739ed65d7e71a4fd520", size = 5880491, upload-time = "2026-06-18T23:45:43.785Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b5/d6/02ba666018c6a1cb4ddfa2db98ada721adddd374db5c29ba47a0bf2637fa/pyrefly-1.1.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:f4b8595f91885bc8b5e3c282ab68d1df21201668a84e6508b1e15f2feec0bb8d", size = 13631867, upload-time = "2026-06-18T23:45:13.923Z" }, + { url = "https://files.pythonhosted.org/packages/71/47/7a3457dbbddb513a83cf4fe527d5d5ebda5201a1010ad2a6034030e3e358/pyrefly-1.1.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:d6b238e1362622d47a6eb5af704fd8b613c94e8c303386efd6350e3da59fecc8", size = 13075304, upload-time = "2026-06-18T23:45:16.865Z" }, + { url = "https://files.pythonhosted.org/packages/84/df/70f4b3f42d58ed686a80df31e04eca54d88036cea4f9b96195c64ad0b2b5/pyrefly-1.1.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b50d4510e4f8aaea79e2c4b343a4d7a060c9451c0b2aa9bfe10d7ca1ef33d68d", size = 13446966, upload-time = "2026-06-18T23:45:19.644Z" }, + { url = "https://files.pythonhosted.org/packages/3c/53/12a19bd6c7af985bcbc13c6910d0f9f6684069ead2282a5c08c2bfbb5d03/pyrefly-1.1.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f330cf039ef3da3b910c84f3a7e431f0cf8d0c1d2dad26491d6cadf3c7cd4759", size = 14449222, upload-time = "2026-06-18T23:45:22.252Z" }, + { url = "https://files.pythonhosted.org/packages/93/f0/e55c48a50076fc0f9ecf4bdedec50456db383e01162f5e2121f8468be071/pyrefly-1.1.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a6342d87c52b04f72156da04f554c4d57f3616f2b32d1763969efb22d05a1407", size = 14472947, upload-time = "2026-06-18T23:45:24.858Z" }, + { url = "https://files.pythonhosted.org/packages/b6/e7/30e085b31fed978ecb675bdbb54df566673ab550469e5af2d350f6af0be6/pyrefly-1.1.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c08b814ad03175e9cf47111390537161828b472044c39ab3320252b3ac6b2edd", size = 13975252, upload-time = "2026-06-18T23:45:27.247Z" }, + { url = "https://files.pythonhosted.org/packages/47/58/49c3e67641133d3fe5d8d9a660dc0826c6c37ca197d86cad05fa7dd8bfd6/pyrefly-1.1.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:d50cad97f19fc893b04deff7239626cffff5dd27ffb29b7d303a1b770247b208", size = 13471780, upload-time = "2026-06-18T23:45:29.775Z" }, + { url = "https://files.pythonhosted.org/packages/71/1e/65a7ba8355e2c39d8331832905fb74dcc85fc122a3f1dfd6dbf2a88907ad/pyrefly-1.1.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:2150b450ee6a6bcbe69b2d45d9a4ebc934a609e1abcf65e490433f38eb873d84", size = 13989306, upload-time = "2026-06-18T23:45:32.576Z" }, + { url = "https://files.pythonhosted.org/packages/37/de/b7ee1ab2392c36945738246fba7524439810befa3cfcc03cb6157567fc10/pyrefly-1.1.1-py3-none-win32.whl", hash = "sha256:5ffd8a8ed62fe4e6bf0afe1837d1bad149bb3b9f80e928ef248c96b836db3742", size = 12608469, upload-time = "2026-06-18T23:45:35.419Z" }, + { url = "https://files.pythonhosted.org/packages/a6/9c/a0f5b52934bf80e9c7eff08222e7caf318287b9aef76acb8d9ac5740581b/pyrefly-1.1.1-py3-none-win_amd64.whl", hash = "sha256:4e0430f3ef69c8ac73505fd6584db70ed504665a9f0816fef7f723de510f26cb", size = 13502172, upload-time = "2026-06-18T23:45:38.375Z" }, + { url = "https://files.pythonhosted.org/packages/42/3d/4c6bcb3d456835f51445d3662a428f56c3ea5643ec798c577030ae34298c/pyrefly-1.1.1-py3-none-win_arm64.whl", hash = "sha256:83baf0db71e172665db1fca0ced50b8f7773f5192ca57e8ac6773a772b6d2fc5", size = 12895979, upload-time = "2026-06-18T23:45:41.026Z" }, +] + [[package]] name = "pytest" version = "9.0.3" @@ -972,6 +991,7 @@ source = { editable = "." } dev = [ { name = "coverage" }, { name = "mypy" }, + { name = "pyrefly" }, { name = "pytest" }, { name = "rstcheck" }, { name = "ruff" }, @@ -987,6 +1007,7 @@ dev = [ dev = [ { name = "coverage", specifier = ">=7.2.7" }, { name = "mypy", specifier = ">=1.4.1" }, + { name = "pyrefly", specifier = ">=1.1.1" }, { name = "pytest", specifier = ">=7.4.0" }, { name = "rstcheck", specifier = ">=6.1.2" }, { name = "ruff", specifier = ">=0.4" }, From 7c41eb9d09616537585ec9c875c72fca0f261907 Mon Sep 17 00:00:00 2001 From: jorenham Date: Fri, 24 Jul 2026 00:02:19 +0200 Subject: [PATCH 4/4] Enforce 100% type coverage with `pyrefly coverage check` --- .github/workflows/main.yml | 1 + tox.ini | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 8405dcca..f91097c6 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -31,6 +31,7 @@ jobs: uv run ruff format --check src/sh tests/ uv run mypy src/sh/ uv run stubtest sh + uv run pyrefly coverage check src/sh uv run rstcheck README.rst test: diff --git a/tox.ini b/tox.ini index 93beeac8..0f4a19d4 100644 --- a/tox.ini +++ b/tox.ini @@ -27,4 +27,5 @@ commands = ruff format --check src/sh tests/ mypy src/sh/ stubtest sh + pyrefly coverage check src/sh rstcheck README.rst \ No newline at end of file