riched 0.2.0__tar.gz → 0.2.1__tar.gz

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 (29) hide show
  1. riched-0.2.1/.python-version +1 -0
  2. {riched-0.2.0 → riched-0.2.1}/AGENTS.md +2 -2
  3. {riched-0.2.0 → riched-0.2.1}/PKG-INFO +4 -3
  4. {riched-0.2.0 → riched-0.2.1}/README.md +1 -0
  5. {riched-0.2.0 → riched-0.2.1}/pyproject.toml +3 -3
  6. {riched-0.2.0 → riched-0.2.1}/src/riched/bindings.yaml +8 -0
  7. {riched-0.2.0 → riched-0.2.1}/src/riched/editor.py +3 -0
  8. {riched-0.2.0 → riched-0.2.1}/src/riched/keybindings.py +1 -0
  9. {riched-0.2.0 → riched-0.2.1}/tests/runner.py +12 -0
  10. {riched-0.2.0 → riched-0.2.1}/tests/test_editor_shortcuts.py +48 -0
  11. {riched-0.2.0 → riched-0.2.1}/uv.lock +36 -2
  12. riched-0.2.0/.python-version +0 -1
  13. {riched-0.2.0 → riched-0.2.1}/.gitignore +0 -0
  14. {riched-0.2.0 → riched-0.2.1}/src/riched/__init__.py +0 -0
  15. {riched-0.2.0 → riched-0.2.1}/src/riched/app.py +0 -0
  16. {riched-0.2.0 → riched-0.2.1}/src/riched/cli.py +0 -0
  17. {riched-0.2.0 → riched-0.2.1}/src/riched/quick_open.py +0 -0
  18. {riched-0.2.0 → riched-0.2.1}/src/riched/screens.py +0 -0
  19. {riched-0.2.0 → riched-0.2.1}/src/riched/settings.py +0 -0
  20. {riched-0.2.0 → riched-0.2.1}/src/riched/syntax.py +0 -0
  21. {riched-0.2.0 → riched-0.2.1}/tests/__init__.py +0 -0
  22. {riched-0.2.0 → riched-0.2.1}/tests/helpers.py +0 -0
  23. {riched-0.2.0 → riched-0.2.1}/tests/test_command_palette.py +0 -0
  24. {riched-0.2.0 → riched-0.2.1}/tests/test_dirty_buffers.py +0 -0
  25. {riched-0.2.0 → riched-0.2.1}/tests/test_file_io.py +0 -0
  26. {riched-0.2.0 → riched-0.2.1}/tests/test_file_tree.py +0 -0
  27. {riched-0.2.0 → riched-0.2.1}/tests/test_footer.py +0 -0
  28. {riched-0.2.0 → riched-0.2.1}/tests/test_quick_open.py +0 -0
  29. {riched-0.2.0 → riched-0.2.1}/tests/test_syntax.py +0 -0
@@ -0,0 +1 @@
1
+ 3.12
@@ -10,12 +10,12 @@ This repository is a uv-managed Python project for `riched`, a Textual TUI edito
10
10
  - `uv run riched path/to/file.txt`: open or create a file in the editor.
11
11
  - `uv run python -m tests.runner`: run the Textual Pilot end-to-end suite.
12
12
  - `uv build`: build the source distribution and wheel in `dist/`.
13
- - `uv publish`: publish built distributions for a release.
13
+ - `set -a; source .env; set +a; uv publish --token "$PYPI_API"`: publish built distributions for a release using the PyPI API key from `.env`.
14
14
  - `uv add <package>`: add runtime dependencies; do not use `pip`.
15
15
 
16
16
  ## Coding Style & Naming Conventions
17
17
 
18
- Use Python 3.14-compatible code with type hints, `from __future__ import annotations`, `Path`, and small focused helpers. Use 4-space indentation. Keep constants in `UPPER_SNAKE_CASE`, classes in `PascalCase`, functions and methods in `snake_case`, and private helpers prefixed with `_`. Prefer Textual widgets and events over manual terminal control. Keep comments brief and only for non-obvious behavior.
18
+ Use Python 3.12-compatible code with type hints, `from __future__ import annotations`, `Path`, and small focused helpers. Use 4-space indentation. Keep constants in `UPPER_SNAKE_CASE`, classes in `PascalCase`, functions and methods in `snake_case`, and private helpers prefixed with `_`. Prefer Textual widgets and events over manual terminal control. Keep comments brief and only for non-obvious behavior.
19
19
 
20
20
  Keep key bindings in `src/riched/bindings.yaml`, not hardcoded in Python. The F1 hotkey popup is generated from this YAML and displays one user-facing key per binding, preferring `cmd` aliases over `super`.
21
21
 
@@ -1,8 +1,8 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: riched
3
- Version: 0.2.0
4
- Summary: A Textual TUI editor
5
- Requires-Python: >=3.14
3
+ Version: 0.2.1
4
+ Summary: TUI editor with VSCode keybindigs
5
+ Requires-Python: >=3.12
6
6
  Requires-Dist: pyyaml>=6.0.3
7
7
  Requires-Dist: textual[syntax]>=8.2.4
8
8
  Requires-Dist: tree-sitter-typescript>=0.23.2
@@ -72,6 +72,7 @@ Editor shortcuts:
72
72
  | `⌥⇧←` | Select word left |
73
73
  | `⌥⇧→` | Select word right |
74
74
  | `⌘L` | Select line |
75
+ | `⌘⇧K` | Delete line |
75
76
  | `⌘⇧←` | Select to line start |
76
77
  | `⌘⇧→` | Select to line end |
77
78
 
@@ -62,6 +62,7 @@ Editor shortcuts:
62
62
  | `⌥⇧←` | Select word left |
63
63
  | `⌥⇧→` | Select word right |
64
64
  | `⌘L` | Select line |
65
+ | `⌘⇧K` | Delete line |
65
66
  | `⌘⇧←` | Select to line start |
66
67
  | `⌘⇧→` | Select to line end |
67
68
 
@@ -1,9 +1,9 @@
1
1
  [project]
2
2
  name = "riched"
3
- version = "0.2.0"
4
- description = "A Textual TUI editor"
3
+ version = "0.2.1"
4
+ description = "TUI editor with VSCode keybindigs"
5
5
  readme = "README.md"
6
- requires-python = ">=3.14"
6
+ requires-python = ">=3.12"
7
7
  dependencies = [
8
8
  "pyyaml>=6.0.3",
9
9
  "textual[syntax]>=8.2.4",
@@ -52,6 +52,14 @@ editor:
52
52
  action: select_line
53
53
  description: Select line
54
54
  show: false
55
+ - key: cmd+shift+k,shift+cmd+k,super+shift+k,shift+super+k
56
+ action: delete_line
57
+ description: Delete line
58
+ - key: ctrl+shift+k,shift+ctrl+k
59
+ action: ignore
60
+ description: Ignore inherited delete line
61
+ show: false
62
+ help: false
55
63
  - key: shift+super+left,super+shift+left,shift+cmd+left,cmd+shift+left
56
64
  action: cursor_line_start(True)
57
65
  description: Select to line start
@@ -94,3 +94,6 @@ class RichedTextArea(TextArea):
94
94
  line = self.document.get_line(row)
95
95
  self.insert(line + "\n", (row, 0), maintain_selection_offset=False)
96
96
  self.move_cursor((row, col))
97
+
98
+ def action_ignore(self) -> None:
99
+ pass
@@ -76,6 +76,7 @@ def binding_help_groups() -> list[KeyBindingHelpGroup]:
76
76
  editor_rows = tuple(
77
77
  (_display_key(item["key"]), item.get("description") or item["action"])
78
78
  for item in BINDING_SPEC["editor"]
79
+ if item.get("help", True)
79
80
  )
80
81
  groups.append(KeyBindingHelpGroup("Editor", editor_rows))
81
82
 
@@ -23,8 +23,10 @@ from .test_editor_shortcuts import (
23
23
  test_cmd_l_repeats_expand_line_selection,
24
24
  test_cmd_l_selects_current_line_with_newline,
25
25
  test_cmd_l_selects_final_line_without_newline,
26
+ test_cmd_shift_k_deletes_current_line,
26
27
  test_cmd_shift_left_selects_to_line_start,
27
28
  test_cmd_shift_right_selects_to_line_end,
29
+ test_ctrl_shift_k_does_not_delete_current_line,
28
30
  test_copy_line_down,
29
31
  test_copy_line_up,
30
32
  test_move_line_at_boundaries_is_noop,
@@ -32,6 +34,7 @@ from .test_editor_shortcuts import (
32
34
  test_move_line_up,
33
35
  test_parser_order_super_shift_line_selection_aliases,
34
36
  test_super_l_selects_current_line_alias,
37
+ test_super_shift_k_deletes_current_line_alias,
35
38
  test_super_shift_line_selection_aliases,
36
39
  test_undo_multiline_insert_that_removes_scrollbar,
37
40
  )
@@ -145,6 +148,15 @@ TESTS: list[tuple[str, Callable[[], Awaitable[None]]]] = [
145
148
  "editor: cmd+l selects final line without newline",
146
149
  test_cmd_l_selects_final_line_without_newline,
147
150
  ),
151
+ ("editor: cmd+shift+k deletes current line", test_cmd_shift_k_deletes_current_line),
152
+ (
153
+ "editor: super+shift+k deletes current line alias",
154
+ test_super_shift_k_deletes_current_line_alias,
155
+ ),
156
+ (
157
+ "editor: ctrl+shift+k does not delete current line",
158
+ test_ctrl_shift_k_does_not_delete_current_line,
159
+ ),
148
160
  ("editor: cmd+shift+left selects line start", test_cmd_shift_left_selects_to_line_start),
149
161
  ("editor: cmd+shift+right selects line end", test_cmd_shift_right_selects_to_line_end),
150
162
  ("editor: super+shift line selection aliases", test_super_shift_line_selection_aliases),
@@ -229,6 +229,54 @@ async def test_cmd_l_selects_final_line_without_newline() -> None:
229
229
  assert editor.selected_text == "gamma", repr(editor.selected_text)
230
230
 
231
231
 
232
+ async def test_cmd_shift_k_deletes_current_line() -> None:
233
+ tmp, _ = _fresh_env()
234
+ f = tmp / "lines.txt"
235
+ f.write_text("alpha\nbeta\ngamma")
236
+ app = _make_app(f)
237
+ async with app.run_test() as pilot:
238
+ await pilot.pause()
239
+ editor = app.query_one("#editor", TextArea)
240
+ editor.move_cursor((1, 2))
241
+ await pilot.pause()
242
+ await pilot.press("cmd+shift+k")
243
+ await pilot.pause()
244
+ assert editor.text == "alpha\ngamma", repr(editor.text)
245
+ assert editor.cursor_location == (1, 2), editor.cursor_location
246
+
247
+
248
+ async def test_super_shift_k_deletes_current_line_alias() -> None:
249
+ tmp, _ = _fresh_env()
250
+ f = tmp / "lines.txt"
251
+ f.write_text("alpha\nbeta\ngamma")
252
+ app = _make_app(f)
253
+ async with app.run_test() as pilot:
254
+ await pilot.pause()
255
+ editor = app.query_one("#editor", TextArea)
256
+ editor.move_cursor((1, 2))
257
+ await pilot.pause()
258
+ await pilot.press("super+shift+k")
259
+ await pilot.pause()
260
+ assert editor.text == "alpha\ngamma", repr(editor.text)
261
+ assert editor.cursor_location == (1, 2), editor.cursor_location
262
+
263
+
264
+ async def test_ctrl_shift_k_does_not_delete_current_line() -> None:
265
+ tmp, _ = _fresh_env()
266
+ f = tmp / "lines.txt"
267
+ f.write_text("alpha\nbeta\ngamma")
268
+ app = _make_app(f)
269
+ async with app.run_test() as pilot:
270
+ await pilot.pause()
271
+ editor = app.query_one("#editor", TextArea)
272
+ editor.move_cursor((1, 2))
273
+ await pilot.pause()
274
+ await pilot.press("ctrl+shift+k")
275
+ await pilot.pause()
276
+ assert editor.text == "alpha\nbeta\ngamma", repr(editor.text)
277
+ assert editor.cursor_location == (1, 2), editor.cursor_location
278
+
279
+
232
280
  async def test_cmd_shift_left_selects_to_line_start() -> None:
233
281
  tmp, _ = _fresh_env()
234
282
  f = tmp / "select.txt"
@@ -1,6 +1,6 @@
1
1
  version = 1
2
2
  revision = 3
3
- requires-python = ">=3.14"
3
+ requires-python = ">=3.12"
4
4
 
5
5
  [[package]]
6
6
  name = "linkify-it-py"
@@ -76,6 +76,26 @@ version = "6.0.3"
76
76
  source = { registry = "https://pypi.org/simple" }
77
77
  sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" }
78
78
  wheels = [
79
+ { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063, upload-time = "2025-09-25T21:32:11.445Z" },
80
+ { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973, upload-time = "2025-09-25T21:32:12.492Z" },
81
+ { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116, upload-time = "2025-09-25T21:32:13.652Z" },
82
+ { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011, upload-time = "2025-09-25T21:32:15.21Z" },
83
+ { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870, upload-time = "2025-09-25T21:32:16.431Z" },
84
+ { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089, upload-time = "2025-09-25T21:32:17.56Z" },
85
+ { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181, upload-time = "2025-09-25T21:32:18.834Z" },
86
+ { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658, upload-time = "2025-09-25T21:32:20.209Z" },
87
+ { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003, upload-time = "2025-09-25T21:32:21.167Z" },
88
+ { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344, upload-time = "2025-09-25T21:32:22.617Z" },
89
+ { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669, upload-time = "2025-09-25T21:32:23.673Z" },
90
+ { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252, upload-time = "2025-09-25T21:32:25.149Z" },
91
+ { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" },
92
+ { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159, upload-time = "2025-09-25T21:32:27.727Z" },
93
+ { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626, upload-time = "2025-09-25T21:32:28.878Z" },
94
+ { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" },
95
+ { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115, upload-time = "2025-09-25T21:32:31.353Z" },
96
+ { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427, upload-time = "2025-09-25T21:32:32.58Z" },
97
+ { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090, upload-time = "2025-09-25T21:32:33.659Z" },
98
+ { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246, upload-time = "2025-09-25T21:32:34.663Z" },
79
99
  { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" },
80
100
  { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" },
81
101
  { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" },
@@ -111,7 +131,7 @@ wheels = [
111
131
 
112
132
  [[package]]
113
133
  name = "riched"
114
- version = "0.2.0"
134
+ version = "0.2.1"
115
135
  source = { editable = "." }
116
136
  dependencies = [
117
137
  { name = "pyyaml" },
@@ -169,6 +189,20 @@ version = "0.25.2"
169
189
  source = { registry = "https://pypi.org/simple" }
170
190
  sdist = { url = "https://files.pythonhosted.org/packages/66/7c/0350cfc47faadc0d3cf7d8237a4e34032b3014ddf4a12ded9933e1648b55/tree-sitter-0.25.2.tar.gz", hash = "sha256:fe43c158555da46723b28b52e058ad444195afd1db3ca7720c59a254544e9c20", size = 177961, upload-time = "2025-09-25T17:37:59.751Z" }
171
191
  wheels = [
192
+ { url = "https://files.pythonhosted.org/packages/3c/9e/20c2a00a862f1c2897a436b17edb774e831b22218083b459d0d081c9db33/tree_sitter-0.25.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ddabfff809ffc983fc9963455ba1cecc90295803e06e140a4c83e94c1fa3d960", size = 146941, upload-time = "2025-09-25T17:37:34.813Z" },
193
+ { url = "https://files.pythonhosted.org/packages/ef/04/8512e2062e652a1016e840ce36ba1cc33258b0dcc4e500d8089b4054afec/tree_sitter-0.25.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c0c0ab5f94938a23fe81928a21cc0fac44143133ccc4eb7eeb1b92f84748331c", size = 137699, upload-time = "2025-09-25T17:37:36.349Z" },
194
+ { url = "https://files.pythonhosted.org/packages/47/8a/d48c0414db19307b0fb3bb10d76a3a0cbe275bb293f145ee7fba2abd668e/tree_sitter-0.25.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dd12d80d91d4114ca097626eb82714618dcdfacd6a5e0955216c6485c350ef99", size = 607125, upload-time = "2025-09-25T17:37:37.725Z" },
195
+ { url = "https://files.pythonhosted.org/packages/39/d1/b95f545e9fc5001b8a78636ef942a4e4e536580caa6a99e73dd0a02e87aa/tree_sitter-0.25.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b43a9e4c89d4d0839de27cd4d6902d33396de700e9ff4c5ab7631f277a85ead9", size = 635418, upload-time = "2025-09-25T17:37:38.922Z" },
196
+ { url = "https://files.pythonhosted.org/packages/de/4d/b734bde3fb6f3513a010fa91f1f2875442cdc0382d6a949005cd84563d8f/tree_sitter-0.25.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fbb1706407c0e451c4f8cc016fec27d72d4b211fdd3173320b1ada7a6c74c3ac", size = 631250, upload-time = "2025-09-25T17:37:40.039Z" },
197
+ { url = "https://files.pythonhosted.org/packages/46/f2/5f654994f36d10c64d50a192239599fcae46677491c8dd53e7579c35a3e3/tree_sitter-0.25.2-cp312-cp312-win_amd64.whl", hash = "sha256:6d0302550bbe4620a5dc7649517c4409d74ef18558276ce758419cf09e578897", size = 127156, upload-time = "2025-09-25T17:37:41.132Z" },
198
+ { url = "https://files.pythonhosted.org/packages/67/23/148c468d410efcf0a9535272d81c258d840c27b34781d625f1f627e2e27d/tree_sitter-0.25.2-cp312-cp312-win_arm64.whl", hash = "sha256:0c8b6682cac77e37cfe5cf7ec388844957f48b7bd8d6321d0ca2d852994e10d5", size = 113984, upload-time = "2025-09-25T17:37:42.074Z" },
199
+ { url = "https://files.pythonhosted.org/packages/8c/67/67492014ce32729b63d7ef318a19f9cfedd855d677de5773476caf771e96/tree_sitter-0.25.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0628671f0de69bb279558ef6b640bcfc97864fe0026d840f872728a86cd6b6cd", size = 146926, upload-time = "2025-09-25T17:37:43.041Z" },
200
+ { url = "https://files.pythonhosted.org/packages/4e/9c/a278b15e6b263e86c5e301c82a60923fa7c59d44f78d7a110a89a413e640/tree_sitter-0.25.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f5ddcd3e291a749b62521f71fc953f66f5fd9743973fd6dd962b092773569601", size = 137712, upload-time = "2025-09-25T17:37:44.039Z" },
201
+ { url = "https://files.pythonhosted.org/packages/54/9a/423bba15d2bf6473ba67846ba5244b988cd97a4b1ea2b146822162256794/tree_sitter-0.25.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bd88fbb0f6c3a0f28f0a68d72df88e9755cf5215bae146f5a1bdc8362b772053", size = 607873, upload-time = "2025-09-25T17:37:45.477Z" },
202
+ { url = "https://files.pythonhosted.org/packages/ed/4c/b430d2cb43f8badfb3a3fa9d6cd7c8247698187b5674008c9d67b2a90c8e/tree_sitter-0.25.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b878e296e63661c8e124177cc3084b041ba3f5936b43076d57c487822426f614", size = 636313, upload-time = "2025-09-25T17:37:46.68Z" },
203
+ { url = "https://files.pythonhosted.org/packages/9d/27/5f97098dbba807331d666a0997662e82d066e84b17d92efab575d283822f/tree_sitter-0.25.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d77605e0d353ba3fe5627e5490f0fbfe44141bafa4478d88ef7954a61a848dae", size = 631370, upload-time = "2025-09-25T17:37:47.993Z" },
204
+ { url = "https://files.pythonhosted.org/packages/d4/3c/87caaed663fabc35e18dc704cd0e9800a0ee2f22bd18b9cbe7c10799895d/tree_sitter-0.25.2-cp313-cp313-win_amd64.whl", hash = "sha256:463c032bd02052d934daa5f45d183e0521ceb783c2548501cf034b0beba92c9b", size = 127157, upload-time = "2025-09-25T17:37:48.967Z" },
205
+ { url = "https://files.pythonhosted.org/packages/d5/23/f8467b408b7988aff4ea40946a4bd1a2c1a73d17156a9d039bbaff1e2ceb/tree_sitter-0.25.2-cp313-cp313-win_arm64.whl", hash = "sha256:b3f63a1796886249bd22c559a5944d64d05d43f2be72961624278eff0dcc5cb8", size = 113975, upload-time = "2025-09-25T17:37:49.922Z" },
172
206
  { url = "https://files.pythonhosted.org/packages/07/e3/d9526ba71dfbbe4eba5e51d89432b4b333a49a1e70712aa5590cd22fc74f/tree_sitter-0.25.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:65d3c931013ea798b502782acab986bbf47ba2c452610ab0776cf4a8ef150fc0", size = 146776, upload-time = "2025-09-25T17:37:50.898Z" },
173
207
  { url = "https://files.pythonhosted.org/packages/42/97/4bd4ad97f85a23011dd8a535534bb1035c4e0bac1234d58f438e15cff51f/tree_sitter-0.25.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:bda059af9d621918efb813b22fb06b3fe00c3e94079c6143fcb2c565eb44cb87", size = 137732, upload-time = "2025-09-25T17:37:51.877Z" },
174
208
  { url = "https://files.pythonhosted.org/packages/b6/19/1e968aa0b1b567988ed522f836498a6a9529a74aab15f09dd9ac1e41f505/tree_sitter-0.25.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eac4e8e4c7060c75f395feec46421eb61212cb73998dbe004b7384724f3682ab", size = 609456, upload-time = "2025-09-25T17:37:52.925Z" },
@@ -1 +0,0 @@
1
- 3.14
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes