@kerebron/tree-sitter 0.4.27 → 0.4.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/deno-tree-sitter/main/extended/base_node.d.ts +48 -0
- package/esm/deno-tree-sitter/main/extended/base_node.d.ts.map +1 -0
- package/esm/deno-tree-sitter/main/extended/base_node.js +155 -0
- package/esm/deno-tree-sitter/main/extended/base_node.js.map +1 -0
- package/esm/deno-tree-sitter/main/extended/node_extended.d.ts +237 -0
- package/esm/deno-tree-sitter/main/extended/node_extended.d.ts.map +1 -0
- package/esm/deno-tree-sitter/main/extended/node_extended.js +573 -0
- package/esm/deno-tree-sitter/main/extended/node_extended.js.map +1 -0
- package/esm/deno-tree-sitter/main/extended/parser.d.ts +37 -0
- package/esm/deno-tree-sitter/main/extended/parser.d.ts.map +1 -0
- package/esm/deno-tree-sitter/main/extended/parser.js +87 -0
- package/esm/deno-tree-sitter/main/extended/parser.js.map +1 -0
- package/esm/deno-tree-sitter/main/extended/soft_node.d.ts +15 -0
- package/esm/deno-tree-sitter/main/extended/soft_node.d.ts.map +1 -0
- package/esm/deno-tree-sitter/main/extended/soft_node.js +28 -0
- package/esm/deno-tree-sitter/main/extended/soft_node.js.map +1 -0
- package/esm/deno-tree-sitter/main/extended/soft_text_node.d.ts +10 -0
- package/esm/deno-tree-sitter/main/extended/soft_text_node.d.ts.map +1 -0
- package/esm/deno-tree-sitter/main/extended/soft_text_node.js +11 -0
- package/esm/deno-tree-sitter/main/extended/soft_text_node.js.map +1 -0
- package/esm/deno-tree-sitter/main/extended/whitespace_node.d.ts +10 -0
- package/esm/deno-tree-sitter/main/extended/whitespace_node.d.ts.map +1 -0
- package/esm/deno-tree-sitter/main/extended/whitespace_node.js +11 -0
- package/esm/deno-tree-sitter/main/extended/whitespace_node.js.map +1 -0
- package/esm/deno-tree-sitter/main/extras/misc.d.ts +2 -0
- package/esm/deno-tree-sitter/main/extras/misc.d.ts.map +1 -0
- package/esm/deno-tree-sitter/main/extras/misc.js +14 -0
- package/esm/deno-tree-sitter/main/extras/misc.js.map +1 -0
- package/esm/deno-tree-sitter/main/tree_sitter/bindings.d.ts +14 -0
- package/esm/deno-tree-sitter/main/tree_sitter/bindings.d.ts.map +1 -0
- package/esm/deno-tree-sitter/main/tree_sitter/bindings.js +22 -0
- package/esm/deno-tree-sitter/main/tree_sitter/bindings.js.map +1 -0
- package/esm/deno-tree-sitter/main/tree_sitter/constants.d.ts +60 -0
- package/esm/deno-tree-sitter/main/tree_sitter/constants.d.ts.map +1 -0
- package/esm/deno-tree-sitter/main/tree_sitter/constants.js +67 -0
- package/esm/deno-tree-sitter/main/tree_sitter/constants.js.map +1 -0
- package/esm/deno-tree-sitter/main/tree_sitter/language.d.ts +137 -0
- package/esm/deno-tree-sitter/main/tree_sitter/language.d.ts.map +1 -0
- package/esm/deno-tree-sitter/main/tree_sitter/language.js +265 -0
- package/esm/deno-tree-sitter/main/tree_sitter/language.js.map +1 -0
- package/esm/deno-tree-sitter/main/tree_sitter/lookahead_iterator.d.ts +41 -0
- package/esm/deno-tree-sitter/main/tree_sitter/lookahead_iterator.d.ts.map +1 -0
- package/esm/deno-tree-sitter/main/tree_sitter/lookahead_iterator.js +66 -0
- package/esm/deno-tree-sitter/main/tree_sitter/lookahead_iterator.js.map +1 -0
- package/esm/deno-tree-sitter/main/tree_sitter/marshal.d.ts +85 -0
- package/esm/deno-tree-sitter/main/tree_sitter/marshal.d.ts.map +1 -0
- package/esm/deno-tree-sitter/main/tree_sitter/marshal.js +174 -0
- package/esm/deno-tree-sitter/main/tree_sitter/marshal.js.map +1 -0
- package/esm/deno-tree-sitter/main/tree_sitter/node.d.ts +260 -0
- package/esm/deno-tree-sitter/main/tree_sitter/node.d.ts.map +1 -0
- package/esm/deno-tree-sitter/main/tree_sitter/node.js +558 -0
- package/esm/deno-tree-sitter/main/tree_sitter/node.js.map +1 -0
- package/esm/deno-tree-sitter/main/tree_sitter/parser.d.ts +124 -0
- package/esm/deno-tree-sitter/main/tree_sitter/parser.d.ts.map +1 -0
- package/esm/deno-tree-sitter/main/tree_sitter/parser.js +253 -0
- package/esm/deno-tree-sitter/main/tree_sitter/parser.js.map +1 -0
- package/esm/deno-tree-sitter/main/tree_sitter/query.d.ts +134 -0
- package/esm/deno-tree-sitter/main/tree_sitter/query.d.ts.map +1 -0
- package/esm/deno-tree-sitter/main/tree_sitter/query.js +621 -0
- package/esm/deno-tree-sitter/main/tree_sitter/query.js.map +1 -0
- package/esm/deno-tree-sitter/main/tree_sitter/tree.d.ts +49 -0
- package/esm/deno-tree-sitter/main/tree_sitter/tree.d.ts.map +1 -0
- package/esm/deno-tree-sitter/main/tree_sitter/tree.js +131 -0
- package/esm/deno-tree-sitter/main/tree_sitter/tree.js.map +1 -0
- package/esm/deno-tree-sitter/main/tree_sitter/tree_cursor.d.ts +165 -0
- package/esm/deno-tree-sitter/main/tree_sitter/tree_cursor.d.ts.map +1 -0
- package/esm/deno-tree-sitter/main/tree_sitter/tree_cursor.js +281 -0
- package/esm/deno-tree-sitter/main/tree_sitter/tree_cursor.js.map +1 -0
- package/esm/deno-tree-sitter/main/tree_sitter_wasm.d.ts +3 -0
- package/esm/deno-tree-sitter/main/tree_sitter_wasm.d.ts.map +1 -0
- package/esm/deno-tree-sitter/main/tree_sitter_wasm.js +0 -0
- package/esm/deno-tree-sitter/main/tree_sitter_wasm.js.map +1 -0
- package/esm/deno-tree-sitter/main/wasm_loader.d.ts +29 -0
- package/esm/deno-tree-sitter/main/wasm_loader.d.ts.map +1 -0
- package/esm/deno-tree-sitter/main/wasm_loader.js +1703 -0
- package/esm/deno-tree-sitter/main/wasm_loader.js.map +1 -0
- package/esm/deno-tree-sitter/main/wasm_loader_with_defaults.d.ts +3 -0
- package/esm/deno-tree-sitter/main/wasm_loader_with_defaults.d.ts.map +1 -0
- package/esm/deno-tree-sitter/main/wasm_loader_with_defaults.js +9 -0
- package/esm/deno-tree-sitter/main/wasm_loader_with_defaults.js.map +1 -0
- package/esm/mod.d.ts +7 -0
- package/esm/mod.d.ts.map +1 -0
- package/esm/mod.js +8 -0
- package/esm/mod.js.map +1 -0
- package/esm/package.json +3 -0
- package/package.json +5 -2
- package/src/deno-tree-sitter/main/extended/base_node.js +174 -0
- package/src/deno-tree-sitter/main/extended/node_extended.js +588 -0
- package/src/deno-tree-sitter/main/extended/parser.js +87 -0
- package/src/deno-tree-sitter/main/extended/soft_node.js +32 -0
- package/src/deno-tree-sitter/main/extended/soft_text_node.js +11 -0
- package/src/deno-tree-sitter/main/extended/whitespace_node.js +11 -0
- package/src/deno-tree-sitter/main/extras/misc.js +12 -0
- package/src/deno-tree-sitter/main/tree_sitter/bindings.js +26 -0
- package/src/deno-tree-sitter/main/tree_sitter/constants.js +79 -0
- package/src/deno-tree-sitter/main/tree_sitter/language.js +289 -0
- package/src/deno-tree-sitter/main/tree_sitter/lookahead_iterator.js +74 -0
- package/src/deno-tree-sitter/main/tree_sitter/marshal.js +186 -0
- package/src/deno-tree-sitter/main/tree_sitter/node.js +616 -0
- package/src/deno-tree-sitter/main/tree_sitter/parser.js +273 -0
- package/src/deno-tree-sitter/main/tree_sitter/query.js +705 -0
- package/src/deno-tree-sitter/main/tree_sitter/tree.js +145 -0
- package/src/deno-tree-sitter/main/tree_sitter/tree_cursor.js +314 -0
- package/src/deno-tree-sitter/main/tree_sitter_wasm.js +0 -0
- package/src/deno-tree-sitter/main/wasm_loader.js +1702 -0
- package/src/deno-tree-sitter/main/wasm_loader_with_defaults.js +9 -0
- package/src/mod.ts +8 -0
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
import { C, INTERNAL, SIZE_OF_INT, SIZE_OF_RANGE, setModule } from "./constants.js"
|
|
2
|
+
import { Language } from "./language.js"
|
|
3
|
+
import { marshalRange, unmarshalRange } from "./marshal.js"
|
|
4
|
+
import { checkModule, initializeBinding } from "./bindings.js"
|
|
5
|
+
import { Tree } from "./tree.js"
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Options for parsing
|
|
9
|
+
*
|
|
10
|
+
* The `includedRanges` property is an array of {@link Range} objects that
|
|
11
|
+
* represent the ranges of text that the parser should include when parsing.
|
|
12
|
+
*
|
|
13
|
+
* The `progressCallback` property is a function that is called periodically
|
|
14
|
+
* during parsing to check whether parsing should be cancelled.
|
|
15
|
+
*
|
|
16
|
+
* See {@link Parser#parse} for more information.
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* A stateful object that is passed into the progress callback {@link ParseOptions#progressCallback}
|
|
20
|
+
* to provide the current state of the parser.
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* @internal
|
|
24
|
+
*
|
|
25
|
+
* Global variable for transferring data across the FFI boundary
|
|
26
|
+
*/
|
|
27
|
+
export let TRANSFER_BUFFER
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* The latest ABI version that is supported by the current version of the
|
|
31
|
+
* library.
|
|
32
|
+
*
|
|
33
|
+
* When Languages are generated by the Tree-sitter CLI, they are
|
|
34
|
+
* assigned an ABI version number that corresponds to the current CLI version.
|
|
35
|
+
* The Tree-sitter library is generally backwards-compatible with languages
|
|
36
|
+
* generated using older CLI versions, but is not forwards-compatible.
|
|
37
|
+
*/
|
|
38
|
+
export let LANGUAGE_VERSION
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* The earliest ABI version that is supported by the current version of the
|
|
42
|
+
* library.
|
|
43
|
+
*/
|
|
44
|
+
export let MIN_COMPATIBLE_VERSION
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* A stateful object that is used to produce a {@link Tree} based on some
|
|
48
|
+
* source code.
|
|
49
|
+
*/
|
|
50
|
+
export class Parser {
|
|
51
|
+
/** @internal */
|
|
52
|
+
[0] = 0; // Internal handle for Wasm
|
|
53
|
+
|
|
54
|
+
/** @internal */
|
|
55
|
+
[1] = 0 // Internal handle for Wasm
|
|
56
|
+
|
|
57
|
+
/** @internal */
|
|
58
|
+
logCallback = null
|
|
59
|
+
|
|
60
|
+
/** The parser's current language. */
|
|
61
|
+
language = null
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* This must always be called before creating a Parser.
|
|
65
|
+
*
|
|
66
|
+
* You can optionally pass in options to configure the Wasm module, the most common
|
|
67
|
+
* one being `locateFile` to help the module find the `.wasm` file.
|
|
68
|
+
*/
|
|
69
|
+
static async init(moduleOptions) {
|
|
70
|
+
setModule(await initializeBinding(moduleOptions))
|
|
71
|
+
TRANSFER_BUFFER = C._ts_init()
|
|
72
|
+
LANGUAGE_VERSION = C.getValue(TRANSFER_BUFFER, "i32")
|
|
73
|
+
MIN_COMPATIBLE_VERSION = C.getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32")
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Create a new parser.
|
|
78
|
+
*/
|
|
79
|
+
constructor() {
|
|
80
|
+
this.initialize()
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/** @internal */
|
|
84
|
+
initialize() {
|
|
85
|
+
if (!checkModule()) {
|
|
86
|
+
throw new Error("cannot construct a Parser before calling `init()`")
|
|
87
|
+
}
|
|
88
|
+
C._ts_parser_new_wasm()
|
|
89
|
+
this[0] = C.getValue(TRANSFER_BUFFER, "i32")
|
|
90
|
+
this[1] = C.getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32")
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/** Delete the parser, freeing its resources. */
|
|
94
|
+
delete() {
|
|
95
|
+
C._ts_parser_delete(this[0])
|
|
96
|
+
C._free(this[1])
|
|
97
|
+
this[0] = 0
|
|
98
|
+
this[1] = 0
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Set the language that the parser should use for parsing.
|
|
103
|
+
*
|
|
104
|
+
* If the language was not successfully assigned, an error will be thrown.
|
|
105
|
+
* This happens if the language was generated with an incompatible
|
|
106
|
+
* version of the Tree-sitter CLI. Check the language's version using
|
|
107
|
+
* {@link Language#version} and compare it to this library's
|
|
108
|
+
* {@link LANGUAGE_VERSION} and {@link MIN_COMPATIBLE_VERSION} constants.
|
|
109
|
+
*/
|
|
110
|
+
setLanguage(language) {
|
|
111
|
+
let address
|
|
112
|
+
if (!language) {
|
|
113
|
+
address = 0
|
|
114
|
+
this.language = null
|
|
115
|
+
} else if (language.constructor === Language) {
|
|
116
|
+
address = language[0]
|
|
117
|
+
const version = C._ts_language_version(address)
|
|
118
|
+
if (version < MIN_COMPATIBLE_VERSION || LANGUAGE_VERSION < version) {
|
|
119
|
+
throw new Error(`Incompatible language version ${version}. ` + `Compatibility range ${MIN_COMPATIBLE_VERSION} through ${LANGUAGE_VERSION}.`)
|
|
120
|
+
}
|
|
121
|
+
this.language = language
|
|
122
|
+
} else {
|
|
123
|
+
throw new Error("Argument must be a Language")
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
C._ts_parser_set_language(this[0], address)
|
|
127
|
+
return this
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Parse a slice of UTF8 text.
|
|
132
|
+
*
|
|
133
|
+
* @param {string | ParseCallback} callback - The UTF8-encoded text to parse or a callback function.
|
|
134
|
+
*
|
|
135
|
+
* @param {Tree | null} [oldTree] - A previous syntax tree parsed from the same document. If the text of the
|
|
136
|
+
* document has changed since `oldTree` was created, then you must edit `oldTree` to match
|
|
137
|
+
* the new text using {@link Tree#edit}.
|
|
138
|
+
*
|
|
139
|
+
* @param {ParseOptions} [options] - Options for parsing the text.
|
|
140
|
+
* This can be used to set the included ranges, or a progress callback.
|
|
141
|
+
*
|
|
142
|
+
* @returns {Tree | null} A {@link Tree} if parsing succeeded, or `null` if:
|
|
143
|
+
* - The parser has not yet had a language assigned with {@link Parser#setLanguage}.
|
|
144
|
+
* - The progress callback returned true.
|
|
145
|
+
*/
|
|
146
|
+
parse(callback, oldTree, options) {
|
|
147
|
+
if (typeof callback === "string") {
|
|
148
|
+
C.currentParseCallback = (index) => callback.slice(index)
|
|
149
|
+
} else if (typeof callback === "function") {
|
|
150
|
+
C.currentParseCallback = callback
|
|
151
|
+
} else {
|
|
152
|
+
throw new Error("Argument must be a string or a function")
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
if (options?.progressCallback) {
|
|
156
|
+
C.currentProgressCallback = options.progressCallback
|
|
157
|
+
} else {
|
|
158
|
+
C.currentProgressCallback = null
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
if (this.logCallback) {
|
|
162
|
+
C.currentLogCallback = this.logCallback
|
|
163
|
+
C._ts_parser_enable_logger_wasm(this[0], 1)
|
|
164
|
+
} else {
|
|
165
|
+
C.currentLogCallback = null
|
|
166
|
+
C._ts_parser_enable_logger_wasm(this[0], 0)
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
let rangeCount = 0
|
|
170
|
+
let rangeAddress = 0
|
|
171
|
+
if (options?.includedRanges) {
|
|
172
|
+
rangeCount = options.includedRanges.length
|
|
173
|
+
rangeAddress = C._calloc(rangeCount, SIZE_OF_RANGE)
|
|
174
|
+
let address = rangeAddress
|
|
175
|
+
for (let i = 0; i < rangeCount; i++) {
|
|
176
|
+
marshalRange(address, options.includedRanges[i])
|
|
177
|
+
address += SIZE_OF_RANGE
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
const treeAddress = C._ts_parser_parse_wasm(this[0], this[1], oldTree ? oldTree[0] : 0, rangeAddress, rangeCount)
|
|
182
|
+
|
|
183
|
+
if (!treeAddress) {
|
|
184
|
+
C.currentParseCallback = null
|
|
185
|
+
C.currentLogCallback = null
|
|
186
|
+
C.currentProgressCallback = null
|
|
187
|
+
return null
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
if (!this.language) {
|
|
191
|
+
throw new Error("Parser must have a language to parse")
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
const result = new Tree(INTERNAL, treeAddress, this.language, C.currentParseCallback)
|
|
195
|
+
C.currentParseCallback = null
|
|
196
|
+
C.currentLogCallback = null
|
|
197
|
+
C.currentProgressCallback = null
|
|
198
|
+
return result
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Instruct the parser to start the next parse from the beginning.
|
|
203
|
+
*
|
|
204
|
+
* If the parser previously failed because of a timeout, cancellation,
|
|
205
|
+
* or callback, then by default, it will resume where it left off on the
|
|
206
|
+
* next call to {@link Parser#parse} or other parsing functions.
|
|
207
|
+
* If you don't want to resume, and instead intend to use this parser to
|
|
208
|
+
* parse some other document, you must call `reset` first.
|
|
209
|
+
*/
|
|
210
|
+
reset() {
|
|
211
|
+
C._ts_parser_reset(this[0])
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/** Get the ranges of text that the parser will include when parsing. */
|
|
215
|
+
getIncludedRanges() {
|
|
216
|
+
C._ts_parser_included_ranges_wasm(this[0])
|
|
217
|
+
const count = C.getValue(TRANSFER_BUFFER, "i32")
|
|
218
|
+
const buffer = C.getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32")
|
|
219
|
+
const result = new Array(count)
|
|
220
|
+
|
|
221
|
+
if (count > 0) {
|
|
222
|
+
let address = buffer
|
|
223
|
+
for (let i = 0; i < count; i++) {
|
|
224
|
+
result[i] = unmarshalRange(address)
|
|
225
|
+
address += SIZE_OF_RANGE
|
|
226
|
+
}
|
|
227
|
+
C._free(buffer)
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
return result
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* @deprecated since version 0.25.0, prefer passing a progress callback to {@link Parser#parse}
|
|
235
|
+
*
|
|
236
|
+
* Get the duration in microseconds that parsing is allowed to take.
|
|
237
|
+
*
|
|
238
|
+
* This is set via {@link Parser#setTimeoutMicros}.
|
|
239
|
+
*/
|
|
240
|
+
getTimeoutMicros() {
|
|
241
|
+
return C._ts_parser_timeout_micros(this[0])
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* @deprecated since version 0.25.0, prefer passing a progress callback to {@link Parser#parse}
|
|
246
|
+
*
|
|
247
|
+
* Set the maximum duration in microseconds that parsing should be allowed
|
|
248
|
+
* to take before halting.
|
|
249
|
+
*
|
|
250
|
+
* If parsing takes longer than this, it will halt early, returning `null`.
|
|
251
|
+
* See {@link Parser#parse} for more information.
|
|
252
|
+
*/
|
|
253
|
+
setTimeoutMicros(timeout) {
|
|
254
|
+
C._ts_parser_set_timeout_micros(this[0], 0, timeout)
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/** Set the logging callback that a parser should use during parsing. */
|
|
258
|
+
setLogger(callback) {
|
|
259
|
+
if (!callback) {
|
|
260
|
+
this.logCallback = null
|
|
261
|
+
} else if (typeof callback !== "function") {
|
|
262
|
+
throw new Error("Logger callback must be a function")
|
|
263
|
+
} else {
|
|
264
|
+
this.logCallback = callback
|
|
265
|
+
}
|
|
266
|
+
return this
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/** Get the parser's current logger. */
|
|
270
|
+
getLogger() {
|
|
271
|
+
return this.logCallback
|
|
272
|
+
}
|
|
273
|
+
}
|