@codegraft/core 0.1.0-beta.12 → 0.1.0-beta.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/collection.d.ts +11 -13
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +32 -64
- package/dist/collection.js.map +1 -1
- package/dist/containers.d.ts +1 -4
- package/dist/containers.d.ts.map +1 -1
- package/dist/containers.js +1 -6
- package/dist/containers.js.map +1 -1
- package/dist/format.d.ts +3 -39
- package/dist/format.d.ts.map +1 -1
- package/dist/format.js +8 -105
- package/dist/format.js.map +1 -1
- package/dist/formatter.d.ts +15 -54
- package/dist/formatter.d.ts.map +1 -1
- package/dist/formatter.js +44 -192
- package/dist/formatter.js.map +1 -1
- package/dist/types.d.ts +5 -6
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/collection.d.ts
CHANGED
|
@@ -94,16 +94,13 @@ export declare class Collection<G extends GrammarId = GrammarId> {
|
|
|
94
94
|
* field is absent, mirroring `field()` returning an empty selection. */
|
|
95
95
|
setField(name: FieldNameOf<G>, text: string | ((current: string) => string)): this;
|
|
96
96
|
/**
|
|
97
|
-
* Remove each selected node.
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
* a YAML entry); `collapseBlankBefore` additionally absorbs a blank-line separator directly above.
|
|
97
|
+
* Remove each selected node. The byte range goes; leftover indentation is a downstream formatter's
|
|
98
|
+
* to tidy. `separator` also removes the delimiter to the next element so nothing dangles — the
|
|
99
|
+
* trailing `,` of a list member (no `[1, , 3]` hole / invalid object), or the trailing line break
|
|
100
|
+
* of a statement (so no blank line is left where it sat).
|
|
102
101
|
*/
|
|
103
102
|
remove(options?: {
|
|
104
103
|
separator?: boolean;
|
|
105
|
-
wholeLines?: boolean;
|
|
106
|
-
collapseBlankBefore?: boolean;
|
|
107
104
|
}): this;
|
|
108
105
|
/**
|
|
109
106
|
* Narrow-delete: keep `keep` (a 0+-node selection within this node) and drop the wrapper
|
|
@@ -145,14 +142,15 @@ export declare class Collection<G extends GrammarId = GrammarId> {
|
|
|
145
142
|
* note that a same-line trailing comment often attaches as an `inner` comment). */
|
|
146
143
|
removeComments(): this;
|
|
147
144
|
/** Rewrite each node's first leading comment with `fn(its text)`; no-op where there is none.
|
|
148
|
-
* Emptying it (`fn` returns `''`) drops the comment
|
|
149
|
-
*
|
|
145
|
+
* Emptying it (`fn` returns `''`) drops the comment (its byte range; the residual line is the
|
|
146
|
+
* formatter's to tidy), keeping any sibling comments and the node. */
|
|
150
147
|
mapLeadingComment(fn: (text: string) => string): this;
|
|
151
148
|
/** The first leading comment matching `pattern`, as a `RegExpMatchArray` (use a capture group
|
|
152
149
|
* to extract the expression), or `null`. Read it, then `dropDirective` to strip it. */
|
|
153
150
|
directive(pattern: RegExp): RegExpMatchArray | null;
|
|
154
|
-
/** Remove a matching leading directive comment
|
|
155
|
-
* itself.
|
|
151
|
+
/** Remove a matching leading directive comment and the gap up to this node (any comments stacked
|
|
152
|
+
* under the directive go with it), keeping the node itself. Composes with a following `remove()`
|
|
153
|
+
* (the two deletes abut at the node's start). */
|
|
156
154
|
dropDirective(pattern: RegExp): this;
|
|
157
155
|
/** Evaluate a string expression (e.g. a directive's captured text) against `context`. Parsed as
|
|
158
156
|
* TypeScript — available because a namespaced codemod ensures that grammar. */
|
|
@@ -165,8 +163,8 @@ export declare class Collection<G extends GrammarId = GrammarId> {
|
|
|
165
163
|
* edits, which are emitted via magic-string.
|
|
166
164
|
*
|
|
167
165
|
* `namespace` opts into the scan-gate (a source not mentioning it is returned untouched,
|
|
168
|
-
* unparsed) and ensures the TypeScript grammar for `evaluate`'s string form.
|
|
169
|
-
*
|
|
166
|
+
* unparsed) and ensures the TypeScript grammar for `evaluate`'s string form. Inserted snippets adopt
|
|
167
|
+
* the source's detected EOL; all other layout is left to a downstream formatter.
|
|
170
168
|
*/
|
|
171
169
|
export declare function createCodemodTransformer<Ctx extends Record<string, unknown> = Record<string, unknown>, G extends GrammarId = GrammarId>(target: GrammarId | ZoneSplitter, codemod: (root: Collection<G>, context: Ctx) => void, options?: {
|
|
172
170
|
namespace?: string;
|
package/dist/collection.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"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"}
|
package/dist/collection.js
CHANGED
|
@@ -5,9 +5,9 @@ import { attachComments, isComment } from './comment-attachment.js';
|
|
|
5
5
|
import { EditCollector } from './edit-collector.js';
|
|
6
6
|
import { evaluate as evaluateNode } from './evaluate.js';
|
|
7
7
|
import { createResolver } from './resolver.js';
|
|
8
|
-
import {
|
|
8
|
+
import { detectEol } from './format.js';
|
|
9
9
|
import { Formatter } from './formatter.js';
|
|
10
|
-
import { trailingSeparator } from './containers.js';
|
|
10
|
+
import { trailingSeparator, NEWLINE_CONTAINERS } from './containers.js';
|
|
11
11
|
import { assert } from './assert.js';
|
|
12
12
|
/**
|
|
13
13
|
* A jscodeshift-style selection of CST nodes bound to one transform run. Query methods
|
|
@@ -205,28 +205,25 @@ export class Collection {
|
|
|
205
205
|
return this;
|
|
206
206
|
}
|
|
207
207
|
/**
|
|
208
|
-
* Remove each selected node.
|
|
209
|
-
*
|
|
210
|
-
*
|
|
211
|
-
*
|
|
212
|
-
* a YAML entry); `collapseBlankBefore` additionally absorbs a blank-line separator directly above.
|
|
208
|
+
* Remove each selected node. The byte range goes; leftover indentation is a downstream formatter's
|
|
209
|
+
* to tidy. `separator` also removes the delimiter to the next element so nothing dangles — the
|
|
210
|
+
* trailing `,` of a list member (no `[1, , 3]` hole / invalid object), or the trailing line break
|
|
211
|
+
* of a statement (so no blank line is left where it sat).
|
|
213
212
|
*/
|
|
214
213
|
remove(options) {
|
|
215
|
-
const removing = new Set(this.#nodes);
|
|
216
214
|
for (const node of this.#nodes) {
|
|
217
|
-
if (options?.wholeLines) {
|
|
218
|
-
this.#session.formatter.removeWholeLines(node.documentStartIndex, node.documentEndIndex, options.collapseBlankBefore);
|
|
219
|
-
continue;
|
|
220
|
-
}
|
|
221
215
|
let end = node.documentEndIndex;
|
|
222
216
|
if (options?.separator) {
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
217
|
+
if (node.parent && NEWLINE_CONTAINERS.has(node.parent.type)) {
|
|
218
|
+
end = this.#session.formatter.endOfLine(end);
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
const comma = trailingSeparator(node);
|
|
222
|
+
if (comma)
|
|
223
|
+
end = comma.documentEndIndex;
|
|
224
|
+
}
|
|
226
225
|
}
|
|
227
|
-
|
|
228
|
-
// would dangle against the container's edge once the rest of the removal set is gone.
|
|
229
|
-
this.#session.formatter.removeNode(node.documentStartIndex, end, blankCollapse(node, removing));
|
|
226
|
+
this.#session.collector.remove(node.documentStartIndex, end);
|
|
230
227
|
}
|
|
231
228
|
return this;
|
|
232
229
|
}
|
|
@@ -244,16 +241,8 @@ export class Collection {
|
|
|
244
241
|
this.#session.collector.remove(wrapper.documentStartIndex, wrapper.documentEndIndex);
|
|
245
242
|
return this;
|
|
246
243
|
}
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
this.#session.collector.remove(wrapper.documentStartIndex, first.documentStartIndex);
|
|
250
|
-
this.#session.collector.remove(last.documentEndIndex, wrapper.documentEndIndex);
|
|
251
|
-
// The kept statements drop a level: the delete above lets the first line inherit the wrapper's
|
|
252
|
-
// indent, but the continuation lines keep their deeper source indent — dedent them to match.
|
|
253
|
-
// Deferred so edits to the kept nodes in the same pass (an inner conditional collapsed away) win.
|
|
254
|
-
const formatter = this.#session.formatter;
|
|
255
|
-
const dedent = formatter.indentAt(first.documentStartIndex).length - formatter.indentAt(wrapper.documentStartIndex).length;
|
|
256
|
-
formatter.deferReindent(first.documentStartIndex, last.documentEndIndex, dedent);
|
|
244
|
+
this.#session.collector.remove(wrapper.documentStartIndex, kept[0].documentStartIndex);
|
|
245
|
+
this.#session.collector.remove(kept[kept.length - 1].documentEndIndex, wrapper.documentEndIndex);
|
|
257
246
|
return this;
|
|
258
247
|
}
|
|
259
248
|
// ---- insertion ----
|
|
@@ -352,8 +341,8 @@ export class Collection {
|
|
|
352
341
|
return this;
|
|
353
342
|
}
|
|
354
343
|
/** Rewrite each node's first leading comment with `fn(its text)`; no-op where there is none.
|
|
355
|
-
* Emptying it (`fn` returns `''`) drops the comment
|
|
356
|
-
*
|
|
344
|
+
* Emptying it (`fn` returns `''`) drops the comment (its byte range; the residual line is the
|
|
345
|
+
* formatter's to tidy), keeping any sibling comments and the node. */
|
|
357
346
|
mapLeadingComment(fn) {
|
|
358
347
|
for (const node of this.#nodes) {
|
|
359
348
|
const comment = node.leadingComments[0];
|
|
@@ -361,7 +350,7 @@ export class Collection {
|
|
|
361
350
|
continue;
|
|
362
351
|
const next = fn(comment.text);
|
|
363
352
|
if (next === '') {
|
|
364
|
-
this.#session.
|
|
353
|
+
this.#session.collector.remove(comment.documentStartIndex, comment.documentEndIndex);
|
|
365
354
|
}
|
|
366
355
|
else {
|
|
367
356
|
this.#session.collector.overwrite(comment.documentStartIndex, comment.documentEndIndex, next);
|
|
@@ -379,18 +368,15 @@ export class Collection {
|
|
|
379
368
|
}
|
|
380
369
|
return null;
|
|
381
370
|
}
|
|
382
|
-
/** Remove a matching leading directive comment
|
|
383
|
-
* itself.
|
|
371
|
+
/** Remove a matching leading directive comment and the gap up to this node (any comments stacked
|
|
372
|
+
* under the directive go with it), keeping the node itself. Composes with a following `remove()`
|
|
373
|
+
* (the two deletes abut at the node's start). */
|
|
384
374
|
dropDirective(pattern) {
|
|
385
375
|
const node = this.#single();
|
|
386
376
|
const comment = node.leadingComments.find((c) => pattern.test(c.text));
|
|
387
377
|
if (!comment)
|
|
388
378
|
return this;
|
|
389
|
-
|
|
390
|
-
// node, taking any comments stacked under the directive with it. It collapses those whole lines
|
|
391
|
-
// but stops at the node's line, leaving the node's own line for a following `remove` to collapse
|
|
392
|
-
// independently: the two deletes abut at the node's line start and compose.
|
|
393
|
-
this.#session.formatter.removeLeadingTo(comment.documentStartIndex, node.documentStartIndex);
|
|
379
|
+
this.#session.collector.remove(comment.documentStartIndex, node.documentStartIndex);
|
|
394
380
|
return this;
|
|
395
381
|
}
|
|
396
382
|
/** Evaluate a string expression (e.g. a directive's captured text) against `context`. Parsed as
|
|
@@ -481,23 +467,6 @@ function siblingAt(node, delta) {
|
|
|
481
467
|
const i = siblings?.indexOf(node) ?? -1;
|
|
482
468
|
return i === -1 ? null : (siblings[i + delta] ?? null);
|
|
483
469
|
}
|
|
484
|
-
/** Which dangling blank lines a removed `node`'s line collapse should also absorb, given the whole
|
|
485
|
-
* set `removing`. `before` when every following sibling is removed too (the node ends up last, so a
|
|
486
|
-
* blank that preceded it would dangle before the container's close); `after` when every preceding
|
|
487
|
-
* one is (it ends up first, so a following blank would dangle after the open). */
|
|
488
|
-
function blankCollapse(node, removing) {
|
|
489
|
-
const siblings = node.parent?.children;
|
|
490
|
-
const i = siblings?.indexOf(node) ?? -1;
|
|
491
|
-
if (i === -1)
|
|
492
|
-
return { before: false, after: false };
|
|
493
|
-
const allRemoved = (from, to) => {
|
|
494
|
-
for (let j = from; j < to; j++)
|
|
495
|
-
if (!removing.has(siblings[j]))
|
|
496
|
-
return false;
|
|
497
|
-
return true;
|
|
498
|
-
};
|
|
499
|
-
return { before: allRemoved(i + 1, siblings.length), after: allRemoved(0, i) };
|
|
500
|
-
}
|
|
501
470
|
// JS/TS scope boundaries — the structural notion behind `closestScope` (no resolver needed).
|
|
502
471
|
const SCOPE_NODES = new Set([
|
|
503
472
|
'program',
|
|
@@ -529,8 +498,8 @@ function dedupe(nodes) {
|
|
|
529
498
|
* edits, which are emitted via magic-string.
|
|
530
499
|
*
|
|
531
500
|
* `namespace` opts into the scan-gate (a source not mentioning it is returned untouched,
|
|
532
|
-
* unparsed) and ensures the TypeScript grammar for `evaluate`'s string form.
|
|
533
|
-
*
|
|
501
|
+
* unparsed) and ensures the TypeScript grammar for `evaluate`'s string form. Inserted snippets adopt
|
|
502
|
+
* the source's detected EOL; all other layout is left to a downstream formatter.
|
|
534
503
|
*/
|
|
535
504
|
export function createCodemodTransformer(target, codemod, options) {
|
|
536
505
|
const namespace = options?.namespace;
|
|
@@ -547,16 +516,16 @@ export function createCodemodTransformer(target, codemod, options) {
|
|
|
547
516
|
await Parser.loadGrammar(grammar);
|
|
548
517
|
if (namespace !== undefined)
|
|
549
518
|
await Parser.loadGrammar('typescript');
|
|
550
|
-
function run(source, context
|
|
519
|
+
function run(source, context) {
|
|
551
520
|
const collector = new EditCollector(source);
|
|
552
521
|
if (namespace !== undefined && !source.includes(namespace))
|
|
553
522
|
return collector;
|
|
554
523
|
const zones = splitAndParse(source, target);
|
|
555
524
|
for (const zone of zones)
|
|
556
525
|
attachComments(zone.tree);
|
|
557
|
-
//
|
|
558
|
-
//
|
|
559
|
-
const formatter = new Formatter(collector, source,
|
|
526
|
+
// Inserted snippets adopt the source's EOL (detected once); their indentation comes from the
|
|
527
|
+
// anchor line.
|
|
528
|
+
const formatter = new Formatter(collector, source, detectEol(source));
|
|
560
529
|
// One resolver per zone tree, built on first use (only if the codemod asks for scope).
|
|
561
530
|
const resolvers = new Map();
|
|
562
531
|
const session = {
|
|
@@ -570,13 +539,12 @@ export function createCodemodTransformer(target, codemod, options) {
|
|
|
570
539
|
},
|
|
571
540
|
};
|
|
572
541
|
codemod(new Collection(zones.map((zone) => zone.tree), session), context);
|
|
573
|
-
formatter.flush(); // apply deferred reindents (unwrap), now that explicit edits have won overlaps
|
|
574
542
|
return collector;
|
|
575
543
|
}
|
|
576
544
|
return {
|
|
577
|
-
transform: (source, context
|
|
545
|
+
transform: (source, context) => run(source, context).toString(),
|
|
578
546
|
transformWithMap(source, context, options) {
|
|
579
|
-
const collector = run(source, context
|
|
547
|
+
const collector = run(source, context);
|
|
580
548
|
return { code: collector.toString(), map: collector.generateMap(options?.source ?? 'input') };
|
|
581
549
|
},
|
|
582
550
|
};
|
package/dist/collection.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collection.js","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"collection.js","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"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"}
|
package/dist/containers.d.ts
CHANGED
|
@@ -3,11 +3,8 @@ import type { RichNode } from './types.js';
|
|
|
3
3
|
export declare function openDelimiter(node: RichNode): RichNode;
|
|
4
4
|
/** The separator token (a `,` by default, or `;` for a `;`-list) immediately after `node` among its
|
|
5
5
|
* parent's children (comments skipped), or `null` — the trailing separator `remove({ separator })`
|
|
6
|
-
* drops alongside a list element
|
|
6
|
+
* drops alongside a list element so no array hole / dangling member is left. */
|
|
7
7
|
export declare function trailingSeparator(node: RichNode, sep?: string): RichNode | null;
|
|
8
|
-
/** Whether `node` spans more than one line (its open and close sit on different rows) — the cue for
|
|
9
|
-
* `append`/`prepend` to lay an element on its own line rather than inline. */
|
|
10
|
-
export declare function isMultiline(node: RichNode): boolean;
|
|
11
8
|
/** Containers whose elements are separated by newlines (a block / class body), not commas. */
|
|
12
9
|
export declare const NEWLINE_CONTAINERS: Set<string>;
|
|
13
10
|
/** Containers whose members are separated/terminated by `;` (a TS interface / object type). */
|
package/dist/containers.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"containers.d.ts","sourceRoot":"","sources":["../src/containers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAQ1C,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAItD;AAED;;
|
|
1
|
+
{"version":3,"file":"containers.d.ts","sourceRoot":"","sources":["../src/containers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAQ1C,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAItD;AAED;;iFAEiF;AACjF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,SAAM,GAAG,QAAQ,GAAG,IAAI,CAW5E;AAED,8FAA8F;AAC9F,eAAO,MAAM,kBAAkB,aAAwD,CAAA;AAEvF,+FAA+F;AAC/F,eAAO,MAAM,eAAe,aAA6C,CAAA"}
|
package/dist/containers.js
CHANGED
|
@@ -11,7 +11,7 @@ export function openDelimiter(node) {
|
|
|
11
11
|
}
|
|
12
12
|
/** The separator token (a `,` by default, or `;` for a `;`-list) immediately after `node` among its
|
|
13
13
|
* parent's children (comments skipped), or `null` — the trailing separator `remove({ separator })`
|
|
14
|
-
* drops alongside a list element
|
|
14
|
+
* drops alongside a list element so no array hole / dangling member is left. */
|
|
15
15
|
export function trailingSeparator(node, sep = ',') {
|
|
16
16
|
const siblings = node.parent?.allChildren;
|
|
17
17
|
if (!siblings)
|
|
@@ -27,11 +27,6 @@ export function trailingSeparator(node, sep = ',') {
|
|
|
27
27
|
}
|
|
28
28
|
return null;
|
|
29
29
|
}
|
|
30
|
-
/** Whether `node` spans more than one line (its open and close sit on different rows) — the cue for
|
|
31
|
-
* `append`/`prepend` to lay an element on its own line rather than inline. */
|
|
32
|
-
export function isMultiline(node) {
|
|
33
|
-
return node.startPosition.row !== node.endPosition.row;
|
|
34
|
-
}
|
|
35
30
|
/** Containers whose elements are separated by newlines (a block / class body), not commas. */
|
|
36
31
|
export const NEWLINE_CONTAINERS = new Set(['statement_block', 'class_body', 'program']);
|
|
37
32
|
/** Containers whose members are separated/terminated by `;` (a TS interface / object type). */
|
package/dist/containers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"containers.js","sourceRoot":"","sources":["../src/containers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,sGAAsG;AACtG,qGAAqG;AACrG,2BAA2B;AAE3B,yEAAyE;AACzE,MAAM,UAAU,aAAa,CAAC,IAAc;IAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;IAChC,MAAM,CAAC,IAAI,EAAE,cAAc,IAAI,CAAC,IAAI,4BAA4B,CAAC,CAAA;IACjE,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;
|
|
1
|
+
{"version":3,"file":"containers.js","sourceRoot":"","sources":["../src/containers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,sGAAsG;AACtG,qGAAqG;AACrG,2BAA2B;AAE3B,yEAAyE;AACzE,MAAM,UAAU,aAAa,CAAC,IAAc;IAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;IAChC,MAAM,CAAC,IAAI,EAAE,cAAc,IAAI,CAAC,IAAI,4BAA4B,CAAC,CAAA;IACjE,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;iFAEiF;AACjF,MAAM,UAAU,iBAAiB,CAAC,IAAc,EAAE,GAAG,GAAG,GAAG;IACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,WAAW,CAAA;IACzC,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAA;IAC1B,MAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAChC,IAAI,CAAC,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAA;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;QACvB,IAAI,SAAS,CAAC,GAAG,CAAC;YAAE,SAAQ;QAC5B,OAAO,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAA;IACtC,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,8FAA8F;AAC9F,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,iBAAiB,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC,CAAA;AAEvF,+FAA+F;AAC/F,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC,CAAA"}
|
package/dist/format.d.ts
CHANGED
|
@@ -1,22 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
export
|
|
3
|
-
indentUnit: string;
|
|
4
|
-
eol: string;
|
|
5
|
-
}
|
|
6
|
-
/** Per-apply formatting configuration (`transform(src, ctx, options)`) — each field overrides what
|
|
7
|
-
* would otherwise be detected from the source. The extension point prettier-like options (trailing
|
|
8
|
-
* comma, semicolons, quotes, print width) would grow on. */
|
|
9
|
-
export interface FormatOptions {
|
|
10
|
-
/** Force the indent unit (`'\t'` or N spaces) instead of guessing it. */
|
|
11
|
-
indentUnit?: string;
|
|
12
|
-
/** Force the line ending (`'\n'` / `'\r\n'`) instead of guessing it. */
|
|
13
|
-
eol?: string;
|
|
14
|
-
}
|
|
15
|
-
/** Guess the indent unit (most common indentation step, detect-indent style; tabs when they
|
|
16
|
-
* dominate) and EOL (first line break) of `source`, defaulting to two spaces and `'\n'`. */
|
|
17
|
-
export declare function detectStyle(source: string): FormatStyle;
|
|
18
|
-
/** The {@link FormatStyle} for an apply: detected from `source`, with any explicit `options` winning. */
|
|
19
|
-
export declare function resolveStyle(source: string, options?: FormatOptions): FormatStyle;
|
|
1
|
+
/** Guess a source's EOL — its first line break — defaulting to `'\n'`. */
|
|
2
|
+
export declare function detectEol(source: string): string;
|
|
20
3
|
/** Re-indent a snippet for a line indented by `baseIndent`: the first line is left for the caller
|
|
21
4
|
* to position, every following non-blank line is re-anchored to `baseIndent` (its indentation
|
|
22
5
|
* relative to the block's own base preserved), and line breaks become `eol`.
|
|
@@ -26,26 +9,7 @@ export declare function resolveStyle(source: string, options?: FormatOptions): F
|
|
|
26
9
|
* applying `baseIndent` re-anchors a "hanging" block (continuation lines still at their source
|
|
27
10
|
* indent) to the target, instead of stacking `baseIndent` on top of the indent already there. */
|
|
28
11
|
export declare function reindent(text: string, baseIndent: string, eol: string): string;
|
|
29
|
-
/**
|
|
30
|
-
export declare function lineStartOf(source: string, index: number): number;
|
|
31
|
-
/** The leading whitespace of the line containing `index` — the base indent an inserted block should
|
|
12
|
+
/** The leading whitespace of the line containing `index` — the base indent an inserted snippet should
|
|
32
13
|
* match. Empty when the line starts with a non-whitespace character. */
|
|
33
14
|
export declare function indentOf(source: string, index: number): string;
|
|
34
|
-
/** A space or tab — the horizontal whitespace separating inline list elements (`undefined` past
|
|
35
|
-
* either end of the source is not whitespace). */
|
|
36
|
-
export declare function isHSpace(char: string | undefined): boolean;
|
|
37
|
-
/** The start of the run of whole blank lines immediately above the line beginning at `lineStart`
|
|
38
|
-
* — `lineStart` itself when the preceding line is non-blank. The "absorb blank lines above" step
|
|
39
|
-
* shared by whole-line removal and the line-collapse of a removed last element. */
|
|
40
|
-
export declare function blankRunStart(source: string, lineStart: number): number;
|
|
41
|
-
/** The end of the run of whole blank lines beginning at line start `from` — the start of the first
|
|
42
|
-
* non-blank line at or after it (`from` itself when that line is non-blank, the source length when
|
|
43
|
-
* only blank lines remain). The forward mirror of {@link blankRunStart}: collapsing the blank lines
|
|
44
|
-
* that followed a removed first element, which would dangle after the container's opening delimiter. */
|
|
45
|
-
export declare function blankRunEnd(source: string, from: number): number;
|
|
46
|
-
/** The whole-line span `[from, to)` covering the lines `[start, end)` touches — from the start of
|
|
47
|
-
* `start`'s line (leading indentation included) through the newline after `end`'s line, so nothing
|
|
48
|
-
* blank is left behind. With `collapseBlankBefore`, also absorb whole blank lines immediately above
|
|
49
|
-
* (a separator before a dropped block). */
|
|
50
|
-
export declare function wholeLineRange(source: string, start: number, end: number, collapseBlankBefore?: boolean): [number, number];
|
|
51
15
|
//# sourceMappingURL=format.d.ts.map
|
package/dist/format.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAIA,
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAIA,0EAA0E;AAC1E,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;;;;;;kGAOkG;AAClG,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAU9E;AAED;yEACyE;AACzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAG9D"}
|
package/dist/format.js
CHANGED
|
@@ -1,59 +1,10 @@
|
|
|
1
|
-
//
|
|
2
|
-
//
|
|
3
|
-
// file's
|
|
4
|
-
/** Guess
|
|
5
|
-
|
|
6
|
-
export function detectStyle(source) {
|
|
7
|
-
return { indentUnit: detectIndentUnit(source), eol: detectEol(source) };
|
|
8
|
-
}
|
|
9
|
-
/** The {@link FormatStyle} for an apply: detected from `source`, with any explicit `options` winning. */
|
|
10
|
-
export function resolveStyle(source, options) {
|
|
11
|
-
const detected = detectStyle(source);
|
|
12
|
-
return {
|
|
13
|
-
indentUnit: options?.indentUnit ?? detected.indentUnit,
|
|
14
|
-
eol: options?.eol ?? detected.eol,
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
function detectEol(source) {
|
|
1
|
+
// Re-indenting inserted code. Codegraft edits byte ranges, so code it doesn't touch keeps its
|
|
2
|
+
// formatting for free; this re-anchors an *inserted* snippet to its anchor line's indent and the
|
|
3
|
+
// file's line ending instead of landing at column 0. Cosmetics beyond that are a downstream formatter's.
|
|
4
|
+
/** Guess a source's EOL — its first line break — defaulting to `'\n'`. */
|
|
5
|
+
export function detectEol(source) {
|
|
18
6
|
return /\r\n|\n/.exec(source)?.[0] ?? '\n';
|
|
19
7
|
}
|
|
20
|
-
function detectIndentUnit(source) {
|
|
21
|
-
const steps = new Map(); // space-step size → occurrences
|
|
22
|
-
let tabLines = 0;
|
|
23
|
-
let prevSpaces = 0;
|
|
24
|
-
let prevWasSpace = false;
|
|
25
|
-
for (const raw of source.split('\n')) {
|
|
26
|
-
const line = raw.endsWith('\r') ? raw.slice(0, -1) : raw;
|
|
27
|
-
if (line.trim() === '') {
|
|
28
|
-
prevWasSpace = false;
|
|
29
|
-
continue;
|
|
30
|
-
}
|
|
31
|
-
const indent = /^[ \t]*/.exec(line)[0];
|
|
32
|
-
if (indent.includes('\t')) {
|
|
33
|
-
tabLines++;
|
|
34
|
-
prevWasSpace = false;
|
|
35
|
-
continue;
|
|
36
|
-
}
|
|
37
|
-
if (prevWasSpace) {
|
|
38
|
-
const step = Math.abs(indent.length - prevSpaces);
|
|
39
|
-
if (step > 0)
|
|
40
|
-
steps.set(step, (steps.get(step) ?? 0) + 1);
|
|
41
|
-
}
|
|
42
|
-
prevSpaces = indent.length;
|
|
43
|
-
prevWasSpace = true;
|
|
44
|
-
}
|
|
45
|
-
let unit = 0;
|
|
46
|
-
let best = 0;
|
|
47
|
-
for (const [step, count] of steps) {
|
|
48
|
-
if (count > best) {
|
|
49
|
-
best = count;
|
|
50
|
-
unit = step;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
if (tabLines > best)
|
|
54
|
-
return '\t';
|
|
55
|
-
return ' '.repeat(unit || 2);
|
|
56
|
-
}
|
|
57
8
|
/** Re-indent a snippet for a line indented by `baseIndent`: the first line is left for the caller
|
|
58
9
|
* to position, every following non-blank line is re-anchored to `baseIndent` (its indentation
|
|
59
10
|
* relative to the block's own base preserved), and line breaks become `eol`.
|
|
@@ -76,58 +27,10 @@ export function reindent(text, baseIndent, eol) {
|
|
|
76
27
|
base = 0; // a single-or-blank-continuation snippet: nothing to strip
|
|
77
28
|
return lines.map((line, i) => (i === 0 || line.trim() === '' ? line : baseIndent + line.slice(base))).join(eol);
|
|
78
29
|
}
|
|
79
|
-
|
|
80
|
-
// removal). They take the source explicitly so they stay independent of the edit buffer. ——
|
|
81
|
-
/** Offset of the first character of the line containing `index`. */
|
|
82
|
-
export function lineStartOf(source, index) {
|
|
83
|
-
return source.lastIndexOf('\n', index - 1) + 1;
|
|
84
|
-
}
|
|
85
|
-
/** The leading whitespace of the line containing `index` — the base indent an inserted block should
|
|
30
|
+
/** The leading whitespace of the line containing `index` — the base indent an inserted snippet should
|
|
86
31
|
* match. Empty when the line starts with a non-whitespace character. */
|
|
87
32
|
export function indentOf(source, index) {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
/** A space or tab — the horizontal whitespace separating inline list elements (`undefined` past
|
|
91
|
-
* either end of the source is not whitespace). */
|
|
92
|
-
export function isHSpace(char) {
|
|
93
|
-
return char === ' ' || char === '\t';
|
|
94
|
-
}
|
|
95
|
-
/** The start of the run of whole blank lines immediately above the line beginning at `lineStart`
|
|
96
|
-
* — `lineStart` itself when the preceding line is non-blank. The "absorb blank lines above" step
|
|
97
|
-
* shared by whole-line removal and the line-collapse of a removed last element. */
|
|
98
|
-
export function blankRunStart(source, lineStart) {
|
|
99
|
-
let from = lineStart;
|
|
100
|
-
while (from > 0) {
|
|
101
|
-
const prevStart = lineStartOf(source, from - 1);
|
|
102
|
-
if (source.slice(prevStart, from - 1).trim() !== '')
|
|
103
|
-
break; // a non-blank line stops it
|
|
104
|
-
from = prevStart;
|
|
105
|
-
}
|
|
106
|
-
return from;
|
|
107
|
-
}
|
|
108
|
-
/** The end of the run of whole blank lines beginning at line start `from` — the start of the first
|
|
109
|
-
* non-blank line at or after it (`from` itself when that line is non-blank, the source length when
|
|
110
|
-
* only blank lines remain). The forward mirror of {@link blankRunStart}: collapsing the blank lines
|
|
111
|
-
* that followed a removed first element, which would dangle after the container's opening delimiter. */
|
|
112
|
-
export function blankRunEnd(source, from) {
|
|
113
|
-
let to = from;
|
|
114
|
-
while (to < source.length) {
|
|
115
|
-
const newline = source.indexOf('\n', to);
|
|
116
|
-
const lineEnd = newline === -1 ? source.length : newline;
|
|
117
|
-
if (source.slice(to, lineEnd).trim() !== '')
|
|
118
|
-
break; // a non-blank line stops it
|
|
119
|
-
to = newline === -1 ? source.length : newline + 1;
|
|
120
|
-
}
|
|
121
|
-
return to;
|
|
122
|
-
}
|
|
123
|
-
/** The whole-line span `[from, to)` covering the lines `[start, end)` touches — from the start of
|
|
124
|
-
* `start`'s line (leading indentation included) through the newline after `end`'s line, so nothing
|
|
125
|
-
* blank is left behind. With `collapseBlankBefore`, also absorb whole blank lines immediately above
|
|
126
|
-
* (a separator before a dropped block). */
|
|
127
|
-
export function wholeLineRange(source, start, end, collapseBlankBefore = false) {
|
|
128
|
-
const lineStart = lineStartOf(source, start);
|
|
129
|
-
const from = collapseBlankBefore ? blankRunStart(source, lineStart) : lineStart;
|
|
130
|
-
const newline = source.indexOf('\n', end);
|
|
131
|
-
return [from, newline === -1 ? source.length : newline + 1];
|
|
33
|
+
const lineStart = source.lastIndexOf('\n', index - 1) + 1;
|
|
34
|
+
return /^[ \t]*/.exec(source.slice(lineStart, index))[0];
|
|
132
35
|
}
|
|
133
36
|
//# sourceMappingURL=format.js.map
|
package/dist/format.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,iGAAiG;AACjG,yGAAyG;AAEzG,0EAA0E;AAC1E,MAAM,UAAU,SAAS,CAAC,MAAc;IACtC,OAAO,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAA;AAC5C,CAAC;AAED;;;;;;;kGAOkG;AAClG,MAAM,UAAU,QAAQ,CAAC,IAAY,EAAE,UAAkB,EAAE,GAAW;IACpE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IACrC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IACnC,IAAI,IAAI,GAAG,QAAQ,CAAA;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE;YAAE,SAAQ;QACpC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;IAC5D,CAAC;IACD,IAAI,IAAI,KAAK,QAAQ;QAAE,IAAI,GAAG,CAAC,CAAA,CAAC,2DAA2D;IAC3F,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACjH,CAAC;AAED;yEACyE;AACzE,MAAM,UAAU,QAAQ,CAAC,MAAc,EAAE,KAAa;IACpD,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;IACzD,OAAO,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAE,CAAC,CAAC,CAAC,CAAA;AAC3D,CAAC"}
|
package/dist/formatter.d.ts
CHANGED
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
import type { RichNode } from './types.js';
|
|
2
2
|
import type { EditCollector } from './edit-collector.js';
|
|
3
|
-
import { type FormatStyle } from './format.js';
|
|
4
3
|
/**
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* buffer.
|
|
4
|
+
* How an edit is *rendered* once the codemod has decided *what* to edit. Built per-apply from the
|
|
5
|
+
* source and its detected line ending; the {@link Collection} delegates rendering to it while the
|
|
6
|
+
* {@link EditCollector} it drives stays a pure edit buffer.
|
|
9
7
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* (
|
|
8
|
+
* Scope is deliberately narrow — just enough that edits are **syntactically valid**: re-indent an
|
|
9
|
+
* inserted snippet to its anchor line, and give an appended/prepended element the separator its
|
|
10
|
+
* container needs (`,` / `;` / a line break). Cosmetics — exact indent, blank lines, brace padding,
|
|
11
|
+
* inline-vs-multiline reflow — are left to a downstream formatter, which sees the output anyway.
|
|
13
12
|
*/
|
|
14
13
|
export declare class Formatter {
|
|
15
14
|
#private;
|
|
16
|
-
constructor(collector: EditCollector, source: string,
|
|
15
|
+
constructor(collector: EditCollector, source: string, eol: string);
|
|
17
16
|
/** The line ending — for inserting whole statements (`ensureImport`). */
|
|
18
17
|
get eol(): string;
|
|
19
18
|
/** The leading whitespace of the line containing `index` — for restoring a displaced node's indent. */
|
|
@@ -21,53 +20,15 @@ export declare class Formatter {
|
|
|
21
20
|
/** `text` re-indented to the line at `index` (single-line text is unchanged) — for a replaced or
|
|
22
21
|
* inserted snippet. */
|
|
23
22
|
reindent(text: string, index: number): string;
|
|
24
|
-
/**
|
|
25
|
-
*
|
|
23
|
+
/** The offset just past the line break following `index` (trailing spaces/tabs + one `\n`), or
|
|
24
|
+
* `index` itself when `index` is not at end of line — so `remove({ separator })` can drop a
|
|
25
|
+
* statement's now-empty line, the newline-container analogue of dropping a list element's comma. */
|
|
26
|
+
endOfLine(index: number): number;
|
|
27
|
+
/** Append `text` as the last element of `node` with a valid separator: a line break in a
|
|
28
|
+
* block/class body, a `,`/`;` after the last element of a delimited list, or as the sole element
|
|
29
|
+
* of an empty container. */
|
|
26
30
|
append(node: RichNode, text: string): void;
|
|
27
31
|
/** Prepend `text` as the first element of `node` — the mirror of {@link append}. */
|
|
28
32
|
prepend(node: RichNode, text: string): void;
|
|
29
|
-
/** Delete `[start, end)`, collapsing whitespace the way Prettier would: when the span owns its
|
|
30
|
-
* line(s) — only indentation before `start`, only whitespace after `end` up to the line break —
|
|
31
|
-
* drop the whole lines so no blank line is left; otherwise an in-line delete that also clears one
|
|
32
|
-
* residual separating space, so a removed mid-list element (`[1, two(), 3]`) leaves `[1, 3]`, not
|
|
33
|
-
* `[1, 3]`.
|
|
34
|
-
*
|
|
35
|
-
* In the own-line case the content, the leading indent, and the trailing line break are removed
|
|
36
|
-
* separately so the deletion composes after an abutting edit: a prior `unwrap`/`dropDirective` that
|
|
37
|
-
* already consumed the run up to `start` leaves the content abutting it (no overlap, so it lands),
|
|
38
|
-
* while the leading-indent removal it overlaps is dropped on its own (first-wins) instead of taking
|
|
39
|
-
* the whole line removal down with it.
|
|
40
|
-
*
|
|
41
|
-
* `collapse.before`/`collapse.after` (the node was the last / first surviving element of its
|
|
42
|
-
* container) additionally drop the run of blank lines directly above / below: a blank separator
|
|
43
|
-
* left against the container's closing / opening delimiter, which Prettier strips. Each is its own
|
|
44
|
-
* edit, abutting (not overlapping) the line removal, so a prior edit on the line is unaffected. */
|
|
45
|
-
removeNode(start: number, end: number, collapse?: {
|
|
46
|
-
before?: boolean;
|
|
47
|
-
after?: boolean;
|
|
48
|
-
}): void;
|
|
49
|
-
/** Delete `[start, end)` where `end` begins a following node, collapsing the lines before it: when
|
|
50
|
-
* `start` opens its own line and `end` sits on a later line, drop `[start's line, end's line)` so
|
|
51
|
-
* the leading run (a directive comment and any comments stacked under it) vanishes whole-line while
|
|
52
|
-
* `end`'s own line — its indentation included — is left for a later edit to collapse independently.
|
|
53
|
-
* Otherwise (an inline `start`, or `end` on the same line) a plain `[start, end)` delete. Used by
|
|
54
|
-
* `dropDirective` so it composes with a following `remove`. */
|
|
55
|
-
removeLeadingTo(start: number, end: number): void;
|
|
56
|
-
/** Delete the whole lines `[start, end)` touches — leading indentation through the trailing newline,
|
|
57
|
-
* so nothing blank is left. With `collapseBlankBefore`, also absorb whole blank lines immediately
|
|
58
|
-
* above (a separator before a dropped block). The explicit whole-line removal `remove({ wholeLines })`
|
|
59
|
-
* asks for, where collapsing per node isn't enough. */
|
|
60
|
-
removeWholeLines(start: number, end: number, collapseBlankBefore?: boolean): void;
|
|
61
|
-
/** Register a dedent of the lifted range `[from, to)` by `dedent` columns: every continuation line
|
|
62
|
-
* (the lines after the first) loses up to `dedent` leading-whitespace columns. Used by `unwrap`,
|
|
63
|
-
* whose kept statements drop a level — their first line inherits the wrapper's indent for free,
|
|
64
|
-
* but the rest keep their deeper source indent.
|
|
65
|
-
*
|
|
66
|
-
* Deferred to {@link flush} rather than applied now so it yields (first-wins) to the codemod's own
|
|
67
|
-
* edits on the kept nodes: a kept statement removed or replaced in the same pass wins the overlap,
|
|
68
|
-
* so only lines that actually survive get dedented. A no-op unless `dedent` is positive. */
|
|
69
|
-
deferReindent(from: number, to: number, dedent: number): void;
|
|
70
|
-
/** Apply every {@link deferReindent}, once, after the codemod has recorded its explicit edits. */
|
|
71
|
-
flush(): void;
|
|
72
33
|
}
|
|
73
34
|
//# sourceMappingURL=formatter.d.ts.map
|
package/dist/formatter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../src/formatter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../src/formatter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAIxD;;;;;;;;;GASG;AACH,qBAAa,SAAS;;gBAKR,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAMjE,yEAAyE;IACzE,IAAI,GAAG,IAAI,MAAM,CAEhB;IAED,uGAAuG;IACvG,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAI/B;4BACwB;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAI7C;;yGAEqG;IACrG,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAMhC;;iCAE6B;IAC7B,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAY1C,oFAAoF;IACpF,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;CAe5C"}
|
package/dist/formatter.js
CHANGED
|
@@ -1,30 +1,27 @@
|
|
|
1
|
-
import { reindent, indentOf
|
|
2
|
-
import { openDelimiter,
|
|
1
|
+
import { reindent, indentOf } from './format.js';
|
|
2
|
+
import { openDelimiter, NEWLINE_CONTAINERS, SEMI_CONTAINERS } from './containers.js';
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* buffer.
|
|
4
|
+
* How an edit is *rendered* once the codemod has decided *what* to edit. Built per-apply from the
|
|
5
|
+
* source and its detected line ending; the {@link Collection} delegates rendering to it while the
|
|
6
|
+
* {@link EditCollector} it drives stays a pure edit buffer.
|
|
8
7
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* (
|
|
8
|
+
* Scope is deliberately narrow — just enough that edits are **syntactically valid**: re-indent an
|
|
9
|
+
* inserted snippet to its anchor line, and give an appended/prepended element the separator its
|
|
10
|
+
* container needs (`,` / `;` / a line break). Cosmetics — exact indent, blank lines, brace padding,
|
|
11
|
+
* inline-vs-multiline reflow — are left to a downstream formatter, which sees the output anyway.
|
|
12
12
|
*/
|
|
13
13
|
export class Formatter {
|
|
14
14
|
#collector;
|
|
15
15
|
#source;
|
|
16
|
-
#
|
|
17
|
-
|
|
18
|
-
* explicit edits so they yield to them (see {@link deferReindent}). */
|
|
19
|
-
#deferred = [];
|
|
20
|
-
constructor(collector, source, style) {
|
|
16
|
+
#eol;
|
|
17
|
+
constructor(collector, source, eol) {
|
|
21
18
|
this.#collector = collector;
|
|
22
19
|
this.#source = source;
|
|
23
|
-
this.#
|
|
20
|
+
this.#eol = eol;
|
|
24
21
|
}
|
|
25
22
|
/** The line ending — for inserting whole statements (`ensureImport`). */
|
|
26
23
|
get eol() {
|
|
27
|
-
return this.#
|
|
24
|
+
return this.#eol;
|
|
28
25
|
}
|
|
29
26
|
/** The leading whitespace of the line containing `index` — for restoring a displaced node's indent. */
|
|
30
27
|
indentAt(index) {
|
|
@@ -33,193 +30,48 @@ export class Formatter {
|
|
|
33
30
|
/** `text` re-indented to the line at `index` (single-line text is unchanged) — for a replaced or
|
|
34
31
|
* inserted snippet. */
|
|
35
32
|
reindent(text, index) {
|
|
36
|
-
return reindent(text, indentOf(this.#source, index), this.#
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
*
|
|
33
|
+
return reindent(text, indentOf(this.#source, index), this.#eol);
|
|
34
|
+
}
|
|
35
|
+
/** The offset just past the line break following `index` (trailing spaces/tabs + one `\n`), or
|
|
36
|
+
* `index` itself when `index` is not at end of line — so `remove({ separator })` can drop a
|
|
37
|
+
* statement's now-empty line, the newline-container analogue of dropping a list element's comma. */
|
|
38
|
+
endOfLine(index) {
|
|
39
|
+
let i = index;
|
|
40
|
+
while (this.#source[i] === ' ' || this.#source[i] === '\t' || this.#source[i] === '\r')
|
|
41
|
+
i++;
|
|
42
|
+
return this.#source[i] === '\n' ? i + 1 : index;
|
|
43
|
+
}
|
|
44
|
+
/** Append `text` as the last element of `node` with a valid separator: a line break in a
|
|
45
|
+
* block/class body, a `,`/`;` after the last element of a delimited list, or as the sole element
|
|
46
|
+
* of an empty container. */
|
|
41
47
|
append(node, text) {
|
|
42
48
|
const elements = node.children;
|
|
43
49
|
if (NEWLINE_CONTAINERS.has(node.type)) {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
+
const at = elements.length ? elements[elements.length - 1] : openDelimiter(node);
|
|
51
|
+
this.#collector.insertRight(at.documentEndIndex, this.#eol + text);
|
|
52
|
+
}
|
|
53
|
+
else if (elements.length === 0) {
|
|
54
|
+
this.#collector.insertRight(openDelimiter(node).documentEndIndex, text);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
this.#collector.insertRight(elements[elements.length - 1].documentEndIndex, this.#separator(node) + text);
|
|
50
58
|
}
|
|
51
|
-
else if (elements.length === 0)
|
|
52
|
-
this.#fillContainer(node, text);
|
|
53
|
-
else
|
|
54
|
-
this.#appendElement(node, elements[elements.length - 1], text);
|
|
55
59
|
}
|
|
56
60
|
/** Prepend `text` as the first element of `node` — the mirror of {@link append}. */
|
|
57
61
|
prepend(node, text) {
|
|
58
62
|
const elements = node.children;
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
else
|
|
63
|
-
this.#collector.insertRight(openDelimiter(node).documentEndIndex, this.#line(text, elements[0].documentStartIndex));
|
|
64
|
-
}
|
|
65
|
-
else if (elements.length === 0)
|
|
66
|
-
this.#fillContainer(node, text);
|
|
67
|
-
else
|
|
68
|
-
this.#prependElement(node, elements[0], text);
|
|
69
|
-
}
|
|
70
|
-
// —— removal: emit the collapse edits ——
|
|
71
|
-
/** Delete `[start, end)`, collapsing whitespace the way Prettier would: when the span owns its
|
|
72
|
-
* line(s) — only indentation before `start`, only whitespace after `end` up to the line break —
|
|
73
|
-
* drop the whole lines so no blank line is left; otherwise an in-line delete that also clears one
|
|
74
|
-
* residual separating space, so a removed mid-list element (`[1, two(), 3]`) leaves `[1, 3]`, not
|
|
75
|
-
* `[1, 3]`.
|
|
76
|
-
*
|
|
77
|
-
* In the own-line case the content, the leading indent, and the trailing line break are removed
|
|
78
|
-
* separately so the deletion composes after an abutting edit: a prior `unwrap`/`dropDirective` that
|
|
79
|
-
* already consumed the run up to `start` leaves the content abutting it (no overlap, so it lands),
|
|
80
|
-
* while the leading-indent removal it overlaps is dropped on its own (first-wins) instead of taking
|
|
81
|
-
* the whole line removal down with it.
|
|
82
|
-
*
|
|
83
|
-
* `collapse.before`/`collapse.after` (the node was the last / first surviving element of its
|
|
84
|
-
* container) additionally drop the run of blank lines directly above / below: a blank separator
|
|
85
|
-
* left against the container's closing / opening delimiter, which Prettier strips. Each is its own
|
|
86
|
-
* edit, abutting (not overlapping) the line removal, so a prior edit on the line is unaffected. */
|
|
87
|
-
removeNode(start, end, collapse = {}) {
|
|
88
|
-
const lineStart = lineStartOf(this.#source, start);
|
|
89
|
-
const newline = this.#source.indexOf('\n', end);
|
|
90
|
-
const lineEnd = newline === -1 ? this.#source.length : newline;
|
|
91
|
-
const ownsLines = this.#source.slice(lineStart, start).trim() === '' && this.#source.slice(end, lineEnd).trim() === '';
|
|
92
|
-
if (!ownsLines) {
|
|
93
|
-
// Inline hole: drop one separating space when both sides are spaced (a mid-list element), so no
|
|
94
|
-
// double space is left. Never at a list edge (one side non-space) or across a line break.
|
|
95
|
-
const trim = isHSpace(this.#source[end]) && isHSpace(this.#source[start - 1]) ? 1 : 0;
|
|
96
|
-
this.#collector.remove(start, end + trim);
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
this.#collector.remove(start, end); // the content — abuts any prior edit at `start`, so it lands
|
|
100
|
-
this.#collector.remove(lineStart, start); // leading indent — may be already gone under a prior edit
|
|
101
|
-
const lineBreakEnd = newline === -1 ? this.#source.length : newline + 1;
|
|
102
|
-
this.#collector.remove(end, lineBreakEnd); // trailing line break
|
|
103
|
-
// Collapse a blank-line separator the removal leaves dangling against a container edge: `before`
|
|
104
|
-
// the run above the node (against the close), `after` the run below (against the open). With no
|
|
105
|
-
// such run each helper returns the offset it was given, so the remove is a no-op.
|
|
106
|
-
if (collapse.before)
|
|
107
|
-
this.#collector.remove(blankRunStart(this.#source, lineStart), lineStart);
|
|
108
|
-
if (collapse.after)
|
|
109
|
-
this.#collector.remove(lineBreakEnd, blankRunEnd(this.#source, lineBreakEnd));
|
|
110
|
-
}
|
|
111
|
-
/** Delete `[start, end)` where `end` begins a following node, collapsing the lines before it: when
|
|
112
|
-
* `start` opens its own line and `end` sits on a later line, drop `[start's line, end's line)` so
|
|
113
|
-
* the leading run (a directive comment and any comments stacked under it) vanishes whole-line while
|
|
114
|
-
* `end`'s own line — its indentation included — is left for a later edit to collapse independently.
|
|
115
|
-
* Otherwise (an inline `start`, or `end` on the same line) a plain `[start, end)` delete. Used by
|
|
116
|
-
* `dropDirective` so it composes with a following `remove`. */
|
|
117
|
-
removeLeadingTo(start, end) {
|
|
118
|
-
const startLine = lineStartOf(this.#source, start);
|
|
119
|
-
const endLine = lineStartOf(this.#source, end);
|
|
120
|
-
if (endLine > startLine && this.#source.slice(startLine, start).trim() === '')
|
|
121
|
-
this.#collector.remove(startLine, endLine);
|
|
122
|
-
else
|
|
123
|
-
this.#collector.remove(start, end);
|
|
124
|
-
}
|
|
125
|
-
/** Delete the whole lines `[start, end)` touches — leading indentation through the trailing newline,
|
|
126
|
-
* so nothing blank is left. With `collapseBlankBefore`, also absorb whole blank lines immediately
|
|
127
|
-
* above (a separator before a dropped block). The explicit whole-line removal `remove({ wholeLines })`
|
|
128
|
-
* asks for, where collapsing per node isn't enough. */
|
|
129
|
-
removeWholeLines(start, end, collapseBlankBefore = false) {
|
|
130
|
-
const [from, to] = wholeLineRange(this.#source, start, end, collapseBlankBefore);
|
|
131
|
-
this.#collector.remove(from, to);
|
|
132
|
-
}
|
|
133
|
-
// —— unwrap reindent (deferred) ——
|
|
134
|
-
/** Register a dedent of the lifted range `[from, to)` by `dedent` columns: every continuation line
|
|
135
|
-
* (the lines after the first) loses up to `dedent` leading-whitespace columns. Used by `unwrap`,
|
|
136
|
-
* whose kept statements drop a level — their first line inherits the wrapper's indent for free,
|
|
137
|
-
* but the rest keep their deeper source indent.
|
|
138
|
-
*
|
|
139
|
-
* Deferred to {@link flush} rather than applied now so it yields (first-wins) to the codemod's own
|
|
140
|
-
* edits on the kept nodes: a kept statement removed or replaced in the same pass wins the overlap,
|
|
141
|
-
* so only lines that actually survive get dedented. A no-op unless `dedent` is positive. */
|
|
142
|
-
deferReindent(from, to, dedent) {
|
|
143
|
-
if (dedent > 0)
|
|
144
|
-
this.#deferred.push({ from, to, dedent });
|
|
145
|
-
}
|
|
146
|
-
/** Apply every {@link deferReindent}, once, after the codemod has recorded its explicit edits. */
|
|
147
|
-
flush() {
|
|
148
|
-
for (const { from, to, dedent } of this.#deferred)
|
|
149
|
-
this.#dedentLifted(from, to, dedent);
|
|
150
|
-
this.#deferred.length = 0;
|
|
151
|
-
}
|
|
152
|
-
// —— internals ——
|
|
153
|
-
/** Strip up to `dedent` leading-whitespace columns from each continuation line of `[from, to)`
|
|
154
|
-
* (blank lines skipped). Whitespace-only edits at line starts, so they compose with edits to the
|
|
155
|
-
* kept nodes' content; a line already consumed by another edit drops out via first-wins. */
|
|
156
|
-
#dedentLifted(from, to, dedent) {
|
|
157
|
-
for (let nl = this.#source.indexOf('\n', from); nl !== -1 && nl < to; nl = this.#source.indexOf('\n', nl + 1)) {
|
|
158
|
-
const lineStart = nl + 1;
|
|
159
|
-
let i = lineStart;
|
|
160
|
-
while (isHSpace(this.#source[i]))
|
|
161
|
-
i++;
|
|
162
|
-
if (i > lineStart)
|
|
163
|
-
this.#collector.remove(lineStart, lineStart + Math.min(dedent, i - lineStart));
|
|
63
|
+
const newline = NEWLINE_CONTAINERS.has(node.type);
|
|
64
|
+
if (newline || elements.length === 0) {
|
|
65
|
+
this.#collector.insertRight(openDelimiter(node).documentEndIndex, newline ? this.#eol + text : text);
|
|
164
66
|
}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
#line(text, index) {
|
|
168
|
-
const indent = indentOf(this.#source, index);
|
|
169
|
-
return this.#style.eol + indent + reindent(text, indent, this.#style.eol);
|
|
170
|
-
}
|
|
171
|
-
/** Open an empty `{}` block onto its own indented line — `{}` → `{⏎ text⏎}`. */
|
|
172
|
-
#fillBlock(node, text) {
|
|
173
|
-
const blockIndent = indentOf(this.#source, node.documentStartIndex);
|
|
174
|
-
const indent = blockIndent + this.#style.indentUnit;
|
|
175
|
-
const eol = this.#style.eol;
|
|
176
|
-
this.#collector.insertRight(openDelimiter(node).documentEndIndex, eol + indent + reindent(text, indent, eol) + eol + blockIndent);
|
|
177
|
-
}
|
|
178
|
-
/** Fill an empty delimited container with its sole element: a brace container is padded
|
|
179
|
-
* (`{}` → `{ text }`); an array / argument list is not (`[]` → `[text]`). */
|
|
180
|
-
#fillContainer(node, text) {
|
|
181
|
-
const open = openDelimiter(node);
|
|
182
|
-
const pad = open.text === '{' ? ' ' : '';
|
|
183
|
-
this.#collector.insertRight(open.documentEndIndex, pad + text + pad);
|
|
184
|
-
}
|
|
185
|
-
/** Append `text` after the last element `last` of a delimited container. A multi-line container
|
|
186
|
-
* places it on a fresh line at the elements' indent, mirroring the trailing-separator style —
|
|
187
|
-
* extend an existing trailing `sep`, add the mandatory `,` a comma list omits, or rely on the
|
|
188
|
-
* newline alone for a `;` list (where the separator between members is optional); an inline one
|
|
189
|
-
* stays on one line. */
|
|
190
|
-
#appendElement(node, last, text) {
|
|
191
|
-
const sep = this.#separatorFor(node);
|
|
192
|
-
if (!isMultiline(node)) {
|
|
193
|
-
this.#collector.insertRight(last.documentEndIndex, `${sep} ${text}`);
|
|
194
|
-
return;
|
|
195
|
-
}
|
|
196
|
-
const trailing = trailingSeparator(last, sep);
|
|
197
|
-
const line = this.#line(text, last.documentStartIndex);
|
|
198
|
-
if (trailing)
|
|
199
|
-
this.#collector.insertRight(trailing.documentEndIndex, line + sep);
|
|
200
|
-
else if (sep === ';')
|
|
201
|
-
this.#collector.insertRight(last.documentEndIndex, line);
|
|
202
|
-
else
|
|
203
|
-
this.#collector.insertRight(last.documentEndIndex, sep + line);
|
|
204
|
-
}
|
|
205
|
-
/** Prepend `text` before the first element `first` — the mirror of {@link #appendElement}. The new
|
|
206
|
-
* element is always followed by the old first, so a multi-line container puts it on a fresh line
|
|
207
|
-
* after the open delimiter, separator-terminated (`;` only where the body terminates members with
|
|
208
|
-
* one); an inline one inserts before the first element so brace padding stays intact
|
|
209
|
-
* (`{ a }` → `{ x, a }`). */
|
|
210
|
-
#prependElement(node, first, text) {
|
|
211
|
-
const sep = this.#separatorFor(node);
|
|
212
|
-
if (!isMultiline(node)) {
|
|
213
|
-
this.#collector.insertLeft(first.documentStartIndex, `${text}${sep} `);
|
|
214
|
-
return;
|
|
67
|
+
else {
|
|
68
|
+
this.#collector.insertLeft(elements[0].documentStartIndex, text + this.#separator(node));
|
|
215
69
|
}
|
|
216
|
-
const terminate = sep === ',' || trailingSeparator(first, sep) !== null;
|
|
217
|
-
this.#collector.insertRight(openDelimiter(node).documentEndIndex, this.#line(text, first.documentStartIndex) + (terminate ? sep : ''));
|
|
218
70
|
}
|
|
219
|
-
/** The
|
|
220
|
-
*
|
|
221
|
-
#
|
|
222
|
-
return SEMI_CONTAINERS.has(node.type) ? ';' : ',';
|
|
71
|
+
/** The separator placed between a delimited container's elements — `; ` for a TS interface /
|
|
72
|
+
* object type, else `, `. */
|
|
73
|
+
#separator(node) {
|
|
74
|
+
return SEMI_CONTAINERS.has(node.type) ? '; ' : ', ';
|
|
223
75
|
}
|
|
224
76
|
}
|
|
225
77
|
//# sourceMappingURL=formatter.js.map
|
package/dist/formatter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatter.js","sourceRoot":"","sources":["../src/formatter.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"formatter.js","sourceRoot":"","sources":["../src/formatter.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { NodeTypeAll, FieldName } from './generated/node-types.js';
|
|
2
|
-
import type { FormatOptions } from './format.js';
|
|
3
2
|
/**
|
|
4
3
|
* A real tree-sitter grammar. SFC *file formats* have no id of their own — a {@link ZoneSplitter}
|
|
5
4
|
* maps each section to one of these. `'vue'` is the exception: it is a real tree-sitter grammar
|
|
@@ -99,15 +98,15 @@ export interface SourceMap {
|
|
|
99
98
|
* and is constrained to a record so it can flow into the body and `transform(src, ctx)`.
|
|
100
99
|
*/
|
|
101
100
|
export interface Transformer<Ctx extends Record<string, unknown> = Record<string, unknown>> {
|
|
102
|
-
/** Apply the codemod to `source`.
|
|
103
|
-
*
|
|
104
|
-
*
|
|
105
|
-
transform(source: string, context: Ctx
|
|
101
|
+
/** Apply the codemod to `source`. Edits are rendered just enough to stay syntactically valid — an
|
|
102
|
+
* inserted snippet re-indented to its anchor line (EOL detected from the source), an appended
|
|
103
|
+
* element given its container's separator. Cosmetic layout is a downstream formatter's job. */
|
|
104
|
+
transform(source: string, context: Ctx): string;
|
|
106
105
|
/** Like {@link transform} but also returns a source map (`options.source` names the input in the
|
|
107
106
|
* map). Used by build-pipeline integrations such as `@codegraft/unplugin`. */
|
|
108
107
|
transformWithMap(source: string, context: Ctx, options?: {
|
|
109
108
|
source?: string;
|
|
110
|
-
}
|
|
109
|
+
}): {
|
|
111
110
|
code: string;
|
|
112
111
|
map: SourceMap;
|
|
113
112
|
};
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codegraft/core",
|
|
3
|
-
"version": "0.1.0-beta.
|
|
3
|
+
"version": "0.1.0-beta.13",
|
|
4
4
|
"description": "Tree-sitter runtime for Codegraft: parser, RichNode, comment attachment, zone splitting, the Collection, scope resolver, and edit application.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|