1///|
2priv type TSTree
3
4///|
5struct Tree {
6  
TSTree
tree
:
type TSTree
TSTree
7
@string.StringView
text
:
type @string.StringView

A @string.View represents a view of a String that maintains proper Unicode character boundaries. It allows safe access to a substring while handling multi-byte characters correctly.

@string.View
8} 9 10///| 11priv trait
trait Nullable {
  is_null(Self) -> Bool
  to_option(Self) -> Self?
}
Nullable
{
12
(Self) -> Bool
is_null
(

type parameter Self

Self
) ->
Bool
Bool
13
(Self) -> Self?
to_option
(

type parameter Self

Self
) ->

type parameter Self

Self
? = _
14} 15 16///| 17impl
trait Nullable {
  is_null(Self) -> Bool
  to_option(Self) -> Self?
}
Nullable
with
(self : Self) -> Self?
to_option
(
Self
self
:

type parameter Self

Self
) ->

type parameter Self

Self
? {
18 if
Self
self
.
(Self) -> Bool
is_null
() {
19 return
Self?
None
20 } 21
(Self) -> Self?
Some
(
Self
self
)
22} 23 24///| 25extern "c" fn ts_tree_null() ->
type TSTree
TSTree
= "moonbit_c_null"
26 27///| 28#borrow(self) 29extern "c" fn ts_tree_is_null(self :
type TSTree
TSTree
) ->
Bool
Bool
= "moonbit_c_is_null"
30 31///| 32impl
trait Nullable {
  is_null(Self) -> Bool
  to_option(Self) -> Self?
}
Nullable
for
type TSTree
TSTree
with
(self : TSTree) -> Bool
is_null
(
TSTree
self
:
type TSTree
TSTree
) ->
Bool
Bool
{
33
(self : TSTree) -> Bool
ts_tree_is_null
(
TSTree
self
)
34} 35 36///| 37#borrow(self) 38extern "c" fn ts_tree_copy(self :
type TSTree
TSTree
) ->
type TSTree
TSTree
= "moonbit_ts_tree_copy"
39 40///| 41/// Create a shallow copy of the syntax tree. This is very fast. 42/// 43/// You need to copy a syntax tree in order to use it on more than one thread at 44/// a time, as syntax trees are not thread safe. 45pub fn
struct Tree {
  tree: TSTree
  text: @string.StringView
}
Tree
::
(self : Tree) -> Tree

Create a shallow copy of the syntax tree. This is very fast.

You need to copy a syntax tree in order to use it on more than one thread at a time, as syntax trees are not thread safe.

copy
(
Tree
self
:
struct Tree {
  tree: TSTree
  text: @string.StringView
}
Tree
) ->
struct Tree {
  tree: TSTree
  text: @string.StringView
}
Tree
{
46 { ..
Tree
self
,
TSTree
tree
:
(self : TSTree) -> TSTree
ts_tree_copy
(
Tree
self
.
TSTree
tree
) }
47} 48 49///| 50#borrow(self) 51extern "c" fn ts_tree_root_node(self :
type TSTree
TSTree
) ->
type TSNode Bytes
TSNode
= "moonbit_ts_tree_root_node"
52 53///| Get the root node of the syntax tree. 54pub fn
struct Tree {
  tree: TSTree
  text: @string.StringView
}
Tree
::
(self : Tree) -> Node

Get the root node of the syntax tree.

root_node
(
Tree
self
:
struct Tree {
  tree: TSTree
  text: @string.StringView
}
Tree
) ->
struct Node {
  node: TSNode
  tree: TSTree
  text: @string.StringView
}
Node
{
55
struct Node {
  node: TSNode
  tree: TSTree
  text: @string.StringView
}
Node
::{
TSNode
node
:
(self : TSTree) -> TSNode
ts_tree_root_node
(
Tree
self
.
TSTree
tree
),
TSTree
tree
:
Tree
self
.
TSTree
tree
,
@string.StringView
text
:
Tree
self
.
@string.StringView
text
}
56} 57 58///| 59#borrow(self, offset_extent) 60extern "c" fn ts_tree_root_node_with_offset( 61 self :
type TSTree
TSTree
,
62 offset_bytes :
UInt
UInt
,
63 offset_extent :
type Point
Point
64) ->
type TSNode Bytes
TSNode
= "moonbit_ts_tree_root_node_with_offset"
65 66///| 67/// Get the root node of the syntax tree, but with its position 68/// shifted forward by the given offset. 69pub fn
struct Tree {
  tree: TSTree
  text: @string.StringView
}
Tree
::
(self : Tree, offset_bytes : Int, offset_extent : Point) -> Node

Get the root node of the syntax tree, but with its position shifted forward by the given offset.

root_node_with_offset
(
70
Tree
self
:
struct Tree {
  tree: TSTree
  text: @string.StringView
}
Tree
,
71
Int
offset_bytes
:
Int
Int
,
72
Point
offset_extent
:
type Point
Point
73) ->
struct Node {
  node: TSNode
  tree: TSTree
  text: @string.StringView
}
Node
{
74 let
TSNode
node
=
(self : TSTree, offset_bytes : UInt, offset_extent : Point) -> TSNode
ts_tree_root_node_with_offset
(
75
Tree
self
.
TSTree
tree
,
76
(value : Int) -> UInt
int_to_uint
(
Int
offset_bytes
),
77
Point
offset_extent
,
78 ) 79 {
TSNode
node
,
TSTree
tree
:
Tree
self
.
TSTree
tree
,
@string.StringView
text
:
Tree
self
.
@string.StringView
text
}
80} 81 82///| 83#borrow(self) 84extern "c" fn ts_tree_language(self :
type TSTree
TSTree
) ->
type Language @tree_sitter_language.Language
Language
= "moonbit_ts_tree_language"
85 86///| 87/// Get the language that was used to parse the syntax tree. 88pub fn
struct Tree {
  tree: TSTree
  text: @string.StringView
}
Tree
::
(self : Tree) -> Language

Get the language that was used to parse the syntax tree.

language
(
Tree
self
:
struct Tree {
  tree: TSTree
  text: @string.StringView
}
Tree
) ->
type Language @tree_sitter_language.Language
Language
{
89
(self : TSTree) -> Language
ts_tree_language
(
Tree
self
.
TSTree
tree
)
90} 91 92///| 93#borrow(self) 94extern "c" fn ts_tree_included_ranges(self :
type TSTree
TSTree
) ->
type FixedArray[A]
FixedArray
[
UInt
UInt
] = "moonbit_ts_tree_included_ranges"
95 96///| 97/// Get the array of included ranges that was used to parse the syntax tree. 98pub fn
struct Tree {
  tree: TSTree
  text: @string.StringView
}
Tree
::
(self : Tree) -> Array[Range]

Get the array of included ranges that was used to parse the syntax tree.

included_ranges
(
Tree
self
:
struct Tree {
  tree: TSTree
  text: @string.StringView
}
Tree
) ->
type Array[T]
Array
[
type Range FixedArray[UInt]
Range
] {
99 let
FixedArray[UInt]
flatten_ranges
=
(self : TSTree) -> FixedArray[UInt]
ts_tree_included_ranges
(
Tree
self
.
TSTree
tree
)
100
type Array[T]
Array
::
(Int, (Int) -> Range) -> Array[Range]

Creates a new array of the specified length, where each element is initialized using an index-based initialization function.

Parameters:

  • length : The length of the new array. If length is less than or equal to 0, returns an empty array.
  • initializer : A function that takes an index (starting from 0) and returns a value of type T. This function is called for each index to initialize the corresponding element.

Returns a new array of type Array[T] with the specified length, where each element is initialized using the provided function.

Example:

test "Array::makei" {
  let arr = Array::makei(3, fn(i) { i * 2 })
  inspect!(arr, content="[0, 2, 4]")
}
makei
(
FixedArray[UInt]
flatten_ranges
.
(self : FixedArray[UInt]) -> Int

Returns the number of elements in a fixed-size array.

Parameters:

  • array : The fixed-size array whose length is to be determined.

Returns an integer representing the number of elements in the array.

Example:

test "FixedArray::length" {
  let arr = FixedArray::make(3, 42)
  inspect!(arr.length(), content="3")
}
length
()
(self : Int, other : Int) -> Int

Performs integer division between two 32-bit integers. The result is truncated towards zero (rounds down for positive numbers and up for negative numbers).

Parameters:

  • dividend : The first integer operand to be divided.
  • divisor : The second integer operand that divides the dividend.

Returns the quotient of the division operation.

Throws a panic if divisor is zero.

Example:

test "Int::op_div" {
  inspect!(10 / 3, content="3") // truncates towards zero
  inspect!(-10 / 3, content="-3")
  inspect!(10 / -3, content="-3")
}

test "panic Int::op_div/division_by_zero" {
  ignore(42 / 0) // Panics with division by zero
}
/
6, fn(
Int
i
) {
101
(start_point : Point, end_point : Point, start_byte : UInt, end_byte : UInt) -> Range
ts_range_new
(
102
(row : UInt, column : UInt) -> Point
ts_point_new
(
FixedArray[UInt]
flatten_ranges
(FixedArray[UInt], Int) -> UInt

Retrieves an element at the specified index from a fixed-size array. This function implements the array indexing operator [].

Parameters:

  • array : The fixed-size array to access.
  • index : The position in the array from which to retrieve the element.

Returns the element at the specified index.

Throws a runtime error if the index is out of bounds (negative or greater than or equal to the length of the array).

Example:

test "FixedArray::op_get" {
  let arr = FixedArray::make(3, 42)
  inspect!(arr[1], content="42")
}

test "panic FixedArray::op_get/out_of_bounds" {
  let arr = FixedArray::make(3, 0)
  ignore(arr[3]) // Index out of bounds
}
[
i
(self : Int, other : Int) -> Int

Multiplies two 32-bit integers. This is the implementation of the * operator for Int.

Parameters:

  • self : The first integer operand.
  • other : The second integer operand.

Returns the product of the two integers. If the result overflows the range of Int, it wraps around according to two's complement arithmetic.

Example:

test "Int::op_mul" {
  inspect!(42 * 2, content="84")
  inspect!(-10 * 3, content="-30")
  let max = 2147483647 // Int.max_value
  inspect!(max * 2, content="-2") // Overflow wraps around
}
*
6],
FixedArray[UInt]
flatten_ranges
(FixedArray[UInt], Int) -> UInt

Retrieves an element at the specified index from a fixed-size array. This function implements the array indexing operator [].

Parameters:

  • array : The fixed-size array to access.
  • index : The position in the array from which to retrieve the element.

Returns the element at the specified index.

Throws a runtime error if the index is out of bounds (negative or greater than or equal to the length of the array).

Example:

test "FixedArray::op_get" {
  let arr = FixedArray::make(3, 42)
  inspect!(arr[1], content="42")
}

test "panic FixedArray::op_get/out_of_bounds" {
  let arr = FixedArray::make(3, 0)
  ignore(arr[3]) // Index out of bounds
}
[
i
(self : Int, other : Int) -> Int

Multiplies two 32-bit integers. This is the implementation of the * operator for Int.

Parameters:

  • self : The first integer operand.
  • other : The second integer operand.

Returns the product of the two integers. If the result overflows the range of Int, it wraps around according to two's complement arithmetic.

Example:

test "Int::op_mul" {
  inspect!(42 * 2, content="84")
  inspect!(-10 * 3, content="-30")
  let max = 2147483647 // Int.max_value
  inspect!(max * 2, content="-2") // Overflow wraps around
}
*
6
(self : Int, other : Int) -> Int

Adds two 32-bit signed integers. Performs two's complement arithmetic, which means the operation will wrap around if the result exceeds the range of a 32-bit integer.

Parameters:

  • self : The first integer operand.
  • other : The second integer operand.

Returns a new integer that is the sum of the two operands. If the mathematical sum exceeds the range of a 32-bit integer (-2,147,483,648 to 2,147,483,647), the result wraps around according to two's complement rules.

Example:

test "Int::op_add" {
  inspect!(42 + 1, content="43")
  inspect!(2147483647 + 1, content="-2147483648") // Overflow wraps around to minimum value
}
+
1]),
103
(row : UInt, column : UInt) -> Point
ts_point_new
(
FixedArray[UInt]
flatten_ranges
(FixedArray[UInt], Int) -> UInt

Retrieves an element at the specified index from a fixed-size array. This function implements the array indexing operator [].

Parameters:

  • array : The fixed-size array to access.
  • index : The position in the array from which to retrieve the element.

Returns the element at the specified index.

Throws a runtime error if the index is out of bounds (negative or greater than or equal to the length of the array).

Example:

test "FixedArray::op_get" {
  let arr = FixedArray::make(3, 42)
  inspect!(arr[1], content="42")
}

test "panic FixedArray::op_get/out_of_bounds" {
  let arr = FixedArray::make(3, 0)
  ignore(arr[3]) // Index out of bounds
}
[
i
(self : Int, other : Int) -> Int

Multiplies two 32-bit integers. This is the implementation of the * operator for Int.

Parameters:

  • self : The first integer operand.
  • other : The second integer operand.

Returns the product of the two integers. If the result overflows the range of Int, it wraps around according to two's complement arithmetic.

Example:

test "Int::op_mul" {
  inspect!(42 * 2, content="84")
  inspect!(-10 * 3, content="-30")
  let max = 2147483647 // Int.max_value
  inspect!(max * 2, content="-2") // Overflow wraps around
}
*
6
(self : Int, other : Int) -> Int

Adds two 32-bit signed integers. Performs two's complement arithmetic, which means the operation will wrap around if the result exceeds the range of a 32-bit integer.

Parameters:

  • self : The first integer operand.
  • other : The second integer operand.

Returns a new integer that is the sum of the two operands. If the mathematical sum exceeds the range of a 32-bit integer (-2,147,483,648 to 2,147,483,647), the result wraps around according to two's complement rules.

Example:

test "Int::op_add" {
  inspect!(42 + 1, content="43")
  inspect!(2147483647 + 1, content="-2147483648") // Overflow wraps around to minimum value
}
+
2],
FixedArray[UInt]
flatten_ranges
(FixedArray[UInt], Int) -> UInt

Retrieves an element at the specified index from a fixed-size array. This function implements the array indexing operator [].

Parameters:

  • array : The fixed-size array to access.
  • index : The position in the array from which to retrieve the element.

Returns the element at the specified index.

Throws a runtime error if the index is out of bounds (negative or greater than or equal to the length of the array).

Example:

test "FixedArray::op_get" {
  let arr = FixedArray::make(3, 42)
  inspect!(arr[1], content="42")
}

test "panic FixedArray::op_get/out_of_bounds" {
  let arr = FixedArray::make(3, 0)
  ignore(arr[3]) // Index out of bounds
}
[
i
(self : Int, other : Int) -> Int

Multiplies two 32-bit integers. This is the implementation of the * operator for Int.

Parameters:

  • self : The first integer operand.
  • other : The second integer operand.

Returns the product of the two integers. If the result overflows the range of Int, it wraps around according to two's complement arithmetic.

Example:

test "Int::op_mul" {
  inspect!(42 * 2, content="84")
  inspect!(-10 * 3, content="-30")
  let max = 2147483647 // Int.max_value
  inspect!(max * 2, content="-2") // Overflow wraps around
}
*
6
(self : Int, other : Int) -> Int

Adds two 32-bit signed integers. Performs two's complement arithmetic, which means the operation will wrap around if the result exceeds the range of a 32-bit integer.

Parameters:

  • self : The first integer operand.
  • other : The second integer operand.

Returns a new integer that is the sum of the two operands. If the mathematical sum exceeds the range of a 32-bit integer (-2,147,483,648 to 2,147,483,647), the result wraps around according to two's complement rules.

Example:

test "Int::op_add" {
  inspect!(42 + 1, content="43")
  inspect!(2147483647 + 1, content="-2147483648") // Overflow wraps around to minimum value
}
+
3]),
104
FixedArray[UInt]
flatten_ranges
(FixedArray[UInt], Int) -> UInt

Retrieves an element at the specified index from a fixed-size array. This function implements the array indexing operator [].

Parameters:

  • array : The fixed-size array to access.
  • index : The position in the array from which to retrieve the element.

Returns the element at the specified index.

Throws a runtime error if the index is out of bounds (negative or greater than or equal to the length of the array).

Example:

test "FixedArray::op_get" {
  let arr = FixedArray::make(3, 42)
  inspect!(arr[1], content="42")
}

test "panic FixedArray::op_get/out_of_bounds" {
  let arr = FixedArray::make(3, 0)
  ignore(arr[3]) // Index out of bounds
}
[
i
(self : Int, other : Int) -> Int

Multiplies two 32-bit integers. This is the implementation of the * operator for Int.

Parameters:

  • self : The first integer operand.
  • other : The second integer operand.

Returns the product of the two integers. If the result overflows the range of Int, it wraps around according to two's complement arithmetic.

Example:

test "Int::op_mul" {
  inspect!(42 * 2, content="84")
  inspect!(-10 * 3, content="-30")
  let max = 2147483647 // Int.max_value
  inspect!(max * 2, content="-2") // Overflow wraps around
}
*
6
(self : Int, other : Int) -> Int

Adds two 32-bit signed integers. Performs two's complement arithmetic, which means the operation will wrap around if the result exceeds the range of a 32-bit integer.

Parameters:

  • self : The first integer operand.
  • other : The second integer operand.

Returns a new integer that is the sum of the two operands. If the mathematical sum exceeds the range of a 32-bit integer (-2,147,483,648 to 2,147,483,647), the result wraps around according to two's complement rules.

Example:

test "Int::op_add" {
  inspect!(42 + 1, content="43")
  inspect!(2147483647 + 1, content="-2147483648") // Overflow wraps around to minimum value
}
+
4],
105
FixedArray[UInt]
flatten_ranges
(FixedArray[UInt], Int) -> UInt

Retrieves an element at the specified index from a fixed-size array. This function implements the array indexing operator [].

Parameters:

  • array : The fixed-size array to access.
  • index : The position in the array from which to retrieve the element.

Returns the element at the specified index.

Throws a runtime error if the index is out of bounds (negative or greater than or equal to the length of the array).

Example:

test "FixedArray::op_get" {
  let arr = FixedArray::make(3, 42)
  inspect!(arr[1], content="42")
}

test "panic FixedArray::op_get/out_of_bounds" {
  let arr = FixedArray::make(3, 0)
  ignore(arr[3]) // Index out of bounds
}
[
i
(self : Int, other : Int) -> Int

Multiplies two 32-bit integers. This is the implementation of the * operator for Int.

Parameters:

  • self : The first integer operand.
  • other : The second integer operand.

Returns the product of the two integers. If the result overflows the range of Int, it wraps around according to two's complement arithmetic.

Example:

test "Int::op_mul" {
  inspect!(42 * 2, content="84")
  inspect!(-10 * 3, content="-30")
  let max = 2147483647 // Int.max_value
  inspect!(max * 2, content="-2") // Overflow wraps around
}
*
6
(self : Int, other : Int) -> Int

Adds two 32-bit signed integers. Performs two's complement arithmetic, which means the operation will wrap around if the result exceeds the range of a 32-bit integer.

Parameters:

  • self : The first integer operand.
  • other : The second integer operand.

Returns a new integer that is the sum of the two operands. If the mathematical sum exceeds the range of a 32-bit integer (-2,147,483,648 to 2,147,483,647), the result wraps around according to two's complement rules.

Example:

test "Int::op_add" {
  inspect!(42 + 1, content="43")
  inspect!(2147483647 + 1, content="-2147483648") // Overflow wraps around to minimum value
}
+
5],
106 ) 107 }) 108} 109 110///| 111#borrow(self, edit) 112extern "c" fn ts_tree_edit(self :
type TSTree
TSTree
, edit :
type InputEdit FixedArray[UInt]
InputEdit
) = "moonbit_ts_tree_edit"
113 114///| 115/// Edit the syntax tree to keep it in sync with source code that has been 116/// edited. 117/// 118/// You must describe the edit both in terms of byte offsets and in terms of 119/// (row, column) coordinates. 120pub fn
struct Tree {
  tree: TSTree
  text: @string.StringView
}
Tree
::
(self : Tree, edit : InputEdit) -> Unit

Edit the syntax tree to keep it in sync with source code that has been edited.

You must describe the edit both in terms of byte offsets and in terms of (row, column) coordinates.

edit
(
Tree
self
:
struct Tree {
  tree: TSTree
  text: @string.StringView
}
Tree
,
InputEdit
edit
:
type InputEdit FixedArray[UInt]
InputEdit
) ->
Unit
Unit
{
121
(self : TSTree, edit : InputEdit) -> Unit
ts_tree_edit
(
Tree
self
.
TSTree
tree
,
InputEdit
edit
)
122} 123 124///| 125#borrow(self, other) 126extern "c" fn ts_tree_get_changed_ranges( 127 self :
type TSTree
TSTree
,
128 other :
type TSTree
TSTree
129) ->
type FixedArray[A]
FixedArray
[
UInt
UInt
] = "moonbit_ts_tree_get_changed_ranges"
130 131///| 132/// Compare an old edited syntax tree to a new syntax tree representing the same 133/// document, returning an array of ranges whose syntactic structure has changed. 134/// 135/// For this to work correctly, the old syntax tree must have been edited such 136/// that its ranges match up to the new tree. Generally, you'll want to call 137/// this function right after calling one of the Parser::parse functions. 138/// You need to pass the old tree that was passed to parse, as well as the new 139/// tree that was returned from that function. 140/// 141/// The returned ranges indicate areas where the hierarchical structure of syntax 142/// nodes (from root to leaf) has changed between the old and new trees. Characters 143/// outside these ranges have identical ancestor nodes in both trees. 144/// 145/// Note that the returned ranges may be slightly larger than the exact changed areas, 146/// but Tree-sitter attempts to make them as small as possible. 147pub fn
struct Tree {
  tree: TSTree
  text: @string.StringView
}
Tree
::
(self : Tree, other : Tree) -> Array[Range]

Compare an old edited syntax tree to a new syntax tree representing the same document, returning an array of ranges whose syntactic structure has changed.

For this to work correctly, the old syntax tree must have been edited such that its ranges match up to the new tree. Generally, you'll want to call this function right after calling one of the Parser::parse functions. You need to pass the old tree that was passed to parse, as well as the new tree that was returned from that function.

The returned ranges indicate areas where the hierarchical structure of syntax nodes (from root to leaf) has changed between the old and new trees. Characters outside these ranges have identical ancestor nodes in both trees.

Note that the returned ranges may be slightly larger than the exact changed areas, but Tree-sitter attempts to make them as small as possible.

get_changed_ranges
(
Tree
self
:
struct Tree {
  tree: TSTree
  text: @string.StringView
}
Tree
,
Tree
other
:
struct Tree {
  tree: TSTree
  text: @string.StringView
}
Tree
) ->
type Array[T]
Array
[
type Range FixedArray[UInt]
Range
] {
148 let
FixedArray[UInt]
flatten_ranges
=
(self : TSTree, other : TSTree) -> FixedArray[UInt]
ts_tree_get_changed_ranges
(
Tree
self
.
TSTree
tree
,
Tree
other
.
TSTree
tree
)
149
type Array[T]
Array
::
(Int, (Int) -> Range) -> Array[Range]

Creates a new array of the specified length, where each element is initialized using an index-based initialization function.

Parameters:

  • length : The length of the new array. If length is less than or equal to 0, returns an empty array.
  • initializer : A function that takes an index (starting from 0) and returns a value of type T. This function is called for each index to initialize the corresponding element.

Returns a new array of type Array[T] with the specified length, where each element is initialized using the provided function.

Example:

test "Array::makei" {
  let arr = Array::makei(3, fn(i) { i * 2 })
  inspect!(arr, content="[0, 2, 4]")
}
makei
(
FixedArray[UInt]
flatten_ranges
.
(self : FixedArray[UInt]) -> Int

Returns the number of elements in a fixed-size array.

Parameters:

  • array : The fixed-size array whose length is to be determined.

Returns an integer representing the number of elements in the array.

Example:

test "FixedArray::length" {
  let arr = FixedArray::make(3, 42)
  inspect!(arr.length(), content="3")
}
length
()
(self : Int, other : Int) -> Int

Performs integer division between two 32-bit integers. The result is truncated towards zero (rounds down for positive numbers and up for negative numbers).

Parameters:

  • dividend : The first integer operand to be divided.
  • divisor : The second integer operand that divides the dividend.

Returns the quotient of the division operation.

Throws a panic if divisor is zero.

Example:

test "Int::op_div" {
  inspect!(10 / 3, content="3") // truncates towards zero
  inspect!(-10 / 3, content="-3")
  inspect!(10 / -3, content="-3")
}

test "panic Int::op_div/division_by_zero" {
  ignore(42 / 0) // Panics with division by zero
}
/
6, fn(
Int
i
) {
150
(start_point : Point, end_point : Point, start_byte : UInt, end_byte : UInt) -> Range
ts_range_new
(
151
(row : UInt, column : UInt) -> Point
ts_point_new
(
FixedArray[UInt]
flatten_ranges
(FixedArray[UInt], Int) -> UInt

Retrieves an element at the specified index from a fixed-size array. This function implements the array indexing operator [].

Parameters:

  • array : The fixed-size array to access.
  • index : The position in the array from which to retrieve the element.

Returns the element at the specified index.

Throws a runtime error if the index is out of bounds (negative or greater than or equal to the length of the array).

Example:

test "FixedArray::op_get" {
  let arr = FixedArray::make(3, 42)
  inspect!(arr[1], content="42")
}

test "panic FixedArray::op_get/out_of_bounds" {
  let arr = FixedArray::make(3, 0)
  ignore(arr[3]) // Index out of bounds
}
[
i
(self : Int, other : Int) -> Int

Multiplies two 32-bit integers. This is the implementation of the * operator for Int.

Parameters:

  • self : The first integer operand.
  • other : The second integer operand.

Returns the product of the two integers. If the result overflows the range of Int, it wraps around according to two's complement arithmetic.

Example:

test "Int::op_mul" {
  inspect!(42 * 2, content="84")
  inspect!(-10 * 3, content="-30")
  let max = 2147483647 // Int.max_value
  inspect!(max * 2, content="-2") // Overflow wraps around
}
*
6],
FixedArray[UInt]
flatten_ranges
(FixedArray[UInt], Int) -> UInt

Retrieves an element at the specified index from a fixed-size array. This function implements the array indexing operator [].

Parameters:

  • array : The fixed-size array to access.
  • index : The position in the array from which to retrieve the element.

Returns the element at the specified index.

Throws a runtime error if the index is out of bounds (negative or greater than or equal to the length of the array).

Example:

test "FixedArray::op_get" {
  let arr = FixedArray::make(3, 42)
  inspect!(arr[1], content="42")
}

test "panic FixedArray::op_get/out_of_bounds" {
  let arr = FixedArray::make(3, 0)
  ignore(arr[3]) // Index out of bounds
}
[
i
(self : Int, other : Int) -> Int

Multiplies two 32-bit integers. This is the implementation of the * operator for Int.

Parameters:

  • self : The first integer operand.
  • other : The second integer operand.

Returns the product of the two integers. If the result overflows the range of Int, it wraps around according to two's complement arithmetic.

Example:

test "Int::op_mul" {
  inspect!(42 * 2, content="84")
  inspect!(-10 * 3, content="-30")
  let max = 2147483647 // Int.max_value
  inspect!(max * 2, content="-2") // Overflow wraps around
}
*
6
(self : Int, other : Int) -> Int

Adds two 32-bit signed integers. Performs two's complement arithmetic, which means the operation will wrap around if the result exceeds the range of a 32-bit integer.

Parameters:

  • self : The first integer operand.
  • other : The second integer operand.

Returns a new integer that is the sum of the two operands. If the mathematical sum exceeds the range of a 32-bit integer (-2,147,483,648 to 2,147,483,647), the result wraps around according to two's complement rules.

Example:

test "Int::op_add" {
  inspect!(42 + 1, content="43")
  inspect!(2147483647 + 1, content="-2147483648") // Overflow wraps around to minimum value
}
+
1]),
152
(row : UInt, column : UInt) -> Point
ts_point_new
(
FixedArray[UInt]
flatten_ranges
(FixedArray[UInt], Int) -> UInt

Retrieves an element at the specified index from a fixed-size array. This function implements the array indexing operator [].

Parameters:

  • array : The fixed-size array to access.
  • index : The position in the array from which to retrieve the element.

Returns the element at the specified index.

Throws a runtime error if the index is out of bounds (negative or greater than or equal to the length of the array).

Example:

test "FixedArray::op_get" {
  let arr = FixedArray::make(3, 42)
  inspect!(arr[1], content="42")
}

test "panic FixedArray::op_get/out_of_bounds" {
  let arr = FixedArray::make(3, 0)
  ignore(arr[3]) // Index out of bounds
}
[
i
(self : Int, other : Int) -> Int

Multiplies two 32-bit integers. This is the implementation of the * operator for Int.

Parameters:

  • self : The first integer operand.
  • other : The second integer operand.

Returns the product of the two integers. If the result overflows the range of Int, it wraps around according to two's complement arithmetic.

Example:

test "Int::op_mul" {
  inspect!(42 * 2, content="84")
  inspect!(-10 * 3, content="-30")
  let max = 2147483647 // Int.max_value
  inspect!(max * 2, content="-2") // Overflow wraps around
}
*
6
(self : Int, other : Int) -> Int

Adds two 32-bit signed integers. Performs two's complement arithmetic, which means the operation will wrap around if the result exceeds the range of a 32-bit integer.

Parameters:

  • self : The first integer operand.
  • other : The second integer operand.

Returns a new integer that is the sum of the two operands. If the mathematical sum exceeds the range of a 32-bit integer (-2,147,483,648 to 2,147,483,647), the result wraps around according to two's complement rules.

Example:

test "Int::op_add" {
  inspect!(42 + 1, content="43")
  inspect!(2147483647 + 1, content="-2147483648") // Overflow wraps around to minimum value
}
+
2],
FixedArray[UInt]
flatten_ranges
(FixedArray[UInt], Int) -> UInt

Retrieves an element at the specified index from a fixed-size array. This function implements the array indexing operator [].

Parameters:

  • array : The fixed-size array to access.
  • index : The position in the array from which to retrieve the element.

Returns the element at the specified index.

Throws a runtime error if the index is out of bounds (negative or greater than or equal to the length of the array).

Example:

test "FixedArray::op_get" {
  let arr = FixedArray::make(3, 42)
  inspect!(arr[1], content="42")
}

test "panic FixedArray::op_get/out_of_bounds" {
  let arr = FixedArray::make(3, 0)
  ignore(arr[3]) // Index out of bounds
}
[
i
(self : Int, other : Int) -> Int

Multiplies two 32-bit integers. This is the implementation of the * operator for Int.

Parameters:

  • self : The first integer operand.
  • other : The second integer operand.

Returns the product of the two integers. If the result overflows the range of Int, it wraps around according to two's complement arithmetic.

Example:

test "Int::op_mul" {
  inspect!(42 * 2, content="84")
  inspect!(-10 * 3, content="-30")
  let max = 2147483647 // Int.max_value
  inspect!(max * 2, content="-2") // Overflow wraps around
}
*
6
(self : Int, other : Int) -> Int

Adds two 32-bit signed integers. Performs two's complement arithmetic, which means the operation will wrap around if the result exceeds the range of a 32-bit integer.

Parameters:

  • self : The first integer operand.
  • other : The second integer operand.

Returns a new integer that is the sum of the two operands. If the mathematical sum exceeds the range of a 32-bit integer (-2,147,483,648 to 2,147,483,647), the result wraps around according to two's complement rules.

Example:

test "Int::op_add" {
  inspect!(42 + 1, content="43")
  inspect!(2147483647 + 1, content="-2147483648") // Overflow wraps around to minimum value
}
+
3]),
153
FixedArray[UInt]
flatten_ranges
(FixedArray[UInt], Int) -> UInt

Retrieves an element at the specified index from a fixed-size array. This function implements the array indexing operator [].

Parameters:

  • array : The fixed-size array to access.
  • index : The position in the array from which to retrieve the element.

Returns the element at the specified index.

Throws a runtime error if the index is out of bounds (negative or greater than or equal to the length of the array).

Example:

test "FixedArray::op_get" {
  let arr = FixedArray::make(3, 42)
  inspect!(arr[1], content="42")
}

test "panic FixedArray::op_get/out_of_bounds" {
  let arr = FixedArray::make(3, 0)
  ignore(arr[3]) // Index out of bounds
}
[
i
(self : Int, other : Int) -> Int

Multiplies two 32-bit integers. This is the implementation of the * operator for Int.

Parameters:

  • self : The first integer operand.
  • other : The second integer operand.

Returns the product of the two integers. If the result overflows the range of Int, it wraps around according to two's complement arithmetic.

Example:

test "Int::op_mul" {
  inspect!(42 * 2, content="84")
  inspect!(-10 * 3, content="-30")
  let max = 2147483647 // Int.max_value
  inspect!(max * 2, content="-2") // Overflow wraps around
}
*
6
(self : Int, other : Int) -> Int

Adds two 32-bit signed integers. Performs two's complement arithmetic, which means the operation will wrap around if the result exceeds the range of a 32-bit integer.

Parameters:

  • self : The first integer operand.
  • other : The second integer operand.

Returns a new integer that is the sum of the two operands. If the mathematical sum exceeds the range of a 32-bit integer (-2,147,483,648 to 2,147,483,647), the result wraps around according to two's complement rules.

Example:

test "Int::op_add" {
  inspect!(42 + 1, content="43")
  inspect!(2147483647 + 1, content="-2147483648") // Overflow wraps around to minimum value
}
+
4],
154
FixedArray[UInt]
flatten_ranges
(FixedArray[UInt], Int) -> UInt

Retrieves an element at the specified index from a fixed-size array. This function implements the array indexing operator [].

Parameters:

  • array : The fixed-size array to access.
  • index : The position in the array from which to retrieve the element.

Returns the element at the specified index.

Throws a runtime error if the index is out of bounds (negative or greater than or equal to the length of the array).

Example:

test "FixedArray::op_get" {
  let arr = FixedArray::make(3, 42)
  inspect!(arr[1], content="42")
}

test "panic FixedArray::op_get/out_of_bounds" {
  let arr = FixedArray::make(3, 0)
  ignore(arr[3]) // Index out of bounds
}
[
i
(self : Int, other : Int) -> Int

Multiplies two 32-bit integers. This is the implementation of the * operator for Int.

Parameters:

  • self : The first integer operand.
  • other : The second integer operand.

Returns the product of the two integers. If the result overflows the range of Int, it wraps around according to two's complement arithmetic.

Example:

test "Int::op_mul" {
  inspect!(42 * 2, content="84")
  inspect!(-10 * 3, content="-30")
  let max = 2147483647 // Int.max_value
  inspect!(max * 2, content="-2") // Overflow wraps around
}
*
6
(self : Int, other : Int) -> Int

Adds two 32-bit signed integers. Performs two's complement arithmetic, which means the operation will wrap around if the result exceeds the range of a 32-bit integer.

Parameters:

  • self : The first integer operand.
  • other : The second integer operand.

Returns a new integer that is the sum of the two operands. If the mathematical sum exceeds the range of a 32-bit integer (-2,147,483,648 to 2,147,483,647), the result wraps around according to two's complement rules.

Example:

test "Int::op_add" {
  inspect!(42 + 1, content="43")
  inspect!(2147483647 + 1, content="-2147483648") // Overflow wraps around to minimum value
}
+
5],
155 ) 156 }) 157} 158 159///| 160pub fn
struct Tree {
  tree: TSTree
  text: @string.StringView
}
Tree
::
(self : Tree) -> TreeCursor
walk
(
Tree
self
:
struct Tree {
  tree: TSTree
  text: @string.StringView
}
Tree
) ->
struct TreeCursor {
  cursor: TSTreeCursor
  tree: TSTree
  text: @string.StringView
}
TreeCursor
{
161
struct TreeCursor {
  cursor: TSTreeCursor
  tree: TSTree
  text: @string.StringView
}
TreeCursor
::
(node : Node) -> TreeCursor

Create a new tree cursor starting from the given node.

A tree cursor allows you to walk a syntax tree more efficiently than is possible using the Node functions. It is a mutable object that is always on a certain syntax node, and can be moved imperatively to different nodes.

Note that the given node is considered the root of the cursor, and the cursor cannot walk outside this node.

new
(
Tree
self
.
(self : Tree) -> Node

Get the root node of the syntax tree.

root_node
())
162} 163 164///| 165pub fn
struct Tree {
  tree: TSTree
  text: @string.StringView
}
Tree
::
(self : Tree, query : @string.StringView) -> QueryCursor!QueryError
query
(
166
Tree
self
:
struct Tree {
  tree: TSTree
  text: @string.StringView
}
Tree
,
167
@string.StringView
source
:
type @string.StringView

A @string.View represents a view of a String that maintains proper Unicode character boundaries. It allows safe access to a substring while handling multi-byte characters correctly.

@string.View
168) ->
struct QueryCursor {
  mut query: Query?
  mut node: Node?
}
QueryCursor
!
type! QueryError {
  Syntax(UInt)
  NodeType(UInt)
  Field(UInt)
  Capture(UInt)
  Structure(UInt)
  Language(UInt)
}
QueryError
{
169
Tree
self
.
(self : Tree) -> Node

Get the root node of the syntax tree.

root_node
().
(self : Node, source : @string.StringView) -> QueryCursor!QueryError
query
!(
@string.StringView
source
)
170} 171