tree-sitter


Nametree-sitter JSON
Version 0.21.3 PyPI version JSON
download
home_pageNone
SummaryPython bindings for the Tree-Sitter parsing library
upload_time2024-03-26 10:53:35
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseNone
keywords incremental parsing tree-sitter
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Python Tree-sitter

[![CI][ci]](https://github.com/tree-sitter/py-tree-sitter/actions/workflows/ci.yml)
[![pypi][pypi]](https://pypi.org/project/tree-sitter/)

This module provides Python bindings to the [tree-sitter] parsing library.

## Installation

The package has no library dependencies and provides pre-compiled wheels for all major platforms.

> [!NOTE]
> If your platform is not currently supported, please submit an [issue] on GitHub.

```sh
pip install tree-sitter
```

## Usage

### Setup

#### Install languages

Tree-sitter language implementations also provide pre-compiled binary wheels.
Let's take [Python][tree-sitter-python] as an example.

```sh
pip install tree-sitter-python
```

Then, you can load it as a `Language` object:

```python
import tree_sitter_python as tspython
from tree_sitter import Language, Parser

PY_LANGUAGE = Language(tspython.language(), "python")
```

#### Build from source

> [!WARNING]
> This method of loading languages is deprecated and will be removed in `v0.22.0`.
> You should only use it if you need languages that have not updated their bindings.
> Keep in mind that you will need a C compiler in this case.

First you'll need a Tree-sitter language implementation for each language that you want to parse.

```sh
git clone https://github.com/tree-sitter/tree-sitter-go
git clone https://github.com/tree-sitter/tree-sitter-javascript
git clone https://github.com/tree-sitter/tree-sitter-python
```

Use the `Language.build_library` method to compile these into a library that's
usable from Python. This function will return immediately if the library has
already been compiled since the last time its source code was modified:

```python
from tree_sitter import Language, Parser

Language.build_library(
    # Store the library in the `build` directory
    "build/my-languages.so",
    # Include one or more languages
    ["vendor/tree-sitter-go", "vendor/tree-sitter-javascript", "vendor/tree-sitter-python"],
)
```

Load the languages into your app as `Language` objects:

```python
GO_LANGUAGE = Language("build/my-languages.so", "go")
JS_LANGUAGE = Language("build/my-languages.so", "javascript")
PY_LANGUAGE = Language("build/my-languages.so", "python")
```

### Basic parsing

Create a `Parser` and configure it to use a language:

```python
parser = Parser()
parser.set_language(PY_LANGUAGE)
```

Parse some source code:

```python
tree = parser.parse(
    bytes(
        """
def foo():
    if bar:
        baz()
""",
        "utf8",
    )
)
```

If you have your source code in some data structure other than a bytes object,
you can pass a "read" callable to the parse function.

The read callable can use either the byte offset or point tuple to read from
buffer and return source code as bytes object. An empty bytes object or None
terminates parsing for that line. The bytes must encode the source as UTF-8.

For example, to use the byte offset:

```python
src = bytes(
    """
def foo():
    if bar:
        baz()
""",
    "utf8",
)


def read_callable_byte_offset(byte_offset, point):
    return src[byte_offset : byte_offset + 1]


tree = parser.parse(read_callable_byte_offset)
```

And to use the point:

```python
src_lines = ["\n", "def foo():\n", "    if bar:\n", "        baz()\n"]


def read_callable_point(byte_offset, point):
    row, column = point
    if row >= len(src_lines) or column >= len(src_lines[row]):
        return None
    return src_lines[row][column:].encode("utf8")


tree = parser.parse(read_callable_point)
```

Inspect the resulting `Tree`:

```python
root_node = tree.root_node
assert root_node.type == 'module'
assert root_node.start_point == (1, 0)
assert root_node.end_point == (4, 0)

function_node = root_node.children[0]
assert function_node.type == 'function_definition'
assert function_node.child_by_field_name('name').type == 'identifier'

function_name_node = function_node.children[1]
assert function_name_node.type == 'identifier'
assert function_name_node.start_point == (1, 4)
assert function_name_node.end_point == (1, 7)

function_body_node = function_node.child_by_field_name("body")

if_statement_node = function_body_node.child(0)
assert if_statement_node.type == "if_statement"

function_call_node = if_statement_node.child_by_field_name("consequence").child(0).child(0)
assert function_call_node.type == "call"

function_call_name_node = function_call_node.child_by_field_name("function")
assert function_call_name_node.type == "identifier"

function_call_args_node = function_call_node.child_by_field_name("arguments")
assert function_call_args_node.type == "argument_list"


assert root_node.sexp() == (
    "(module "
        "(function_definition "
            "name: (identifier) "
            "parameters: (parameters) "
            "body: (block "
                "(if_statement "
                    "condition: (identifier) "
                    "consequence: (block "
                        "(expression_statement (call "
                            "function: (identifier) "
                            "arguments: (argument_list))))))))"
)
```

### Walking syntax trees

If you need to traverse a large number of nodes efficiently, you can use
a `TreeCursor`:

```python
cursor = tree.walk()

assert cursor.node.type == "module"

assert cursor.goto_first_child()
assert cursor.node.type == "function_definition"

assert cursor.goto_first_child()
assert cursor.node.type == "def"

# Returns `False` because the `def` node has no children
assert not cursor.goto_first_child()

assert cursor.goto_next_sibling()
assert cursor.node.type == "identifier"

assert cursor.goto_next_sibling()
assert cursor.node.type == "parameters"

assert cursor.goto_parent()
assert cursor.node.type == "function_definition"
```

> [!IMPORTANT]
> Keep in mind that the cursor can only walk into children of the node that it started from.

See [examples/walk_tree.py] for a complete example of iterating over every node in a tree.

### Editing

When a source file is edited, you can edit the syntax tree to keep it in sync with
the source:

```python
new_src = src[:5] + src[5 : 5 + 2].upper() + src[5 + 2 :]

tree.edit(
    start_byte=5,
    old_end_byte=5,
    new_end_byte=5 + 2,
    start_point=(0, 5),
    old_end_point=(0, 5),
    new_end_point=(0, 5 + 2),
)
```

Then, when you're ready to incorporate the changes into a new syntax tree,
you can call `Parser.parse` again, but pass in the old tree:

```python
new_tree = parser.parse(new_src, tree)
```

This will run much faster than if you were parsing from scratch.

The `Tree.changed_ranges` method can be called on the _old_ tree to return
the list of ranges whose syntactic structure has been changed:

```python
for changed_range in tree.changed_ranges(new_tree):
    print("Changed range:")
    print(f"  Start point {changed_range.start_point}")
    print(f"  Start byte {changed_range.start_byte}")
    print(f"  End point {changed_range.end_point}")
    print(f"  End byte {changed_range.end_byte}")
```

### Pattern-matching

You can search for patterns in a syntax tree using a [tree query]:

```python
query = PY_LANGUAGE.query(
    """
(function_definition
  name: (identifier) @function.def
  body: (block) @function.block)

(call
  function: (identifier) @function.call
  arguments: (argument_list) @function.args)
"""
)
```

#### Captures

```python
captures = query.captures(tree.root_node)
assert len(captures) == 2
assert captures[0][0] == function_name_node
assert captures[0][1] == "function.def"
```

The `Query.captures()` method takes optional `start_point`, `end_point`,
`start_byte` and `end_byte` keyword arguments, which can be used to restrict the
query's range. Only one of the `..._byte` or `..._point` pairs need to be given
to restrict the range. If all are omitted, the entire range of the passed node
is used.

#### Matches

```python
matches = query.matches(tree.root_node)
assert len(matches) == 2

# first match
assert matches[0][1]["function.def"] == function_name_node
assert matches[0][1]["function.block"] == function_body_node

# second match
assert matches[1][1]["function.call"] == function_call_name_node
assert matches[1][1]["function.args"] == function_call_args_node
```

The `Query.matches()` method takes the same optional arguments as `Query.captures()`.
The difference between the two methods is that `Query.matches()` groups captures into matches,
which is much more useful when your captures within a query relate to each other. It maps the
capture's name to the node that was captured via a dictionary.

To try out and explore the code referenced in this README, check out [examples/usage.py].

[tree-sitter]: https://tree-sitter.github.io/tree-sitter/
[issue]: https://github.com/tree-sitter/py-tree-sitter/issues/new
[tree-sitter-python]: https://github.com/tree-sitter/tree-sitter-python
[tree query]: https://tree-sitter.github.io/tree-sitter/using-parsers#query-syntax
[ci]: https://img.shields.io/github/actions/workflow/status/tree-sitter/py-tree-sitter/ci.yml?logo=github&label=CI
[pypi]: https://img.shields.io/pypi/v/tree-sitter?logo=pypi&logoColor=ffd242&label=PyPI
[examples/walk_tree.py]: https://github.com/tree-sitter/py-tree-sitter/blob/master/examples/walk_tree.py
[examples/usage.py]: https://github.com/tree-sitter/py-tree-sitter/blob/master/examples/usage.py

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "tree-sitter",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "incremental, parsing, tree-sitter",
    "author": null,
    "author_email": "Max Brunsfeld <maxbrunsfeld@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/39/9e/b7cb190aa08e4ea387f2b1531da03efb4b8b033426753c0b97e3698645f6/tree-sitter-0.21.3.tar.gz",
    "platform": null,
    "description": "# Python Tree-sitter\n\n[![CI][ci]](https://github.com/tree-sitter/py-tree-sitter/actions/workflows/ci.yml)\n[![pypi][pypi]](https://pypi.org/project/tree-sitter/)\n\nThis module provides Python bindings to the [tree-sitter] parsing library.\n\n## Installation\n\nThe package has no library dependencies and provides pre-compiled wheels for all major platforms.\n\n> [!NOTE]\n> If your platform is not currently supported, please submit an [issue] on GitHub.\n\n```sh\npip install tree-sitter\n```\n\n## Usage\n\n### Setup\n\n#### Install languages\n\nTree-sitter language implementations also provide pre-compiled binary wheels.\nLet's take [Python][tree-sitter-python] as an example.\n\n```sh\npip install tree-sitter-python\n```\n\nThen, you can load it as a `Language` object:\n\n```python\nimport tree_sitter_python as tspython\nfrom tree_sitter import Language, Parser\n\nPY_LANGUAGE = Language(tspython.language(), \"python\")\n```\n\n#### Build from source\n\n> [!WARNING]\n> This method of loading languages is deprecated and will be removed in `v0.22.0`.\n> You should only use it if you need languages that have not updated their bindings.\n> Keep in mind that you will need a C compiler in this case.\n\nFirst you'll need a Tree-sitter language implementation for each language that you want to parse.\n\n```sh\ngit clone https://github.com/tree-sitter/tree-sitter-go\ngit clone https://github.com/tree-sitter/tree-sitter-javascript\ngit clone https://github.com/tree-sitter/tree-sitter-python\n```\n\nUse the `Language.build_library` method to compile these into a library that's\nusable from Python. This function will return immediately if the library has\nalready been compiled since the last time its source code was modified:\n\n```python\nfrom tree_sitter import Language, Parser\n\nLanguage.build_library(\n    # Store the library in the `build` directory\n    \"build/my-languages.so\",\n    # Include one or more languages\n    [\"vendor/tree-sitter-go\", \"vendor/tree-sitter-javascript\", \"vendor/tree-sitter-python\"],\n)\n```\n\nLoad the languages into your app as `Language` objects:\n\n```python\nGO_LANGUAGE = Language(\"build/my-languages.so\", \"go\")\nJS_LANGUAGE = Language(\"build/my-languages.so\", \"javascript\")\nPY_LANGUAGE = Language(\"build/my-languages.so\", \"python\")\n```\n\n### Basic parsing\n\nCreate a `Parser` and configure it to use a language:\n\n```python\nparser = Parser()\nparser.set_language(PY_LANGUAGE)\n```\n\nParse some source code:\n\n```python\ntree = parser.parse(\n    bytes(\n        \"\"\"\ndef foo():\n    if bar:\n        baz()\n\"\"\",\n        \"utf8\",\n    )\n)\n```\n\nIf you have your source code in some data structure other than a bytes object,\nyou can pass a \"read\" callable to the parse function.\n\nThe read callable can use either the byte offset or point tuple to read from\nbuffer and return source code as bytes object. An empty bytes object or None\nterminates parsing for that line. The bytes must encode the source as UTF-8.\n\nFor example, to use the byte offset:\n\n```python\nsrc = bytes(\n    \"\"\"\ndef foo():\n    if bar:\n        baz()\n\"\"\",\n    \"utf8\",\n)\n\n\ndef read_callable_byte_offset(byte_offset, point):\n    return src[byte_offset : byte_offset + 1]\n\n\ntree = parser.parse(read_callable_byte_offset)\n```\n\nAnd to use the point:\n\n```python\nsrc_lines = [\"\\n\", \"def foo():\\n\", \"    if bar:\\n\", \"        baz()\\n\"]\n\n\ndef read_callable_point(byte_offset, point):\n    row, column = point\n    if row >= len(src_lines) or column >= len(src_lines[row]):\n        return None\n    return src_lines[row][column:].encode(\"utf8\")\n\n\ntree = parser.parse(read_callable_point)\n```\n\nInspect the resulting `Tree`:\n\n```python\nroot_node = tree.root_node\nassert root_node.type == 'module'\nassert root_node.start_point == (1, 0)\nassert root_node.end_point == (4, 0)\n\nfunction_node = root_node.children[0]\nassert function_node.type == 'function_definition'\nassert function_node.child_by_field_name('name').type == 'identifier'\n\nfunction_name_node = function_node.children[1]\nassert function_name_node.type == 'identifier'\nassert function_name_node.start_point == (1, 4)\nassert function_name_node.end_point == (1, 7)\n\nfunction_body_node = function_node.child_by_field_name(\"body\")\n\nif_statement_node = function_body_node.child(0)\nassert if_statement_node.type == \"if_statement\"\n\nfunction_call_node = if_statement_node.child_by_field_name(\"consequence\").child(0).child(0)\nassert function_call_node.type == \"call\"\n\nfunction_call_name_node = function_call_node.child_by_field_name(\"function\")\nassert function_call_name_node.type == \"identifier\"\n\nfunction_call_args_node = function_call_node.child_by_field_name(\"arguments\")\nassert function_call_args_node.type == \"argument_list\"\n\n\nassert root_node.sexp() == (\n    \"(module \"\n        \"(function_definition \"\n            \"name: (identifier) \"\n            \"parameters: (parameters) \"\n            \"body: (block \"\n                \"(if_statement \"\n                    \"condition: (identifier) \"\n                    \"consequence: (block \"\n                        \"(expression_statement (call \"\n                            \"function: (identifier) \"\n                            \"arguments: (argument_list))))))))\"\n)\n```\n\n### Walking syntax trees\n\nIf you need to traverse a large number of nodes efficiently, you can use\na `TreeCursor`:\n\n```python\ncursor = tree.walk()\n\nassert cursor.node.type == \"module\"\n\nassert cursor.goto_first_child()\nassert cursor.node.type == \"function_definition\"\n\nassert cursor.goto_first_child()\nassert cursor.node.type == \"def\"\n\n# Returns `False` because the `def` node has no children\nassert not cursor.goto_first_child()\n\nassert cursor.goto_next_sibling()\nassert cursor.node.type == \"identifier\"\n\nassert cursor.goto_next_sibling()\nassert cursor.node.type == \"parameters\"\n\nassert cursor.goto_parent()\nassert cursor.node.type == \"function_definition\"\n```\n\n> [!IMPORTANT]\n> Keep in mind that the cursor can only walk into children of the node that it started from.\n\nSee [examples/walk_tree.py] for a complete example of iterating over every node in a tree.\n\n### Editing\n\nWhen a source file is edited, you can edit the syntax tree to keep it in sync with\nthe source:\n\n```python\nnew_src = src[:5] + src[5 : 5 + 2].upper() + src[5 + 2 :]\n\ntree.edit(\n    start_byte=5,\n    old_end_byte=5,\n    new_end_byte=5 + 2,\n    start_point=(0, 5),\n    old_end_point=(0, 5),\n    new_end_point=(0, 5 + 2),\n)\n```\n\nThen, when you're ready to incorporate the changes into a new syntax tree,\nyou can call `Parser.parse` again, but pass in the old tree:\n\n```python\nnew_tree = parser.parse(new_src, tree)\n```\n\nThis will run much faster than if you were parsing from scratch.\n\nThe `Tree.changed_ranges` method can be called on the _old_ tree to return\nthe list of ranges whose syntactic structure has been changed:\n\n```python\nfor changed_range in tree.changed_ranges(new_tree):\n    print(\"Changed range:\")\n    print(f\"  Start point {changed_range.start_point}\")\n    print(f\"  Start byte {changed_range.start_byte}\")\n    print(f\"  End point {changed_range.end_point}\")\n    print(f\"  End byte {changed_range.end_byte}\")\n```\n\n### Pattern-matching\n\nYou can search for patterns in a syntax tree using a [tree query]:\n\n```python\nquery = PY_LANGUAGE.query(\n    \"\"\"\n(function_definition\n  name: (identifier) @function.def\n  body: (block) @function.block)\n\n(call\n  function: (identifier) @function.call\n  arguments: (argument_list) @function.args)\n\"\"\"\n)\n```\n\n#### Captures\n\n```python\ncaptures = query.captures(tree.root_node)\nassert len(captures) == 2\nassert captures[0][0] == function_name_node\nassert captures[0][1] == \"function.def\"\n```\n\nThe `Query.captures()` method takes optional `start_point`, `end_point`,\n`start_byte` and `end_byte` keyword arguments, which can be used to restrict the\nquery's range. Only one of the `..._byte` or `..._point` pairs need to be given\nto restrict the range. If all are omitted, the entire range of the passed node\nis used.\n\n#### Matches\n\n```python\nmatches = query.matches(tree.root_node)\nassert len(matches) == 2\n\n# first match\nassert matches[0][1][\"function.def\"] == function_name_node\nassert matches[0][1][\"function.block\"] == function_body_node\n\n# second match\nassert matches[1][1][\"function.call\"] == function_call_name_node\nassert matches[1][1][\"function.args\"] == function_call_args_node\n```\n\nThe `Query.matches()` method takes the same optional arguments as `Query.captures()`.\nThe difference between the two methods is that `Query.matches()` groups captures into matches,\nwhich is much more useful when your captures within a query relate to each other. It maps the\ncapture's name to the node that was captured via a dictionary.\n\nTo try out and explore the code referenced in this README, check out [examples/usage.py].\n\n[tree-sitter]: https://tree-sitter.github.io/tree-sitter/\n[issue]: https://github.com/tree-sitter/py-tree-sitter/issues/new\n[tree-sitter-python]: https://github.com/tree-sitter/tree-sitter-python\n[tree query]: https://tree-sitter.github.io/tree-sitter/using-parsers#query-syntax\n[ci]: https://img.shields.io/github/actions/workflow/status/tree-sitter/py-tree-sitter/ci.yml?logo=github&label=CI\n[pypi]: https://img.shields.io/pypi/v/tree-sitter?logo=pypi&logoColor=ffd242&label=PyPI\n[examples/walk_tree.py]: https://github.com/tree-sitter/py-tree-sitter/blob/master/examples/walk_tree.py\n[examples/usage.py]: https://github.com/tree-sitter/py-tree-sitter/blob/master/examples/usage.py\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Python bindings for the Tree-Sitter parsing library",
    "version": "0.21.3",
    "project_urls": {
        "Homepage": "https://tree-sitter.github.io/tree-sitter/",
        "Source": "https://github.com/tree-sitter/py-tree-sitter"
    },
    "split_keywords": [
        "incremental",
        " parsing",
        " tree-sitter"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "60b35507348eee41af3abf537607779c87de9141fc41af5aa547ff5c1a87fcf6",
                "md5": "eff297f054c3383a3f2f0e5dfd811424",
                "sha256": "351f302b6615230c9dac9829f0ba20a94362cd658206ca9a7b2d58d73373dfb0"
            },
            "downloads": -1,
            "filename": "tree_sitter-0.21.3-cp310-cp310-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "eff297f054c3383a3f2f0e5dfd811424",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 133430,
            "upload_time": "2024-03-26T10:52:32",
            "upload_time_iso_8601": "2024-03-26T10:52:32.044705Z",
            "url": "https://files.pythonhosted.org/packages/60/b3/5507348eee41af3abf537607779c87de9141fc41af5aa547ff5c1a87fcf6/tree_sitter-0.21.3-cp310-cp310-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a52405a76f662445ebdebd00e12bc4c9ebf974a559bb7f4863dc1def775add39",
                "md5": "b34c6fa18229231bab83737e9976184a",
                "sha256": "766e79ae1e61271e7fdfecf35b6401ad9b47fc07a0965ad78e7f97fddfdf47a6"
            },
            "downloads": -1,
            "filename": "tree_sitter-0.21.3-cp310-cp310-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "b34c6fa18229231bab83737e9976184a",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 126087,
            "upload_time": "2024-03-26T10:52:34",
            "upload_time_iso_8601": "2024-03-26T10:52:34.239093Z",
            "url": "https://files.pythonhosted.org/packages/a5/24/05a76f662445ebdebd00e12bc4c9ebf974a559bb7f4863dc1def775add39/tree_sitter-0.21.3-cp310-cp310-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "64742c9dc1acb4c43b9c15765ab0fb4babb76e49e8198889dfc730bc1e906a82",
                "md5": "ab6dd1055901645b8343db69940cde85",
                "sha256": "2c4d3d4d4b44857e87de55302af7f2d051c912c466ef20e8f18158e64df3542a"
            },
            "downloads": -1,
            "filename": "tree_sitter-0.21.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "ab6dd1055901645b8343db69940cde85",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 485385,
            "upload_time": "2024-03-26T10:52:36",
            "upload_time_iso_8601": "2024-03-26T10:52:36.268851Z",
            "url": "https://files.pythonhosted.org/packages/64/74/2c9dc1acb4c43b9c15765ab0fb4babb76e49e8198889dfc730bc1e906a82/tree_sitter-0.21.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "06a39f65bcb73947bf4d16e816fa547e1edfe411a530ff3370c1ae10c5bc21d8",
                "md5": "52567c398a2f26a6691a0a8a5db9bd9e",
                "sha256": "84eedb06615461b9e2847be7c47b9c5f2195d7d66d31b33c0a227eff4e0a0199"
            },
            "downloads": -1,
            "filename": "tree_sitter-0.21.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "52567c398a2f26a6691a0a8a5db9bd9e",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 496711,
            "upload_time": "2024-03-26T10:52:38",
            "upload_time_iso_8601": "2024-03-26T10:52:38.538058Z",
            "url": "https://files.pythonhosted.org/packages/06/a3/9f65bcb73947bf4d16e816fa547e1edfe411a530ff3370c1ae10c5bc21d8/tree_sitter-0.21.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8868c916a2669ff92f8e66d519d5df20d36e0eac0dd178a77169ae8c8a7c3e08",
                "md5": "4bdf0e8ddd2d0d886d2f55ccfa06a4d4",
                "sha256": "9d33ea425df8c3d6436926fe2991429d59c335431bf4e3c71e77c17eb508be5a"
            },
            "downloads": -1,
            "filename": "tree_sitter-0.21.3-cp310-cp310-musllinux_1_1_aarch64.whl",
            "has_sig": false,
            "md5_digest": "4bdf0e8ddd2d0d886d2f55ccfa06a4d4",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 481965,
            "upload_time": "2024-03-26T10:52:40",
            "upload_time_iso_8601": "2024-03-26T10:52:40.675818Z",
            "url": "https://files.pythonhosted.org/packages/88/68/c916a2669ff92f8e66d519d5df20d36e0eac0dd178a77169ae8c8a7c3e08/tree_sitter-0.21.3-cp310-cp310-musllinux_1_1_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "426eb8bf5f75fc6485a429e2b6f71aaed2666dba483b875fbd76a7b007f85073",
                "md5": "af9a96c91aa7abf2cb83a7ffd85838cc",
                "sha256": "fae1ee0ff6d85e2fd5cd8ceb9fe4af4012220ee1e4cbe813305a316caf7a6f63"
            },
            "downloads": -1,
            "filename": "tree_sitter-0.21.3-cp310-cp310-musllinux_1_1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "af9a96c91aa7abf2cb83a7ffd85838cc",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 492782,
            "upload_time": "2024-03-26T10:52:42",
            "upload_time_iso_8601": "2024-03-26T10:52:42.215160Z",
            "url": "https://files.pythonhosted.org/packages/42/6e/b8bf5f75fc6485a429e2b6f71aaed2666dba483b875fbd76a7b007f85073/tree_sitter-0.21.3-cp310-cp310-musllinux_1_1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "16bfc6ee8d9287846912f427e1d8f1f7266e612a1d6ba161517c793e83f620cf",
                "md5": "c223aa24633faa3b67108864b3bbafab",
                "sha256": "bb41be86a987391f9970571aebe005ccd10222f39c25efd15826583c761a37e5"
            },
            "downloads": -1,
            "filename": "tree_sitter-0.21.3-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "c223aa24633faa3b67108864b3bbafab",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 109732,
            "upload_time": "2024-03-26T10:52:44",
            "upload_time_iso_8601": "2024-03-26T10:52:44.339262Z",
            "url": "https://files.pythonhosted.org/packages/16/bf/c6ee8d9287846912f427e1d8f1f7266e612a1d6ba161517c793e83f620cf/tree_sitter-0.21.3-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "63b572657d5874d7f0a722c0288f04e5e2bc33d7715b13a858885b6593047dce",
                "md5": "11a127388d25b564dcd6ead4ff71ec35",
                "sha256": "54b22c3c2aab3e3639a4b255d9df8455da2921d050c4829b6a5663b057f10db5"
            },
            "downloads": -1,
            "filename": "tree_sitter-0.21.3-cp311-cp311-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "11a127388d25b564dcd6ead4ff71ec35",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 133429,
            "upload_time": "2024-03-26T10:52:46",
            "upload_time_iso_8601": "2024-03-26T10:52:46.345200Z",
            "url": "https://files.pythonhosted.org/packages/63/b5/72657d5874d7f0a722c0288f04e5e2bc33d7715b13a858885b6593047dce/tree_sitter-0.21.3-cp311-cp311-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "d364c5d397efbb6d0dbed4254cd2ca389ed186a2e1e7e32661059f6eeaaf6424",
                "md5": "aa5fd12e95c6ce5578bfd23724f0d698",
                "sha256": "ab6e88c1e2d5e84ff0f9e5cd83f21b8e5074ad292a2cf19df3ba31d94fbcecd4"
            },
            "downloads": -1,
            "filename": "tree_sitter-0.21.3-cp311-cp311-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "aa5fd12e95c6ce5578bfd23724f0d698",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 126088,
            "upload_time": "2024-03-26T10:52:47",
            "upload_time_iso_8601": "2024-03-26T10:52:47.759821Z",
            "url": "https://files.pythonhosted.org/packages/d3/64/c5d397efbb6d0dbed4254cd2ca389ed186a2e1e7e32661059f6eeaaf6424/tree_sitter-0.21.3-cp311-cp311-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ba88941669acc140f94e6c6196d6d8676ac4cd57c3b3fbc1ee61bb11c1b2da71",
                "md5": "21fb68f82dd59b8fbb982225112e33d8",
                "sha256": "fc3fd34ed4cd5db445bc448361b5da46a2a781c648328dc5879d768f16a46771"
            },
            "downloads": -1,
            "filename": "tree_sitter-0.21.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "21fb68f82dd59b8fbb982225112e33d8",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 487879,
            "upload_time": "2024-03-26T10:52:49",
            "upload_time_iso_8601": "2024-03-26T10:52:49.091465Z",
            "url": "https://files.pythonhosted.org/packages/ba/88/941669acc140f94e6c6196d6d8676ac4cd57c3b3fbc1ee61bb11c1b2da71/tree_sitter-0.21.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "294e798154f2846d620bf9fa3bc244e056d4858f2108f834656bf9f1219d4f30",
                "md5": "d8ca5dec633a70196fdcf0060e25ad6d",
                "sha256": "fabc7182f6083269ce3cfcad202fe01516aa80df64573b390af6cd853e8444a1"
            },
            "downloads": -1,
            "filename": "tree_sitter-0.21.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "d8ca5dec633a70196fdcf0060e25ad6d",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 498776,
            "upload_time": "2024-03-26T10:52:50",
            "upload_time_iso_8601": "2024-03-26T10:52:50.709553Z",
            "url": "https://files.pythonhosted.org/packages/29/4e/798154f2846d620bf9fa3bc244e056d4858f2108f834656bf9f1219d4f30/tree_sitter-0.21.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "6ed105ea77487bc7a3946d0e80fb6c5cb61515953f5e7a4f6804b98e113ed4b0",
                "md5": "154e63be31404eb88a4478c8ad806443",
                "sha256": "4f874c3f7d2a2faf5c91982dc7d88ff2a8f183a21fe475c29bee3009773b0558"
            },
            "downloads": -1,
            "filename": "tree_sitter-0.21.3-cp311-cp311-musllinux_1_1_aarch64.whl",
            "has_sig": false,
            "md5_digest": "154e63be31404eb88a4478c8ad806443",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 483348,
            "upload_time": "2024-03-26T10:52:52",
            "upload_time_iso_8601": "2024-03-26T10:52:52.267197Z",
            "url": "https://files.pythonhosted.org/packages/6e/d1/05ea77487bc7a3946d0e80fb6c5cb61515953f5e7a4f6804b98e113ed4b0/tree_sitter-0.21.3-cp311-cp311-musllinux_1_1_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "42fabf938e7c6afbc368d503deeda060891c3dba57e2d1166e4b884271f55616",
                "md5": "068c0aea417982deec80a4207229c39e",
                "sha256": "ee61ee3b7a4eedf9d8f1635c68ba4a6fa8c46929601fc48a907c6cfef0cfbcb2"
            },
            "downloads": -1,
            "filename": "tree_sitter-0.21.3-cp311-cp311-musllinux_1_1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "068c0aea417982deec80a4207229c39e",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 493757,
            "upload_time": "2024-03-26T10:52:54",
            "upload_time_iso_8601": "2024-03-26T10:52:54.845938Z",
            "url": "https://files.pythonhosted.org/packages/42/fa/bf938e7c6afbc368d503deeda060891c3dba57e2d1166e4b884271f55616/tree_sitter-0.21.3-cp311-cp311-musllinux_1_1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "1da798da36a6eab22f5729989c9e0137b1b04cbe368d1e024fccd72c0b00719b",
                "md5": "c4aa4aedfba017bb95ca54e5b3dad926",
                "sha256": "0b7256c723642de1c05fbb776b27742204a2382e337af22f4d9e279d77df7aa2"
            },
            "downloads": -1,
            "filename": "tree_sitter-0.21.3-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "c4aa4aedfba017bb95ca54e5b3dad926",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 109735,
            "upload_time": "2024-03-26T10:52:57",
            "upload_time_iso_8601": "2024-03-26T10:52:57.243658Z",
            "url": "https://files.pythonhosted.org/packages/1d/a7/98da36a6eab22f5729989c9e0137b1b04cbe368d1e024fccd72c0b00719b/tree_sitter-0.21.3-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "81e1cceb06eae617a6bf5eeeefa9813d9fd57d89b50f526ce02486a336bcd2a9",
                "md5": "8f3e1e8750b725811e8fc8c0ef524e9f",
                "sha256": "669b3e5a52cb1e37d60c7b16cc2221c76520445bb4f12dd17fd7220217f5abf3"
            },
            "downloads": -1,
            "filename": "tree_sitter-0.21.3-cp312-cp312-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "8f3e1e8750b725811e8fc8c0ef524e9f",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 133640,
            "upload_time": "2024-03-26T10:52:59",
            "upload_time_iso_8601": "2024-03-26T10:52:59.135108Z",
            "url": "https://files.pythonhosted.org/packages/81/e1/cceb06eae617a6bf5eeeefa9813d9fd57d89b50f526ce02486a336bcd2a9/tree_sitter-0.21.3-cp312-cp312-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f6ceac14e5cbb0f30b7bd338122491ee2b8e6c0408cfe26741cbd66fa9b53d35",
                "md5": "415818912d3accb951381967bb91f873",
                "sha256": "2aa2a5099a9f667730ff26d57533cc893d766667f4d8a9877e76a9e74f48f0d3"
            },
            "downloads": -1,
            "filename": "tree_sitter-0.21.3-cp312-cp312-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "415818912d3accb951381967bb91f873",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 125954,
            "upload_time": "2024-03-26T10:53:00",
            "upload_time_iso_8601": "2024-03-26T10:53:00.879461Z",
            "url": "https://files.pythonhosted.org/packages/f6/ce/ac14e5cbb0f30b7bd338122491ee2b8e6c0408cfe26741cbd66fa9b53d35/tree_sitter-0.21.3-cp312-cp312-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "c2df76dbf830126e566c48db0d1bf2bef3f9d8cac938302a9b0f762ded8206c2",
                "md5": "d2c08db728b3ca756d95f67d548cb8b4",
                "sha256": "6a3e06ae2a517cf6f1abb682974f76fa760298e6d5a3ecf2cf140c70f898adf0"
            },
            "downloads": -1,
            "filename": "tree_sitter-0.21.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "d2c08db728b3ca756d95f67d548cb8b4",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 490092,
            "upload_time": "2024-03-26T10:53:03",
            "upload_time_iso_8601": "2024-03-26T10:53:03.144130Z",
            "url": "https://files.pythonhosted.org/packages/c2/df/76dbf830126e566c48db0d1bf2bef3f9d8cac938302a9b0f762ded8206c2/tree_sitter-0.21.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ec870c3593552cb0d09ab6271d37fc0e6a9476919d2a975661d709d4b3289fc7",
                "md5": "87fab551d375ee165bf9ec9ce2d97b65",
                "sha256": "af992dfe08b4fefcfcdb40548d0d26d5d2e0a0f2d833487372f3728cd0772b48"
            },
            "downloads": -1,
            "filename": "tree_sitter-0.21.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "87fab551d375ee165bf9ec9ce2d97b65",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 502155,
            "upload_time": "2024-03-26T10:53:04",
            "upload_time_iso_8601": "2024-03-26T10:53:04.760307Z",
            "url": "https://files.pythonhosted.org/packages/ec/87/0c3593552cb0d09ab6271d37fc0e6a9476919d2a975661d709d4b3289fc7/tree_sitter-0.21.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "0592b2cb22cf52c18fcc95662897f380cf230c443dfc9196b872aad5948b7bb3",
                "md5": "c4c7d1130a63096f7fe3436f9dd9bcd9",
                "sha256": "c7cbab1dd9765138505c4a55e2aa857575bac4f1f8a8b0457744a4fefa1288e6"
            },
            "downloads": -1,
            "filename": "tree_sitter-0.21.3-cp312-cp312-musllinux_1_1_aarch64.whl",
            "has_sig": false,
            "md5_digest": "c4c7d1130a63096f7fe3436f9dd9bcd9",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 486020,
            "upload_time": "2024-03-26T10:53:06",
            "upload_time_iso_8601": "2024-03-26T10:53:06.414133Z",
            "url": "https://files.pythonhosted.org/packages/05/92/b2cb22cf52c18fcc95662897f380cf230c443dfc9196b872aad5948b7bb3/tree_sitter-0.21.3-cp312-cp312-musllinux_1_1_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "4aea69b543538a46d763f3e787234d1617b718ab90f32ffa676ca856f1d9540e",
                "md5": "4efc8acba4cf481270909967689f9308",
                "sha256": "e1e66aeb457d1529370fcb0997ae5584c6879e0e662f1b11b2f295ea57e22f54"
            },
            "downloads": -1,
            "filename": "tree_sitter-0.21.3-cp312-cp312-musllinux_1_1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "4efc8acba4cf481270909967689f9308",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 496348,
            "upload_time": "2024-03-26T10:53:07",
            "upload_time_iso_8601": "2024-03-26T10:53:07.939330Z",
            "url": "https://files.pythonhosted.org/packages/4a/ea/69b543538a46d763f3e787234d1617b718ab90f32ffa676ca856f1d9540e/tree_sitter-0.21.3-cp312-cp312-musllinux_1_1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "eb4fdf4ea84476443021707b537217c32147ccccbc3e10c17b216a969991e1b3",
                "md5": "0d0c6e1ebbd10c9b0da97eb80ccd8cb3",
                "sha256": "013c750252dc3bd0e069d82e9658de35ed50eecf31c6586d0de7f942546824c5"
            },
            "downloads": -1,
            "filename": "tree_sitter-0.21.3-cp312-cp312-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "0d0c6e1ebbd10c9b0da97eb80ccd8cb3",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.8",
            "size": 109771,
            "upload_time": "2024-03-26T10:53:10",
            "upload_time_iso_8601": "2024-03-26T10:53:10.342043Z",
            "url": "https://files.pythonhosted.org/packages/eb/4f/df4ea84476443021707b537217c32147ccccbc3e10c17b216a969991e1b3/tree_sitter-0.21.3-cp312-cp312-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a9083a2faaca576eca4ba9d25ff54f5e3c9fe7bdde7b748208dad7c033106f77",
                "md5": "6da6c7f3807749950b4612efb876f69b",
                "sha256": "4986a8cb4acebd168474ec2e5db440e59c7888819b3449a43ce8b17ed0331b07"
            },
            "downloads": -1,
            "filename": "tree_sitter-0.21.3-cp38-cp38-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "6da6c7f3807749950b4612efb876f69b",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 133680,
            "upload_time": "2024-03-26T10:53:12",
            "upload_time_iso_8601": "2024-03-26T10:53:12.442327Z",
            "url": "https://files.pythonhosted.org/packages/a9/08/3a2faaca576eca4ba9d25ff54f5e3c9fe7bdde7b748208dad7c033106f77/tree_sitter-0.21.3-cp38-cp38-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "d49c0465da56c8ca82a366d08f62be21df61f86116fd63dd70fb9bb94c67b21c",
                "md5": "0dbd4bb28892bcd14e1dd29a1e1540c6",
                "sha256": "6e217fee2e7be7dbce4496caa3d1c466977d7e81277b677f954d3c90e3272ec2"
            },
            "downloads": -1,
            "filename": "tree_sitter-0.21.3-cp38-cp38-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "0dbd4bb28892bcd14e1dd29a1e1540c6",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 126286,
            "upload_time": "2024-03-26T10:53:14",
            "upload_time_iso_8601": "2024-03-26T10:53:14.439458Z",
            "url": "https://files.pythonhosted.org/packages/d4/9c/0465da56c8ca82a366d08f62be21df61f86116fd63dd70fb9bb94c67b21c/tree_sitter-0.21.3-cp38-cp38-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "81aa28c6e2ee7506b6627ba5a35dcfa9042043a32d14cecb5bc7d8fa6f0a1441",
                "md5": "e9acad2fb587e6089c60074e463a4079",
                "sha256": "f32a88afff4f2bc0f20632b0a2aa35fa9ae7d518f083409eca253518e0950929"
            },
            "downloads": -1,
            "filename": "tree_sitter-0.21.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "e9acad2fb587e6089c60074e463a4079",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 493104,
            "upload_time": "2024-03-26T10:53:16",
            "upload_time_iso_8601": "2024-03-26T10:53:16.481924Z",
            "url": "https://files.pythonhosted.org/packages/81/aa/28c6e2ee7506b6627ba5a35dcfa9042043a32d14cecb5bc7d8fa6f0a1441/tree_sitter-0.21.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ec195e964315acf83dc84ddf7d1abadda3d7950a743247cb331c6dea0664fd9f",
                "md5": "88f3ced79773766b4307ebb5bafa7c63",
                "sha256": "f3652ac9e47cdddf213c5d5d6854194469097e62f7181c0a9aa8435449a163a9"
            },
            "downloads": -1,
            "filename": "tree_sitter-0.21.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "88f3ced79773766b4307ebb5bafa7c63",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 503895,
            "upload_time": "2024-03-26T10:53:18",
            "upload_time_iso_8601": "2024-03-26T10:53:18.025252Z",
            "url": "https://files.pythonhosted.org/packages/ec/19/5e964315acf83dc84ddf7d1abadda3d7950a743247cb331c6dea0664fd9f/tree_sitter-0.21.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "55febb1ef3feb6e11ff7feefe423fbb833ede7b42f20dd7742cfa7b163d6127a",
                "md5": "5281bf548817e2c449a1bc4cc682934f",
                "sha256": "60b4df3298ff467bc01e2c0f6c2fb43aca088038202304bf8e41edd9fa348f45"
            },
            "downloads": -1,
            "filename": "tree_sitter-0.21.3-cp38-cp38-musllinux_1_1_aarch64.whl",
            "has_sig": false,
            "md5_digest": "5281bf548817e2c449a1bc4cc682934f",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 490926,
            "upload_time": "2024-03-26T10:53:19",
            "upload_time_iso_8601": "2024-03-26T10:53:19.573673Z",
            "url": "https://files.pythonhosted.org/packages/55/fe/bb1ef3feb6e11ff7feefe423fbb833ede7b42f20dd7742cfa7b163d6127a/tree_sitter-0.21.3-cp38-cp38-musllinux_1_1_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "b805dffdba16b6d2295c24e51a812481fe27907213415b306f99b84c1b518506",
                "md5": "71fcbd2614aa65bf2697e107f123511a",
                "sha256": "00e4d0c99dff595398ef5e88a1b1ddd53adb13233fb677c1fd8e497fb2361629"
            },
            "downloads": -1,
            "filename": "tree_sitter-0.21.3-cp38-cp38-musllinux_1_1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "71fcbd2614aa65bf2697e107f123511a",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 499248,
            "upload_time": "2024-03-26T10:53:21",
            "upload_time_iso_8601": "2024-03-26T10:53:21.147590Z",
            "url": "https://files.pythonhosted.org/packages/b8/05/dffdba16b6d2295c24e51a812481fe27907213415b306f99b84c1b518506/tree_sitter-0.21.3-cp38-cp38-musllinux_1_1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "cf678a83076e07e57f809bf308973aac5c21f8a2e5757ddd3429a14986a76405",
                "md5": "c3fa435f447b1bf7356609399c4ad3e1",
                "sha256": "50c91353a26946e4dd6779837ecaf8aa123aafa2d3209f261ab5280daf0962f5"
            },
            "downloads": -1,
            "filename": "tree_sitter-0.21.3-cp38-cp38-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "c3fa435f447b1bf7356609399c4ad3e1",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 110055,
            "upload_time": "2024-03-26T10:53:23",
            "upload_time_iso_8601": "2024-03-26T10:53:23.089595Z",
            "url": "https://files.pythonhosted.org/packages/cf/67/8a83076e07e57f809bf308973aac5c21f8a2e5757ddd3429a14986a76405/tree_sitter-0.21.3-cp38-cp38-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "29ea2f848cf720dce4835388f30dca377bee9054461c51cdd0340c82e2d2fe32",
                "md5": "adac382299671cb1484e99bd1a057ed2",
                "sha256": "b17b8648b296ccc21a88d72ca054b809ee82d4b14483e419474e7216240ea278"
            },
            "downloads": -1,
            "filename": "tree_sitter-0.21.3-cp39-cp39-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "adac382299671cb1484e99bd1a057ed2",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 133664,
            "upload_time": "2024-03-26T10:53:24",
            "upload_time_iso_8601": "2024-03-26T10:53:24.574347Z",
            "url": "https://files.pythonhosted.org/packages/29/ea/2f848cf720dce4835388f30dca377bee9054461c51cdd0340c82e2d2fe32/tree_sitter-0.21.3-cp39-cp39-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "9e33db09a0b0f7ca96bbf53e2a5c024bc1f0a138babb2f4472b4954627778d79",
                "md5": "e0fd846823b388159dc51880313241e8",
                "sha256": "f2f057fd01d3a95cbce6794c6e9f6db3d376cb3bb14e5b0528d77f0ec21d6478"
            },
            "downloads": -1,
            "filename": "tree_sitter-0.21.3-cp39-cp39-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "e0fd846823b388159dc51880313241e8",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 126419,
            "upload_time": "2024-03-26T10:53:26",
            "upload_time_iso_8601": "2024-03-26T10:53:26.019406Z",
            "url": "https://files.pythonhosted.org/packages/9e/33/db09a0b0f7ca96bbf53e2a5c024bc1f0a138babb2f4472b4954627778d79/tree_sitter-0.21.3-cp39-cp39-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "4f22e01759e2303dc9db719f9985d6e980ddd24ac2a9136d5d06ee7c7e13f25a",
                "md5": "da31a32f63f28fcb0262dc50422ba257",
                "sha256": "839759de30230ffd60687edbb119b31521d5ac016749358e5285816798bb804a"
            },
            "downloads": -1,
            "filename": "tree_sitter-0.21.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "da31a32f63f28fcb0262dc50422ba257",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 487811,
            "upload_time": "2024-03-26T10:53:27",
            "upload_time_iso_8601": "2024-03-26T10:53:27.551637Z",
            "url": "https://files.pythonhosted.org/packages/4f/22/e01759e2303dc9db719f9985d6e980ddd24ac2a9136d5d06ee7c7e13f25a/tree_sitter-0.21.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "0a5dafef7068b7eb3f5b50b4c0ae0fff43511f37263876dbb487158b22f89bfb",
                "md5": "ae4e6847200cd75354156b3921db7583",
                "sha256": "5df40aa29cb7e323898194246df7a03b9676955a0ac1f6bce06bc4903a70b5f7"
            },
            "downloads": -1,
            "filename": "tree_sitter-0.21.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "ae4e6847200cd75354156b3921db7583",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 498473,
            "upload_time": "2024-03-26T10:53:29",
            "upload_time_iso_8601": "2024-03-26T10:53:29.145462Z",
            "url": "https://files.pythonhosted.org/packages/0a/5d/afef7068b7eb3f5b50b4c0ae0fff43511f37263876dbb487158b22f89bfb/tree_sitter-0.21.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "44f118534c57d8e0bbaae6fe0d00d7e4ae3394b0be0b2b94b6aba370cdbd3be6",
                "md5": "596adafc8b5d4eb28bbf889d3c9f03cb",
                "sha256": "1d9be27dde007b569fa78ff9af5fe40d2532c998add9997a9729e348bb78fa59"
            },
            "downloads": -1,
            "filename": "tree_sitter-0.21.3-cp39-cp39-musllinux_1_1_aarch64.whl",
            "has_sig": false,
            "md5_digest": "596adafc8b5d4eb28bbf889d3c9f03cb",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 484418,
            "upload_time": "2024-03-26T10:53:30",
            "upload_time_iso_8601": "2024-03-26T10:53:30.704667Z",
            "url": "https://files.pythonhosted.org/packages/44/f1/18534c57d8e0bbaae6fe0d00d7e4ae3394b0be0b2b94b6aba370cdbd3be6/tree_sitter-0.21.3-cp39-cp39-musllinux_1_1_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "b057f2b16d902e808ccf99740da2cf199043e12783692fe631e857259fbe279f",
                "md5": "03e96a7004a186d246c6a8b4196094e5",
                "sha256": "c4ac87735e6f98fe085244c7c020f0177d13d4c117db72ba041faa980d25d69d"
            },
            "downloads": -1,
            "filename": "tree_sitter-0.21.3-cp39-cp39-musllinux_1_1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "03e96a7004a186d246c6a8b4196094e5",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 494421,
            "upload_time": "2024-03-26T10:53:32",
            "upload_time_iso_8601": "2024-03-26T10:53:32.186552Z",
            "url": "https://files.pythonhosted.org/packages/b0/57/f2b16d902e808ccf99740da2cf199043e12783692fe631e857259fbe279f/tree_sitter-0.21.3-cp39-cp39-musllinux_1_1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "44ccceef3adeeb998578eaf199632b64e34a6cb2f8186e3856c9796d4671a84e",
                "md5": "c6ce56d4a544a7947fb64cd07516917e",
                "sha256": "fbbd137f7d9a5309fb4cb82e2c3250ba101b0dd08a8abdce815661e6cf2cbc19"
            },
            "downloads": -1,
            "filename": "tree_sitter-0.21.3-cp39-cp39-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "c6ce56d4a544a7947fb64cd07516917e",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 110032,
            "upload_time": "2024-03-26T10:53:33",
            "upload_time_iso_8601": "2024-03-26T10:53:33.835644Z",
            "url": "https://files.pythonhosted.org/packages/44/cc/ceef3adeeb998578eaf199632b64e34a6cb2f8186e3856c9796d4671a84e/tree_sitter-0.21.3-cp39-cp39-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "399eb7cb190aa08e4ea387f2b1531da03efb4b8b033426753c0b97e3698645f6",
                "md5": "eb97a123479b0a5920df87584491858a",
                "sha256": "b5de3028921522365aa864d95b3c41926e0ba6a85ee5bd000e10dc49b0766988"
            },
            "downloads": -1,
            "filename": "tree-sitter-0.21.3.tar.gz",
            "has_sig": false,
            "md5_digest": "eb97a123479b0a5920df87584491858a",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 155688,
            "upload_time": "2024-03-26T10:53:35",
            "upload_time_iso_8601": "2024-03-26T10:53:35.451461Z",
            "url": "https://files.pythonhosted.org/packages/39/9e/b7cb190aa08e4ea387f2b1531da03efb4b8b033426753c0b97e3698645f6/tree-sitter-0.21.3.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-03-26 10:53:35",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "tree-sitter",
    "github_project": "py-tree-sitter",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "tree-sitter"
}
        
Elapsed time: 0.28959s