372 lines
12 KiB
Python
372 lines
12 KiB
Python
from enum import IntEnum
|
|
from collections.abc import ByteString, Callable, Iterator, Sequence
|
|
from typing import Annotated, Any, Final, Literal, NamedTuple, Protocol, Self, final, overload
|
|
from typing_extensions import deprecated
|
|
|
|
class _SupportsFileno(Protocol):
|
|
def fileno(self) -> int: ...
|
|
|
|
class Point(NamedTuple):
|
|
row: int
|
|
column: int
|
|
|
|
class LogType(IntEnum):
|
|
PARSE: int
|
|
LEX: int
|
|
|
|
@final
|
|
class Language:
|
|
@overload
|
|
@deprecated("int argument support is deprecated")
|
|
def __init__(self, ptr: Annotated[int, "TSLanguage *"], /) -> None: ...
|
|
@overload
|
|
def __init__(self, ptr: Annotated[object, "TSLanguage *"], /) -> None: ...
|
|
|
|
# TODO(0.25): implement name
|
|
# @property
|
|
# def name(self) -> str | None: ...
|
|
|
|
@property
|
|
def version(self) -> int: ...
|
|
@property
|
|
def node_kind_count(self) -> int: ...
|
|
@property
|
|
def parse_state_count(self) -> int: ...
|
|
@property
|
|
def field_count(self) -> int: ...
|
|
def node_kind_for_id(self, id: int, /) -> str | None: ...
|
|
def id_for_node_kind(self, kind: str, named: bool, /) -> int | None: ...
|
|
def node_kind_is_named(self, id: int, /) -> bool: ...
|
|
def node_kind_is_visible(self, id: int, /) -> bool: ...
|
|
def node_kind_is_supertype(self, id: int, /) -> bool: ...
|
|
def field_name_for_id(self, field_id: int, /) -> str | None: ...
|
|
def field_id_for_name(self, name: str, /) -> int | None: ...
|
|
def next_state(self, state: int, id: int, /) -> int: ...
|
|
def lookahead_iterator(self, state: int, /) -> LookaheadIterator | None: ...
|
|
def query(self, source: str, /) -> Query: ...
|
|
def copy(self) -> Language: ...
|
|
def __repr__(self) -> str: ...
|
|
def __eq__(self, other: Any, /) -> bool: ...
|
|
def __ne__(self, other: Any, /) -> bool: ...
|
|
def __hash__(self) -> int: ...
|
|
def __copy__(self) -> Language: ...
|
|
|
|
@final
|
|
class Node:
|
|
@property
|
|
def id(self) -> int: ...
|
|
@property
|
|
def kind_id(self) -> int: ...
|
|
@property
|
|
def grammar_id(self) -> int: ...
|
|
@property
|
|
def grammar_name(self) -> str: ...
|
|
@property
|
|
def type(self) -> str: ...
|
|
@property
|
|
def is_named(self) -> bool: ...
|
|
@property
|
|
def is_extra(self) -> bool: ...
|
|
@property
|
|
def has_changes(self) -> bool: ...
|
|
@property
|
|
def has_error(self) -> bool: ...
|
|
@property
|
|
def is_error(self) -> bool: ...
|
|
@property
|
|
def parse_state(self) -> int: ...
|
|
@property
|
|
def next_parse_state(self) -> int: ...
|
|
@property
|
|
def is_missing(self) -> bool: ...
|
|
@property
|
|
def start_byte(self) -> int: ...
|
|
@property
|
|
def end_byte(self) -> int: ...
|
|
@property
|
|
def byte_range(self) -> tuple[int, int]: ...
|
|
@property
|
|
def range(self) -> Range: ...
|
|
@property
|
|
def start_point(self) -> Point: ...
|
|
@property
|
|
def end_point(self) -> Point: ...
|
|
@property
|
|
def children(self) -> list[Node]: ...
|
|
@property
|
|
def child_count(self) -> int: ...
|
|
@property
|
|
def named_children(self) -> list[Node]: ...
|
|
@property
|
|
def named_child_count(self) -> int: ...
|
|
@property
|
|
def parent(self) -> Node | None: ...
|
|
@property
|
|
def next_sibling(self) -> Node | None: ...
|
|
@property
|
|
def prev_sibling(self) -> Node | None: ...
|
|
@property
|
|
def next_named_sibling(self) -> Node | None: ...
|
|
@property
|
|
def prev_named_sibling(self) -> Node | None: ...
|
|
@property
|
|
def descendant_count(self) -> int: ...
|
|
@property
|
|
def text(self) -> bytes | None: ...
|
|
def walk(self) -> TreeCursor: ...
|
|
def edit(
|
|
self,
|
|
start_byte: int,
|
|
old_end_byte: int,
|
|
new_end_byte: int,
|
|
start_point: Point | tuple[int, int],
|
|
old_end_point: Point | tuple[int, int],
|
|
new_end_point: Point | tuple[int, int],
|
|
) -> None: ...
|
|
def child(self, index: int, /) -> Node | None: ...
|
|
def named_child(self, index: int, /) -> Node | None: ...
|
|
def child_by_field_id(self, id: int, /) -> Node | None: ...
|
|
def child_by_field_name(self, name: str, /) -> Node | None: ...
|
|
@deprecated("Use child_with_descendant instead")
|
|
def child_containing_descendant(self, descendant: Node, /) -> Node | None: ...
|
|
def child_with_descendant(self, descendant: Node, /) -> Node | None: ...
|
|
def children_by_field_id(self, id: int, /) -> list[Node]: ...
|
|
def children_by_field_name(self, name: str, /) -> list[Node]: ...
|
|
def field_name_for_child(self, child_index: int, /) -> str | None: ...
|
|
def field_name_for_named_child(self, child_index: int, /) -> str | None: ...
|
|
def descendant_for_byte_range(
|
|
self,
|
|
start_byte: int,
|
|
end_byte: int,
|
|
/,
|
|
) -> Node | None: ...
|
|
def named_descendant_for_byte_range(
|
|
self,
|
|
start_byte: int,
|
|
end_byte: int,
|
|
/,
|
|
) -> Node | None: ...
|
|
def descendant_for_point_range(
|
|
self,
|
|
start_point: Point | tuple[int, int],
|
|
end_point: Point | tuple[int, int],
|
|
/,
|
|
) -> Node | None: ...
|
|
def named_descendant_for_point_range(
|
|
self,
|
|
start_point: Point | tuple[int, int],
|
|
end_point: Point | tuple[int, int],
|
|
/,
|
|
) -> Node | None: ...
|
|
def __repr__(self) -> str: ...
|
|
def __str__(self) -> str: ...
|
|
def __eq__(self, other: Any, /) -> bool: ...
|
|
def __ne__(self, other: Any, /) -> bool: ...
|
|
def __hash__(self) -> int: ...
|
|
|
|
@final
|
|
class Tree:
|
|
@property
|
|
def root_node(self) -> Node: ...
|
|
@property
|
|
def included_ranges(self) -> list[Range]: ...
|
|
@property
|
|
def language(self) -> Language: ...
|
|
def root_node_with_offset(
|
|
self,
|
|
offset_bytes: int,
|
|
offset_extent: Point | tuple[int, int],
|
|
/,
|
|
) -> Node | None: ...
|
|
def copy(self) -> Tree: ...
|
|
def edit(
|
|
self,
|
|
start_byte: int,
|
|
old_end_byte: int,
|
|
new_end_byte: int,
|
|
start_point: Point | tuple[int, int],
|
|
old_end_point: Point | tuple[int, int],
|
|
new_end_point: Point | tuple[int, int],
|
|
) -> None: ...
|
|
def walk(self) -> TreeCursor: ...
|
|
def changed_ranges(self, new_tree: Tree) -> list[Range]: ...
|
|
def print_dot_graph(self, file: _SupportsFileno) -> None: ...
|
|
def __copy__(self) -> Tree: ...
|
|
|
|
@final
|
|
class TreeCursor:
|
|
@property
|
|
def node(self) -> Node | None: ...
|
|
@property
|
|
def field_id(self) -> int | None: ...
|
|
@property
|
|
def field_name(self) -> str | None: ...
|
|
@property
|
|
def depth(self) -> int: ...
|
|
@property
|
|
def descendant_index(self) -> int: ...
|
|
def copy(self) -> TreeCursor: ...
|
|
def reset(self, node: Node, /) -> None: ...
|
|
def reset_to(self, cursor: TreeCursor, /) -> None: ...
|
|
def goto_first_child(self) -> bool: ...
|
|
def goto_last_child(self) -> bool: ...
|
|
def goto_parent(self) -> bool: ...
|
|
def goto_next_sibling(self) -> bool: ...
|
|
def goto_previous_sibling(self) -> bool: ...
|
|
def goto_descendant(self, index: int, /) -> None: ...
|
|
def goto_first_child_for_byte(self, byte: int, /) -> int | None: ...
|
|
def goto_first_child_for_point(self, point: Point | tuple[int, int], /) -> int | None: ...
|
|
def __copy__(self) -> TreeCursor: ...
|
|
|
|
@final
|
|
class Parser:
|
|
def __init__(
|
|
self,
|
|
language: Language | None = None,
|
|
*,
|
|
included_ranges: Sequence[Range] | None = None,
|
|
timeout_micros: int | None = None,
|
|
logger: Callable[[LogType, str], None] | None = None,
|
|
) -> None: ...
|
|
@property
|
|
def language(self) -> Language | None: ...
|
|
@language.setter
|
|
def language(self, language: Language) -> None: ...
|
|
@language.deleter
|
|
def language(self) -> None: ...
|
|
@property
|
|
def included_ranges(self) -> list[Range]: ...
|
|
@included_ranges.setter
|
|
def included_ranges(self, ranges: Sequence[Range]) -> None: ...
|
|
@included_ranges.deleter
|
|
def included_ranges(self) -> None: ...
|
|
@property
|
|
def timeout_micros(self) -> int: ...
|
|
@timeout_micros.setter
|
|
def timeout_micros(self, timeout: int) -> None: ...
|
|
@timeout_micros.deleter
|
|
def timeout_micros(self) -> None: ...
|
|
@property
|
|
def logger(self) -> Callable[[LogType, str], None] | None: ...
|
|
@logger.setter
|
|
def logger(self, logger: Callable[[LogType, str], None]) -> None: ...
|
|
@logger.deleter
|
|
def logger(self) -> None: ...
|
|
@overload
|
|
def parse(
|
|
self,
|
|
source: ByteString,
|
|
/,
|
|
old_tree: Tree | None = None,
|
|
encoding: Literal["utf8", "utf16"] = "utf8",
|
|
) -> Tree: ...
|
|
@overload
|
|
def parse(
|
|
self,
|
|
callback: Callable[[int, Point], bytes | None],
|
|
/,
|
|
old_tree: Tree | None = None,
|
|
encoding: Literal["utf8", "utf16"] = "utf8",
|
|
) -> Tree: ...
|
|
def reset(self) -> None: ...
|
|
def print_dot_graphs(self, file: _SupportsFileno | None) -> None: ...
|
|
|
|
class QueryError(ValueError): ...
|
|
|
|
class QueryPredicate(Protocol):
|
|
def __call__(
|
|
self,
|
|
predicate: str,
|
|
args: list[tuple[str, Literal["capture", "string"]]],
|
|
pattern_index: int,
|
|
captures: dict[str, list[Node]],
|
|
) -> bool: ...
|
|
|
|
@final
|
|
class Query:
|
|
def __new__(cls, language: Language, source: str) -> Self: ...
|
|
@property
|
|
def pattern_count(self) -> int: ...
|
|
@property
|
|
def capture_count(self) -> int: ...
|
|
@property
|
|
def timeout_micros(self) -> int: ...
|
|
@property
|
|
def match_limit(self) -> int: ...
|
|
@property
|
|
def did_exceed_match_limit(self) -> bool: ...
|
|
def set_timeout_micros(self, timeout_micros: int) -> Self: ...
|
|
def set_match_limit(self, match_limit: int) -> Self: ...
|
|
def set_max_start_depth(self, max_start_depth: int) -> Self: ...
|
|
def set_byte_range(self, byte_range: tuple[int, int]) -> Self: ...
|
|
def set_point_range(
|
|
self,
|
|
point_range: tuple[Point | tuple[int, int], Point | tuple[int, int]],
|
|
) -> Self: ...
|
|
def disable_pattern(self, index: int) -> Self: ...
|
|
def disable_capture(self, capture: str) -> Self: ...
|
|
def captures(
|
|
self,
|
|
node: Node,
|
|
/,
|
|
predicate: QueryPredicate | None = None,
|
|
) -> dict[str, list[Node]]: ...
|
|
def matches(
|
|
self,
|
|
node: Node,
|
|
/,
|
|
predicate: QueryPredicate | None = None,
|
|
) -> list[tuple[int, dict[str, list[Node]]]]: ...
|
|
def pattern_settings(self, index: int) -> dict[str, str | None]: ...
|
|
def pattern_assertions(self, index: int) -> dict[str, tuple[str | None, bool]]: ...
|
|
def start_byte_for_pattern(self, index: int) -> int: ...
|
|
def is_pattern_rooted(self, index: int) -> bool: ...
|
|
def is_pattern_non_local(self, index: int) -> bool: ...
|
|
def is_pattern_guaranteed_at_step(self, offset: int) -> bool: ...
|
|
|
|
@final
|
|
class LookaheadIterator(Iterator[int]):
|
|
@property
|
|
def language(self) -> Language: ...
|
|
@property
|
|
def current_symbol(self) -> int: ...
|
|
@property
|
|
def current_symbol_name(self) -> str: ...
|
|
|
|
# TODO(0.25): rename to reset
|
|
def reset_state(self, state: int, language: Language | None = None) -> bool: ...
|
|
def iter_names(self) -> Iterator[str]: ...
|
|
|
|
# TODO(0.25): implement iter_symbols
|
|
# def iter_symbols(self) -> Iterator[int]: ...
|
|
|
|
# TODO(0.25): return tuple[int, str]
|
|
def __next__(self) -> int: ...
|
|
|
|
@final
|
|
class Range:
|
|
def __init__(
|
|
self,
|
|
start_point: Point | tuple[int, int],
|
|
end_point: Point | tuple[int, int],
|
|
start_byte: int,
|
|
end_byte: int,
|
|
) -> None: ...
|
|
@property
|
|
def start_point(self) -> Point: ...
|
|
@property
|
|
def end_point(self) -> Point: ...
|
|
@property
|
|
def start_byte(self) -> int: ...
|
|
@property
|
|
def end_byte(self) -> int: ...
|
|
def __eq__(self, other: Any, /) -> bool: ...
|
|
def __ne__(self, other: Any, /) -> bool: ...
|
|
def __repr__(self) -> str: ...
|
|
def __hash__(self) -> int: ...
|
|
# TODO(0.25): __replace__
|
|
|
|
LANGUAGE_VERSION: Final[int]
|
|
|
|
MIN_COMPATIBLE_LANGUAGE_VERSION: Final[int]
|