@herb-tools/printer 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.
@@ -0,0 +1,13 @@
1
+ import { Printer } from "./printer.js";
2
+ /**
3
+ * IdentityPrinter - Provides lossless reconstruction of the original source
4
+ *
5
+ * This printer aims to reconstruct the original input as faithfully as possible,
6
+ * preserving all whitespace, formatting, and structure. It's useful for:
7
+ * - Testing parser accuracy (input should equal output)
8
+ * - Baseline printing before applying transformations
9
+ * - Verifying AST round-trip fidelity
10
+ */
11
+ export class IdentityPrinter extends Printer {
12
+ }
13
+ //# sourceMappingURL=identity-printer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity-printer.js","sourceRoot":"","sources":["../src/identity-printer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC;;;;;;;;GAQG;AACH,MAAM,OAAO,eAAgB,SAAQ,OAAO;CAE3C"}
package/dist/index.cjs ADDED
@@ -0,0 +1,436 @@
1
+ 'use strict';
2
+
3
+ var core = require('@herb-tools/core');
4
+
5
+ class PrintContext {
6
+ output = "";
7
+ indentLevel = 0;
8
+ currentColumn = 0;
9
+ preserveStack = [];
10
+ /**
11
+ * Write text to the output
12
+ */
13
+ write(text) {
14
+ this.output += text;
15
+ this.currentColumn += text.length;
16
+ }
17
+ /**
18
+ * Write text and update column tracking for newlines
19
+ */
20
+ writeWithColumnTracking(text) {
21
+ this.output += text;
22
+ const lines = text.split('\n');
23
+ if (lines.length > 1) {
24
+ this.currentColumn = lines[lines.length - 1].length;
25
+ }
26
+ else {
27
+ this.currentColumn += text.length;
28
+ }
29
+ }
30
+ /**
31
+ * Increase indentation level
32
+ */
33
+ indent() {
34
+ this.indentLevel++;
35
+ }
36
+ /**
37
+ * Decrease indentation level
38
+ */
39
+ dedent() {
40
+ if (this.indentLevel > 0) {
41
+ this.indentLevel--;
42
+ }
43
+ }
44
+ /**
45
+ * Enter a tag that may preserve whitespace
46
+ */
47
+ enterTag(tagName) {
48
+ this.preserveStack.push(tagName.toLowerCase());
49
+ }
50
+ /**
51
+ * Exit the current tag
52
+ */
53
+ exitTag() {
54
+ this.preserveStack.pop();
55
+ }
56
+ /**
57
+ * Check if we're at the start of a line
58
+ */
59
+ isAtStartOfLine() {
60
+ return this.currentColumn === 0;
61
+ }
62
+ /**
63
+ * Get current indentation level
64
+ */
65
+ getCurrentIndentLevel() {
66
+ return this.indentLevel;
67
+ }
68
+ /**
69
+ * Get current column position
70
+ */
71
+ getCurrentColumn() {
72
+ return this.currentColumn;
73
+ }
74
+ /**
75
+ * Get the current tag stack (for debugging)
76
+ */
77
+ getTagStack() {
78
+ return [...this.preserveStack];
79
+ }
80
+ /**
81
+ * Get the complete output string
82
+ */
83
+ getOutput() {
84
+ return this.output;
85
+ }
86
+ /**
87
+ * Reset the context for reuse
88
+ */
89
+ reset() {
90
+ this.output = "";
91
+ this.indentLevel = 0;
92
+ this.currentColumn = 0;
93
+ this.preserveStack = [];
94
+ }
95
+ }
96
+
97
+ /**
98
+ * Default print options used when none are provided
99
+ */
100
+ const DEFAULT_PRINT_OPTIONS = {
101
+ ignoreErrors: false
102
+ };
103
+ class Printer extends core.Visitor {
104
+ context = new PrintContext();
105
+ /**
106
+ * Static method to print a node without creating an instance
107
+ *
108
+ * @param input - The AST Node, Token, or ParseResult to print
109
+ * @param options - Print options to control behavior
110
+ * @returns The printed string representation of the input
111
+ * @throws {Error} When node has parse errors and ignoreErrors is false
112
+ */
113
+ static print(input, options = DEFAULT_PRINT_OPTIONS) {
114
+ const printer = new this();
115
+ return printer.print(input, options);
116
+ }
117
+ /**
118
+ * Print a node, token, or parse result to a string
119
+ *
120
+ * @param input - The AST Node, Token, or ParseResult to print
121
+ * @param options - Print options to control behavior
122
+ * @returns The printed string representation of the input
123
+ * @throws {Error} When node has parse errors and ignoreErrors is false
124
+ */
125
+ print(input, options = DEFAULT_PRINT_OPTIONS) {
126
+ if (core.isToken(input)) {
127
+ return input.value;
128
+ }
129
+ const node = core.isParseResult(input) ? input.value : input;
130
+ if (options.ignoreErrors === false && node.recursiveErrors().length > 0) {
131
+ throw new Error(`Cannot print the node (${node.type}) since it or any of its children has parse errors. Either pass in a valid Node or call \`print()\` using \`print(node, { ignoreErrors: true })\``);
132
+ }
133
+ this.context.reset();
134
+ this.visit(node);
135
+ return this.context.getOutput();
136
+ }
137
+ visitDocumentNode(node) {
138
+ this.visitChildNodes(node);
139
+ }
140
+ visitLiteralNode(node) {
141
+ this.context.write(node.content);
142
+ }
143
+ visitHTMLTextNode(node) {
144
+ this.write(node.content);
145
+ }
146
+ visitWhitespaceNode(node) {
147
+ if (node.value) {
148
+ this.write(node.value.value);
149
+ }
150
+ }
151
+ visitHTMLOpenTagNode(node) {
152
+ if (node.tag_opening) {
153
+ this.context.write(node.tag_opening.value);
154
+ }
155
+ if (node.tag_name) {
156
+ this.context.write(node.tag_name.value);
157
+ }
158
+ this.visitChildNodes(node);
159
+ if (node.tag_closing) {
160
+ this.context.write(node.tag_closing.value);
161
+ }
162
+ }
163
+ visitHTMLCloseTagNode(node) {
164
+ if (node.tag_opening) {
165
+ this.context.write(node.tag_opening.value);
166
+ }
167
+ if (node.tag_name) {
168
+ this.context.write(node.tag_name.value);
169
+ }
170
+ if (node.tag_closing) {
171
+ this.context.write(node.tag_closing.value);
172
+ }
173
+ }
174
+ visitHTMLElementNode(node) {
175
+ const tagName = node.tag_name?.value;
176
+ if (tagName) {
177
+ this.context.enterTag(tagName);
178
+ }
179
+ if (node.open_tag) {
180
+ this.visit(node.open_tag);
181
+ }
182
+ if (node.body) {
183
+ node.body.forEach(child => this.visit(child));
184
+ }
185
+ if (node.close_tag) {
186
+ this.visit(node.close_tag);
187
+ }
188
+ if (tagName) {
189
+ this.context.exitTag();
190
+ }
191
+ }
192
+ visitHTMLAttributeNode(node) {
193
+ if (node.name) {
194
+ this.visit(node.name);
195
+ }
196
+ if (node.equals) {
197
+ this.context.write(node.equals.value);
198
+ }
199
+ if (node.equals && node.value) {
200
+ this.visit(node.value);
201
+ }
202
+ }
203
+ visitHTMLAttributeNameNode(node) {
204
+ this.visitChildNodes(node);
205
+ }
206
+ visitHTMLAttributeValueNode(node) {
207
+ if (node.quoted && node.open_quote) {
208
+ this.context.write(node.open_quote.value);
209
+ }
210
+ this.visitChildNodes(node);
211
+ if (node.quoted && node.close_quote) {
212
+ this.context.write(node.close_quote.value);
213
+ }
214
+ }
215
+ visitHTMLCommentNode(node) {
216
+ if (node.comment_start) {
217
+ this.context.write(node.comment_start.value);
218
+ }
219
+ this.visitChildNodes(node);
220
+ if (node.comment_end) {
221
+ this.context.write(node.comment_end.value);
222
+ }
223
+ }
224
+ visitHTMLDoctypeNode(node) {
225
+ if (node.tag_opening) {
226
+ this.context.write(node.tag_opening.value);
227
+ }
228
+ this.visitChildNodes(node);
229
+ if (node.tag_closing) {
230
+ this.context.write(node.tag_closing.value);
231
+ }
232
+ }
233
+ visitXMLDeclarationNode(node) {
234
+ if (node.tag_opening) {
235
+ this.context.write(node.tag_opening.value);
236
+ }
237
+ this.visitChildNodes(node);
238
+ if (node.tag_closing) {
239
+ this.context.write(node.tag_closing.value);
240
+ }
241
+ }
242
+ visitCDATANode(node) {
243
+ if (node.tag_opening) {
244
+ this.context.write(node.tag_opening.value);
245
+ }
246
+ this.visitChildNodes(node);
247
+ if (node.tag_closing) {
248
+ this.context.write(node.tag_closing.value);
249
+ }
250
+ }
251
+ visitERBContentNode(node) {
252
+ this.printERBNode(node);
253
+ }
254
+ visitERBIfNode(node) {
255
+ this.printERBNode(node);
256
+ if (node.statements) {
257
+ node.statements.forEach(statement => this.visit(statement));
258
+ }
259
+ if (node.subsequent) {
260
+ this.visit(node.subsequent);
261
+ }
262
+ if (node.end_node) {
263
+ this.visit(node.end_node);
264
+ }
265
+ }
266
+ visitERBElseNode(node) {
267
+ this.printERBNode(node);
268
+ if (node.statements) {
269
+ node.statements.forEach(statement => this.visit(statement));
270
+ }
271
+ }
272
+ visitERBEndNode(node) {
273
+ this.printERBNode(node);
274
+ }
275
+ visitERBBlockNode(node) {
276
+ this.printERBNode(node);
277
+ if (node.body) {
278
+ node.body.forEach(child => this.visit(child));
279
+ }
280
+ if (node.end_node) {
281
+ this.visit(node.end_node);
282
+ }
283
+ }
284
+ visitERBCaseNode(node) {
285
+ this.printERBNode(node);
286
+ if (node.children) {
287
+ node.children.forEach(child => this.visit(child));
288
+ }
289
+ if (node.conditions) {
290
+ node.conditions.forEach(condition => this.visit(condition));
291
+ }
292
+ if (node.else_clause) {
293
+ this.visit(node.else_clause);
294
+ }
295
+ if (node.end_node) {
296
+ this.visit(node.end_node);
297
+ }
298
+ }
299
+ visitERBWhenNode(node) {
300
+ this.printERBNode(node);
301
+ if (node.statements) {
302
+ node.statements.forEach(statement => this.visit(statement));
303
+ }
304
+ }
305
+ visitERBWhileNode(node) {
306
+ this.printERBNode(node);
307
+ if (node.statements) {
308
+ node.statements.forEach(statement => this.visit(statement));
309
+ }
310
+ if (node.end_node) {
311
+ this.visit(node.end_node);
312
+ }
313
+ }
314
+ visitERBUntilNode(node) {
315
+ this.printERBNode(node);
316
+ if (node.statements) {
317
+ node.statements.forEach(statement => this.visit(statement));
318
+ }
319
+ if (node.end_node) {
320
+ this.visit(node.end_node);
321
+ }
322
+ }
323
+ visitERBForNode(node) {
324
+ this.printERBNode(node);
325
+ if (node.statements) {
326
+ node.statements.forEach(statement => this.visit(statement));
327
+ }
328
+ if (node.end_node) {
329
+ this.visit(node.end_node);
330
+ }
331
+ }
332
+ visitERBBeginNode(node) {
333
+ this.printERBNode(node);
334
+ if (node.statements) {
335
+ node.statements.forEach(statement => this.visit(statement));
336
+ }
337
+ if (node.rescue_clause) {
338
+ this.visit(node.rescue_clause);
339
+ }
340
+ if (node.else_clause) {
341
+ this.visit(node.else_clause);
342
+ }
343
+ if (node.ensure_clause) {
344
+ this.visit(node.ensure_clause);
345
+ }
346
+ if (node.end_node) {
347
+ this.visit(node.end_node);
348
+ }
349
+ }
350
+ visitERBRescueNode(node) {
351
+ this.printERBNode(node);
352
+ if (node.statements) {
353
+ node.statements.forEach(statement => this.visit(statement));
354
+ }
355
+ if (node.subsequent) {
356
+ this.visit(node.subsequent);
357
+ }
358
+ }
359
+ visitERBEnsureNode(node) {
360
+ this.printERBNode(node);
361
+ if (node.statements) {
362
+ node.statements.forEach(statement => this.visit(statement));
363
+ }
364
+ }
365
+ visitERBUnlessNode(node) {
366
+ this.printERBNode(node);
367
+ if (node.statements) {
368
+ node.statements.forEach(statement => this.visit(statement));
369
+ }
370
+ if (node.else_clause) {
371
+ this.visit(node.else_clause);
372
+ }
373
+ if (node.end_node) {
374
+ this.visit(node.end_node);
375
+ }
376
+ }
377
+ visitERBYieldNode(node) {
378
+ this.printERBNode(node);
379
+ }
380
+ visitERBInNode(node) {
381
+ this.printERBNode(node);
382
+ if (node.statements) {
383
+ node.statements.forEach(statement => this.visit(statement));
384
+ }
385
+ }
386
+ visitERBCaseMatchNode(node) {
387
+ this.printERBNode(node);
388
+ if (node.children) {
389
+ node.children.forEach(child => this.visit(child));
390
+ }
391
+ if (node.conditions) {
392
+ node.conditions.forEach(condition => this.visit(condition));
393
+ }
394
+ if (node.else_clause) {
395
+ this.visit(node.else_clause);
396
+ }
397
+ if (node.end_node) {
398
+ this.visit(node.end_node);
399
+ }
400
+ }
401
+ /**
402
+ * Print ERB node tags and content
403
+ */
404
+ printERBNode(node) {
405
+ if (node.tag_opening) {
406
+ this.context.write(node.tag_opening.value);
407
+ }
408
+ if (node.content) {
409
+ this.context.write(node.content.value);
410
+ }
411
+ if (node.tag_closing) {
412
+ this.context.write(node.tag_closing.value);
413
+ }
414
+ }
415
+ write(content) {
416
+ this.context.write(content);
417
+ }
418
+ }
419
+
420
+ /**
421
+ * IdentityPrinter - Provides lossless reconstruction of the original source
422
+ *
423
+ * This printer aims to reconstruct the original input as faithfully as possible,
424
+ * preserving all whitespace, formatting, and structure. It's useful for:
425
+ * - Testing parser accuracy (input should equal output)
426
+ * - Baseline printing before applying transformations
427
+ * - Verifying AST round-trip fidelity
428
+ */
429
+ class IdentityPrinter extends Printer {
430
+ }
431
+
432
+ exports.DEFAULT_PRINT_OPTIONS = DEFAULT_PRINT_OPTIONS;
433
+ exports.IdentityPrinter = IdentityPrinter;
434
+ exports.PrintContext = PrintContext;
435
+ exports.Printer = Printer;
436
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../src/print-context.ts","../src/printer.ts","../src/identity-printer.ts"],"sourcesContent":[null,null,null],"names":["Visitor","isToken","isParseResult"],"mappings":"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"}