@kerebron/tree-sitter 0.5.4 → 0.6.0

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.
Files changed (133) hide show
  1. package/README.md +1 -2
  2. package/esm/{deno-tree-sitter/main/extended → extended}/base_node.d.ts +9 -12
  3. package/esm/extended/base_node.d.ts.map +1 -0
  4. package/esm/{deno-tree-sitter/main/extended → extended}/base_node.js +14 -14
  5. package/esm/extended/base_node.js.map +1 -0
  6. package/esm/extended/node_extended.d.ts +243 -0
  7. package/esm/extended/node_extended.d.ts.map +1 -0
  8. package/esm/{deno-tree-sitter/main/extended → extended}/node_extended.js +196 -186
  9. package/esm/extended/node_extended.js.map +1 -0
  10. package/esm/{deno-tree-sitter/main/extended → extended}/parser.d.ts +19 -17
  11. package/esm/extended/parser.d.ts.map +1 -0
  12. package/esm/extended/parser.js +61 -0
  13. package/esm/extended/parser.js.map +1 -0
  14. package/esm/{deno-tree-sitter/main/extended → extended}/soft_node.d.ts +4 -3
  15. package/esm/extended/soft_node.d.ts.map +1 -0
  16. package/esm/{deno-tree-sitter/main/extended → extended}/soft_node.js +1 -1
  17. package/esm/extended/soft_node.js.map +1 -0
  18. package/esm/extended/soft_text_node.d.ts +9 -0
  19. package/esm/extended/soft_text_node.d.ts.map +1 -0
  20. package/esm/{deno-tree-sitter/main/extended → extended}/soft_text_node.js +2 -2
  21. package/esm/extended/soft_text_node.js.map +1 -0
  22. package/esm/extended/whitespace_node.d.ts +9 -0
  23. package/esm/extended/whitespace_node.d.ts.map +1 -0
  24. package/esm/{deno-tree-sitter/main/extended → extended}/whitespace_node.js +2 -2
  25. package/esm/extended/whitespace_node.js.map +1 -0
  26. package/esm/extras/misc.d.ts +2 -0
  27. package/esm/extras/misc.d.ts.map +1 -0
  28. package/esm/{deno-tree-sitter/main/extras → extras}/misc.js +2 -2
  29. package/esm/extras/misc.js.map +1 -0
  30. package/esm/mod.d.ts +1 -6
  31. package/esm/mod.d.ts.map +1 -1
  32. package/esm/mod.js +1 -7
  33. package/esm/mod.js.map +1 -1
  34. package/package.json +4 -1
  35. package/src/extended/base_node.ts +175 -0
  36. package/src/extended/node_extended.ts +651 -0
  37. package/src/extended/parser.ts +96 -0
  38. package/src/extended/soft_node.ts +32 -0
  39. package/src/extended/soft_text_node.ts +11 -0
  40. package/src/extended/whitespace_node.ts +11 -0
  41. package/src/extras/misc.ts +15 -0
  42. package/src/mod.ts +1 -8
  43. package/esm/deno-tree-sitter/main/extended/base_node.d.ts.map +0 -1
  44. package/esm/deno-tree-sitter/main/extended/base_node.js.map +0 -1
  45. package/esm/deno-tree-sitter/main/extended/node_extended.d.ts +0 -237
  46. package/esm/deno-tree-sitter/main/extended/node_extended.d.ts.map +0 -1
  47. package/esm/deno-tree-sitter/main/extended/node_extended.js.map +0 -1
  48. package/esm/deno-tree-sitter/main/extended/parser.d.ts.map +0 -1
  49. package/esm/deno-tree-sitter/main/extended/parser.js +0 -87
  50. package/esm/deno-tree-sitter/main/extended/parser.js.map +0 -1
  51. package/esm/deno-tree-sitter/main/extended/soft_node.d.ts.map +0 -1
  52. package/esm/deno-tree-sitter/main/extended/soft_node.js.map +0 -1
  53. package/esm/deno-tree-sitter/main/extended/soft_text_node.d.ts +0 -10
  54. package/esm/deno-tree-sitter/main/extended/soft_text_node.d.ts.map +0 -1
  55. package/esm/deno-tree-sitter/main/extended/soft_text_node.js.map +0 -1
  56. package/esm/deno-tree-sitter/main/extended/whitespace_node.d.ts +0 -10
  57. package/esm/deno-tree-sitter/main/extended/whitespace_node.d.ts.map +0 -1
  58. package/esm/deno-tree-sitter/main/extended/whitespace_node.js.map +0 -1
  59. package/esm/deno-tree-sitter/main/extras/misc.d.ts +0 -2
  60. package/esm/deno-tree-sitter/main/extras/misc.d.ts.map +0 -1
  61. package/esm/deno-tree-sitter/main/extras/misc.js.map +0 -1
  62. package/esm/deno-tree-sitter/main/tree_sitter/bindings.d.ts +0 -14
  63. package/esm/deno-tree-sitter/main/tree_sitter/bindings.d.ts.map +0 -1
  64. package/esm/deno-tree-sitter/main/tree_sitter/bindings.js +0 -22
  65. package/esm/deno-tree-sitter/main/tree_sitter/bindings.js.map +0 -1
  66. package/esm/deno-tree-sitter/main/tree_sitter/constants.d.ts +0 -60
  67. package/esm/deno-tree-sitter/main/tree_sitter/constants.d.ts.map +0 -1
  68. package/esm/deno-tree-sitter/main/tree_sitter/constants.js +0 -67
  69. package/esm/deno-tree-sitter/main/tree_sitter/constants.js.map +0 -1
  70. package/esm/deno-tree-sitter/main/tree_sitter/language.d.ts +0 -137
  71. package/esm/deno-tree-sitter/main/tree_sitter/language.d.ts.map +0 -1
  72. package/esm/deno-tree-sitter/main/tree_sitter/language.js +0 -265
  73. package/esm/deno-tree-sitter/main/tree_sitter/language.js.map +0 -1
  74. package/esm/deno-tree-sitter/main/tree_sitter/lookahead_iterator.d.ts +0 -41
  75. package/esm/deno-tree-sitter/main/tree_sitter/lookahead_iterator.d.ts.map +0 -1
  76. package/esm/deno-tree-sitter/main/tree_sitter/lookahead_iterator.js +0 -66
  77. package/esm/deno-tree-sitter/main/tree_sitter/lookahead_iterator.js.map +0 -1
  78. package/esm/deno-tree-sitter/main/tree_sitter/marshal.d.ts +0 -85
  79. package/esm/deno-tree-sitter/main/tree_sitter/marshal.d.ts.map +0 -1
  80. package/esm/deno-tree-sitter/main/tree_sitter/marshal.js +0 -174
  81. package/esm/deno-tree-sitter/main/tree_sitter/marshal.js.map +0 -1
  82. package/esm/deno-tree-sitter/main/tree_sitter/node.d.ts +0 -260
  83. package/esm/deno-tree-sitter/main/tree_sitter/node.d.ts.map +0 -1
  84. package/esm/deno-tree-sitter/main/tree_sitter/node.js +0 -558
  85. package/esm/deno-tree-sitter/main/tree_sitter/node.js.map +0 -1
  86. package/esm/deno-tree-sitter/main/tree_sitter/parser.d.ts +0 -124
  87. package/esm/deno-tree-sitter/main/tree_sitter/parser.d.ts.map +0 -1
  88. package/esm/deno-tree-sitter/main/tree_sitter/parser.js +0 -253
  89. package/esm/deno-tree-sitter/main/tree_sitter/parser.js.map +0 -1
  90. package/esm/deno-tree-sitter/main/tree_sitter/query.d.ts +0 -134
  91. package/esm/deno-tree-sitter/main/tree_sitter/query.d.ts.map +0 -1
  92. package/esm/deno-tree-sitter/main/tree_sitter/query.js +0 -621
  93. package/esm/deno-tree-sitter/main/tree_sitter/query.js.map +0 -1
  94. package/esm/deno-tree-sitter/main/tree_sitter/tree.d.ts +0 -49
  95. package/esm/deno-tree-sitter/main/tree_sitter/tree.d.ts.map +0 -1
  96. package/esm/deno-tree-sitter/main/tree_sitter/tree.js +0 -131
  97. package/esm/deno-tree-sitter/main/tree_sitter/tree.js.map +0 -1
  98. package/esm/deno-tree-sitter/main/tree_sitter/tree_cursor.d.ts +0 -165
  99. package/esm/deno-tree-sitter/main/tree_sitter/tree_cursor.d.ts.map +0 -1
  100. package/esm/deno-tree-sitter/main/tree_sitter/tree_cursor.js +0 -281
  101. package/esm/deno-tree-sitter/main/tree_sitter/tree_cursor.js.map +0 -1
  102. package/esm/deno-tree-sitter/main/tree_sitter_wasm.d.ts +0 -3
  103. package/esm/deno-tree-sitter/main/tree_sitter_wasm.d.ts.map +0 -1
  104. package/esm/deno-tree-sitter/main/tree_sitter_wasm.js +0 -0
  105. package/esm/deno-tree-sitter/main/tree_sitter_wasm.js.map +0 -1
  106. package/esm/deno-tree-sitter/main/wasm_loader.d.ts +0 -29
  107. package/esm/deno-tree-sitter/main/wasm_loader.d.ts.map +0 -1
  108. package/esm/deno-tree-sitter/main/wasm_loader.js +0 -1703
  109. package/esm/deno-tree-sitter/main/wasm_loader.js.map +0 -1
  110. package/esm/deno-tree-sitter/main/wasm_loader_with_defaults.d.ts +0 -3
  111. package/esm/deno-tree-sitter/main/wasm_loader_with_defaults.d.ts.map +0 -1
  112. package/esm/deno-tree-sitter/main/wasm_loader_with_defaults.js +0 -9
  113. package/esm/deno-tree-sitter/main/wasm_loader_with_defaults.js.map +0 -1
  114. package/src/deno-tree-sitter/main/extended/base_node.js +0 -174
  115. package/src/deno-tree-sitter/main/extended/node_extended.js +0 -588
  116. package/src/deno-tree-sitter/main/extended/parser.js +0 -87
  117. package/src/deno-tree-sitter/main/extended/soft_node.js +0 -32
  118. package/src/deno-tree-sitter/main/extended/soft_text_node.js +0 -11
  119. package/src/deno-tree-sitter/main/extended/whitespace_node.js +0 -11
  120. package/src/deno-tree-sitter/main/extras/misc.js +0 -12
  121. package/src/deno-tree-sitter/main/tree_sitter/bindings.js +0 -26
  122. package/src/deno-tree-sitter/main/tree_sitter/constants.js +0 -79
  123. package/src/deno-tree-sitter/main/tree_sitter/language.js +0 -289
  124. package/src/deno-tree-sitter/main/tree_sitter/lookahead_iterator.js +0 -74
  125. package/src/deno-tree-sitter/main/tree_sitter/marshal.js +0 -186
  126. package/src/deno-tree-sitter/main/tree_sitter/node.js +0 -616
  127. package/src/deno-tree-sitter/main/tree_sitter/parser.js +0 -273
  128. package/src/deno-tree-sitter/main/tree_sitter/query.js +0 -705
  129. package/src/deno-tree-sitter/main/tree_sitter/tree.js +0 -145
  130. package/src/deno-tree-sitter/main/tree_sitter/tree_cursor.js +0 -314
  131. package/src/deno-tree-sitter/main/tree_sitter_wasm.js +0 -0
  132. package/src/deno-tree-sitter/main/wasm_loader.js +0 -1702
  133. package/src/deno-tree-sitter/main/wasm_loader_with_defaults.js +0 -9
@@ -1,32 +0,0 @@
1
- import { BaseNode } from "./base_node.js"
2
-
3
- // HardNode extends BaseNode as well (indirectly)
4
- export class SoftNode extends BaseNode {
5
- children = []
6
- constructor(data) {
7
- super(data)
8
- }
9
-
10
- // these are getters because when calling .replaceInnards() on a node the indices of hardNodes shift, these getters piggyback on that shift (otherwise they'd be wrong)
11
- get startIndex() {
12
- return this._startIndexOffset + this.getReferencePoint().index
13
- }
14
-
15
- get startPosition() {
16
- return {
17
- row: this._startRowOffset + this.getReferencePoint().position.row,
18
- column: this._startColOffset + this.getReferencePoint().position.column,
19
- }
20
- }
21
-
22
- get endIndex() {
23
- return this._endIndexOffset + this.getReferencePoint().index
24
- }
25
-
26
- get endPosition() {
27
- return {
28
- row: this._endRowOffset + this.getReferencePoint().position.row,
29
- column: this._endColOffset + this.getReferencePoint().position.column,
30
- }
31
- }
32
- }
@@ -1,11 +0,0 @@
1
- import { SoftNode } from "./soft_node.js"
2
-
3
- export class SoftTextNode extends SoftNode {
4
- constructor({parent, ...data}) {
5
- super({...data, type: "text", typeId: -2})
6
- this._parent = parent
7
- }
8
- get parent() {
9
- return this._parent
10
- }
11
- }
@@ -1,11 +0,0 @@
1
- import { SoftNode } from "./soft_node.js"
2
-
3
- export class WhitespaceNode extends SoftNode {
4
- constructor({parent, ...data}) {
5
- super({...data, type: "whitespace", typeId: -1})
6
- this._parent = parent
7
- }
8
- get parent() {
9
- return this._parent
10
- }
11
- }
@@ -1,12 +0,0 @@
1
- export function _getQueryCaptureTargets(queryString) {
2
- if (!queryString.includes("@")) {
3
- return []
4
- } else { // need a rigorous check
5
- // remove all strings from within the query (the only place a false capture target could appear)
6
- // NOTE: this is based exactly on the language spec, its not a hack: https://github.com/tree-sitter-grammars/tree-sitter-query/blob/3a9808b22742d5bd906ef5d1a562f2f1ae57406d/src/grammar.json#L140
7
- const safeSearchableQuery = queryString.replace(/"(?:\\(?:[^xu0-7]|[0-7]{1,3}|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]+})|[^\"\\])*"/g, "")
8
- // now check if there is a capture target
9
- // NOTE: also based on the language spec: https://github.com/tree-sitter-grammars/tree-sitter-query/blob/3a9808b22742d5bd906ef5d1a562f2f1ae57406d/src/grammar.json#L204
10
- return safeSearchableQuery.match(/(?<=@)([a-zA-Z0-9.\-_\$]+)/g)
11
- }
12
- }
@@ -1,26 +0,0 @@
1
- import createModule from "../wasm_loader_with_defaults.js"
2
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
3
- import {} from "./parser.js"
4
-
5
- export let Module = null
6
-
7
- /**
8
- * @internal
9
- *
10
- * Initialize the Tree-sitter Wasm module. This should only be called by the {@link Parser} class via {@link Parser.init}.
11
- */
12
- export async function initializeBinding(moduleOptions) {
13
- if (!Module) {
14
- Module = await createModule(moduleOptions)
15
- }
16
- return Module
17
- }
18
-
19
- /**
20
- * @internal
21
- *
22
- * Checks if the Tree-sitter Wasm module has been initialized.
23
- */
24
- export function checkModule() {
25
- return !!Module
26
- }
@@ -1,79 +0,0 @@
1
- import {} from "../wasm_loader_with_defaults.js"
2
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
3
- import {} from "./parser.js"
4
-
5
- /**
6
- * A position in a multi-line text document, in terms of rows and columns.
7
- *
8
- * Rows and columns are zero-based.
9
- */
10
- /**
11
- * A range of positions in a multi-line text document, both in terms of bytes
12
- * and of rows and columns.
13
- */
14
- /**
15
- * A summary of a change to a text document.
16
- */
17
- /** @internal */
18
- export const SIZE_OF_SHORT = 2
19
-
20
- /** @internal */
21
- export const SIZE_OF_INT = 4
22
-
23
- /** @internal */
24
- export const SIZE_OF_CURSOR = 4 * SIZE_OF_INT
25
-
26
- /** @internal */
27
- export const SIZE_OF_NODE = 5 * SIZE_OF_INT
28
-
29
- /** @internal */
30
- export const SIZE_OF_POINT = 2 * SIZE_OF_INT
31
-
32
- /** @internal */
33
- export const SIZE_OF_RANGE = 2 * SIZE_OF_INT + 2 * SIZE_OF_POINT
34
-
35
- /** @internal */
36
- export const ZERO_POINT = { row: 0, column: 0 }
37
-
38
- /**
39
- * A callback for parsing that takes an index and point, and should return a string.
40
- */
41
- /**
42
- * A callback that receives the parse state during parsing.
43
- */
44
- /**
45
- * A callback for logging messages.
46
- *
47
- * If `isLex` is `true`, the message is from the lexer, otherwise it's from the parser.
48
- */
49
- // Helper type for internal use
50
- /** @internal */
51
- export const INTERNAL = Symbol("INTERNAL")
52
- /** @internal */
53
- // Helper functions for type checking
54
- /** @internal */
55
- export function assertInternal(x) {
56
- if (x !== INTERNAL) throw new Error("Illegal constructor")
57
- }
58
-
59
- /** @internal */
60
- export function isPoint(point) {
61
- return !!point && typeof point.row === "number" && typeof point.column === "number"
62
- }
63
-
64
- /**
65
- * @internal
66
- *
67
- * Sets the Tree-sitter Wasm module. This should only be called by the {@link Parser} class via {@link Parser.init}.
68
- */
69
- export function setModule(module) {
70
- C = module
71
- }
72
-
73
- /**
74
- * @internal
75
- *
76
- * `C` is a convenient shorthand for the Tree-sitter Wasm module,
77
- * which allows us to call all of the exported functions.
78
- */
79
- export let C
@@ -1,289 +0,0 @@
1
- import { C, INTERNAL, assertInternal, SIZE_OF_INT, SIZE_OF_SHORT } from "./constants.js"
2
- import { LookaheadIterator } from "./lookahead_iterator.js"
3
- import { unmarshalLanguageMetadata } from "./marshal.js"
4
- import { TRANSFER_BUFFER } from "./parser.js"
5
- import { Query } from "./query.js"
6
-
7
- const LANGUAGE_FUNCTION_REGEX = /^tree_sitter_\w+$/
8
-
9
- export class LanguageMetadata {
10
- major_version
11
- minor_version
12
- patch_version
13
- }
14
-
15
- /**
16
- * An opaque object that defines how to parse a particular language.
17
- * The code for each `Language` is generated by the Tree-sitter CLI.
18
- */
19
- export class Language {
20
- /** @internal */
21
- [0] = 0 // Internal handle for Wasm
22
-
23
- /**
24
- * A list of all node types in the language. The index of each type in this
25
- * array is its node type id.
26
- */
27
- types
28
-
29
- /**
30
- * A list of all field names in the language. The index of each field name in
31
- * this array is its field id.
32
- */
33
- fields
34
-
35
- /** @internal */
36
- constructor(internal, address) {
37
- assertInternal(internal)
38
- this[0] = address
39
- this.types = new Array(C._ts_language_symbol_count(this[0]))
40
- for (let i = 0, n = this.types.length; i < n; i++) {
41
- if (C._ts_language_symbol_type(this[0], i) < 2) {
42
- this.types[i] = C.UTF8ToString(C._ts_language_symbol_name(this[0], i))
43
- }
44
- }
45
- this.fields = new Array(C._ts_language_field_count(this[0]) + 1)
46
- for (let i = 0, n = this.fields.length; i < n; i++) {
47
- const fieldName = C._ts_language_field_name_for_id(this[0], i)
48
- if (fieldName !== 0) {
49
- this.fields[i] = C.UTF8ToString(fieldName)
50
- } else {
51
- this.fields[i] = null
52
- }
53
- }
54
- }
55
-
56
- /**
57
- * Gets the name of the language.
58
- */
59
- get name() {
60
- const ptr = C._ts_language_name(this[0])
61
- if (ptr === 0) return null
62
- return C.UTF8ToString(ptr)
63
- }
64
-
65
- /**
66
- * @deprecated since version 0.25.0, use {@link Language#abiVersion} instead
67
- * Gets the version of the language.
68
- */
69
- get version() {
70
- return C._ts_language_version(this[0])
71
- }
72
-
73
- /**
74
- * Gets the ABI version of the language.
75
- */
76
- get abiVersion() {
77
- return C._ts_language_abi_version(this[0])
78
- }
79
-
80
- /**
81
- * Get the metadata for this language. This information is generated by the
82
- * CLI, and relies on the language author providing the correct metadata in
83
- * the language's `tree-sitter.json` file.
84
- */
85
- get metadata() {
86
- C._ts_language_metadata(this[0])
87
- const length = C.getValue(TRANSFER_BUFFER, "i32")
88
- const address = C.getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32")
89
- if (length === 0) return null
90
- return unmarshalLanguageMetadata(address)
91
- }
92
-
93
- /**
94
- * Gets the number of fields in the language.
95
- */
96
- get fieldCount() {
97
- return this.fields.length - 1
98
- }
99
-
100
- /**
101
- * Gets the number of states in the language.
102
- */
103
- get stateCount() {
104
- return C._ts_language_state_count(this[0])
105
- }
106
-
107
- /**
108
- * Get the field id for a field name.
109
- */
110
- fieldIdForName(fieldName) {
111
- const result = this.fields.indexOf(fieldName)
112
- return result !== -1 ? result : null
113
- }
114
-
115
- /**
116
- * Get the field name for a field id.
117
- */
118
- fieldNameForId(fieldId) {
119
- return this.fields[fieldId] ?? null
120
- }
121
-
122
- /**
123
- * Get the node type id for a node type name.
124
- */
125
- idForNodeType(type, named) {
126
- const typeLength = C.lengthBytesUTF8(type)
127
- const typeAddress = C._malloc(typeLength + 1)
128
- C.stringToUTF8(type, typeAddress, typeLength + 1)
129
- const result = C._ts_language_symbol_for_name(this[0], typeAddress, typeLength, named ? 1 : 0)
130
- C._free(typeAddress)
131
- return result || null
132
- }
133
-
134
- /**
135
- * Gets the number of node types in the language.
136
- */
137
- get nodeTypeCount() {
138
- return C._ts_language_symbol_count(this[0])
139
- }
140
-
141
- /**
142
- * Get the node type name for a node type id.
143
- */
144
- nodeTypeForId(typeId) {
145
- const name = C._ts_language_symbol_name(this[0], typeId)
146
- return name ? C.UTF8ToString(name) : null
147
- }
148
-
149
- /**
150
- * Check if a node type is named.
151
- *
152
- * @see {@link https://tree-sitter.github.io/tree-sitter/using-parsers/2-basic-parsing.html#named-vs-anonymous-nodes}
153
- */
154
- nodeTypeIsNamed(typeId) {
155
- return C._ts_language_type_is_named_wasm(this[0], typeId) ? true : false
156
- }
157
-
158
- /**
159
- * Check if a node type is visible.
160
- */
161
- nodeTypeIsVisible(typeId) {
162
- return C._ts_language_type_is_visible_wasm(this[0], typeId) ? true : false
163
- }
164
-
165
- /**
166
- * Get the supertypes ids of this language.
167
- *
168
- * @see {@link https://tree-sitter.github.io/tree-sitter/using-parsers/6-static-node-types.html?highlight=supertype#supertype-nodes}
169
- */
170
- get supertypes() {
171
- C._ts_language_supertypes_wasm(this[0])
172
- const count = C.getValue(TRANSFER_BUFFER, "i32")
173
- const buffer = C.getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32")
174
- const result = new Array(count)
175
-
176
- if (count > 0) {
177
- let address = buffer
178
- for (let i = 0; i < count; i++) {
179
- result[i] = C.getValue(address, "i16")
180
- address += SIZE_OF_SHORT
181
- }
182
- }
183
-
184
- return result
185
- }
186
-
187
- /**
188
- * Get the subtype ids for a given supertype node id.
189
- */
190
- subtypes(supertype) {
191
- C._ts_language_subtypes_wasm(this[0], supertype)
192
- const count = C.getValue(TRANSFER_BUFFER, "i32")
193
- const buffer = C.getValue(TRANSFER_BUFFER + SIZE_OF_INT, "i32")
194
- const result = new Array(count)
195
-
196
- if (count > 0) {
197
- let address = buffer
198
- for (let i = 0; i < count; i++) {
199
- result[i] = C.getValue(address, "i16")
200
- address += SIZE_OF_SHORT
201
- }
202
- }
203
-
204
- return result
205
- }
206
-
207
- /**
208
- * Get the next state id for a given state id and node type id.
209
- */
210
- nextState(stateId, typeId) {
211
- return C._ts_language_next_state(this[0], stateId, typeId)
212
- }
213
-
214
- /**
215
- * Create a new lookahead iterator for this language and parse state.
216
- *
217
- * This returns `null` if state is invalid for this language.
218
- *
219
- * Iterating {@link LookaheadIterator} will yield valid symbols in the given
220
- * parse state. Newly created lookahead iterators will return the `ERROR`
221
- * symbol from {@link LookaheadIterator#currentType}.
222
- *
223
- * Lookahead iterators can be useful for generating suggestions and improving
224
- * syntax error diagnostics. To get symbols valid in an `ERROR` node, use the
225
- * lookahead iterator on its first leaf node state. For `MISSING` nodes, a
226
- * lookahead iterator created on the previous non-extra leaf node may be
227
- * appropriate.
228
- */
229
- lookaheadIterator(stateId) {
230
- const address = C._ts_lookahead_iterator_new(this[0], stateId)
231
- if (address) return new LookaheadIterator(INTERNAL, address, this)
232
- return null
233
- }
234
-
235
- /**
236
- * @deprecated since version 0.25.0, call `new` on a {@link Query} instead
237
- *
238
- * Create a new query from a string containing one or more S-expression
239
- * patterns.
240
- *
241
- * The query is associated with a particular language, and can only be run
242
- * on syntax nodes parsed with that language. References to Queries can be
243
- * shared between multiple threads.
244
- *
245
- * @link {@see https://tree-sitter.github.io/tree-sitter/using-parsers/queries}
246
- */
247
- query(source) {
248
- console.warn("Language.query is deprecated. Use new Query(language, source) instead.")
249
- return new Query(this, source)
250
- }
251
-
252
- /**
253
- * Load a language from a WebAssembly module.
254
- * The module can be provided as a path to a file or as a buffer.
255
- */
256
- static async load(input) {
257
- let bytes
258
- if (input instanceof Uint8Array) {
259
- bytes = Promise.resolve(input)
260
- } else {
261
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
262
- if (globalThis.process?.versions.node) {
263
- const fs = await import("node:fs/promises")
264
- bytes = fs.readFile(input)
265
- } else {
266
- bytes = fetch(input).then((response) =>
267
- response.arrayBuffer().then((buffer) => {
268
- if (response.ok) {
269
- return new Uint8Array(buffer)
270
- } else {
271
- const body = new TextDecoder("utf-8").decode(buffer)
272
- throw new Error(`Language.load failed with status ${response.status}.\n\n${body}`)
273
- }
274
- })
275
- )
276
- }
277
- }
278
-
279
- const mod = await C.loadWebAssemblyModule(await bytes, { loadAsync: true })
280
- const symbolNames = Object.keys(mod)
281
- const functionName = symbolNames.find((key) => LANGUAGE_FUNCTION_REGEX.test(key) && !key.includes("external_scanner_"))
282
- if (!functionName) {
283
- console.log(`Couldn't find language function in Wasm file. Symbols:\n${JSON.stringify(symbolNames, null, 2)}`)
284
- throw new Error("Language.load failed: no language function found in Wasm file")
285
- }
286
- const languageAddress = mod[functionName]()
287
- return new Language(INTERNAL, languageAddress)
288
- }
289
- }
@@ -1,74 +0,0 @@
1
- import { C, assertInternal } from "./constants.js"
2
- import { Language } from "./language.js"
3
-
4
- export class LookaheadIterator {
5
- /** @internal */
6
- [0] = 0 // Internal handle for Wasm
7
-
8
- /** @internal */
9
- language
10
-
11
- /** @internal */
12
- constructor(internal, address, language) {
13
- assertInternal(internal)
14
- this[0] = address
15
- this.language = language
16
- }
17
-
18
- /** Get the current symbol of the lookahead iterator. */
19
- get currentTypeId() {
20
- return C._ts_lookahead_iterator_current_symbol(this[0])
21
- }
22
-
23
- /** Get the current symbol name of the lookahead iterator. */
24
- get currentType() {
25
- return this.language.types[this.currentTypeId] || "ERROR"
26
- }
27
-
28
- /** Delete the lookahead iterator, freeing its resources. */
29
- delete() {
30
- C._ts_lookahead_iterator_delete(this[0])
31
- this[0] = 0
32
- }
33
-
34
- /**
35
- * Reset the lookahead iterator.
36
- *
37
- * This returns `true` if the language was set successfully and `false`
38
- * otherwise.
39
- */
40
- reset(language, stateId) {
41
- if (C._ts_lookahead_iterator_reset(this[0], language[0], stateId)) {
42
- this.language = language
43
- return true
44
- }
45
- return false
46
- }
47
-
48
- /**
49
- * Reset the lookahead iterator to another state.
50
- *
51
- * This returns `true` if the iterator was reset to the given state and
52
- * `false` otherwise.
53
- */
54
- resetState(stateId) {
55
- return Boolean(C._ts_lookahead_iterator_reset_state(this[0], stateId))
56
- }
57
-
58
- /**
59
- * Returns an iterator that iterates over the symbols of the lookahead iterator.
60
- *
61
- * The iterator will yield the current symbol name as a string for each step
62
- * until there are no more symbols to iterate over.
63
- */
64
- [Symbol.iterator]() {
65
- return {
66
- next: () => {
67
- if (C._ts_lookahead_iterator_next(this[0])) {
68
- return { done: false, value: this.currentType }
69
- }
70
- return { done: true, value: "" }
71
- },
72
- }
73
- }
74
- }