@markup-carve/carve-lsp 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/README.md +65 -2
  2. package/dist/analyze.d.ts +26 -2
  3. package/dist/analyze.js +227 -14
  4. package/dist/analyze.js.map +1 -1
  5. package/dist/analyze.test.js +106 -1
  6. package/dist/analyze.test.js.map +1 -1
  7. package/dist/captions.d.ts +49 -0
  8. package/dist/captions.js +124 -0
  9. package/dist/captions.js.map +1 -0
  10. package/dist/completion.d.ts +1 -1
  11. package/dist/completion.js +49 -3
  12. package/dist/completion.js.map +1 -1
  13. package/dist/composite-figure-crossref.test.d.ts +1 -0
  14. package/dist/composite-figure-crossref.test.js +265 -0
  15. package/dist/composite-figure-crossref.test.js.map +1 -0
  16. package/dist/composite-figure.test.d.ts +1 -0
  17. package/dist/composite-figure.test.js +76 -0
  18. package/dist/composite-figure.test.js.map +1 -0
  19. package/dist/definition.d.ts +4 -2
  20. package/dist/definition.js +50 -7
  21. package/dist/definition.js.map +1 -1
  22. package/dist/dependencies.d.ts +15 -0
  23. package/dist/dependencies.js +59 -0
  24. package/dist/dependencies.js.map +1 -0
  25. package/dist/diagnostic-scheduler.d.ts +58 -0
  26. package/dist/diagnostic-scheduler.js +70 -0
  27. package/dist/diagnostic-scheduler.js.map +1 -0
  28. package/dist/diagnostic-scheduler.test.d.ts +1 -0
  29. package/dist/diagnostic-scheduler.test.js +75 -0
  30. package/dist/diagnostic-scheduler.test.js.map +1 -0
  31. package/dist/folding.d.ts +1 -0
  32. package/dist/folding.js +36 -1
  33. package/dist/folding.js.map +1 -1
  34. package/dist/folding.test.js +6 -1
  35. package/dist/folding.test.js.map +1 -1
  36. package/dist/hover.js +80 -26
  37. package/dist/hover.js.map +1 -1
  38. package/dist/include-cache.d.ts +26 -0
  39. package/dist/include-cache.js +74 -0
  40. package/dist/include-cache.js.map +1 -0
  41. package/dist/include-definition-denial.test.d.ts +1 -0
  42. package/dist/include-definition-denial.test.js +86 -0
  43. package/dist/include-definition-denial.test.js.map +1 -0
  44. package/dist/include-definition.d.ts +3 -0
  45. package/dist/include-definition.js +37 -0
  46. package/dist/include-definition.js.map +1 -0
  47. package/dist/include-directive.d.ts +61 -0
  48. package/dist/include-directive.js +158 -0
  49. package/dist/include-directive.js.map +1 -0
  50. package/dist/include-directive.test.d.ts +1 -0
  51. package/dist/include-directive.test.js +83 -0
  52. package/dist/include-directive.test.js.map +1 -0
  53. package/dist/include-features.test.d.ts +1 -0
  54. package/dist/include-features.test.js +133 -0
  55. package/dist/include-features.test.js.map +1 -0
  56. package/dist/include-path.d.ts +69 -0
  57. package/dist/include-path.js +164 -0
  58. package/dist/include-path.js.map +1 -0
  59. package/dist/include-path.test.d.ts +1 -0
  60. package/dist/include-path.test.js +189 -0
  61. package/dist/include-path.test.js.map +1 -0
  62. package/dist/include-security-conformance.test.d.ts +1 -0
  63. package/dist/include-security-conformance.test.js +100 -0
  64. package/dist/include-security-conformance.test.js.map +1 -0
  65. package/dist/include-settings.d.ts +52 -0
  66. package/dist/include-settings.js +136 -0
  67. package/dist/include-settings.js.map +1 -0
  68. package/dist/include-settings.test.d.ts +1 -0
  69. package/dist/include-settings.test.js +191 -0
  70. package/dist/include-settings.test.js.map +1 -0
  71. package/dist/includes.d.ts +86 -0
  72. package/dist/includes.js +179 -0
  73. package/dist/includes.js.map +1 -0
  74. package/dist/includes.test.d.ts +1 -0
  75. package/dist/includes.test.js +202 -0
  76. package/dist/includes.test.js.map +1 -0
  77. package/dist/inline-text.d.ts +24 -0
  78. package/dist/inline-text.js +34 -0
  79. package/dist/inline-text.js.map +1 -0
  80. package/dist/inline-text.test.d.ts +1 -0
  81. package/dist/inline-text.test.js +32 -0
  82. package/dist/inline-text.test.js.map +1 -0
  83. package/dist/position-encoding.test.d.ts +1 -0
  84. package/dist/position-encoding.test.js +143 -0
  85. package/dist/position-encoding.test.js.map +1 -0
  86. package/dist/position.d.ts +82 -0
  87. package/dist/position.js +137 -0
  88. package/dist/position.js.map +1 -0
  89. package/dist/position.test.d.ts +1 -0
  90. package/dist/position.test.js +61 -0
  91. package/dist/position.test.js.map +1 -0
  92. package/dist/references.d.ts +2 -0
  93. package/dist/references.js +116 -21
  94. package/dist/references.js.map +1 -1
  95. package/dist/semantic.d.ts +14 -0
  96. package/dist/semantic.js +112 -13
  97. package/dist/semantic.js.map +1 -1
  98. package/dist/semantic.test.d.ts +1 -0
  99. package/dist/semantic.test.js +99 -0
  100. package/dist/semantic.test.js.map +1 -0
  101. package/dist/server.js +166 -26
  102. package/dist/server.js.map +1 -1
  103. package/dist/versioned-cache.d.ts +8 -0
  104. package/dist/versioned-cache.js +17 -0
  105. package/dist/versioned-cache.js.map +1 -0
  106. package/dist/versioned-cache.test.d.ts +1 -0
  107. package/dist/versioned-cache.test.js +13 -0
  108. package/dist/versioned-cache.test.js.map +1 -0
  109. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"analyze.test.js","sourceRoot":"","sources":["../src/analyze.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"analyze.test.js","sourceRoot":"","sources":["../src/analyze.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import { type Document, type Position as SourcePosition } from '@markup-carve/carve';
2
+ /**
3
+ * The captioned hosts a `</#id>` can name, and the text each one resolves to.
4
+ *
5
+ * The server used to walk HEADINGS for every crossref feature, so a `</#fig>`
6
+ * naming a captioned figure - a construct that predates composite figures -
7
+ * offered no completion, jumped nowhere and hovered as if the `#` inside it
8
+ * opened a section. This is the other half of the crossref target set (PART 9R
9
+ * R4): `figure`, `table`, `figure_group`, and a group's PANELS.
10
+ *
11
+ * WHERE THE NUMBER COMES FROM. Not from here. A numbered caption carries a
12
+ * `caption_number` node whose `n` the engine already resolved, so the text is
13
+ * assembled from the caption the author wrote up to and including that node -
14
+ * "Figure 2" out of `^ Figure #: Group caption`. Re-deriving the sequence would
15
+ * be a second copy of PART 9R R5, and the two would drift the first time a
16
+ * label sequence changed.
17
+ *
18
+ * The PANEL LETTER is the one thing derived here, because no engine API exposes
19
+ * it: panel order among the panels only, a..z then aa, ab (PART 9 §4c). The
20
+ * tests pin it against the anchor text `carveToHtml` writes for the same id, so
21
+ * the derivation is measured against the engine rather than against a reading
22
+ * of the clause.
23
+ */
24
+ export interface CaptionTarget {
25
+ /** The authored id, as written. */
26
+ id: string;
27
+ /** What the host is, for a completion label and a hover heading. */
28
+ kind: 'figure' | 'table' | 'composite figure' | 'panel';
29
+ /**
30
+ * The text a `</#id>` resolves to - "Figure 2", "Figure 2a", "Table 1" - or
31
+ * null when the host drew no number. §4c: an unnumbered group's panels are
32
+ * anchors but not caption crossref targets, and the same has always been true
33
+ * of an id on an uncaptioned figure.
34
+ */
35
+ text: string | null;
36
+ /** The host's own span, for go-to-definition and find-references. */
37
+ pos: SourcePosition | undefined;
38
+ }
39
+ /** Every captioned host in the document that carries an id, in source order. */
40
+ export declare function captionTargets(doc: Document): CaptionTarget[];
41
+ /** The target an id names, or null. Ids match case-insensitively, as elsewhere. */
42
+ export declare function captionTargetById(doc: Document, id: string): CaptionTarget | null;
43
+ /**
44
+ * The letter a panel takes in crossref text: a..z, then aa, ab, ... (§4c).
45
+ *
46
+ * Bijective base-26, not base-26 with a zero digit: the panel after `z` is `aa`,
47
+ * so 26 must not carry as `ba`.
48
+ */
49
+ export declare function panelLetter(index: number): string;
@@ -0,0 +1,124 @@
1
+ import { smartPunctuationText } from './inline-text.js';
2
+ /** Every captioned host in the document that carries an id, in source order. */
3
+ export function captionTargets(doc) {
4
+ const targets = [];
5
+ collect(doc.children, targets);
6
+ return targets;
7
+ }
8
+ /** The target an id names, or null. Ids match case-insensitively, as elsewhere. */
9
+ export function captionTargetById(doc, id) {
10
+ const wanted = id.toLowerCase();
11
+ return captionTargets(doc).find((target) => target.id.toLowerCase() === wanted) ?? null;
12
+ }
13
+ /**
14
+ * The letter a panel takes in crossref text: a..z, then aa, ab, ... (§4c).
15
+ *
16
+ * Bijective base-26, not base-26 with a zero digit: the panel after `z` is `aa`,
17
+ * so 26 must not carry as `ba`.
18
+ */
19
+ export function panelLetter(index) {
20
+ let out = '';
21
+ let n = index;
22
+ do {
23
+ out = String.fromCharCode(97 + (n % 26)) + out;
24
+ n = Math.floor(n / 26) - 1;
25
+ } while (n >= 0);
26
+ return out;
27
+ }
28
+ function collect(nodes, targets) {
29
+ for (const node of nodes) {
30
+ if (node.type === 'figure_group') {
31
+ const groupText = captionRefText(node.caption);
32
+ pushTarget(targets, node, 'composite figure', groupText);
33
+ collectPanels(node, groupText, targets);
34
+ continue;
35
+ }
36
+ if (node.type === 'figure') {
37
+ pushTarget(targets, node, 'figure', captionRefText(node.caption));
38
+ }
39
+ else if (node.type === 'table') {
40
+ pushTarget(targets, node, 'table', captionRefText(node.caption));
41
+ }
42
+ // The walk continues into every container, because a captioned figure in a
43
+ // block quote or a list item is a crossref target like any other. A group's
44
+ // children are walked by collectPanels above instead, which needs the panel
45
+ // ORDER that this loop does not carry.
46
+ if ('children' in node && Array.isArray(node.children)) {
47
+ collect(node.children.filter(isBlockNode), targets);
48
+ }
49
+ if (node.type === 'figure' && isBlockNode(node.target)) {
50
+ collect([node.target], targets);
51
+ }
52
+ }
53
+ }
54
+ /**
55
+ * A group's panels are its DIRECT `figure` and `table` children, in source
56
+ * order (§4c). Everything else in the body is plain group content: it can still
57
+ * hold crossref targets of its own, but it draws no letter and does not shift
58
+ * the letters of the panels around it.
59
+ */
60
+ function collectPanels(group, groupText, targets) {
61
+ let panelIndex = 0;
62
+ for (const child of group.children) {
63
+ const isPanel = child.type === 'figure' || child.type === 'table';
64
+ if (isPanel) {
65
+ pushTarget(targets, child, 'panel', groupText === null ? null : `${groupText}${panelLetter(panelIndex)}`);
66
+ panelIndex++;
67
+ if (child.type === 'figure' && isBlockNode(child.target))
68
+ collect([child.target], targets);
69
+ if ('children' in child && Array.isArray(child.children)) {
70
+ collect(child.children.filter(isBlockNode), targets);
71
+ }
72
+ continue;
73
+ }
74
+ collect([child], targets);
75
+ }
76
+ }
77
+ function pushTarget(targets, node, kind, text) {
78
+ const id = node.attrs?.id;
79
+ if (!id)
80
+ return;
81
+ targets.push({ id, kind, text, pos: node.pos });
82
+ }
83
+ /**
84
+ * The crossref text a caption yields: everything up to and including its
85
+ * `caption_number`, trimmed. A caption with no number yields null - there is
86
+ * nothing for `</#id>` to render, and the engine leaves such a reference as
87
+ * literal text.
88
+ */
89
+ function captionRefText(caption) {
90
+ if (!caption)
91
+ return null;
92
+ let out = '';
93
+ for (const node of caption) {
94
+ if (node.type === 'caption_number') {
95
+ const n = node.n;
96
+ if (typeof n !== 'number')
97
+ return null;
98
+ return `${out}${n}`.trim();
99
+ }
100
+ out += plainText([node]);
101
+ }
102
+ return null;
103
+ }
104
+ function plainText(nodes) {
105
+ let out = '';
106
+ for (const node of nodes) {
107
+ if (node.type === 'text')
108
+ out += node.value;
109
+ else if ('children' in node && Array.isArray(node.children)) {
110
+ out += plainText(node.children);
111
+ }
112
+ else if (node.type === 'code')
113
+ out += node.value;
114
+ else if (node.type === 'literal_inline')
115
+ out += node.content;
116
+ else
117
+ out += smartPunctuationText(node);
118
+ }
119
+ return out;
120
+ }
121
+ function isBlockNode(node) {
122
+ return Boolean(node && typeof node === 'object' && 'type' in node);
123
+ }
124
+ //# sourceMappingURL=captions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"captions.js","sourceRoot":"","sources":["../src/captions.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { type CompletionItem, type Position } from 'vscode-languageserver/node.js';
2
2
  /**
3
3
  * Context-aware completions driven by the text immediately before the cursor:
4
- * - `::: ` opens an admonition -> canonical kinds
4
+ * - `::: ` opens a container -> canonical admonition kinds, and `figure`
5
5
  * - `</#` cross-reference -> heading ids in the document
6
6
  * - `[^` footnote reference -> defined footnote labels
7
7
  * - `][` reference link -> defined link reference labels
@@ -1,10 +1,19 @@
1
1
  import { CompletionItemKind, } from 'vscode-languageserver/node.js';
2
2
  import { parse, resolve } from '@markup-carve/carve';
3
+ import { captionTargets } from './captions.js';
3
4
  /** The eight canonical admonition kinds (grammar PART 9 §12, Tier 1). */
4
5
  const ADMONITIONS = ['note', 'tip', 'warning', 'danger', 'info', 'success', 'example', 'quote'];
6
+ /**
7
+ * `figure` is not one of them. It is RESERVED among the `:::` types (PART 9
8
+ * §4c): a BARE `::: figure` opener is one figure of ordered panels, and the same
9
+ * word with a title or a `[label]` is an ordinary container. Offering it beside
10
+ * the eight would say it is a ninth admonition, so it is offered separately and
11
+ * labelled for what it opens.
12
+ */
13
+ const FIGURE_GROUP = 'figure';
5
14
  /**
6
15
  * Context-aware completions driven by the text immediately before the cursor:
7
- * - `::: ` opens an admonition -> canonical kinds
16
+ * - `::: ` opens a container -> canonical admonition kinds, and `figure`
8
17
  * - `</#` cross-reference -> heading ids in the document
9
18
  * - `[^` footnote reference -> defined footnote labels
10
19
  * - `][` reference link -> defined link reference labels
@@ -14,10 +23,19 @@ export function completionAt(source, position) {
14
23
  const prefix = line.slice(0, position.character);
15
24
  let match;
16
25
  if ((match = /:::\s*([\w-]*)$/.exec(prefix))) {
17
- return ADMONITIONS.map((kind) => completion(kind, CompletionItemKind.Keyword, match[1], position, 'Admonition kind'));
26
+ return [
27
+ ...ADMONITIONS.map((kind) => completion(kind, CompletionItemKind.Keyword, match[1], position, 'Admonition kind')),
28
+ completion(FIGURE_GROUP, CompletionItemKind.Struct, match[1], position, 'Composite figure'),
29
+ ];
18
30
  }
19
31
  if ((match = /<\/#([\w-]*)$/.exec(prefix))) {
20
- return headingIds(source).map((id) => completion(id, CompletionItemKind.Reference, match[1], position, 'Heading id'));
32
+ // A crossref reaches a captioned host as well as a heading (PART 9R R4).
33
+ // Offering only heading ids said the others were not targets, which is the
34
+ // reading that made a `</#fig>` naming a figure look like a typo.
35
+ return [
36
+ ...headingIds(source).map((id) => completion(id, CompletionItemKind.Reference, match[1], position, 'Heading id')),
37
+ ...resolvableCaptionIds(source).map(({ id, detail }) => completion(id, CompletionItemKind.Reference, match[1], position, detail)),
38
+ ];
21
39
  }
22
40
  if ((match = /\[\^([\w-]*)$/.exec(prefix))) {
23
41
  return footnoteLabels(source).map((label) => completion(label, CompletionItemKind.Reference, match[1], position, 'Footnote'));
@@ -57,6 +75,34 @@ function headingIds(source) {
57
75
  }
58
76
  return [...new Set(ids)];
59
77
  }
78
+ /**
79
+ * The caption ids a `</#…>` can actually RESOLVE, each with what it resolves to
80
+ * - "Figure 2" beside "Figure 2a", so the list distinguishes a group from its
81
+ * panels without the author having to remember which is which.
82
+ *
83
+ * A host that drew NO number is left out. Its id is a real anchor, and a
84
+ * `[text](#id)` fragment link reaches it, but a CROSSREF to it renders as
85
+ * literal text (PART 9 §4c: an unnumbered group's panels are anchors, not
86
+ * caption crossref targets). Every heading id this list offers resolves, and a
87
+ * caption id that did not would be the one entry that quietly does not work.
88
+ */
89
+ function resolvableCaptionIds(source) {
90
+ let targets;
91
+ try {
92
+ targets = captionTargets(resolve(parse(source, { positions: true })));
93
+ }
94
+ catch {
95
+ // Parsing may fail mid-edit; offer no ids rather than throwing.
96
+ return [];
97
+ }
98
+ const resolvable = [];
99
+ for (const target of targets) {
100
+ if (target.text === null)
101
+ continue;
102
+ resolvable.push({ id: target.id, detail: `${target.text} (${target.kind})` });
103
+ }
104
+ return resolvable;
105
+ }
60
106
  function footnoteLabels(source) {
61
107
  try {
62
108
  const doc = resolve(parse(source));
@@ -1 +1 @@
1
- {"version":3,"file":"completion.js","sourceRoot":"","sources":["../src/completion.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"completion.js","sourceRoot":"","sources":["../src/completion.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,265 @@
1
+ import assert from 'node:assert/strict';
2
+ import test from 'node:test';
3
+ import { carveToHtml, lintCarve, parse, resolve } from '@markup-carve/carve';
4
+ import { analyzeCarve } from './analyze.js';
5
+ import { captionTargets, panelLetter } from './captions.js';
6
+ import { completionAt } from './completion.js';
7
+ import { definitionAt } from './definition.js';
8
+ import { hoverAt } from './hover.js';
9
+ import { referencesAt } from './references.js';
10
+ /*
11
+ * A composite figure across the features that resolve an id (PART 9 §4c,
12
+ * markup-carve/carve#1122), plus the diagnostics the clause names.
13
+ *
14
+ * The crossref half of this was NOT a figure_group gap. The server resolved no
15
+ * caption id at all - not a group's, not a panel's, and not the plain captioned
16
+ * figure's that predates the feature - because every crossref feature walked
17
+ * headings only. The `{#fig}` figure below is here for exactly that reason: it
18
+ * is the case that has been broken the longest and is the control for the group
19
+ * cases, so a fix that only taught the walk about `figure_group` fails it.
20
+ *
21
+ * WHERE THE EXPECTED TEXT COMES FROM. The engine, not this file's reading of
22
+ * §4c. `carveToHtml` writes the resolved text into the anchor for each id, and
23
+ * the assertions below compare the server's answer against THAT rather than
24
+ * against a literal - so a letter scheme or a numbering rule that changes
25
+ * upstream fails here instead of diverging quietly in an editor.
26
+ */
27
+ const DOC = `# Section
28
+
29
+ {#fig}
30
+ ![plain](p.png)
31
+ ^ Figure #: Plain
32
+
33
+ {#g}
34
+ ::: figure
35
+ {#one}
36
+ ![one](a.png)
37
+ ^ (a) One
38
+
39
+ A stray paragraph between the panels.
40
+
41
+ {#two}
42
+ ![two](b.png)
43
+ ^ (b) Two
44
+ :::
45
+ ^ Figure #: Group caption
46
+
47
+ See </#fig>, </#g>, </#one> and </#two>.
48
+ `;
49
+ /**
50
+ * The line the references sit on, and the column of each one. Derived from the
51
+ * document rather than written down, so editing DOC cannot silently move an
52
+ * assertion onto a blank line where every feature correctly answers nothing.
53
+ */
54
+ const REF_LINE = DOC.split('\n').findIndex((line) => line.startsWith('See '));
55
+ const refColumn = (id) => DOC.split('\n')[REF_LINE].indexOf(`</#${id}>`) + 3;
56
+ /** The text the ENGINE renders for `</#id>`, read off the anchor it writes. */
57
+ const engineRefText = (source, id) => {
58
+ const match = new RegExp(`<a href="#${id}">([^<]*)</a>`).exec(carveToHtml(source));
59
+ return match ? match[1] : null;
60
+ };
61
+ const targetFor = (source, id) => captionTargets(resolve(parse(source, { positions: true }))).find((t) => t.id === id);
62
+ test('every caption id resolves to the text the engine renders for it', () => {
63
+ for (const id of ['fig', 'g', 'one', 'two']) {
64
+ assert.equal(targetFor(DOC, id)?.text, engineRefText(DOC, id), `crossref text for #${id} disagrees with the rendered anchor`);
65
+ }
66
+ // Not merely "equal to each other": the group's own reference carries no
67
+ // letter and its panels do, which is the rule under test.
68
+ assert.equal(engineRefText(DOC, 'g'), 'Figure 2');
69
+ assert.equal(engineRefText(DOC, 'one'), 'Figure 2a');
70
+ assert.equal(engineRefText(DOC, 'two'), 'Figure 2b');
71
+ });
72
+ test('a stray block between panels does not take a letter', () => {
73
+ // The paragraph sits between the two panels. If the walk counted children
74
+ // rather than PANELS, the second panel would be "Figure 2c".
75
+ assert.equal(targetFor(DOC, 'two')?.text, 'Figure 2b');
76
+ });
77
+ test('panel letters run a..z then aa', () => {
78
+ assert.deepEqual([0, 1, 25, 26, 27, 51, 52].map(panelLetter), [
79
+ 'a',
80
+ 'b',
81
+ 'z',
82
+ 'aa',
83
+ 'ab',
84
+ 'az',
85
+ 'ba',
86
+ ]);
87
+ });
88
+ test('an unnumbered group registers anchors but no crossref text', () => {
89
+ const source = `{#ug}\n::: figure\n{#u1}\n![u](u.png)\n^ (a) U\n:::\n^ No number here\n\nSee </#ug> and </#u1>.\n`;
90
+ assert.equal(targetFor(source, 'ug')?.text, null);
91
+ assert.equal(targetFor(source, 'u1')?.text, null);
92
+ // The engine agrees: it leaves both references as literal text rather than
93
+ // linking them, which is what "not a caption crossref target" means (§4c).
94
+ assert.equal(engineRefText(source, 'ug'), null);
95
+ assert.equal(engineRefText(source, 'u1'), null);
96
+ });
97
+ test('go-to-definition on a crossref reaches the host, panel or not', () => {
98
+ // `</#fig>` is the control: a captioned figure, no group involved, and it
99
+ // jumped nowhere before this.
100
+ const hostLine = (id) => definitionAt('file:///d.crv', DOC, { line: REF_LINE, character: refColumn(id) })?.range.start.line;
101
+ assert.equal(hostLine('fig'), 3);
102
+ assert.equal(hostLine('g'), 7);
103
+ assert.equal(hostLine('one'), 9);
104
+ });
105
+ test('a crossref hover names what the id resolves to', () => {
106
+ const text = (id) => {
107
+ const hover = hoverAt(DOC, { line: REF_LINE, character: refColumn(id) });
108
+ return typeof hover?.contents === 'object' && 'value' in hover.contents ? hover.contents.value : '';
109
+ };
110
+ assert.match(text('one'), /Figure 2a/);
111
+ assert.match(text('one'), /panel/);
112
+ assert.match(text('g'), /Figure 2/);
113
+ // CONTROL. Before this, no `heading_ref` case existed and the lexical rules
114
+ // took the `#` inside the reference, so every crossref hovered as a heading.
115
+ assert.doesNotMatch(text('one'), /create section headings/);
116
+ });
117
+ test('find-references pairs a panel id with its usages', () => {
118
+ const locations = referencesAt('file:///d.crv', DOC, { line: REF_LINE, character: refColumn('one') }, { includeDeclaration: true });
119
+ assert.deepEqual(locations?.map((location) => location.range.start.line), [9, REF_LINE]);
120
+ });
121
+ test('crossref completion offers caption ids beside heading ids', () => {
122
+ const source = DOC.replace('See </#fig>, </#g>, </#one> and </#two>.', 'See </#');
123
+ const items = completionAt(source, { line: REF_LINE, character: 7 });
124
+ const detail = (label) => items.find((i) => i.label === label)?.detail;
125
+ assert.equal(detail('Section'), 'Heading id');
126
+ assert.equal(detail('fig'), 'Figure 1 (figure)');
127
+ assert.equal(detail('g'), 'Figure 2 (composite figure)');
128
+ assert.equal(detail('one'), 'Figure 2a (panel)');
129
+ assert.equal(detail('two'), 'Figure 2b (panel)');
130
+ });
131
+ test('an unnumbered host is not offered as a crossref target', () => {
132
+ // Every id `</#` offers has to RESOLVE. An unnumbered host is a real anchor
133
+ // and a fragment link reaches it, but a crossref to it renders as literal
134
+ // text, so offering it here would be the one entry in the list that does not
135
+ // work - the heading ids beside it all do.
136
+ const source = `{#ug}\n::: figure\n{#u1}\n![u](u.png)\n^ (a) U\n:::\n^ No number here\n\nSee </#`;
137
+ const labels = completionAt(source, { line: 8, character: 7 }).map((item) => item.label);
138
+ assert.deepEqual(labels, []);
139
+ });
140
+ test('find-references works from the declaration as well as from a usage', () => {
141
+ // A heading declares its id on its own line; a captioned host declares it on
142
+ // the block-attribute line ABOVE itself. Both are where an author puts the
143
+ // cursor to ask "what points at this?".
144
+ const fromAttributeLine = referencesAt('file:///d.crv', DOC, { line: 6, character: 2 }, {
145
+ includeDeclaration: false,
146
+ });
147
+ const fromHostLine = referencesAt('file:///d.crv', DOC, { line: 7, character: 2 }, {
148
+ includeDeclaration: false,
149
+ });
150
+ assert.deepEqual(fromAttributeLine?.map((location) => location.range.start.line), [REF_LINE]);
151
+ assert.deepEqual(fromHostLine?.map((location) => location.range.start.line), [REF_LINE]);
152
+ });
153
+ test('a declaration inside a container still declares', () => {
154
+ // The id's line is not always a bare `{#id}` at column 0. A shape test on it
155
+ // reads like a safety check and is not one - a host only has an id because a
156
+ // block-attribute line gave it one - so it can only reject a right answer.
157
+ const quoted = '> {#fig}\n> ![a](a.png)\n> ^ Figure #: A\n\nSee </#fig>.\n';
158
+ assert.deepEqual(referencesAt('file:///d.crv', quoted, { line: 0, character: 3 }, { includeDeclaration: false })
159
+ ?.map((location) => location.range.start.line), [4]);
160
+ });
161
+ test('a line that declares no id declares nothing', () => {
162
+ // CONTROL. The lookup keys on hosts that CARRY an id, not on hosts. An
163
+ // uncaptioned-id figure has no entry, so the prose above it is just prose.
164
+ assert.equal(referencesAt('file:///d.crv', 'Prose.\n![a](a.png)\n^ Figure #: A\n', { line: 0, character: 2 }, {
165
+ includeDeclaration: false,
166
+ }), null);
167
+ // And a line nowhere near a host answers nothing either.
168
+ assert.equal(referencesAt('file:///d.crv', DOC, { line: 12, character: 2 }, { includeDeclaration: false }), null);
169
+ });
170
+ test('a construct on the declaration line still wins', () => {
171
+ // CONTROL for the declaration lookup, which is matched by LINE and so
172
+ // answers for every column on it. A host line can carry a reference image,
173
+ // and asking on its label must reach the link-reference definition rather
174
+ // than the figure that happens to wrap it.
175
+ const source = '{#fig}\n![alt][img]\n^ Figure #: C\n\n[img]: pic.png\n\nAgain [x][img].\n';
176
+ const onLabel = referencesAt('file:///d.crv', source, { line: 1, character: 8 }, {
177
+ includeDeclaration: true,
178
+ });
179
+ assert.deepEqual(onLabel?.map((location) => location.range.start.line), [1, 4, 6]);
180
+ // The same line still declares the figure where nothing else claims the
181
+ // cursor - here, on the `!` that opens the image.
182
+ const onHost = referencesAt('file:///d.crv', source, { line: 0, character: 2 }, {
183
+ includeDeclaration: false,
184
+ });
185
+ assert.deepEqual(onHost?.map((location) => location.range.start.line), []);
186
+ });
187
+ test('a collapsed reference is not a usage of a caption id', () => {
188
+ // `[foo][]` falls back to the implicit HEADING target and to nothing else
189
+ // (PART 9R R1): beside a figure `{#foo}` it renders as literal text, so
190
+ // reporting it as a usage would be a reference the author cannot follow.
191
+ const source = '{#foo}\n![a](a.png)\n^ Figure #: Foo\n\nSee [foo][] and </#foo>.\n';
192
+ const locations = referencesAt('file:///d.crv', source, { line: 4, character: 22 }, {
193
+ includeDeclaration: false,
194
+ });
195
+ assert.deepEqual(locations?.map((location) => location.range.start.character), [16]);
196
+ });
197
+ test('a collapsed reference IS a usage of a heading id', () => {
198
+ // CONTROL. The scan is not removed, it is scoped: the same spelling still
199
+ // reaches a heading, which is the target it actually resolves to.
200
+ const source = '# Foo\n\nSee [foo][] and </#Foo>.\n';
201
+ const locations = referencesAt('file:///d.crv', source, { line: 2, character: 20 }, {
202
+ includeDeclaration: false,
203
+ });
204
+ assert.deepEqual(locations?.map((location) => location.range.start.character), [16, 4]);
205
+ });
206
+ test('the outline carries the group and nests its panels', () => {
207
+ const symbols = analyzeCarve(DOC).symbols;
208
+ assert.equal(symbols.length, 1, 'the heading is still the only root');
209
+ const group = symbols[0].children?.find((child) => child.name.startsWith('Figure 2'));
210
+ assert.ok(group, `no group symbol under the heading: ${JSON.stringify(symbols[0].children)}`);
211
+ assert.equal(group.name, 'Figure 2: Group caption');
212
+ assert.equal(group.detail, '2 panels');
213
+ assert.deepEqual(group.children?.map((panel) => panel.name), ['(a) One', '(b) Two']);
214
+ });
215
+ test('a heading inside a panel stays in the outline', () => {
216
+ // CONTROL for the group's own entry. A panel yields no outline entry of its
217
+ // own, but the walk still descends through it: a panel can wrap a quote
218
+ // holding headings, and those belong to the section the group sits in - which
219
+ // is where they were before the group had an entry at all.
220
+ const symbols = analyzeCarve('# Section\n\n::: figure\n> ## Inside a panel\n>\n> Quoted.\n^ (a) A\n:::\n^ Figure #: g\n').symbols;
221
+ assert.deepEqual(symbols[0].children?.map((child) => child.name), ['Figure 1: g', 'Inside a panel']);
222
+ });
223
+ test('a group with no caption is still an outline entry, named for what it is', () => {
224
+ const symbols = analyzeCarve('::: figure\n![a](a.png)\n^ (a) A\n:::\n').symbols;
225
+ assert.deepEqual(symbols.map((symbol) => symbol.name), ['Composite figure']);
226
+ assert.equal(symbols[0].detail, '1 panel');
227
+ });
228
+ test('an uncaptioned panel falls back to the letter a crossref would use', () => {
229
+ const symbols = analyzeCarve('::: figure\n| a |\n\n| b |\n:::\n^ Figure #: g\n').symbols;
230
+ assert.deepEqual(symbols[0].children?.map((panel) => panel.name), ['Panel a', 'Panel b']);
231
+ });
232
+ test('a heading is still a heading, wherever it sits relative to a group', () => {
233
+ // CONTROL for the outline change. A group takes no heading level, so it must
234
+ // not pop the stack: the section after it stays a sibling of the one before.
235
+ const symbols = analyzeCarve('# One\n\n::: figure\n![a](a.png)\n^ (a) A\n:::\n\n## Under one\n\n# Two\n').symbols;
236
+ assert.deepEqual(symbols.map((symbol) => symbol.name), ['One', 'Two']);
237
+ assert.deepEqual(symbols[0].children?.map((child) => child.name), ['Composite figure', 'Under one']);
238
+ });
239
+ /*
240
+ * The five §4c findings. The server derives none of them - it publishes what
241
+ * `lintCarve` reports - so what is pinned here is that the passthrough works
242
+ * and that the engine still emits each id under the pinned build. Nothing
243
+ * asserted it before, so a passthrough that stopped would have been silent.
244
+ */
245
+ const LINT_CASES = [
246
+ ['figure-group-nested', '::: figure\n::: figure\nBody.\n:::\n:::\n^ Figure #: outer\n'],
247
+ ['figure-group-opener-metadata', '::: figure "T"\n![a](a.png)\n^ (a) A\n:::\n'],
248
+ ['figure-group-panel-number', '::: figure\n![a](a.png)\n^ Figure #: panel\n:::\n^ Figure #: group\n'],
249
+ ['figure-group-empty', '::: figure\nJust text.\n:::\n^ Figure #: g\n'],
250
+ ['figure-group-single-panel', '::: figure\n![a](a.png)\n^ (a) A\n:::\n^ Figure #: g\n'],
251
+ ];
252
+ for (const [code, source] of LINT_CASES) {
253
+ test(`${code} reaches the server's diagnostics`, () => {
254
+ assert.ok(lintCarve(source).some((warning) => warning.rule === code), `the pinned engine no longer emits ${code}`);
255
+ assert.ok(analyzeCarve(source).diagnostics.some((diagnostic) => diagnostic.code === code), `${code} did not reach the server: ${JSON.stringify(analyzeCarve(source).diagnostics.map((d) => d.code))}`);
256
+ });
257
+ }
258
+ test('a well-formed group reports none of them', () => {
259
+ // CONTROL. Every case above differs from this document in one line, so a
260
+ // passthrough that published a fixed list would look identical up there.
261
+ const clean = '::: figure\n![a](a.png)\n^ (a) A\n\n![b](b.png)\n^ (b) B\n:::\n^ Figure #: g\n';
262
+ const codes = analyzeCarve(clean).diagnostics.map((diagnostic) => diagnostic.code);
263
+ assert.deepEqual(codes.filter((code) => String(code).startsWith('figure-group-')), []);
264
+ });
265
+ //# sourceMappingURL=composite-figure-crossref.test.js.map