@hydranium/core 1.0.0-next.328 → 1.0.0-next.330
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/lib/langium/trivia/comment-preserver.d.ts +48 -0
- package/lib/langium/trivia/comment-preserver.d.ts.map +1 -1
- package/lib/langium/trivia/comment-preserver.js +137 -17
- package/lib/langium/trivia/comment-preserver.js.map +1 -1
- package/package.json +5 -5
- package/src/langium/trivia/comment-preserver.ts +157 -16
|
@@ -112,6 +112,10 @@ export interface AnchorSpan {
|
|
|
112
112
|
readonly end: number;
|
|
113
113
|
readonly owner: AstNode;
|
|
114
114
|
}
|
|
115
|
+
export interface IndentationTokenNames {
|
|
116
|
+
readonly indent: string;
|
|
117
|
+
readonly dedent: string;
|
|
118
|
+
}
|
|
115
119
|
/**
|
|
116
120
|
* One splice, with what it takes to check the risky kind afterwards.
|
|
117
121
|
*
|
|
@@ -161,6 +165,7 @@ export declare class CommentPreserver implements TriviaPreserver<CommentTrivia>
|
|
|
161
165
|
protected readonly tracer: Tracer;
|
|
162
166
|
protected readonly maxIsolatedEdits: number;
|
|
163
167
|
protected commentTokenNames?: readonly string[];
|
|
168
|
+
protected indentationTokenNames?: IndentationTokenNames | null;
|
|
164
169
|
/** Set for the duration of one {@link apply}; see {@link cachedAnchorKey}. */
|
|
165
170
|
protected keyMemo?: Map<AstNode, string | undefined>;
|
|
166
171
|
/** Set for the duration of one {@link apply}; see {@link ambiguousRetainedKey}. */
|
|
@@ -175,6 +180,28 @@ export declare class CommentPreserver implements TriviaPreserver<CommentTrivia>
|
|
|
175
180
|
* comments would be invisible to a capture keyed on it.
|
|
176
181
|
*/
|
|
177
182
|
protected getCommentTokenNames(): readonly string[];
|
|
183
|
+
/**
|
|
184
|
+
* The names of the INDENT and DEDENT tokens the language's
|
|
185
|
+
* `IndentationAwareTokenBuilder` emits, `undefined` for a lexer that emits
|
|
186
|
+
* none. Override it for a lexer of your own that emits such tokens.
|
|
187
|
+
*
|
|
188
|
+
* They are syntax to the parser only. A DEDENT is zero-width at the start of
|
|
189
|
+
* the line after its block, and an INDENT covers the whitespace in front of
|
|
190
|
+
* the block's first line, so a comment line beside either reads as sharing a
|
|
191
|
+
* line with the block, and moves onto the block's last line or its header.
|
|
192
|
+
*/
|
|
193
|
+
protected getIndentationTokenNames(): IndentationTokenNames | undefined;
|
|
194
|
+
protected isIndentation(node: CstNode): boolean;
|
|
195
|
+
/**
|
|
196
|
+
* Where the syntax of `node` begins and ends without the indentation tokens
|
|
197
|
+
* at its edges.
|
|
198
|
+
*/
|
|
199
|
+
protected syntaxSpan(node: CstNode): {
|
|
200
|
+
readonly offset: number;
|
|
201
|
+
readonly end: number;
|
|
202
|
+
} | undefined;
|
|
203
|
+
/** The first token of `node` for a `step` of 1, the last for -1, that is neither hidden nor indentation. */
|
|
204
|
+
protected edgeToken(node: CstNode, step: 1 | -1): CstNode | undefined;
|
|
178
205
|
/**
|
|
179
206
|
* Stable identity for one AST node, used to find it again in the
|
|
180
207
|
* re-serialized text — or `undefined` when no stable identity exists.
|
|
@@ -233,6 +260,27 @@ export declare class CommentPreserver implements TriviaPreserver<CommentTrivia>
|
|
|
233
260
|
* what relocates an end-of-line note onto the following declaration.
|
|
234
261
|
*/
|
|
235
262
|
protected classify(comment: CstNode, index: number, container: CompositeCstNode, source: string): DocumentComment;
|
|
263
|
+
/**
|
|
264
|
+
* Resolves the container {@link classify} anchors `comment` in and its
|
|
265
|
+
* siblings there without INDENT and DEDENT tokens.
|
|
266
|
+
*
|
|
267
|
+
* An indentation-aware lexer can emit a block's DEDENT after the comment
|
|
268
|
+
* lines that follow the block, so the parser nests them in it. An own-line
|
|
269
|
+
* comment left of the column a block's INDENT opened is lifted out of each
|
|
270
|
+
* block that ends right after it, with its adjacent hidden nodes, and placed
|
|
271
|
+
* after that block in the enclosing container.
|
|
272
|
+
*/
|
|
273
|
+
protected placeAmongSyntax(comment: CstNode, index: number, container: CompositeCstNode, source: string): {
|
|
274
|
+
readonly container: CompositeCstNode;
|
|
275
|
+
readonly content: readonly CstNode[];
|
|
276
|
+
readonly index: number;
|
|
277
|
+
};
|
|
278
|
+
/** Whether only hidden and indentation tokens follow `node` in `content`. */
|
|
279
|
+
protected closesAfter(content: readonly CstNode[], node: CstNode): boolean;
|
|
280
|
+
/** The column the last INDENT before `node` in `content` opens, `undefined` without one. */
|
|
281
|
+
protected openedColumn(content: readonly CstNode[], node: CstNode, source: string): number | undefined;
|
|
282
|
+
/** The column of `offset` in `text`. */
|
|
283
|
+
protected columnAt(text: string, offset: number): number;
|
|
236
284
|
/**
|
|
237
285
|
* Comment text with CRLF reduced to LF.
|
|
238
286
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comment-preserver.d.ts","sourceRoot":"","sources":["../../../src/langium/trivia/comment-preserver.ts"],"names":[],"mappings":"AAAA;;;;;;;kFAOkF;AAElF,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EACJ,KAAK,OAAO,EAEZ,KAAK,gBAAgB,EACrB,KAAK,OAAO,
|
|
1
|
+
{"version":3,"file":"comment-preserver.d.ts","sourceRoot":"","sources":["../../../src/langium/trivia/comment-preserver.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* SPDX-License-Identifier: MIT
|
|
8
8
|
********************************************************************************/
|
|
9
|
-
import { AstUtils, GrammarAST, GrammarUtils, isAstNode } from '@hydranium/langium';
|
|
9
|
+
import { AstUtils, GrammarAST, GrammarUtils, IndentationAwareTokenBuilder, isAstNode } from '@hydranium/langium';
|
|
10
10
|
function isComposite(node) {
|
|
11
11
|
return 'content' in node;
|
|
12
12
|
}
|
|
@@ -41,6 +41,7 @@ export class CommentPreserver {
|
|
|
41
41
|
tracer;
|
|
42
42
|
maxIsolatedEdits;
|
|
43
43
|
commentTokenNames;
|
|
44
|
+
indentationTokenNames;
|
|
44
45
|
/** Set for the duration of one {@link apply}; see {@link cachedAnchorKey}. */
|
|
45
46
|
keyMemo;
|
|
46
47
|
/** Set for the duration of one {@link apply}; see {@link ambiguousRetainedKey}. */
|
|
@@ -68,6 +69,57 @@ export class CommentPreserver {
|
|
|
68
69
|
}
|
|
69
70
|
return this.commentTokenNames;
|
|
70
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* The names of the INDENT and DEDENT tokens the language's
|
|
74
|
+
* `IndentationAwareTokenBuilder` emits, `undefined` for a lexer that emits
|
|
75
|
+
* none. Override it for a lexer of your own that emits such tokens.
|
|
76
|
+
*
|
|
77
|
+
* They are syntax to the parser only. A DEDENT is zero-width at the start of
|
|
78
|
+
* the line after its block, and an INDENT covers the whitespace in front of
|
|
79
|
+
* the block's first line, so a comment line beside either reads as sharing a
|
|
80
|
+
* line with the block, and moves onto the block's last line or its header.
|
|
81
|
+
*/
|
|
82
|
+
getIndentationTokenNames() {
|
|
83
|
+
if (this.indentationTokenNames === undefined) {
|
|
84
|
+
const builder = this.services.parser.TokenBuilder;
|
|
85
|
+
this.indentationTokenNames =
|
|
86
|
+
builder instanceof IndentationAwareTokenBuilder
|
|
87
|
+
? { indent: builder.indentTokenType.name, dedent: builder.dedentTokenType.name }
|
|
88
|
+
: null;
|
|
89
|
+
}
|
|
90
|
+
return this.indentationTokenNames ?? undefined;
|
|
91
|
+
}
|
|
92
|
+
isIndentation(node) {
|
|
93
|
+
const names = this.getIndentationTokenNames();
|
|
94
|
+
const name = tokenNameOf(node);
|
|
95
|
+
return names !== undefined && (name === names.indent || name === names.dedent);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Where the syntax of `node` begins and ends without the indentation tokens
|
|
99
|
+
* at its edges.
|
|
100
|
+
*/
|
|
101
|
+
syntaxSpan(node) {
|
|
102
|
+
if (this.getIndentationTokenNames() === undefined) {
|
|
103
|
+
return node;
|
|
104
|
+
}
|
|
105
|
+
const first = this.edgeToken(node, 1);
|
|
106
|
+
const last = this.edgeToken(node, -1);
|
|
107
|
+
return first && last && { offset: first.offset, end: last.end };
|
|
108
|
+
}
|
|
109
|
+
/** The first token of `node` for a `step` of 1, the last for -1, that is neither hidden nor indentation. */
|
|
110
|
+
edgeToken(node, step) {
|
|
111
|
+
if (!isComposite(node)) {
|
|
112
|
+
return node.hidden || this.isIndentation(node) ? undefined : node;
|
|
113
|
+
}
|
|
114
|
+
const content = node.content;
|
|
115
|
+
for (let index = step > 0 ? 0 : content.length - 1; index >= 0 && index < content.length; index += step) {
|
|
116
|
+
const found = this.edgeToken(content[index], step);
|
|
117
|
+
if (found !== undefined) {
|
|
118
|
+
return found;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return undefined;
|
|
122
|
+
}
|
|
71
123
|
/**
|
|
72
124
|
* Stable identity for one AST node, used to find it again in the
|
|
73
125
|
* re-serialized text — or `undefined` when no stable identity exists.
|
|
@@ -168,8 +220,11 @@ export class CommentPreserver {
|
|
|
168
220
|
* what relocates an end-of-line note onto the following declaration.
|
|
169
221
|
*/
|
|
170
222
|
classify(comment, index, container, source) {
|
|
171
|
-
const
|
|
172
|
-
const
|
|
223
|
+
const placed = this.placeAmongSyntax(comment, index, container, source);
|
|
224
|
+
const owner = placed.container;
|
|
225
|
+
const content = placed.content;
|
|
226
|
+
const at = placed.index;
|
|
227
|
+
const ownsOwnNode = (candidate) => candidate?.astNode !== undefined && candidate.astNode !== owner.astNode;
|
|
173
228
|
const realSibling = (from, step) => {
|
|
174
229
|
for (let scan = from; scan >= 0 && scan < content.length; scan += step) {
|
|
175
230
|
if (!content[scan].hidden) {
|
|
@@ -178,22 +233,24 @@ export class CommentPreserver {
|
|
|
178
233
|
}
|
|
179
234
|
return undefined;
|
|
180
235
|
};
|
|
181
|
-
const
|
|
182
|
-
const
|
|
236
|
+
const offsetOf = (node) => this.syntaxSpan(node)?.offset ?? node.offset;
|
|
237
|
+
const endOf = (node) => this.syntaxSpan(node)?.end ?? node.end;
|
|
238
|
+
const previous = realSibling(at - 1, -1);
|
|
239
|
+
const next = realSibling(at + 1, 1);
|
|
183
240
|
// Measured to whatever comes NEXT IN SOURCE, comment or not — never to the
|
|
184
241
|
// next real node, which would skip the rest of a comment block and make
|
|
185
242
|
// every line of it re-emit the whole gap that follows the block.
|
|
186
|
-
const following = content[
|
|
187
|
-
const blankLinesAfter = following === undefined ? 0 : this.countBlankLines(source.slice(comment.end, following
|
|
188
|
-
const preceding =
|
|
189
|
-
const blankLinesBefore = preceding === undefined ? 0 : this.countBlankLines(source.slice(preceding
|
|
243
|
+
const following = content[at + 1];
|
|
244
|
+
const blankLinesAfter = following === undefined ? 0 : this.countBlankLines(source.slice(comment.end, offsetOf(following)));
|
|
245
|
+
const preceding = at > 0 ? content[at - 1] : undefined;
|
|
246
|
+
const blankLinesBefore = preceding === undefined ? 0 : this.countBlankLines(source.slice(endOf(preceding), comment.offset));
|
|
190
247
|
// Only a comment that OWNS its line can be reindented — one sharing a line
|
|
191
248
|
// with code keeps whatever spacing that line gives it.
|
|
192
249
|
const lineStart = source.lastIndexOf('\n', comment.offset - 1) + 1;
|
|
193
250
|
const beforeOnLine = source.slice(lineStart, comment.offset);
|
|
194
251
|
const sourceIndent = beforeOnLine.trim().length === 0 ? beforeOnLine : undefined;
|
|
195
252
|
const text = this.normalizeLineEndings(comment.text);
|
|
196
|
-
const sharesLineWithPrevious = previous !== undefined && !source.slice(previous
|
|
253
|
+
const sharesLineWithPrevious = previous !== undefined && !source.slice(endOf(previous), comment.offset).includes('\n');
|
|
197
254
|
if (sharesLineWithPrevious) {
|
|
198
255
|
// On the same line as whatever precedes it, so it annotates that line.
|
|
199
256
|
// When the preceding sibling is the CONTAINER's own syntax — an opening
|
|
@@ -203,7 +260,7 @@ export class CommentPreserver {
|
|
|
203
260
|
// moves a note about the declaration onto its first child.
|
|
204
261
|
return ownsOwnNode(previous)
|
|
205
262
|
? { text, anchor: previous.astNode, placement: 'trailing', blankLinesAfter: 0, blankLinesBefore: 0 }
|
|
206
|
-
: { text, anchor:
|
|
263
|
+
: { text, anchor: owner.astNode, placement: 'trailingOnContainer', blankLinesAfter: 0, blankLinesBefore: 0 };
|
|
207
264
|
}
|
|
208
265
|
if (ownsOwnNode(next)) {
|
|
209
266
|
return { text, anchor: next.astNode, placement: 'leading', blankLinesAfter, blankLinesBefore: 0, sourceIndent };
|
|
@@ -212,7 +269,7 @@ export class CommentPreserver {
|
|
|
212
269
|
return { text, anchor: previous.astNode, placement: 'afterNode', blankLinesAfter: 0, blankLinesBefore, sourceIndent };
|
|
213
270
|
}
|
|
214
271
|
if (previous === undefined) {
|
|
215
|
-
return { text, anchor:
|
|
272
|
+
return { text, anchor: owner.astNode, placement: 'atContainerStart', blankLinesAfter, blankLinesBefore: 0, sourceIndent };
|
|
216
273
|
}
|
|
217
274
|
// Surrounded by the container's own syntax on both sides. A further
|
|
218
275
|
// sibling after it means the comment sits INSIDE the construct — between
|
|
@@ -221,7 +278,67 @@ export class CommentPreserver {
|
|
|
221
278
|
// which would move it out to the enclosing scope. Only a comment with
|
|
222
279
|
// nothing after it at all actually trails the container.
|
|
223
280
|
const placement = next === undefined ? 'atContainerEnd' : 'trailingOnContainer';
|
|
224
|
-
return { text, anchor:
|
|
281
|
+
return { text, anchor: owner.astNode, placement, blankLinesAfter, blankLinesBefore, sourceIndent };
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Resolves the container {@link classify} anchors `comment` in and its
|
|
285
|
+
* siblings there without INDENT and DEDENT tokens.
|
|
286
|
+
*
|
|
287
|
+
* An indentation-aware lexer can emit a block's DEDENT after the comment
|
|
288
|
+
* lines that follow the block, so the parser nests them in it. An own-line
|
|
289
|
+
* comment left of the column a block's INDENT opened is lifted out of each
|
|
290
|
+
* block that ends right after it, with its adjacent hidden nodes, and placed
|
|
291
|
+
* after that block in the enclosing container.
|
|
292
|
+
*/
|
|
293
|
+
placeAmongSyntax(comment, index, container, source) {
|
|
294
|
+
if (this.getIndentationTokenNames() === undefined) {
|
|
295
|
+
return { container, content: container.content, index };
|
|
296
|
+
}
|
|
297
|
+
const content = container.content;
|
|
298
|
+
let start = index;
|
|
299
|
+
while (start > 0 && content[start - 1].hidden) {
|
|
300
|
+
start--;
|
|
301
|
+
}
|
|
302
|
+
let end = index;
|
|
303
|
+
while (end + 1 < content.length && content[end + 1].hidden) {
|
|
304
|
+
end++;
|
|
305
|
+
}
|
|
306
|
+
const run = content.slice(start, end + 1);
|
|
307
|
+
let previous;
|
|
308
|
+
for (let scan = start - 1; scan >= 0 && previous === undefined; scan--) {
|
|
309
|
+
previous = content[scan].hidden ? undefined : this.syntaxSpan(content[scan]);
|
|
310
|
+
}
|
|
311
|
+
let parent = container;
|
|
312
|
+
let closed;
|
|
313
|
+
if (previous === undefined || source.slice(previous.end, comment.offset).includes('\n')) {
|
|
314
|
+
const column = this.columnAt(source, comment.offset);
|
|
315
|
+
while (parent.container &&
|
|
316
|
+
this.closesAfter(parent.content, closed ?? run[run.length - 1]) &&
|
|
317
|
+
column < (this.openedColumn(parent.content, closed ?? run[0], source) ?? 0)) {
|
|
318
|
+
closed = parent;
|
|
319
|
+
parent = parent.container;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
const view = parent.content.flatMap(node => (node === closed ? [node, ...run] : this.isIndentation(node) ? [] : [node]));
|
|
323
|
+
return { container: parent, content: view, index: view.indexOf(comment) };
|
|
324
|
+
}
|
|
325
|
+
/** Whether only hidden and indentation tokens follow `node` in `content`. */
|
|
326
|
+
closesAfter(content, node) {
|
|
327
|
+
return content.slice(content.indexOf(node) + 1).every(sibling => sibling.hidden || this.isIndentation(sibling));
|
|
328
|
+
}
|
|
329
|
+
/** The column the last INDENT before `node` in `content` opens, `undefined` without one. */
|
|
330
|
+
openedColumn(content, node, source) {
|
|
331
|
+
const indent = this.getIndentationTokenNames()?.indent;
|
|
332
|
+
for (let scan = content.indexOf(node) - 1; scan >= 0; scan--) {
|
|
333
|
+
if (tokenNameOf(content[scan]) === indent) {
|
|
334
|
+
return this.columnAt(source, content[scan].end);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
return undefined;
|
|
338
|
+
}
|
|
339
|
+
/** The column of `offset` in `text`. */
|
|
340
|
+
columnAt(text, offset) {
|
|
341
|
+
return offset - (text.lastIndexOf('\n', offset - 1) + 1);
|
|
225
342
|
}
|
|
226
343
|
/**
|
|
227
344
|
* Comment text with CRLF reduced to LF.
|
|
@@ -862,19 +979,22 @@ export class CommentPreserver {
|
|
|
862
979
|
// costing nodes x depth.
|
|
863
980
|
const visit = (node) => {
|
|
864
981
|
const key = node.astNode !== undefined && !node.hidden ? this.cachedAnchorKey(node.astNode) : undefined;
|
|
865
|
-
|
|
982
|
+
// Without the indentation tokens, whose DEDENT would end a block at
|
|
983
|
+
// the start of the line after it.
|
|
984
|
+
const span = key === undefined ? undefined : this.syntaxSpan(node);
|
|
985
|
+
if (key !== undefined && span !== undefined) {
|
|
866
986
|
const owner = owners.get(key);
|
|
867
987
|
if (owner === undefined) {
|
|
868
988
|
owners.set(key, node.astNode);
|
|
869
|
-
found.set(key, { offset:
|
|
989
|
+
found.set(key, { offset: span.offset, end: span.end, owner: node.astNode });
|
|
870
990
|
}
|
|
871
991
|
else if (owner === node.astNode) {
|
|
872
992
|
// Widest span per node: its first CST node gives the start, a
|
|
873
993
|
// later token contributing to the same node extends the end.
|
|
874
994
|
const existing = found.get(key);
|
|
875
995
|
found.set(key, {
|
|
876
|
-
offset: Math.min(existing.offset,
|
|
877
|
-
end: Math.max(existing.end,
|
|
996
|
+
offset: Math.min(existing.offset, span.offset),
|
|
997
|
+
end: Math.max(existing.end, span.end),
|
|
878
998
|
owner: existing.owner
|
|
879
999
|
});
|
|
880
1000
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comment-preserver.js","sourceRoot":"","sources":["../../../src/langium/trivia/comment-preserver.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"comment-preserver.js","sourceRoot":"","sources":["../../../src/langium/trivia/comment-preserver.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hydranium/core",
|
|
3
|
-
"version": "1.0.0-next.
|
|
3
|
+
"version": "1.0.0-next.330",
|
|
4
4
|
"description": "Foundational runtime of the hydranium framework: AST coordination layer (services, integrity, AST extension, serialization, multi-client documents) plus the LSP textual head at the /lsp subpath. Consumed by protocol-head packages (@hydranium/data-server, @hydranium/glsp-server).",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ast",
|
|
@@ -87,8 +87,8 @@
|
|
|
87
87
|
"diff": "^5.2.0"
|
|
88
88
|
},
|
|
89
89
|
"devDependencies": {
|
|
90
|
-
"@hydranium/langium": "1.0.0-next.
|
|
91
|
-
"@hydranium/protocol": "1.0.0-next.
|
|
90
|
+
"@hydranium/langium": "1.0.0-next.330",
|
|
91
|
+
"@hydranium/protocol": "1.0.0-next.330",
|
|
92
92
|
"@playwright/test": "^1.55.0",
|
|
93
93
|
"@types/diff": "^5.2.0",
|
|
94
94
|
"fake-indexeddb": "^6.2.5",
|
|
@@ -101,8 +101,8 @@
|
|
|
101
101
|
"vscode-languageserver-types": "^3.17.5"
|
|
102
102
|
},
|
|
103
103
|
"peerDependencies": {
|
|
104
|
-
"@hydranium/langium": "1.0.0-next.
|
|
105
|
-
"@hydranium/protocol": "1.0.0-next.
|
|
104
|
+
"@hydranium/langium": "1.0.0-next.330",
|
|
105
|
+
"@hydranium/protocol": "1.0.0-next.330",
|
|
106
106
|
"@playwright/test": "^1.40.0",
|
|
107
107
|
"vscode-jsonrpc": "^9.0.0",
|
|
108
108
|
"vscode-languageserver": "~10.0.1",
|
|
@@ -15,6 +15,7 @@ import {
|
|
|
15
15
|
type CstNode,
|
|
16
16
|
GrammarAST,
|
|
17
17
|
GrammarUtils,
|
|
18
|
+
IndentationAwareTokenBuilder,
|
|
18
19
|
isAstNode,
|
|
19
20
|
type LangiumDocument,
|
|
20
21
|
type URI
|
|
@@ -137,6 +138,11 @@ export interface AnchorSpan {
|
|
|
137
138
|
readonly owner: AstNode;
|
|
138
139
|
}
|
|
139
140
|
|
|
141
|
+
export interface IndentationTokenNames {
|
|
142
|
+
readonly indent: string;
|
|
143
|
+
readonly dedent: string;
|
|
144
|
+
}
|
|
145
|
+
|
|
140
146
|
/**
|
|
141
147
|
* One splice, with what it takes to check the risky kind afterwards.
|
|
142
148
|
*
|
|
@@ -185,6 +191,7 @@ export class CommentPreserver implements TriviaPreserver<CommentTrivia> {
|
|
|
185
191
|
protected readonly tracer: Tracer;
|
|
186
192
|
protected readonly maxIsolatedEdits: number;
|
|
187
193
|
protected commentTokenNames?: readonly string[];
|
|
194
|
+
protected indentationTokenNames?: IndentationTokenNames | null;
|
|
188
195
|
/** Set for the duration of one {@link apply}; see {@link cachedAnchorKey}. */
|
|
189
196
|
protected keyMemo?: Map<AstNode, string | undefined>;
|
|
190
197
|
/** Set for the duration of one {@link apply}; see {@link ambiguousRetainedKey}. */
|
|
@@ -217,6 +224,61 @@ export class CommentPreserver implements TriviaPreserver<CommentTrivia> {
|
|
|
217
224
|
return this.commentTokenNames;
|
|
218
225
|
}
|
|
219
226
|
|
|
227
|
+
/**
|
|
228
|
+
* The names of the INDENT and DEDENT tokens the language's
|
|
229
|
+
* `IndentationAwareTokenBuilder` emits, `undefined` for a lexer that emits
|
|
230
|
+
* none. Override it for a lexer of your own that emits such tokens.
|
|
231
|
+
*
|
|
232
|
+
* They are syntax to the parser only. A DEDENT is zero-width at the start of
|
|
233
|
+
* the line after its block, and an INDENT covers the whitespace in front of
|
|
234
|
+
* the block's first line, so a comment line beside either reads as sharing a
|
|
235
|
+
* line with the block, and moves onto the block's last line or its header.
|
|
236
|
+
*/
|
|
237
|
+
protected getIndentationTokenNames(): IndentationTokenNames | undefined {
|
|
238
|
+
if (this.indentationTokenNames === undefined) {
|
|
239
|
+
const builder = this.services.parser.TokenBuilder;
|
|
240
|
+
this.indentationTokenNames =
|
|
241
|
+
builder instanceof IndentationAwareTokenBuilder
|
|
242
|
+
? { indent: builder.indentTokenType.name, dedent: builder.dedentTokenType.name }
|
|
243
|
+
: null;
|
|
244
|
+
}
|
|
245
|
+
return this.indentationTokenNames ?? undefined;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
protected isIndentation(node: CstNode): boolean {
|
|
249
|
+
const names = this.getIndentationTokenNames();
|
|
250
|
+
const name = tokenNameOf(node);
|
|
251
|
+
return names !== undefined && (name === names.indent || name === names.dedent);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* Where the syntax of `node` begins and ends without the indentation tokens
|
|
256
|
+
* at its edges.
|
|
257
|
+
*/
|
|
258
|
+
protected syntaxSpan(node: CstNode): { readonly offset: number; readonly end: number } | undefined {
|
|
259
|
+
if (this.getIndentationTokenNames() === undefined) {
|
|
260
|
+
return node;
|
|
261
|
+
}
|
|
262
|
+
const first = this.edgeToken(node, 1);
|
|
263
|
+
const last = this.edgeToken(node, -1);
|
|
264
|
+
return first && last && { offset: first.offset, end: last.end };
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
/** The first token of `node` for a `step` of 1, the last for -1, that is neither hidden nor indentation. */
|
|
268
|
+
protected edgeToken(node: CstNode, step: 1 | -1): CstNode | undefined {
|
|
269
|
+
if (!isComposite(node)) {
|
|
270
|
+
return node.hidden || this.isIndentation(node) ? undefined : node;
|
|
271
|
+
}
|
|
272
|
+
const content = node.content;
|
|
273
|
+
for (let index = step > 0 ? 0 : content.length - 1; index >= 0 && index < content.length; index += step) {
|
|
274
|
+
const found = this.edgeToken(content[index], step);
|
|
275
|
+
if (found !== undefined) {
|
|
276
|
+
return found;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
return undefined;
|
|
280
|
+
}
|
|
281
|
+
|
|
220
282
|
/**
|
|
221
283
|
* Stable identity for one AST node, used to find it again in the
|
|
222
284
|
* re-serialized text — or `undefined` when no stable identity exists.
|
|
@@ -321,9 +383,12 @@ export class CommentPreserver implements TriviaPreserver<CommentTrivia> {
|
|
|
321
383
|
* what relocates an end-of-line note onto the following declaration.
|
|
322
384
|
*/
|
|
323
385
|
protected classify(comment: CstNode, index: number, container: CompositeCstNode, source: string): DocumentComment {
|
|
324
|
-
const
|
|
386
|
+
const placed = this.placeAmongSyntax(comment, index, container, source);
|
|
387
|
+
const owner = placed.container;
|
|
388
|
+
const content = placed.content;
|
|
389
|
+
const at = placed.index;
|
|
325
390
|
const ownsOwnNode = (candidate: CstNode | undefined): boolean =>
|
|
326
|
-
candidate?.astNode !== undefined && candidate.astNode !==
|
|
391
|
+
candidate?.astNode !== undefined && candidate.astNode !== owner.astNode;
|
|
327
392
|
const realSibling = (from: number, step: number): CstNode | undefined => {
|
|
328
393
|
for (let scan = from; scan >= 0 && scan < content.length; scan += step) {
|
|
329
394
|
if (!content[scan].hidden) {
|
|
@@ -332,17 +397,19 @@ export class CommentPreserver implements TriviaPreserver<CommentTrivia> {
|
|
|
332
397
|
}
|
|
333
398
|
return undefined;
|
|
334
399
|
};
|
|
400
|
+
const offsetOf = (node: CstNode): number => this.syntaxSpan(node)?.offset ?? node.offset;
|
|
401
|
+
const endOf = (node: CstNode): number => this.syntaxSpan(node)?.end ?? node.end;
|
|
335
402
|
|
|
336
|
-
const previous = realSibling(
|
|
337
|
-
const next = realSibling(
|
|
403
|
+
const previous = realSibling(at - 1, -1);
|
|
404
|
+
const next = realSibling(at + 1, 1);
|
|
338
405
|
|
|
339
406
|
// Measured to whatever comes NEXT IN SOURCE, comment or not — never to the
|
|
340
407
|
// next real node, which would skip the rest of a comment block and make
|
|
341
408
|
// every line of it re-emit the whole gap that follows the block.
|
|
342
|
-
const following = content[
|
|
343
|
-
const blankLinesAfter = following === undefined ? 0 : this.countBlankLines(source.slice(comment.end, following
|
|
344
|
-
const preceding =
|
|
345
|
-
const blankLinesBefore = preceding === undefined ? 0 : this.countBlankLines(source.slice(preceding
|
|
409
|
+
const following = content[at + 1];
|
|
410
|
+
const blankLinesAfter = following === undefined ? 0 : this.countBlankLines(source.slice(comment.end, offsetOf(following)));
|
|
411
|
+
const preceding = at > 0 ? content[at - 1] : undefined;
|
|
412
|
+
const blankLinesBefore = preceding === undefined ? 0 : this.countBlankLines(source.slice(endOf(preceding), comment.offset));
|
|
346
413
|
|
|
347
414
|
// Only a comment that OWNS its line can be reindented — one sharing a line
|
|
348
415
|
// with code keeps whatever spacing that line gives it.
|
|
@@ -351,7 +418,7 @@ export class CommentPreserver implements TriviaPreserver<CommentTrivia> {
|
|
|
351
418
|
const sourceIndent = beforeOnLine.trim().length === 0 ? beforeOnLine : undefined;
|
|
352
419
|
|
|
353
420
|
const text = this.normalizeLineEndings(comment.text);
|
|
354
|
-
const sharesLineWithPrevious = previous !== undefined && !source.slice(previous
|
|
421
|
+
const sharesLineWithPrevious = previous !== undefined && !source.slice(endOf(previous), comment.offset).includes('\n');
|
|
355
422
|
|
|
356
423
|
if (sharesLineWithPrevious) {
|
|
357
424
|
// On the same line as whatever precedes it, so it annotates that line.
|
|
@@ -362,7 +429,7 @@ export class CommentPreserver implements TriviaPreserver<CommentTrivia> {
|
|
|
362
429
|
// moves a note about the declaration onto its first child.
|
|
363
430
|
return ownsOwnNode(previous)
|
|
364
431
|
? { text, anchor: previous.astNode!, placement: 'trailing', blankLinesAfter: 0, blankLinesBefore: 0 }
|
|
365
|
-
: { text, anchor:
|
|
432
|
+
: { text, anchor: owner.astNode!, placement: 'trailingOnContainer', blankLinesAfter: 0, blankLinesBefore: 0 };
|
|
366
433
|
}
|
|
367
434
|
if (ownsOwnNode(next)) {
|
|
368
435
|
return { text, anchor: next!.astNode!, placement: 'leading', blankLinesAfter, blankLinesBefore: 0, sourceIndent };
|
|
@@ -371,7 +438,7 @@ export class CommentPreserver implements TriviaPreserver<CommentTrivia> {
|
|
|
371
438
|
return { text, anchor: previous!.astNode!, placement: 'afterNode', blankLinesAfter: 0, blankLinesBefore, sourceIndent };
|
|
372
439
|
}
|
|
373
440
|
if (previous === undefined) {
|
|
374
|
-
return { text, anchor:
|
|
441
|
+
return { text, anchor: owner.astNode!, placement: 'atContainerStart', blankLinesAfter, blankLinesBefore: 0, sourceIndent };
|
|
375
442
|
}
|
|
376
443
|
// Surrounded by the container's own syntax on both sides. A further
|
|
377
444
|
// sibling after it means the comment sits INSIDE the construct — between
|
|
@@ -380,7 +447,78 @@ export class CommentPreserver implements TriviaPreserver<CommentTrivia> {
|
|
|
380
447
|
// which would move it out to the enclosing scope. Only a comment with
|
|
381
448
|
// nothing after it at all actually trails the container.
|
|
382
449
|
const placement: CommentPlacement = next === undefined ? 'atContainerEnd' : 'trailingOnContainer';
|
|
383
|
-
return { text, anchor:
|
|
450
|
+
return { text, anchor: owner.astNode!, placement, blankLinesAfter, blankLinesBefore, sourceIndent };
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
/**
|
|
454
|
+
* Resolves the container {@link classify} anchors `comment` in and its
|
|
455
|
+
* siblings there without INDENT and DEDENT tokens.
|
|
456
|
+
*
|
|
457
|
+
* An indentation-aware lexer can emit a block's DEDENT after the comment
|
|
458
|
+
* lines that follow the block, so the parser nests them in it. An own-line
|
|
459
|
+
* comment left of the column a block's INDENT opened is lifted out of each
|
|
460
|
+
* block that ends right after it, with its adjacent hidden nodes, and placed
|
|
461
|
+
* after that block in the enclosing container.
|
|
462
|
+
*/
|
|
463
|
+
protected placeAmongSyntax(
|
|
464
|
+
comment: CstNode,
|
|
465
|
+
index: number,
|
|
466
|
+
container: CompositeCstNode,
|
|
467
|
+
source: string
|
|
468
|
+
): { readonly container: CompositeCstNode; readonly content: readonly CstNode[]; readonly index: number } {
|
|
469
|
+
if (this.getIndentationTokenNames() === undefined) {
|
|
470
|
+
return { container, content: container.content, index };
|
|
471
|
+
}
|
|
472
|
+
const content = container.content;
|
|
473
|
+
let start = index;
|
|
474
|
+
while (start > 0 && content[start - 1].hidden) {
|
|
475
|
+
start--;
|
|
476
|
+
}
|
|
477
|
+
let end = index;
|
|
478
|
+
while (end + 1 < content.length && content[end + 1].hidden) {
|
|
479
|
+
end++;
|
|
480
|
+
}
|
|
481
|
+
const run = content.slice(start, end + 1);
|
|
482
|
+
let previous: { readonly end: number } | undefined;
|
|
483
|
+
for (let scan = start - 1; scan >= 0 && previous === undefined; scan--) {
|
|
484
|
+
previous = content[scan].hidden ? undefined : this.syntaxSpan(content[scan]);
|
|
485
|
+
}
|
|
486
|
+
let parent = container;
|
|
487
|
+
let closed: CstNode | undefined;
|
|
488
|
+
if (previous === undefined || source.slice(previous.end, comment.offset).includes('\n')) {
|
|
489
|
+
const column = this.columnAt(source, comment.offset);
|
|
490
|
+
while (
|
|
491
|
+
parent.container &&
|
|
492
|
+
this.closesAfter(parent.content, closed ?? run[run.length - 1]) &&
|
|
493
|
+
column < (this.openedColumn(parent.content, closed ?? run[0], source) ?? 0)
|
|
494
|
+
) {
|
|
495
|
+
closed = parent;
|
|
496
|
+
parent = parent.container;
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
const view = parent.content.flatMap(node => (node === closed ? [node, ...run] : this.isIndentation(node) ? [] : [node]));
|
|
500
|
+
return { container: parent, content: view, index: view.indexOf(comment) };
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
/** Whether only hidden and indentation tokens follow `node` in `content`. */
|
|
504
|
+
protected closesAfter(content: readonly CstNode[], node: CstNode): boolean {
|
|
505
|
+
return content.slice(content.indexOf(node) + 1).every(sibling => sibling.hidden || this.isIndentation(sibling));
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
/** The column the last INDENT before `node` in `content` opens, `undefined` without one. */
|
|
509
|
+
protected openedColumn(content: readonly CstNode[], node: CstNode, source: string): number | undefined {
|
|
510
|
+
const indent = this.getIndentationTokenNames()?.indent;
|
|
511
|
+
for (let scan = content.indexOf(node) - 1; scan >= 0; scan--) {
|
|
512
|
+
if (tokenNameOf(content[scan]) === indent) {
|
|
513
|
+
return this.columnAt(source, content[scan].end);
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
return undefined;
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
/** The column of `offset` in `text`. */
|
|
520
|
+
protected columnAt(text: string, offset: number): number {
|
|
521
|
+
return offset - (text.lastIndexOf('\n', offset - 1) + 1);
|
|
384
522
|
}
|
|
385
523
|
|
|
386
524
|
/**
|
|
@@ -1060,18 +1198,21 @@ export class CommentPreserver implements TriviaPreserver<CommentTrivia> {
|
|
|
1060
1198
|
// costing nodes x depth.
|
|
1061
1199
|
const visit = (node: CstNode): void => {
|
|
1062
1200
|
const key = node.astNode !== undefined && !node.hidden ? this.cachedAnchorKey(node.astNode) : undefined;
|
|
1063
|
-
|
|
1201
|
+
// Without the indentation tokens, whose DEDENT would end a block at
|
|
1202
|
+
// the start of the line after it.
|
|
1203
|
+
const span = key === undefined ? undefined : this.syntaxSpan(node);
|
|
1204
|
+
if (key !== undefined && span !== undefined) {
|
|
1064
1205
|
const owner = owners.get(key);
|
|
1065
1206
|
if (owner === undefined) {
|
|
1066
1207
|
owners.set(key, node.astNode!);
|
|
1067
|
-
found.set(key, { offset:
|
|
1208
|
+
found.set(key, { offset: span.offset, end: span.end, owner: node.astNode! });
|
|
1068
1209
|
} else if (owner === node.astNode) {
|
|
1069
1210
|
// Widest span per node: its first CST node gives the start, a
|
|
1070
1211
|
// later token contributing to the same node extends the end.
|
|
1071
1212
|
const existing = found.get(key)!;
|
|
1072
1213
|
found.set(key, {
|
|
1073
|
-
offset: Math.min(existing.offset,
|
|
1074
|
-
end: Math.max(existing.end,
|
|
1214
|
+
offset: Math.min(existing.offset, span.offset),
|
|
1215
|
+
end: Math.max(existing.end, span.end),
|
|
1075
1216
|
owner: existing.owner
|
|
1076
1217
|
});
|
|
1077
1218
|
} else {
|