@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,247 +1,247 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isTree = exports.createTree = void 0;
4
- function specialToken(type, prevToken, nextToken) {
5
- const lineBreaks = 0;
6
- if (nextToken) {
7
- return {
8
- type,
9
- value: '',
10
- offset: nextToken.offset,
11
- line: nextToken.line,
12
- col: nextToken.col,
13
- lineBreaks,
14
- };
15
- }
16
- if (prevToken) {
17
- return {
18
- type,
19
- value: '',
20
- offset: prevToken.offset + prevToken.value.length,
21
- line: prevToken.line + prevToken.lineBreaks,
22
- col: prevToken.value.length - prevToken.value.lastIndexOf('\n'),
23
- lineBreaks,
24
- };
25
- }
26
- return { type, value: '', offset: 0, line: 1, col: 1, lineBreaks };
27
- }
28
- function createTree(lexer, config) {
29
- const stack = [];
30
- let prevToken = specialToken('_start');
31
- let currentTree = { type: 'root-tree', children: [prevToken] };
32
- const { useIndentBlocks } = config;
33
- let indentMode = 'on';
34
- let currIndent = '';
35
- const indents = [];
36
- let indentSpaces = [];
37
- let nestingCounter = 0;
38
- const lex = [...lexer];
39
- for (const token of lex) {
40
- if (!currentTree.children.length) {
41
- currentTree.children.push(specialToken('_start', prevToken, token));
42
- }
43
- if (useIndentBlocks && nestingCounter === 0) {
44
- if (token.type === 'newline') {
45
- currIndent = '';
46
- indentMode = 'on';
47
- }
48
- else if (indentMode === 'on') {
49
- if (token.type === 'whitespace') {
50
- currIndent += token.value;
51
- indentSpaces.push(token);
52
- prevToken = token;
53
- continue;
54
- }
55
- else {
56
- let prevIndent = indents.pop();
57
- if (prevIndent
58
- ? prevIndent !== currIndent && currIndent.startsWith(prevIndent)
59
- : currIndent) {
60
- if (prevIndent) {
61
- indents.push(prevIndent);
62
- }
63
- indents.push(currIndent);
64
- stack.push(currentTree);
65
- currentTree = {
66
- type: 'block-tree',
67
- children: [
68
- specialToken('_start', prevToken, token),
69
- ...indentSpaces,
70
- ],
71
- };
72
- }
73
- else if (currentTree.type === 'block-tree') {
74
- while (prevIndent &&
75
- prevIndent !== currIndent &&
76
- prevIndent.startsWith(currIndent)) {
77
- const prevTree = stack.pop();
78
- if (prevTree) {
79
- currentTree.children.push(specialToken('_end', prevToken, token));
80
- prevTree.children.push(currentTree);
81
- currentTree = prevTree;
82
- }
83
- prevIndent = indents.pop();
84
- }
85
- indents.push(currIndent);
86
- currentTree.children.push(...indentSpaces);
87
- }
88
- indentMode = 'off';
89
- indentSpaces = [];
90
- }
91
- }
92
- }
93
- if (token.type === 'string-value' && prevToken.type === 'string-value') {
94
- prevToken.value += token.value;
95
- prevToken.lineBreaks += token.lineBreaks;
96
- continue;
97
- }
98
- if (token.type === 'bracket-left') {
99
- stack.push(currentTree);
100
- currentTree = {
101
- type: 'wrapped-tree',
102
- startsWith: token,
103
- endsWith: { ...token, type: 'bracket-right' },
104
- children: [],
105
- };
106
- nestingCounter += 1;
107
- }
108
- else if (token.type === 'bracket-right' &&
109
- currentTree.type === 'wrapped-tree') {
110
- currentTree.children.push(specialToken('_end', prevToken, token));
111
- currentTree.endsWith = token;
112
- const prevTree = stack.pop();
113
- if (prevTree) {
114
- prevTree.children.push(currentTree);
115
- currentTree = prevTree;
116
- }
117
- nestingCounter -= 1;
118
- }
119
- else if (token.type === 'string-start') {
120
- stack.push(currentTree);
121
- currentTree = {
122
- type: 'string-tree',
123
- startsWith: token,
124
- endsWith: { ...token, type: 'string-end' },
125
- children: [],
126
- };
127
- nestingCounter += 1;
128
- }
129
- else if (token.type === 'string-end' &&
130
- currentTree.type === 'string-tree') {
131
- currentTree.children.push(specialToken('_end', prevToken, token));
132
- currentTree.endsWith = token;
133
- const prevTree = stack.pop();
134
- if (prevTree) {
135
- prevTree.children.push(currentTree);
136
- currentTree = prevTree;
137
- }
138
- nestingCounter -= 1;
139
- }
140
- else if (token.type === 'template-start' &&
141
- currentTree.type === 'string-tree') {
142
- stack.push(currentTree);
143
- currentTree = {
144
- type: 'template-tree',
145
- startsWith: token,
146
- endsWith: { ...token, type: 'template-end' },
147
- children: [],
148
- };
149
- nestingCounter += 1;
150
- }
151
- else if (token.type === 'template-end' &&
152
- currentTree.type === 'template-tree') {
153
- currentTree.children.push(specialToken('_end', prevToken, token));
154
- currentTree.endsWith = token;
155
- const prevTree = stack.pop();
156
- if (prevTree) {
157
- prevTree.children.push(currentTree);
158
- currentTree = prevTree;
159
- }
160
- nestingCounter -= 1;
161
- }
162
- else if (token.type === 'string-value' &&
163
- currentTree.type === 'template-tree') {
164
- const tplTree = currentTree;
165
- const tplEndToken = specialToken('_end', prevToken, token);
166
- tplTree.children.push(tplEndToken);
167
- tplTree.endsWith = { ...tplEndToken, type: 'template-end' };
168
- const upperTree = stack.pop();
169
- if (upperTree) {
170
- upperTree.children.push(tplTree);
171
- upperTree.children.push(token);
172
- currentTree = upperTree;
173
- nestingCounter -= 1;
174
- }
175
- }
176
- else if (token.type === 'string-end' &&
177
- currentTree.type === 'template-tree') {
178
- const tplTree = currentTree;
179
- const tplEndToken = specialToken('_end', prevToken, token);
180
- tplTree.children.push(tplEndToken);
181
- tplTree.endsWith = { ...tplEndToken, type: 'template-end' };
182
- const strTree = stack.pop();
183
- if ((strTree === null || strTree === void 0 ? void 0 : strTree.type) === 'string-tree') {
184
- strTree.children.push(tplTree);
185
- const strEndToken = specialToken('_end', prevToken, token);
186
- strTree.children.push(strEndToken);
187
- strTree.endsWith = token;
188
- currentTree = strTree;
189
- nestingCounter -= 1;
190
- const upperTree = stack.pop();
191
- if (upperTree) {
192
- upperTree.children.push(strTree);
193
- currentTree = upperTree;
194
- nestingCounter -= 1;
195
- }
196
- }
197
- }
198
- else if (token.type === 'template-start' &&
199
- currentTree.type === 'template-tree') {
200
- const tplTree = currentTree;
201
- const tplEndToken = specialToken('_end', prevToken, token);
202
- tplTree.children.push(tplEndToken);
203
- tplTree.endsWith = { ...tplEndToken, type: 'template-end' };
204
- const strTree = stack.pop();
205
- if ((strTree === null || strTree === void 0 ? void 0 : strTree.type) === 'string-tree') {
206
- strTree.children.push(tplTree);
207
- stack.push(strTree);
208
- currentTree = {
209
- type: 'template-tree',
210
- startsWith: token,
211
- endsWith: { ...token, type: 'template-end' },
212
- children: [],
213
- };
214
- }
215
- }
216
- else {
217
- currentTree.children.push(token);
218
- }
219
- prevToken = token;
220
- }
221
- const closingToken = specialToken('_end', prevToken);
222
- while (currentTree.type !== 'root-tree') {
223
- currentTree.children.push({ ...closingToken });
224
- const prevTree = stack.pop();
225
- if (prevTree) {
226
- prevTree.children.push(currentTree);
227
- currentTree = prevTree;
228
- }
229
- else {
230
- throw new Error('Parsing error');
231
- }
232
- }
233
- currentTree.children.push({ ...closingToken });
234
- return currentTree;
235
- }
236
- exports.createTree = createTree;
237
- function isTree(node) {
238
- return [
239
- 'root-tree',
240
- 'wrapped-tree',
241
- 'string-tree',
242
- 'template-tree',
243
- 'block-tree',
244
- ].includes(node === null || node === void 0 ? void 0 : node.type);
245
- }
246
- exports.isTree = isTree;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isTree = exports.createTree = void 0;
4
+ function specialToken(type, prevToken, nextToken) {
5
+ const lineBreaks = 0;
6
+ if (nextToken) {
7
+ return {
8
+ type,
9
+ value: '',
10
+ offset: nextToken.offset,
11
+ line: nextToken.line,
12
+ col: nextToken.col,
13
+ lineBreaks,
14
+ };
15
+ }
16
+ if (prevToken) {
17
+ return {
18
+ type,
19
+ value: '',
20
+ offset: prevToken.offset + prevToken.value.length,
21
+ line: prevToken.line + prevToken.lineBreaks,
22
+ col: prevToken.value.length - prevToken.value.lastIndexOf('\n'),
23
+ lineBreaks,
24
+ };
25
+ }
26
+ return { type, value: '', offset: 0, line: 1, col: 1, lineBreaks };
27
+ }
28
+ function createTree(lexer, config) {
29
+ const stack = [];
30
+ let prevToken = specialToken('_start');
31
+ let currentTree = { type: 'root-tree', children: [prevToken] };
32
+ const { useIndentBlocks } = config;
33
+ let indentMode = 'on';
34
+ let currIndent = '';
35
+ const indents = [];
36
+ let indentSpaces = [];
37
+ let nestingCounter = 0;
38
+ const lex = [...lexer];
39
+ for (const token of lex) {
40
+ if (!currentTree.children.length) {
41
+ currentTree.children.push(specialToken('_start', prevToken, token));
42
+ }
43
+ if (useIndentBlocks && nestingCounter === 0) {
44
+ if (token.type === 'newline') {
45
+ currIndent = '';
46
+ indentMode = 'on';
47
+ }
48
+ else if (indentMode === 'on') {
49
+ if (token.type === 'whitespace') {
50
+ currIndent += token.value;
51
+ indentSpaces.push(token);
52
+ prevToken = token;
53
+ continue;
54
+ }
55
+ else {
56
+ let prevIndent = indents.pop();
57
+ if (prevIndent
58
+ ? prevIndent !== currIndent && currIndent.startsWith(prevIndent)
59
+ : currIndent) {
60
+ if (prevIndent) {
61
+ indents.push(prevIndent);
62
+ }
63
+ indents.push(currIndent);
64
+ stack.push(currentTree);
65
+ currentTree = {
66
+ type: 'block-tree',
67
+ children: [
68
+ specialToken('_start', prevToken, token),
69
+ ...indentSpaces,
70
+ ],
71
+ };
72
+ }
73
+ else if (currentTree.type === 'block-tree') {
74
+ while (prevIndent &&
75
+ prevIndent !== currIndent &&
76
+ prevIndent.startsWith(currIndent)) {
77
+ const prevTree = stack.pop();
78
+ if (prevTree) {
79
+ currentTree.children.push(specialToken('_end', prevToken, token));
80
+ prevTree.children.push(currentTree);
81
+ currentTree = prevTree;
82
+ }
83
+ prevIndent = indents.pop();
84
+ }
85
+ indents.push(currIndent);
86
+ currentTree.children.push(...indentSpaces);
87
+ }
88
+ indentMode = 'off';
89
+ indentSpaces = [];
90
+ }
91
+ }
92
+ }
93
+ if (token.type === 'string-value' && prevToken.type === 'string-value') {
94
+ prevToken.value += token.value;
95
+ prevToken.lineBreaks += token.lineBreaks;
96
+ continue;
97
+ }
98
+ if (token.type === 'bracket-left') {
99
+ stack.push(currentTree);
100
+ currentTree = {
101
+ type: 'wrapped-tree',
102
+ startsWith: token,
103
+ endsWith: { ...token, type: 'bracket-right' },
104
+ children: [],
105
+ };
106
+ nestingCounter += 1;
107
+ }
108
+ else if (token.type === 'bracket-right' &&
109
+ currentTree.type === 'wrapped-tree') {
110
+ currentTree.children.push(specialToken('_end', prevToken, token));
111
+ currentTree.endsWith = token;
112
+ const prevTree = stack.pop();
113
+ if (prevTree) {
114
+ prevTree.children.push(currentTree);
115
+ currentTree = prevTree;
116
+ }
117
+ nestingCounter -= 1;
118
+ }
119
+ else if (token.type === 'string-start') {
120
+ stack.push(currentTree);
121
+ currentTree = {
122
+ type: 'string-tree',
123
+ startsWith: token,
124
+ endsWith: { ...token, type: 'string-end' },
125
+ children: [],
126
+ };
127
+ nestingCounter += 1;
128
+ }
129
+ else if (token.type === 'string-end' &&
130
+ currentTree.type === 'string-tree') {
131
+ currentTree.children.push(specialToken('_end', prevToken, token));
132
+ currentTree.endsWith = token;
133
+ const prevTree = stack.pop();
134
+ if (prevTree) {
135
+ prevTree.children.push(currentTree);
136
+ currentTree = prevTree;
137
+ }
138
+ nestingCounter -= 1;
139
+ }
140
+ else if (token.type === 'template-start' &&
141
+ currentTree.type === 'string-tree') {
142
+ stack.push(currentTree);
143
+ currentTree = {
144
+ type: 'template-tree',
145
+ startsWith: token,
146
+ endsWith: { ...token, type: 'template-end' },
147
+ children: [],
148
+ };
149
+ nestingCounter += 1;
150
+ }
151
+ else if (token.type === 'template-end' &&
152
+ currentTree.type === 'template-tree') {
153
+ currentTree.children.push(specialToken('_end', prevToken, token));
154
+ currentTree.endsWith = token;
155
+ const prevTree = stack.pop();
156
+ if (prevTree) {
157
+ prevTree.children.push(currentTree);
158
+ currentTree = prevTree;
159
+ }
160
+ nestingCounter -= 1;
161
+ }
162
+ else if (token.type === 'string-value' &&
163
+ currentTree.type === 'template-tree') {
164
+ const tplTree = currentTree;
165
+ const tplEndToken = specialToken('_end', prevToken, token);
166
+ tplTree.children.push(tplEndToken);
167
+ tplTree.endsWith = { ...tplEndToken, type: 'template-end' };
168
+ const upperTree = stack.pop();
169
+ if (upperTree) {
170
+ upperTree.children.push(tplTree);
171
+ upperTree.children.push(token);
172
+ currentTree = upperTree;
173
+ nestingCounter -= 1;
174
+ }
175
+ }
176
+ else if (token.type === 'string-end' &&
177
+ currentTree.type === 'template-tree') {
178
+ const tplTree = currentTree;
179
+ const tplEndToken = specialToken('_end', prevToken, token);
180
+ tplTree.children.push(tplEndToken);
181
+ tplTree.endsWith = { ...tplEndToken, type: 'template-end' };
182
+ const strTree = stack.pop();
183
+ if ((strTree === null || strTree === void 0 ? void 0 : strTree.type) === 'string-tree') {
184
+ strTree.children.push(tplTree);
185
+ const strEndToken = specialToken('_end', prevToken, token);
186
+ strTree.children.push(strEndToken);
187
+ strTree.endsWith = token;
188
+ currentTree = strTree;
189
+ nestingCounter -= 1;
190
+ const upperTree = stack.pop();
191
+ if (upperTree) {
192
+ upperTree.children.push(strTree);
193
+ currentTree = upperTree;
194
+ nestingCounter -= 1;
195
+ }
196
+ }
197
+ }
198
+ else if (token.type === 'template-start' &&
199
+ currentTree.type === 'template-tree') {
200
+ const tplTree = currentTree;
201
+ const tplEndToken = specialToken('_end', prevToken, token);
202
+ tplTree.children.push(tplEndToken);
203
+ tplTree.endsWith = { ...tplEndToken, type: 'template-end' };
204
+ const strTree = stack.pop();
205
+ if ((strTree === null || strTree === void 0 ? void 0 : strTree.type) === 'string-tree') {
206
+ strTree.children.push(tplTree);
207
+ stack.push(strTree);
208
+ currentTree = {
209
+ type: 'template-tree',
210
+ startsWith: token,
211
+ endsWith: { ...token, type: 'template-end' },
212
+ children: [],
213
+ };
214
+ }
215
+ }
216
+ else {
217
+ currentTree.children.push(token);
218
+ }
219
+ prevToken = token;
220
+ }
221
+ const closingToken = specialToken('_end', prevToken);
222
+ while (currentTree.type !== 'root-tree') {
223
+ currentTree.children.push({ ...closingToken });
224
+ const prevTree = stack.pop();
225
+ if (prevTree) {
226
+ prevTree.children.push(currentTree);
227
+ currentTree = prevTree;
228
+ }
229
+ else {
230
+ throw new Error('Parsing error');
231
+ }
232
+ }
233
+ currentTree.children.push({ ...closingToken });
234
+ return currentTree;
235
+ }
236
+ exports.createTree = createTree;
237
+ function isTree(node) {
238
+ return [
239
+ 'root-tree',
240
+ 'wrapped-tree',
241
+ 'string-tree',
242
+ 'template-tree',
243
+ 'block-tree',
244
+ ].includes(node === null || node === void 0 ? void 0 : node.type);
245
+ }
246
+ exports.isTree = isTree;
247
247
  //# 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,3 +1,3 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  //# sourceMappingURL=types.js.map