@renovatebot/good-enough-parser 1.1.24 → 1.2.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 (166) hide show
  1. package/README.md +6 -6
  2. package/dist/cjs/index.d.ts +4 -4
  3. package/dist/cjs/index.js +7 -7
  4. package/dist/cjs/lang/groovy.d.ts +6 -6
  5. package/dist/cjs/lang/groovy.js +83 -83
  6. package/dist/cjs/lang/index.d.ts +20 -20
  7. package/dist/cjs/lang/index.js +56 -56
  8. package/dist/cjs/lang/python.d.ts +6 -6
  9. package/dist/cjs/lang/python.js +73 -73
  10. package/dist/cjs/lang/scala.d.ts +6 -6
  11. package/dist/cjs/lang/scala.js +71 -71
  12. package/dist/cjs/lang/starlark.d.ts +6 -6
  13. package/dist/cjs/lang/starlark.js +58 -58
  14. package/dist/cjs/lang/types.d.ts +6 -6
  15. package/dist/cjs/lang/types.js +2 -2
  16. package/dist/cjs/lexer/bracket.d.ts +6 -6
  17. package/dist/cjs/lexer/bracket.js +57 -57
  18. package/dist/cjs/lexer/comment.d.ts +3 -3
  19. package/dist/cjs/lexer/comment.js +44 -44
  20. package/dist/cjs/lexer/index.d.ts +5 -5
  21. package/dist/cjs/lexer/index.js +155 -155
  22. package/dist/cjs/lexer/number.d.ts +2 -2
  23. package/dist/cjs/lexer/number.js +18 -18
  24. package/dist/cjs/lexer/operator.d.ts +2 -2
  25. package/dist/cjs/lexer/operator.js +24 -24
  26. package/dist/cjs/lexer/rules.d.ts +4 -4
  27. package/dist/cjs/lexer/rules.js +74 -74
  28. package/dist/cjs/lexer/string.d.ts +2 -2
  29. package/dist/cjs/lexer/string.js +181 -181
  30. package/dist/cjs/lexer/symbol.d.ts +2 -2
  31. package/dist/cjs/lexer/symbol.js +18 -18
  32. package/dist/cjs/lexer/token.d.ts +3 -3
  33. package/dist/cjs/lexer/token.js +64 -64
  34. package/dist/cjs/lexer/types.d.ts +142 -142
  35. package/dist/cjs/lexer/types.js +2 -2
  36. package/dist/cjs/parser/cursor.d.ts +2 -2
  37. package/dist/cjs/parser/cursor.js +13 -13
  38. package/dist/cjs/parser/index.d.ts +3 -3
  39. package/dist/cjs/parser/index.js +19 -19
  40. package/dist/cjs/parser/tree.d.ts +4 -4
  41. package/dist/cjs/parser/tree.js +246 -246
  42. package/dist/cjs/parser/types.d.ts +33 -33
  43. package/dist/cjs/parser/types.js +2 -2
  44. package/dist/cjs/query/builder.d.ts +144 -144
  45. package/dist/cjs/query/builder.js +332 -332
  46. package/dist/cjs/query/handler.d.ts +2 -2
  47. package/dist/cjs/query/handler.js +10 -10
  48. package/dist/cjs/query/index.d.ts +2 -2
  49. package/dist/cjs/query/index.js +32 -32
  50. package/dist/cjs/query/matchers/abstract-matcher.d.ts +9 -9
  51. package/dist/cjs/query/matchers/abstract-matcher.js +36 -36
  52. package/dist/cjs/query/matchers/alt-matcher.d.ts +10 -10
  53. package/dist/cjs/query/matchers/alt-matcher.js +33 -33
  54. package/dist/cjs/query/matchers/anchor-matcher.d.ts +17 -17
  55. package/dist/cjs/query/matchers/anchor-matcher.js +50 -50
  56. package/dist/cjs/query/matchers/comment-matcher.d.ts +10 -10
  57. package/dist/cjs/query/matchers/comment-matcher.js +39 -39
  58. package/dist/cjs/query/matchers/index.d.ts +6 -6
  59. package/dist/cjs/query/matchers/index.js +22 -22
  60. package/dist/cjs/query/matchers/many-matcher.d.ts +13 -13
  61. package/dist/cjs/query/matchers/many-matcher.js +61 -61
  62. package/dist/cjs/query/matchers/num-matcher.d.ts +8 -8
  63. package/dist/cjs/query/matchers/num-matcher.js +34 -34
  64. package/dist/cjs/query/matchers/op-matcher.d.ts +8 -8
  65. package/dist/cjs/query/matchers/op-matcher.js +34 -34
  66. package/dist/cjs/query/matchers/seq-matcher.d.ts +14 -14
  67. package/dist/cjs/query/matchers/seq-matcher.js +76 -76
  68. package/dist/cjs/query/matchers/str-matcher.d.ts +38 -38
  69. package/dist/cjs/query/matchers/str-matcher.js +108 -108
  70. package/dist/cjs/query/matchers/sym-matcher.d.ts +8 -8
  71. package/dist/cjs/query/matchers/sym-matcher.js +34 -34
  72. package/dist/cjs/query/matchers/tree-matcher.d.ts +23 -23
  73. package/dist/cjs/query/matchers/tree-matcher.js +121 -121
  74. package/dist/cjs/query/options.d.ts +10 -10
  75. package/dist/cjs/query/options.js +149 -149
  76. package/dist/cjs/query/regex.d.ts +1 -1
  77. package/dist/cjs/query/regex.js +13 -13
  78. package/dist/cjs/query/types.d.ts +100 -100
  79. package/dist/cjs/query/types.js +2 -2
  80. package/dist/cjs/util/clone.d.ts +1 -1
  81. package/dist/cjs/util/clone.js +5 -5
  82. package/dist/cjs/util/regex.d.ts +1 -1
  83. package/dist/cjs/util/regex.js +7 -7
  84. package/dist/esm/index.d.ts +4 -4
  85. package/dist/esm/index.js +8 -8
  86. package/dist/esm/lang/groovy.d.ts +6 -6
  87. package/dist/esm/lang/groovy.js +80 -80
  88. package/dist/esm/lang/index.d.ts +20 -20
  89. package/dist/esm/lang/index.js +37 -37
  90. package/dist/esm/lang/python.d.ts +6 -6
  91. package/dist/esm/lang/python.js +70 -70
  92. package/dist/esm/lang/scala.d.ts +6 -6
  93. package/dist/esm/lang/scala.js +68 -68
  94. package/dist/esm/lang/starlark.d.ts +6 -6
  95. package/dist/esm/lang/starlark.js +55 -55
  96. package/dist/esm/lang/types.d.ts +6 -6
  97. package/dist/esm/lang/types.js +1 -1
  98. package/dist/esm/lexer/bracket.d.ts +6 -6
  99. package/dist/esm/lexer/bracket.js +49 -49
  100. package/dist/esm/lexer/comment.d.ts +3 -3
  101. package/dist/esm/lexer/comment.js +39 -39
  102. package/dist/esm/lexer/index.d.ts +5 -5
  103. package/dist/esm/lexer/index.js +136 -136
  104. package/dist/esm/lexer/number.d.ts +2 -2
  105. package/dist/esm/lexer/number.js +14 -14
  106. package/dist/esm/lexer/operator.d.ts +2 -2
  107. package/dist/esm/lexer/operator.js +20 -20
  108. package/dist/esm/lexer/rules.d.ts +4 -4
  109. package/dist/esm/lexer/rules.js +69 -69
  110. package/dist/esm/lexer/string.d.ts +2 -2
  111. package/dist/esm/lexer/string.js +177 -177
  112. package/dist/esm/lexer/symbol.d.ts +2 -2
  113. package/dist/esm/lexer/symbol.js +14 -14
  114. package/dist/esm/lexer/token.d.ts +3 -3
  115. package/dist/esm/lexer/token.js +60 -60
  116. package/dist/esm/lexer/types.d.ts +142 -142
  117. package/dist/esm/lexer/types.js +1 -1
  118. package/dist/esm/parser/cursor.d.ts +2 -2
  119. package/dist/esm/parser/cursor.js +9 -9
  120. package/dist/esm/parser/index.d.ts +3 -3
  121. package/dist/esm/parser/index.js +3 -3
  122. package/dist/esm/parser/tree.d.ts +4 -4
  123. package/dist/esm/parser/tree.js +241 -241
  124. package/dist/esm/parser/types.d.ts +33 -33
  125. package/dist/esm/parser/types.js +1 -1
  126. package/dist/esm/query/builder.d.ts +144 -144
  127. package/dist/esm/query/builder.js +304 -304
  128. package/dist/esm/query/handler.d.ts +2 -2
  129. package/dist/esm/query/handler.js +6 -6
  130. package/dist/esm/query/index.d.ts +2 -2
  131. package/dist/esm/query/index.js +2 -2
  132. package/dist/esm/query/matchers/abstract-matcher.d.ts +9 -9
  133. package/dist/esm/query/matchers/abstract-matcher.js +32 -32
  134. package/dist/esm/query/matchers/alt-matcher.d.ts +10 -10
  135. package/dist/esm/query/matchers/alt-matcher.js +29 -29
  136. package/dist/esm/query/matchers/anchor-matcher.d.ts +17 -17
  137. package/dist/esm/query/matchers/anchor-matcher.js +44 -44
  138. package/dist/esm/query/matchers/comment-matcher.d.ts +10 -10
  139. package/dist/esm/query/matchers/comment-matcher.js +35 -35
  140. package/dist/esm/query/matchers/index.d.ts +6 -6
  141. package/dist/esm/query/matchers/index.js +6 -6
  142. package/dist/esm/query/matchers/many-matcher.d.ts +13 -13
  143. package/dist/esm/query/matchers/many-matcher.js +57 -57
  144. package/dist/esm/query/matchers/num-matcher.d.ts +8 -8
  145. package/dist/esm/query/matchers/num-matcher.js +30 -30
  146. package/dist/esm/query/matchers/op-matcher.d.ts +8 -8
  147. package/dist/esm/query/matchers/op-matcher.js +30 -30
  148. package/dist/esm/query/matchers/seq-matcher.d.ts +14 -14
  149. package/dist/esm/query/matchers/seq-matcher.js +72 -72
  150. package/dist/esm/query/matchers/str-matcher.d.ts +38 -38
  151. package/dist/esm/query/matchers/str-matcher.js +102 -102
  152. package/dist/esm/query/matchers/sym-matcher.d.ts +8 -8
  153. package/dist/esm/query/matchers/sym-matcher.js +30 -30
  154. package/dist/esm/query/matchers/tree-matcher.d.ts +23 -23
  155. package/dist/esm/query/matchers/tree-matcher.js +117 -117
  156. package/dist/esm/query/options.d.ts +10 -10
  157. package/dist/esm/query/options.js +139 -139
  158. package/dist/esm/query/regex.d.ts +1 -1
  159. package/dist/esm/query/regex.js +9 -9
  160. package/dist/esm/query/types.d.ts +100 -100
  161. package/dist/esm/query/types.js +1 -1
  162. package/dist/esm/util/clone.d.ts +1 -1
  163. package/dist/esm/util/clone.js +1 -1
  164. package/dist/esm/util/regex.d.ts +1 -1
  165. package/dist/esm/util/regex.js +3 -3
  166. package/package.json +3 -3
@@ -1,242 +1,242 @@
1
- function specialToken(type, prevToken, nextToken) {
2
- const lineBreaks = 0;
3
- if (nextToken) {
4
- return {
5
- type,
6
- value: '',
7
- offset: nextToken.offset,
8
- line: nextToken.line,
9
- col: nextToken.col,
10
- lineBreaks,
11
- };
12
- }
13
- if (prevToken) {
14
- return {
15
- type,
16
- value: '',
17
- offset: prevToken.offset + prevToken.value.length,
18
- line: prevToken.line + prevToken.lineBreaks,
19
- col: prevToken.value.length - prevToken.value.lastIndexOf('\n'),
20
- lineBreaks,
21
- };
22
- }
23
- return { type, value: '', offset: 0, line: 1, col: 1, lineBreaks };
24
- }
25
- export function createTree(lexer, config) {
26
- const stack = [];
27
- let prevToken = specialToken('_start');
28
- let currentTree = { type: 'root-tree', children: [prevToken] };
29
- const { useIndentBlocks } = config;
30
- let indentMode = 'on';
31
- let currIndent = '';
32
- const indents = [];
33
- let indentSpaces = [];
34
- let nestingCounter = 0;
35
- const lex = [...lexer];
36
- for (const token of lex) {
37
- if (!currentTree.children.length) {
38
- currentTree.children.push(specialToken('_start', prevToken, token));
39
- }
40
- if (useIndentBlocks && nestingCounter === 0) {
41
- if (token.type === 'newline') {
42
- currIndent = '';
43
- indentMode = 'on';
44
- }
45
- else if (indentMode === 'on') {
46
- if (token.type === 'whitespace') {
47
- currIndent += token.value;
48
- indentSpaces.push(token);
49
- prevToken = token;
50
- continue;
51
- }
52
- else {
53
- let prevIndent = indents.pop();
54
- if (prevIndent
55
- ? prevIndent !== currIndent && currIndent.startsWith(prevIndent)
56
- : currIndent) {
57
- if (prevIndent) {
58
- indents.push(prevIndent);
59
- }
60
- indents.push(currIndent);
61
- stack.push(currentTree);
62
- currentTree = {
63
- type: 'block-tree',
64
- children: [
65
- specialToken('_start', prevToken, token),
66
- ...indentSpaces,
67
- ],
68
- };
69
- }
70
- else if (currentTree.type === 'block-tree') {
71
- while (prevIndent &&
72
- prevIndent !== currIndent &&
73
- prevIndent.startsWith(currIndent)) {
74
- const prevTree = stack.pop();
75
- if (prevTree) {
76
- currentTree.children.push(specialToken('_end', prevToken, token));
77
- prevTree.children.push(currentTree);
78
- currentTree = prevTree;
79
- }
80
- prevIndent = indents.pop();
81
- }
82
- indents.push(currIndent);
83
- currentTree.children.push(...indentSpaces);
84
- }
85
- indentMode = 'off';
86
- indentSpaces = [];
87
- }
88
- }
89
- }
90
- if (token.type === 'string-value' && prevToken.type === 'string-value') {
91
- prevToken.value += token.value;
92
- prevToken.lineBreaks += token.lineBreaks;
93
- continue;
94
- }
95
- if (token.type === 'bracket-left') {
96
- stack.push(currentTree);
97
- currentTree = {
98
- type: 'wrapped-tree',
99
- startsWith: token,
100
- endsWith: { ...token, type: 'bracket-right' },
101
- children: [],
102
- };
103
- nestingCounter += 1;
104
- }
105
- else if (token.type === 'bracket-right' &&
106
- currentTree.type === 'wrapped-tree') {
107
- currentTree.children.push(specialToken('_end', prevToken, token));
108
- currentTree.endsWith = token;
109
- const prevTree = stack.pop();
110
- if (prevTree) {
111
- prevTree.children.push(currentTree);
112
- currentTree = prevTree;
113
- }
114
- nestingCounter -= 1;
115
- }
116
- else if (token.type === 'string-start') {
117
- stack.push(currentTree);
118
- currentTree = {
119
- type: 'string-tree',
120
- startsWith: token,
121
- endsWith: { ...token, type: 'string-end' },
122
- children: [],
123
- };
124
- nestingCounter += 1;
125
- }
126
- else if (token.type === 'string-end' &&
127
- currentTree.type === 'string-tree') {
128
- currentTree.children.push(specialToken('_end', prevToken, token));
129
- currentTree.endsWith = token;
130
- const prevTree = stack.pop();
131
- if (prevTree) {
132
- prevTree.children.push(currentTree);
133
- currentTree = prevTree;
134
- }
135
- nestingCounter -= 1;
136
- }
137
- else if (token.type === 'template-start' &&
138
- currentTree.type === 'string-tree') {
139
- stack.push(currentTree);
140
- currentTree = {
141
- type: 'template-tree',
142
- startsWith: token,
143
- endsWith: { ...token, type: 'template-end' },
144
- children: [],
145
- };
146
- nestingCounter += 1;
147
- }
148
- else if (token.type === 'template-end' &&
149
- currentTree.type === 'template-tree') {
150
- currentTree.children.push(specialToken('_end', prevToken, token));
151
- currentTree.endsWith = token;
152
- const prevTree = stack.pop();
153
- if (prevTree) {
154
- prevTree.children.push(currentTree);
155
- currentTree = prevTree;
156
- }
157
- nestingCounter -= 1;
158
- }
159
- else if (token.type === 'string-value' &&
160
- currentTree.type === 'template-tree') {
161
- const tplTree = currentTree;
162
- const tplEndToken = specialToken('_end', prevToken, token);
163
- tplTree.children.push(tplEndToken);
164
- tplTree.endsWith = { ...tplEndToken, type: 'template-end' };
165
- const upperTree = stack.pop();
166
- if (upperTree) {
167
- upperTree.children.push(tplTree);
168
- upperTree.children.push(token);
169
- currentTree = upperTree;
170
- nestingCounter -= 1;
171
- }
172
- }
173
- else if (token.type === 'string-end' &&
174
- currentTree.type === 'template-tree') {
175
- const tplTree = currentTree;
176
- const tplEndToken = specialToken('_end', prevToken, token);
177
- tplTree.children.push(tplEndToken);
178
- tplTree.endsWith = { ...tplEndToken, type: 'template-end' };
179
- const strTree = stack.pop();
180
- if ((strTree === null || strTree === void 0 ? void 0 : strTree.type) === 'string-tree') {
181
- strTree.children.push(tplTree);
182
- const strEndToken = specialToken('_end', prevToken, token);
183
- strTree.children.push(strEndToken);
184
- strTree.endsWith = token;
185
- currentTree = strTree;
186
- nestingCounter -= 1;
187
- const upperTree = stack.pop();
188
- if (upperTree) {
189
- upperTree.children.push(strTree);
190
- currentTree = upperTree;
191
- nestingCounter -= 1;
192
- }
193
- }
194
- }
195
- else if (token.type === 'template-start' &&
196
- currentTree.type === 'template-tree') {
197
- const tplTree = currentTree;
198
- const tplEndToken = specialToken('_end', prevToken, token);
199
- tplTree.children.push(tplEndToken);
200
- tplTree.endsWith = { ...tplEndToken, type: 'template-end' };
201
- const strTree = stack.pop();
202
- if ((strTree === null || strTree === void 0 ? void 0 : strTree.type) === 'string-tree') {
203
- strTree.children.push(tplTree);
204
- stack.push(strTree);
205
- currentTree = {
206
- type: 'template-tree',
207
- startsWith: token,
208
- endsWith: { ...token, type: 'template-end' },
209
- children: [],
210
- };
211
- }
212
- }
213
- else {
214
- currentTree.children.push(token);
215
- }
216
- prevToken = token;
217
- }
218
- const closingToken = specialToken('_end', prevToken);
219
- while (currentTree.type !== 'root-tree') {
220
- currentTree.children.push({ ...closingToken });
221
- const prevTree = stack.pop();
222
- if (prevTree) {
223
- prevTree.children.push(currentTree);
224
- currentTree = prevTree;
225
- }
226
- else {
227
- throw new Error('Parsing error');
228
- }
229
- }
230
- currentTree.children.push({ ...closingToken });
231
- return currentTree;
232
- }
233
- export function isTree(node) {
234
- return [
235
- 'root-tree',
236
- 'wrapped-tree',
237
- 'string-tree',
238
- 'template-tree',
239
- 'block-tree',
240
- ].includes(node === null || node === void 0 ? void 0 : node.type);
241
- }
1
+ function specialToken(type, prevToken, nextToken) {
2
+ const lineBreaks = 0;
3
+ if (nextToken) {
4
+ return {
5
+ type,
6
+ value: '',
7
+ offset: nextToken.offset,
8
+ line: nextToken.line,
9
+ col: nextToken.col,
10
+ lineBreaks,
11
+ };
12
+ }
13
+ if (prevToken) {
14
+ return {
15
+ type,
16
+ value: '',
17
+ offset: prevToken.offset + prevToken.value.length,
18
+ line: prevToken.line + prevToken.lineBreaks,
19
+ col: prevToken.value.length - prevToken.value.lastIndexOf('\n'),
20
+ lineBreaks,
21
+ };
22
+ }
23
+ return { type, value: '', offset: 0, line: 1, col: 1, lineBreaks };
24
+ }
25
+ export function createTree(lexer, config) {
26
+ const stack = [];
27
+ let prevToken = specialToken('_start');
28
+ let currentTree = { type: 'root-tree', children: [prevToken] };
29
+ const { useIndentBlocks } = config;
30
+ let indentMode = 'on';
31
+ let currIndent = '';
32
+ const indents = [];
33
+ let indentSpaces = [];
34
+ let nestingCounter = 0;
35
+ const lex = [...lexer];
36
+ for (const token of lex) {
37
+ if (!currentTree.children.length) {
38
+ currentTree.children.push(specialToken('_start', prevToken, token));
39
+ }
40
+ if (useIndentBlocks && nestingCounter === 0) {
41
+ if (token.type === 'newline') {
42
+ currIndent = '';
43
+ indentMode = 'on';
44
+ }
45
+ else if (indentMode === 'on') {
46
+ if (token.type === 'whitespace') {
47
+ currIndent += token.value;
48
+ indentSpaces.push(token);
49
+ prevToken = token;
50
+ continue;
51
+ }
52
+ else {
53
+ let prevIndent = indents.pop();
54
+ if (prevIndent
55
+ ? prevIndent !== currIndent && currIndent.startsWith(prevIndent)
56
+ : currIndent) {
57
+ if (prevIndent) {
58
+ indents.push(prevIndent);
59
+ }
60
+ indents.push(currIndent);
61
+ stack.push(currentTree);
62
+ currentTree = {
63
+ type: 'block-tree',
64
+ children: [
65
+ specialToken('_start', prevToken, token),
66
+ ...indentSpaces,
67
+ ],
68
+ };
69
+ }
70
+ else if (currentTree.type === 'block-tree') {
71
+ while (prevIndent &&
72
+ prevIndent !== currIndent &&
73
+ prevIndent.startsWith(currIndent)) {
74
+ const prevTree = stack.pop();
75
+ if (prevTree) {
76
+ currentTree.children.push(specialToken('_end', prevToken, token));
77
+ prevTree.children.push(currentTree);
78
+ currentTree = prevTree;
79
+ }
80
+ prevIndent = indents.pop();
81
+ }
82
+ indents.push(currIndent);
83
+ currentTree.children.push(...indentSpaces);
84
+ }
85
+ indentMode = 'off';
86
+ indentSpaces = [];
87
+ }
88
+ }
89
+ }
90
+ if (token.type === 'string-value' && prevToken.type === 'string-value') {
91
+ prevToken.value += token.value;
92
+ prevToken.lineBreaks += token.lineBreaks;
93
+ continue;
94
+ }
95
+ if (token.type === 'bracket-left') {
96
+ stack.push(currentTree);
97
+ currentTree = {
98
+ type: 'wrapped-tree',
99
+ startsWith: token,
100
+ endsWith: { ...token, type: 'bracket-right' },
101
+ children: [],
102
+ };
103
+ nestingCounter += 1;
104
+ }
105
+ else if (token.type === 'bracket-right' &&
106
+ currentTree.type === 'wrapped-tree') {
107
+ currentTree.children.push(specialToken('_end', prevToken, token));
108
+ currentTree.endsWith = token;
109
+ const prevTree = stack.pop();
110
+ if (prevTree) {
111
+ prevTree.children.push(currentTree);
112
+ currentTree = prevTree;
113
+ }
114
+ nestingCounter -= 1;
115
+ }
116
+ else if (token.type === 'string-start') {
117
+ stack.push(currentTree);
118
+ currentTree = {
119
+ type: 'string-tree',
120
+ startsWith: token,
121
+ endsWith: { ...token, type: 'string-end' },
122
+ children: [],
123
+ };
124
+ nestingCounter += 1;
125
+ }
126
+ else if (token.type === 'string-end' &&
127
+ currentTree.type === 'string-tree') {
128
+ currentTree.children.push(specialToken('_end', prevToken, token));
129
+ currentTree.endsWith = token;
130
+ const prevTree = stack.pop();
131
+ if (prevTree) {
132
+ prevTree.children.push(currentTree);
133
+ currentTree = prevTree;
134
+ }
135
+ nestingCounter -= 1;
136
+ }
137
+ else if (token.type === 'template-start' &&
138
+ currentTree.type === 'string-tree') {
139
+ stack.push(currentTree);
140
+ currentTree = {
141
+ type: 'template-tree',
142
+ startsWith: token,
143
+ endsWith: { ...token, type: 'template-end' },
144
+ children: [],
145
+ };
146
+ nestingCounter += 1;
147
+ }
148
+ else if (token.type === 'template-end' &&
149
+ currentTree.type === 'template-tree') {
150
+ currentTree.children.push(specialToken('_end', prevToken, token));
151
+ currentTree.endsWith = token;
152
+ const prevTree = stack.pop();
153
+ if (prevTree) {
154
+ prevTree.children.push(currentTree);
155
+ currentTree = prevTree;
156
+ }
157
+ nestingCounter -= 1;
158
+ }
159
+ else if (token.type === 'string-value' &&
160
+ currentTree.type === 'template-tree') {
161
+ const tplTree = currentTree;
162
+ const tplEndToken = specialToken('_end', prevToken, token);
163
+ tplTree.children.push(tplEndToken);
164
+ tplTree.endsWith = { ...tplEndToken, type: 'template-end' };
165
+ const upperTree = stack.pop();
166
+ if (upperTree) {
167
+ upperTree.children.push(tplTree);
168
+ upperTree.children.push(token);
169
+ currentTree = upperTree;
170
+ nestingCounter -= 1;
171
+ }
172
+ }
173
+ else if (token.type === 'string-end' &&
174
+ currentTree.type === 'template-tree') {
175
+ const tplTree = currentTree;
176
+ const tplEndToken = specialToken('_end', prevToken, token);
177
+ tplTree.children.push(tplEndToken);
178
+ tplTree.endsWith = { ...tplEndToken, type: 'template-end' };
179
+ const strTree = stack.pop();
180
+ if ((strTree === null || strTree === void 0 ? void 0 : strTree.type) === 'string-tree') {
181
+ strTree.children.push(tplTree);
182
+ const strEndToken = specialToken('_end', prevToken, token);
183
+ strTree.children.push(strEndToken);
184
+ strTree.endsWith = token;
185
+ currentTree = strTree;
186
+ nestingCounter -= 1;
187
+ const upperTree = stack.pop();
188
+ if (upperTree) {
189
+ upperTree.children.push(strTree);
190
+ currentTree = upperTree;
191
+ nestingCounter -= 1;
192
+ }
193
+ }
194
+ }
195
+ else if (token.type === 'template-start' &&
196
+ currentTree.type === 'template-tree') {
197
+ const tplTree = currentTree;
198
+ const tplEndToken = specialToken('_end', prevToken, token);
199
+ tplTree.children.push(tplEndToken);
200
+ tplTree.endsWith = { ...tplEndToken, type: 'template-end' };
201
+ const strTree = stack.pop();
202
+ if ((strTree === null || strTree === void 0 ? void 0 : strTree.type) === 'string-tree') {
203
+ strTree.children.push(tplTree);
204
+ stack.push(strTree);
205
+ currentTree = {
206
+ type: 'template-tree',
207
+ startsWith: token,
208
+ endsWith: { ...token, type: 'template-end' },
209
+ children: [],
210
+ };
211
+ }
212
+ }
213
+ else {
214
+ currentTree.children.push(token);
215
+ }
216
+ prevToken = token;
217
+ }
218
+ const closingToken = specialToken('_end', prevToken);
219
+ while (currentTree.type !== 'root-tree') {
220
+ currentTree.children.push({ ...closingToken });
221
+ const prevTree = stack.pop();
222
+ if (prevTree) {
223
+ prevTree.children.push(currentTree);
224
+ currentTree = prevTree;
225
+ }
226
+ else {
227
+ throw new Error('Parsing error');
228
+ }
229
+ }
230
+ currentTree.children.push({ ...closingToken });
231
+ return currentTree;
232
+ }
233
+ export function isTree(node) {
234
+ return [
235
+ 'root-tree',
236
+ 'wrapped-tree',
237
+ 'string-tree',
238
+ 'template-tree',
239
+ 'block-tree',
240
+ ].includes(node === null || node === void 0 ? void 0 : node.type);
241
+ }
242
242
  //# sourceMappingURL=tree.js.map
@@ -1,34 +1,34 @@
1
- import type { Location as ZipperLocation } from '@thi.ng/zipper';
2
- import type { BracketLeftToken, BracketRightToken, StringEndToken, StringStartToken, TemplateEndToken, TemplateStartToken, Token } from '../lexer/types';
3
- export interface TreeBase {
4
- children: Node[];
5
- }
6
- export interface RootTree extends TreeBase {
7
- type: 'root-tree';
8
- }
9
- export interface WrappedTree extends TreeBase {
10
- type: 'wrapped-tree';
11
- startsWith: BracketLeftToken;
12
- endsWith: BracketRightToken;
13
- }
14
- export interface StringTree extends TreeBase {
15
- type: 'string-tree';
16
- startsWith: StringStartToken;
17
- endsWith: StringEndToken;
18
- }
19
- export interface TemplateTree extends TreeBase {
20
- type: 'template-tree';
21
- startsWith: TemplateStartToken;
22
- endsWith: TemplateEndToken;
23
- }
24
- export interface BlockTree extends TreeBase {
25
- type: 'block-tree';
26
- }
27
- export type TreeType = 'root-tree' | 'wrapped-tree' | 'string-tree' | 'template-tree' | 'block-tree';
28
- export type Tree = RootTree | WrappedTree | StringTree | TemplateTree | BlockTree;
29
- export type Node = Tree | Token;
30
- export type Cursor = ZipperLocation<Node>;
31
- export interface ParserConfig {
32
- useIndentBlocks: boolean;
33
- }
1
+ import type { Location as ZipperLocation } from '@thi.ng/zipper';
2
+ import type { BracketLeftToken, BracketRightToken, StringEndToken, StringStartToken, TemplateEndToken, TemplateStartToken, Token } from '../lexer/types';
3
+ export interface TreeBase {
4
+ children: Node[];
5
+ }
6
+ export interface RootTree extends TreeBase {
7
+ type: 'root-tree';
8
+ }
9
+ export interface WrappedTree extends TreeBase {
10
+ type: 'wrapped-tree';
11
+ startsWith: BracketLeftToken;
12
+ endsWith: BracketRightToken;
13
+ }
14
+ export interface StringTree extends TreeBase {
15
+ type: 'string-tree';
16
+ startsWith: StringStartToken;
17
+ endsWith: StringEndToken;
18
+ }
19
+ export interface TemplateTree extends TreeBase {
20
+ type: 'template-tree';
21
+ startsWith: TemplateStartToken;
22
+ endsWith: TemplateEndToken;
23
+ }
24
+ export interface BlockTree extends TreeBase {
25
+ type: 'block-tree';
26
+ }
27
+ export type TreeType = 'root-tree' | 'wrapped-tree' | 'string-tree' | 'template-tree' | 'block-tree';
28
+ export type Tree = RootTree | WrappedTree | StringTree | TemplateTree | BlockTree;
29
+ export type Node = Tree | Token;
30
+ export type Cursor = ZipperLocation<Node>;
31
+ export interface ParserConfig {
32
+ useIndentBlocks: boolean;
33
+ }
34
34
  //# sourceMappingURL=types.d.ts.map
@@ -1,2 +1,2 @@
1
- export {};
1
+ export {};
2
2
  //# sourceMappingURL=types.js.map