https://github.com/wenkokke/py-tree-sitter-type-provider
Type providers for tree-sitter in Python.
https://github.com/wenkokke/py-tree-sitter-type-provider
Last synced: about 2 months ago
JSON representation
Type providers for tree-sitter in Python.
- Host: GitHub
- URL: https://github.com/wenkokke/py-tree-sitter-type-provider
- Owner: wenkokke
- License: mit
- Created: 2022-07-12T14:11:06.000Z (almost 3 years ago)
- Default Branch: dev
- Last Pushed: 2025-03-03T19:57:00.000Z (3 months ago)
- Last Synced: 2025-03-24T19:22:23.827Z (2 months ago)
- Language: C
- Size: 381 KB
- Stars: 3
- Watchers: 3
- Forks: 1
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README


[](https://github.com/wenkokke/py-tree-sitter-talon/actions/workflows/ci.yml)
[](https://results.pre-commit.ci/latest/github/wenkokke/py-tree-sitter-type-provider/dev)# Type Providers for Tree Sitter
Create a type AST from any `node-types.json` file, as well as a generic visitor class and a transformer class, and a function to convert to the AST from the `tree_sitter.Node` type.
For example, the following code defines a module named `tree_sitter_javascript` from `tree-sitter-javascript/src/nodes.json`:
```python
import pathlib
import tree_sitter_type_provider as tstpnode_types_json = pathlib.Path("tree-sitter-javascript/src/node-types.json")
node_types = tstp.NodeType.schema().loads(node_types_json.read_text(), many=True)def as_class_name(node_type_name: str) -> str:
class_name_parts: typing.List[str] = ["Js"]
for part in node_type_name.split("_"):
class_name_parts.append(part.capitalize())
return "".join(class_name_parts)sys.modules[__name__] = tstp.TreeSitterTypeProvider(
"tree_sitter_javascript",
node_types,
as_class_name=as_class_name, # How to convert node types to Python class names
extra=["comment"], # Nodes which are marked as 'extra' in the grammar
)
```The module contains a number of dataclasses which represent the AST nodes:
```python
import tree_sitter as ts
import tree_sitter_type_provider as tstp
import typing@dataclass
class JsArray(tstp.Node):
text: str
type_name: str
start_position: tstp.Point
end_position: tstp.Point
children: typing.List[typing.Union[JsExpression, JsSpreadElement]]@dataclass
class JsDeclaration(tstp.Node):
text: str
type_name: str
start_position: tstp.Point
end_position: tstp.Point@dataclass
class JsWhileStatement(tstp.Node):
text: str
type_name: str
start_position: tstp.Point
end_position: tstp.Point
body: JsStatement
condition: JsParenthesizedExpression...
```As well as a function to convert to the AST:
```python
def from_tree_sitter(self, tsvalue: typing.Union[ts.Tree, ts.Node, ts.TreeCursor], *, encoding: str = 'utf-8') -> tstp.Node
```