1///|
2type Parser
3
4///|
5extern "js" fn ts_parser_new(ts : 
type TS
TS
) ->
type Parser
Parser
=
6 #|(ts) => { 7 #| return new ts.Parser(); 8 #|} 9 10///| 11extern "js" fn
type Parser
Parser
::is_null(self :
type Parser
Parser
) ->
Bool
Bool
=
12 #|() => { 13 #| return self === null || self === undefined; 14 #|} 15 16///| 17/// Create a new parser. 18pub fn
type Parser
Parser
::
() -> Parser

Create a new parser.

new
() ->
type Parser
Parser
{
19
() -> Parser
ts_parser_new
(
TS
ts
)
20} 21 22///| 23pub fn
(language : Language) -> Parser!LanguageError
parser
(
Language
language
:
type Language @tree_sitter_language.Language
Language
) ->
type Parser
Parser
!
type! LanguageError {
  VersionMismatch(language_abi_version~ : Int, library_version~ : Int, min_compatible_version~ : Int)
}
LanguageError
{
24 let
Parser
parser
=
type Parser
Parser
::
() -> Parser

Create a new parser.

new
()
25
Parser
parser
.
(self : Parser, language : Language) -> Unit!LanguageError

Set the language that the parser should use for parsing.

Returns a boolean indicating whether or not the language was successfully assigned. True means assignment succeeded. False means there was a version mismatch: the language was generated with an incompatible version of the Tree-sitter CLI. Check the language's ABI version using Language::abi_version and compare it to this library's LANGUAGE_VERSION and MIN_COMPATIBLE_LANGUAGE_VERSION constants.

set_language
!(
Language
language
)
26 return
Parser
parser
27} 28 29///| 30extern "js" fn ts_parser_language(self :
type Parser
Parser
) ->
type Language @tree_sitter_language.Language
Language
=
31 #|(self) => { 32 #| return self.language; 33 #|} 34 35///| 36/// Get the parser's current language. 37pub fn
type Parser
Parser
::
(self : Parser) -> Language?

Get the parser's current language.

language
(
Parser
self
:
type Parser
Parser
) ->
type Language @tree_sitter_language.Language
Language
? {
38
(self : Parser) -> Language
ts_parser_language
(
Parser
self
).
(self : Language) -> Language?
to_option
()
39} 40 41///| 42extern "js" fn ts_parser_set_language( 43 self :
type Parser
Parser
,
44 language :
type Language @tree_sitter_language.Language
Language
45) ->
Bool
Bool
=
46 #|(self, language) => { 47 #| try { 48 #| self.setLanguage(language); 49 #| return true; 50 #| } catch (error) { 51 #| console.error("Error setting parser language:", error); 52 #| return false; 53 #| } 54 #|} 55 56///| 57type! LanguageError { 58
(language_abi_version~ : Int, library_version~ : Int, min_compatible_version~ : Int) -> LanguageError
VersionMismatch
(
59
Int
language_abi_version
~ :
Int
Int
,
60
Int
library_version
~ :
Int
Int
,
61
Int
min_compatible_version
~ :
Int
Int
62 ) 63} 64 65///| 66/// Set the language that the parser should use for parsing. 67/// 68/// Returns a boolean indicating whether or not the language was successfully 69/// assigned. True means assignment succeeded. False means there was a version 70/// mismatch: the language was generated with an incompatible version of the 71/// Tree-sitter CLI. Check the language's ABI version using Language::abi_version 72/// and compare it to this library's `LANGUAGE_VERSION` and 73/// `MIN_COMPATIBLE_LANGUAGE_VERSION` constants. 74pub fn
type Parser
Parser
::
(self : Parser, language : Language) -> Unit!LanguageError

Set the language that the parser should use for parsing.

Returns a boolean indicating whether or not the language was successfully assigned. True means assignment succeeded. False means there was a version mismatch: the language was generated with an incompatible version of the Tree-sitter CLI. Check the language's ABI version using Language::abi_version and compare it to this library's LANGUAGE_VERSION and MIN_COMPATIBLE_LANGUAGE_VERSION constants.

set_language
(
75
Parser
self
:
type Parser
Parser
,
76
Language
language
:
type Language @tree_sitter_language.Language
Language
77) ->
Unit
Unit
!
type! LanguageError {
  VersionMismatch(language_abi_version~ : Int, library_version~ : Int, min_compatible_version~ : Int)
}
LanguageError
{
78 let
Bool
succeed
=
(self : Parser, language : Language) -> Bool
ts_parser_set_language
(
Parser
self
,
Language
language
)
79 if
(x : Bool) -> Bool

Performs logical negation on a boolean value.

Parameters:

  • value : The boolean value to negate.

Returns the logical NOT of the input value: true if the input is false, and false if the input is true.

Example:

test "not" {
  inspect!(not(true), content="false")
  inspect!(not(false), content="true")
}
not
(
Bool
succeed
) {
80 raise
(language_abi_version~ : Int, library_version~ : Int, min_compatible_version~ : Int) -> LanguageError
VersionMismatch
(
81
Int
language_abi_version
=
Language
language
.
(self : Language) -> Int

Get the ABI version number for this language. This version number is used to ensure that languages were generated by a compatible version of Tree-sitter.

See also Parser::set_language.

abi_version
(),
82
Int
library_version
=
Int

The latest ABI version that is supported by the current version of the library. When Languages are generated by the Tree-sitter CLI, they are assigned an ABI version number that corresponds to the current CLI version. The Tree-sitter library is generally backwards-compatible with languages generated using older CLI versions, but is not forwards-compatible.

LANGUAGE_VERSION
,
83
Int
min_compatible_version
=
Int

The earliest ABI version that is supported by the current version of the library.

MIN_COMPATIBLE_LANGUAGE_VERSION
,
84 ) 85 } 86} 87 88///| 89/// The latest ABI version that is supported by the current version of the 90/// library. When Languages are generated by the Tree-sitter CLI, they are 91/// assigned an ABI version number that corresponds to the current CLI version. 92/// The Tree-sitter library is generally backwards-compatible with languages 93/// generated using older CLI versions, but is not forwards-compatible. 94pub const
Int

The latest ABI version that is supported by the current version of the library. When Languages are generated by the Tree-sitter CLI, they are assigned an ABI version number that corresponds to the current CLI version. The Tree-sitter library is generally backwards-compatible with languages generated using older CLI versions, but is not forwards-compatible.

LANGUAGE_VERSION
= 15
95 96///| 97/// 98/// The earliest ABI version that is supported by the current version of the 99/// library. 100pub const
Int

The earliest ABI version that is supported by the current version of the library.

MIN_COMPATIBLE_LANGUAGE_VERSION
= 13
101 102///| 103extern "js" fn ts_parser_included_ranges(self :
type Parser
Parser
) ->
type Array[T]
Array
[
type Range FixedArray[UInt]
Range
] =
104 #|(self) => { 105 #| return self.getIncludedRanges(); 106 #|} 107 108///| 109/// Get the ranges of text that the parser will include when parsing. 110pub fn
type Parser
Parser
::
(self : Parser) -> Array[Range]

Get the ranges of text that the parser will include when parsing.

included_ranges
(
Parser
self
:
type Parser
Parser
) ->
type Array[T]
Array
[
type Range FixedArray[UInt]
Range
] {
111
(self : Parser) -> Array[Range]
ts_parser_included_ranges
(
Parser
self
)
112} 113 114///| 115pub type! ParseError { 116
ParseError
MissingLanguage
117
ParseError
Cancelled
118} derive(
(ParseError, &Logger) -> Unit
Show
)
119 120///| 121fn
(self : Parser, tree : Tree?) -> Tree!ParseError
raise_parse_error
(
Parser
self
:
type Parser
Parser
,
Tree?
tree
:
struct Tree {
  tree: TSTree
  text: @string.StringView
}
Tree
?) ->
struct Tree {
  tree: TSTree
  text: @string.StringView
}
Tree
!
type! ParseError {
  MissingLanguage
  Cancelled
}
ParseError
{
122 match
Tree?
tree
{
123
Tree?
None
=>
124 match
Parser
self
.
(self : Parser) -> Language?

Get the parser's current language.

language
() {
125
Language?
None
=> raise
ParseError
MissingLanguage
126
Language?
Some
(_) => raise
ParseError
Cancelled
127 } 128
(Tree) -> Tree?
Some
(
Tree
tree
) => return
Tree
tree
129 } 130} 131 132///| 133extern "js" fn ts_parser_parse_string( 134 self :
type Parser
Parser
,
135 string :
String
String
,
136 old_tree :
struct Tree {
  tree: TSTree
  text: @string.StringView
}
Tree
137) ->
struct Tree {
  tree: TSTree
  text: @string.StringView
}
Tree
=
138 #|(self, string, oldTree) => { 139 #| return self.parse(string, oldTree); 140 #|} 141 142///| 143/// Use the parser to parse some source code stored in one contiguous string buffer. 144/// The first two parameters are the same as in the `parse` function. The final 145/// parameter is the string to parse. 146pub fn
type Parser
Parser
::
(self : Parser, old_tree? : Tree, string : @string.StringView) -> Tree!ParseError

Use the parser to parse some source code stored in one contiguous string buffer. The first two parameters are the same as in the parse function. The final parameter is the string to parse.

parse_string
(
147
Parser
self
:
type Parser
Parser
,
148
Tree?
old_tree
? :
struct Tree {
  tree: TSTree
  text: @string.StringView
}
Tree
,
149
@string.StringView
string
:
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
150) ->
struct Tree {
  tree: TSTree
  text: @string.StringView
}
Tree
!
type! ParseError {
  MissingLanguage
  Cancelled
}
ParseError
{
151 let
Tree
old_ts_tree
= match
Tree?
old_tree
{
152
Tree?
None
=>
() -> Tree
ts_tree_null
()
153
(Tree) -> Tree?
Some
(
Tree
tree
) =>
Tree
tree
154 } 155 let
Tree?
tree
=
(self : Parser, string : String, old_tree : Tree) -> Tree
ts_parser_parse_string
(
Parser
self
,
@string.StringView
string
.
(self : @string.StringView) -> String

Returns a new String containing a copy of the characters in this view.

Examples

let str = "Hello World"
let view = str[0:5]  // "Hello"
inspect!(view.to_string(), content="Hello")
to_string
(),
Tree
old_ts_tree
).
(self : Tree) -> Tree?
to_option
()
156
(self : Parser, tree : Tree?) -> Tree!ParseError
raise_parse_error
!(
Parser
self
,
Tree?
tree
)
157} 158 159///| 160extern "js" fn ts_parser_reset(self :
type Parser
Parser
) =
161 #|(self) => { 162 #| return self.reset(); 163 #|} 164 165///| 166/// Instruct the parser to start the next parse from the beginning. 167/// 168/// If the parser previously failed because of a timeout or a cancellation, then 169/// by default, it will resume where it left off on the next call to 170/// `parse` or other parsing functions. If you don't want to resume, 171/// and instead intend to use this parser to parse some other document, you must 172/// call `reset` first. 173pub fn
type Parser
Parser
::
(self : Parser) -> Unit

Instruct the parser to start the next parse from the beginning.

If the parser previously failed because of a timeout or a cancellation, then by default, it will resume where it left off on the next call to parse or other parsing functions. If you don't want to resume, and instead intend to use this parser to parse some other document, you must call reset first.

reset
(
Parser
self
:
type Parser
Parser
) ->
Unit
Unit
{
174
(self : Parser) -> Unit
ts_parser_reset
(
Parser
self
)
175} 176 177///| 178pub enum LogType { 179
LogType
Parse
180
LogType
Lex
181} 182 183///| 184type Logger (
String
String
,
Bool
Bool
) ->
Unit
Unit
185 186///| 187fn
type Logger (String, Bool) -> Unit
Logger
::
(log : (LogType, @string.StringView) -> Unit) -> Logger
new
(
(LogType, @string.StringView) -> Unit
log
: (
enum LogType {
  Parse
  Lex
}
LogType
,
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
) ->
Unit
Unit
) ->
type Logger (String, Bool) -> Unit
Logger
{
188 fn(
String
message
,
Bool
isLex
) {
189 let
LogType
logType
= if
Bool
isLex
{ LogType::
LogType
Lex
} else { LogType::
LogType
Parse
}
190
(LogType, @string.StringView) -> Unit
log
(
LogType
logType
,
String
message
)
191 } 192} 193 194///| 195// @move logger 196extern "js" fn ts_parser_set_logger( 197 self :
type Parser
Parser
,
198 logger : (
String
String
,
Bool
Bool
) ->
Unit
Unit
199) = 200 #|(self, logger) => { 201 #| return self.setLogger(logger); 202 #|} 203 204///| 205/// Set the logger that a parser should use during parsing. 206/// 207/// The parser does not take ownership over the logger payload. If a logger was 208/// previously assigned, the caller is responsible for releasing any memory 209/// owned by the previous logger. 210pub fn
type Parser
Parser
::
(self : Parser, logger : Logger) -> Unit

Set the logger that a parser should use during parsing.

The parser does not take ownership over the logger payload. If a logger was previously assigned, the caller is responsible for releasing any memory owned by the previous logger.

set_logger
(
Parser
self
:
type Parser
Parser
,
Logger
logger
:
type Logger (String, Bool) -> Unit
Logger
) ->
Unit
Unit
{
211
(self : Parser, logger : (String, Bool) -> Unit) -> Unit
ts_parser_set_logger
(
Parser
self
,
Logger
logger
.
(String, Bool) -> Unit
_
)
212} 213 214///| 215extern "js" fn ts_parser_logger(self :
type Parser
Parser
) -> (
String
String
,
Bool
Bool
) ->
Unit
Unit
=
216 #|() => { 217 #| return self.getLogger(); 218 #|} 219 220///| 221/// Get the parser's current logger. 222pub fn
type Parser
Parser
::
(self : Parser) -> Logger

Get the parser's current logger.

logger
(
Parser
self
:
type Parser
Parser
) ->
type Logger (String, Bool) -> Unit
Logger
{
223
(self : Parser) -> (String, Bool) -> Unit
ts_parser_logger
(
Parser
self
)
224} 225