@markup-carve/carve-lsp 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +120 -0
  3. package/dist/analyze.d.ts +6 -0
  4. package/dist/analyze.js +156 -0
  5. package/dist/analyze.js.map +1 -0
  6. package/dist/analyze.test.d.ts +1 -0
  7. package/dist/analyze.test.js +207 -0
  8. package/dist/analyze.test.js.map +1 -0
  9. package/dist/codelens.d.ts +7 -0
  10. package/dist/codelens.js +36 -0
  11. package/dist/codelens.js.map +1 -0
  12. package/dist/codelens.test.d.ts +1 -0
  13. package/dist/codelens.test.js +18 -0
  14. package/dist/codelens.test.js.map +1 -0
  15. package/dist/completion.d.ts +9 -0
  16. package/dist/completion.js +91 -0
  17. package/dist/completion.js.map +1 -0
  18. package/dist/completion.test.d.ts +1 -0
  19. package/dist/completion.test.js +35 -0
  20. package/dist/completion.test.js.map +1 -0
  21. package/dist/definition.d.ts +12 -0
  22. package/dist/definition.js +280 -0
  23. package/dist/definition.js.map +1 -0
  24. package/dist/definition.test.d.ts +1 -0
  25. package/dist/definition.test.js +136 -0
  26. package/dist/definition.test.js.map +1 -0
  27. package/dist/folding.d.ts +8 -0
  28. package/dist/folding.js +64 -0
  29. package/dist/folding.js.map +1 -0
  30. package/dist/folding.test.d.ts +1 -0
  31. package/dist/folding.test.js +20 -0
  32. package/dist/folding.test.js.map +1 -0
  33. package/dist/format.d.ts +1 -0
  34. package/dist/format.js +83 -0
  35. package/dist/format.js.map +1 -0
  36. package/dist/format.test.d.ts +1 -0
  37. package/dist/format.test.js +46 -0
  38. package/dist/format.test.js.map +1 -0
  39. package/dist/hover.d.ts +2 -0
  40. package/dist/hover.js +222 -0
  41. package/dist/hover.js.map +1 -0
  42. package/dist/migration-actions.d.ts +15 -0
  43. package/dist/migration-actions.js +79 -0
  44. package/dist/migration-actions.js.map +1 -0
  45. package/dist/references.d.ts +15 -0
  46. package/dist/references.js +430 -0
  47. package/dist/references.js.map +1 -0
  48. package/dist/references.test.d.ts +1 -0
  49. package/dist/references.test.js +159 -0
  50. package/dist/references.test.js.map +1 -0
  51. package/dist/rename.d.ts +8 -0
  52. package/dist/rename.js +66 -0
  53. package/dist/rename.js.map +1 -0
  54. package/dist/rename.test.d.ts +1 -0
  55. package/dist/rename.test.js +39 -0
  56. package/dist/rename.test.js.map +1 -0
  57. package/dist/semantic.d.ts +15 -0
  58. package/dist/semantic.js +458 -0
  59. package/dist/semantic.js.map +1 -0
  60. package/dist/server.d.ts +2 -0
  61. package/dist/server.js +111 -0
  62. package/dist/server.js.map +1 -0
  63. package/package.json +49 -0
@@ -0,0 +1,430 @@
1
+ import { parse, resolve } from '@markup-carve/carve';
2
+ /**
3
+ * Find-references for Carve constructs (same-document scope).
4
+ *
5
+ * Given the cursor position on either a definition or a usage, return ALL
6
+ * usages (and optionally the definition itself when `context.includeDeclaration`).
7
+ *
8
+ * Supported families, mirroring definition.ts:
9
+ * - Heading id (on `#` heading line or on a `</#id>` / `[text](#id)` usage)
10
+ * - Footnote `[^name]` references and `[^name]:` definition
11
+ * - Link-ref `[text][ref]` / `[ref][]` usages and `[ref]:` definition
12
+ * - Citation `[@key]` usages and `[@key]:` definition
13
+ * - Wikilink `[[Page]]` usages (same-document headings only)
14
+ */
15
+ export function referencesAt(uri, source, position, context) {
16
+ const lines = source.replace(/\r\n?/g, '\n').split('\n');
17
+ const line = lines[position.line] ?? '';
18
+ // Detect what construct the cursor sits on, then gather all locations.
19
+ // 1. Heading id - cursor on the heading line itself or on a crossref usage
20
+ const headingResult = resolveHeadingGroup(uri, source, lines, line, position, context);
21
+ if (headingResult)
22
+ return headingResult;
23
+ // 2. Footnote
24
+ const footnoteResult = resolveFootnoteGroup(uri, lines, line, position, context);
25
+ if (footnoteResult)
26
+ return footnoteResult;
27
+ // 3. Citation
28
+ const citationResult = resolveCitationGroup(uri, lines, line, position, context);
29
+ if (citationResult)
30
+ return citationResult;
31
+ // 4. Link reference
32
+ const linkrefResult = resolveLinkrefGroup(uri, lines, line, position, context);
33
+ if (linkrefResult)
34
+ return linkrefResult;
35
+ // 5. Wikilink
36
+ const wikilinkResult = resolveWikilinkGroup(uri, source, lines, line, position, context);
37
+ if (wikilinkResult)
38
+ return wikilinkResult;
39
+ return null;
40
+ }
41
+ // ---------------------------------------------------------------------------
42
+ // Heading group: cursor on heading line, </#id>, or [text](#id)
43
+ // ---------------------------------------------------------------------------
44
+ function resolveHeadingGroup(uri, source, lines, line, position, context) {
45
+ // Determine if cursor is on a heading line
46
+ const headingMatch = /^(#{1,6})\s+/.exec(line);
47
+ if (headingMatch) {
48
+ const id = getHeadingId(source, position.line);
49
+ if (id)
50
+ return collectHeadingRefs(uri, source, lines, id, position.line, context);
51
+ }
52
+ // Cursor on </#id>
53
+ const crossrefRe = /<\/#([A-Za-z0-9_.:-]+)>/g;
54
+ for (const m of line.matchAll(crossrefRe)) {
55
+ const start = m.index;
56
+ const end = start + m[0].length;
57
+ if (position.character < start || position.character >= end)
58
+ continue;
59
+ const id = m[1];
60
+ const defLine = findHeadingLineById(source, id);
61
+ if (defLine === null)
62
+ return [];
63
+ return collectHeadingRefs(uri, source, lines, id, defLine, context);
64
+ }
65
+ // Cursor on [text](#id)
66
+ const fragLinkRe = /\[[^\]]*\]\(#([A-Za-z0-9_.:-]+)[^)]*\)/g;
67
+ for (const m of line.matchAll(fragLinkRe)) {
68
+ const start = m.index;
69
+ const end = start + m[0].length;
70
+ if (position.character < start || position.character >= end)
71
+ continue;
72
+ const id = m[1];
73
+ const defLine = findHeadingLineById(source, id);
74
+ if (defLine === null)
75
+ return [];
76
+ return collectHeadingRefs(uri, source, lines, id, defLine, context);
77
+ }
78
+ return null;
79
+ }
80
+ function getHeadingId(source, lineIndex) {
81
+ let doc;
82
+ try {
83
+ doc = resolve(parse(source));
84
+ }
85
+ catch {
86
+ return null;
87
+ }
88
+ const heading = findHeadingAtLine(doc.children, lineIndex + 1); // pos is 1-based
89
+ return heading?.attrs?.id ?? null;
90
+ }
91
+ function findHeadingAtLine(nodes, line) {
92
+ for (const node of nodes) {
93
+ if (node.type === 'heading' && node.pos?.startLine === line)
94
+ return node;
95
+ if ('children' in node && Array.isArray(node.children)) {
96
+ const found = findHeadingAtLine(node.children.filter(isBlockNode), line);
97
+ if (found)
98
+ return found;
99
+ }
100
+ }
101
+ return null;
102
+ }
103
+ function findHeadingLineById(source, targetId) {
104
+ let doc;
105
+ try {
106
+ doc = resolve(parse(source));
107
+ }
108
+ catch {
109
+ return null;
110
+ }
111
+ const heading = findHeadingWithId(doc.children, targetId.toLowerCase());
112
+ if (!heading || !heading.pos)
113
+ return null;
114
+ return heading.pos.startLine - 1;
115
+ }
116
+ function findHeadingWithId(nodes, targetId) {
117
+ for (const node of nodes) {
118
+ if (node.type === 'heading') {
119
+ const id = node.attrs?.id;
120
+ if (id && id.toLowerCase() === targetId)
121
+ return node;
122
+ }
123
+ if ('children' in node && Array.isArray(node.children)) {
124
+ const found = findHeadingWithId(node.children.filter(isBlockNode), targetId);
125
+ if (found)
126
+ return found;
127
+ }
128
+ }
129
+ return null;
130
+ }
131
+ function collectHeadingRefs(uri, source, lines, id, defLine, context) {
132
+ const locs = [];
133
+ // Optionally include the definition (the heading line itself)
134
+ if (context.includeDeclaration) {
135
+ locs.push(lineLocation(uri, defLine, 0, lines[defLine]?.length ?? 0));
136
+ }
137
+ const idLower = id.toLowerCase();
138
+ // Collect </#id> usages
139
+ const crossrefRe = /<\/#([A-Za-z0-9_.:-]+)>/g;
140
+ for (let i = 0; i < lines.length; i++) {
141
+ for (const m of lines[i].matchAll(crossrefRe)) {
142
+ if (m[1].toLowerCase() === idLower) {
143
+ locs.push(lineLocation(uri, i, m.index, m.index + m[0].length));
144
+ }
145
+ }
146
+ }
147
+ // Collect [text](#id) fragment links
148
+ const fragLinkRe = /\[[^\]]*\]\(#([A-Za-z0-9_.:-]+)[^)]*\)/g;
149
+ for (let i = 0; i < lines.length; i++) {
150
+ for (const m of lines[i].matchAll(fragLinkRe)) {
151
+ if (m[1].toLowerCase() === idLower) {
152
+ locs.push(lineLocation(uri, i, m.index, m.index + m[0].length));
153
+ }
154
+ }
155
+ }
156
+ // Collect implicit heading references [Heading text][] via resolve()
157
+ // These are resolved to `href` in the AST, so we check the link pool from
158
+ // semantic analysis. For simplicity we scan for [text][] where text lowercased
159
+ // matches the heading id (djot implicit ref: whitespace-collapsed, lowercase).
160
+ const implicitRefRe = /\[([^\]\n]+)\]\[\]/g;
161
+ for (let i = 0; i < lines.length; i++) {
162
+ for (const m of lines[i].matchAll(implicitRefRe)) {
163
+ const slug = m[1].trim().toLowerCase().replace(/\s+/g, '-');
164
+ if (slug === idLower) {
165
+ locs.push(lineLocation(uri, i, m.index, m.index + m[0].length));
166
+ }
167
+ }
168
+ }
169
+ return dedup(locs);
170
+ }
171
+ // ---------------------------------------------------------------------------
172
+ // Footnote group
173
+ // ---------------------------------------------------------------------------
174
+ function resolveFootnoteGroup(uri, lines, line, position, context) {
175
+ // Cursor on a footnote ref or def
176
+ const fnAnyRe = /\[\^([^\]\s]+)\]/g;
177
+ for (const m of line.matchAll(fnAnyRe)) {
178
+ const start = m.index;
179
+ const end = start + m[0].length;
180
+ if (position.character < start || position.character >= end)
181
+ continue;
182
+ const label = m[1];
183
+ return collectFootnoteRefs(uri, lines, label, context);
184
+ }
185
+ return null;
186
+ }
187
+ function collectFootnoteRefs(uri, lines, label, context) {
188
+ const locs = [];
189
+ const defRe = new RegExp(`^\\[\\^${escapeRegExp(label)}\\]:`);
190
+ const refRe = new RegExp(`\\[\\^${escapeRegExp(label)}\\]`, 'g');
191
+ for (let i = 0; i < lines.length; i++) {
192
+ const l = lines[i];
193
+ const isDef = defRe.test(l);
194
+ for (const m of l.matchAll(refRe)) {
195
+ if (isDef && !context.includeDeclaration)
196
+ continue;
197
+ locs.push(lineLocation(uri, i, m.index, m.index + m[0].length));
198
+ }
199
+ }
200
+ return locs;
201
+ }
202
+ // ---------------------------------------------------------------------------
203
+ // Citation group
204
+ // ---------------------------------------------------------------------------
205
+ function resolveCitationGroup(uri, lines, line, position, context) {
206
+ // Cursor on a citation definition line [@key]:
207
+ const citDefRe = /^\[@([A-Za-z0-9_.:-]+)\]:/;
208
+ const defMatch = citDefRe.exec(line);
209
+ if (defMatch) {
210
+ const keyStart = 2; // after '[@'
211
+ const keyEnd = keyStart + defMatch[1].length;
212
+ if (position.character >= keyStart && position.character <= keyEnd) {
213
+ return collectCitationRefs(uri, lines, defMatch[1], context);
214
+ }
215
+ }
216
+ // Cursor on a citation usage [@key] inside [...]
217
+ const citGroupRe = /\[([^\]]*@[^\]]*)\]/g;
218
+ for (const m of line.matchAll(citGroupRe)) {
219
+ const start = m.index;
220
+ const end = start + m[0].length;
221
+ if (position.character < start || position.character >= end)
222
+ continue;
223
+ const inner = m[1];
224
+ const keyRe = /-?@([A-Za-z0-9_.:-]+)/g;
225
+ for (const km of inner.matchAll(keyRe)) {
226
+ const keyAbsStart = start + 1 + km.index + (km[0].startsWith('-') ? 2 : 1);
227
+ const keyAbsEnd = keyAbsStart + km[1].length;
228
+ if (position.character < start + 1 + km.index || position.character > keyAbsEnd)
229
+ continue;
230
+ return collectCitationRefs(uri, lines, km[1], context);
231
+ }
232
+ }
233
+ return null;
234
+ }
235
+ function collectCitationRefs(uri, lines, key, context) {
236
+ const locs = [];
237
+ const defRe = new RegExp(`^\\[@${escapeRegExp(key)}\\]:`);
238
+ const usageRe = new RegExp(`-?@${escapeRegExp(key)}(?=[\\];, ])`, 'g');
239
+ for (let i = 0; i < lines.length; i++) {
240
+ const l = lines[i];
241
+ const isDef = defRe.test(l);
242
+ if (isDef && context.includeDeclaration) {
243
+ // Emit the whole definition line
244
+ locs.push(lineLocation(uri, i, 0, l.length));
245
+ continue;
246
+ }
247
+ if (!isDef) {
248
+ for (const m of l.matchAll(usageRe)) {
249
+ // Only within a citation group [...]
250
+ locs.push(lineLocation(uri, i, m.index, m.index + m[0].length));
251
+ }
252
+ }
253
+ }
254
+ return locs;
255
+ }
256
+ // ---------------------------------------------------------------------------
257
+ // Link-reference group
258
+ // ---------------------------------------------------------------------------
259
+ function resolveLinkrefGroup(uri, lines, line, position, context) {
260
+ // Cursor on definition: [label]: url at line start
261
+ const defMatch = /^( {0,3})\[([^\]^][^\]]*)\]:/.exec(line);
262
+ if (defMatch) {
263
+ const labelStart = defMatch[1].length + 1;
264
+ const labelEnd = labelStart + defMatch[2].length;
265
+ if (position.character >= labelStart && position.character <= labelEnd) {
266
+ return collectLinkrefRefs(uri, lines, defMatch[2], context);
267
+ }
268
+ }
269
+ // Cursor on full reference ][label]
270
+ const fullRefRe = /\]\[([^\]^][^\]]*)\]/g;
271
+ for (const m of line.matchAll(fullRefRe)) {
272
+ const labelStart = m.index + 2;
273
+ const labelEnd = labelStart + m[1].length;
274
+ if (position.character < labelStart || position.character > labelEnd)
275
+ continue;
276
+ return collectLinkrefRefs(uri, lines, m[1], context);
277
+ }
278
+ // Cursor on collapsed [ref][]
279
+ const collapsedRe = /\[([^\]^][^\]]*)\]\[\]/g;
280
+ for (const m of line.matchAll(collapsedRe)) {
281
+ const labelStart = m.index + 1;
282
+ const labelEnd = labelStart + m[1].length;
283
+ if (position.character < labelStart || position.character > labelEnd)
284
+ continue;
285
+ return collectLinkrefRefs(uri, lines, m[1], context);
286
+ }
287
+ return null;
288
+ }
289
+ function collectLinkrefRefs(uri, lines, label, context) {
290
+ const locs = [];
291
+ const normalized = label.replace(/\s+/g, ' ').trim();
292
+ const defRe = /^( {0,3})\[([^\]^][^\]]*)\]:/;
293
+ for (let i = 0; i < lines.length; i++) {
294
+ const l = lines[i];
295
+ const defM = defRe.exec(l);
296
+ if (defM) {
297
+ const defLabel = defM[2].replace(/\s+/g, ' ').trim();
298
+ if (defLabel === normalized && context.includeDeclaration) {
299
+ const labelStart = defM[1].length + 1;
300
+ locs.push(lineLocation(uri, i, labelStart, labelStart + defM[2].length));
301
+ }
302
+ continue;
303
+ }
304
+ // Full reference ][label]
305
+ const fullRefRe = /\]\[([^\]^][^\]]*)\]/g;
306
+ for (const m of l.matchAll(fullRefRe)) {
307
+ const refLabel = m[1].replace(/\s+/g, ' ').trim();
308
+ if (refLabel === normalized) {
309
+ const labelStart = m.index + 2;
310
+ locs.push(lineLocation(uri, i, labelStart, labelStart + m[1].length));
311
+ }
312
+ }
313
+ // Collapsed [ref][]
314
+ const collapsedRe = /\[([^\]^][^\]]*)\]\[\]/g;
315
+ for (const m of l.matchAll(collapsedRe)) {
316
+ const refLabel = m[1].replace(/\s+/g, ' ').trim();
317
+ if (refLabel === normalized) {
318
+ const labelStart = m.index + 1;
319
+ locs.push(lineLocation(uri, i, labelStart, labelStart + m[1].length));
320
+ }
321
+ }
322
+ }
323
+ return locs;
324
+ }
325
+ // ---------------------------------------------------------------------------
326
+ // Wikilink group
327
+ // ---------------------------------------------------------------------------
328
+ function resolveWikilinkGroup(uri, source, lines, line, position, context) {
329
+ const wikilinkRe = /\[\[([^\]|#]+?)(?:[|#][^\]]*)?]]/g;
330
+ for (const m of line.matchAll(wikilinkRe)) {
331
+ const start = m.index;
332
+ const end = start + m[0].length;
333
+ if (position.character < start || position.character >= end)
334
+ continue;
335
+ const page = m[1].trim();
336
+ return collectWikilinkRefs(uri, source, lines, page, context);
337
+ }
338
+ return null;
339
+ }
340
+ function collectWikilinkRefs(uri, source, lines, page, context) {
341
+ const locs = [];
342
+ const pageLower = page.toLowerCase();
343
+ // Optionally include the heading that this wikilink resolves to
344
+ if (context.includeDeclaration) {
345
+ const defLine = findHeadingLineByText(source, pageLower);
346
+ if (defLine !== null) {
347
+ locs.push(lineLocation(uri, defLine, 0, lines[defLine]?.length ?? 0));
348
+ }
349
+ }
350
+ // Collect all [[Page]] usages matching the same page (case-insensitive)
351
+ const wikilinkRe = /\[\[([^\]|#]+?)(?:[|#][^\]]*)?]]/g;
352
+ for (let i = 0; i < lines.length; i++) {
353
+ for (const m of lines[i].matchAll(wikilinkRe)) {
354
+ if (m[1].trim().toLowerCase() === pageLower) {
355
+ locs.push(lineLocation(uri, i, m.index, m.index + m[0].length));
356
+ }
357
+ }
358
+ }
359
+ return locs;
360
+ }
361
+ function findHeadingLineByText(source, targetText) {
362
+ let doc;
363
+ try {
364
+ doc = resolve(parse(source));
365
+ }
366
+ catch {
367
+ return null;
368
+ }
369
+ const heading = findHeadingWithText(doc.children, targetText);
370
+ if (!heading || !heading.pos)
371
+ return null;
372
+ return heading.pos.startLine - 1;
373
+ }
374
+ function findHeadingWithText(nodes, targetText) {
375
+ for (const node of nodes) {
376
+ if (node.type === 'heading') {
377
+ const text = headingPlainText(node.children).toLowerCase();
378
+ if (text === targetText)
379
+ return node;
380
+ }
381
+ if ('children' in node && Array.isArray(node.children)) {
382
+ const found = findHeadingWithText(node.children.filter(isBlockNode), targetText);
383
+ if (found)
384
+ return found;
385
+ }
386
+ }
387
+ return null;
388
+ }
389
+ function headingPlainText(nodes) {
390
+ let out = '';
391
+ for (const node of nodes) {
392
+ if (node.type === 'text')
393
+ out += node.value;
394
+ else if ('children' in node && Array.isArray(node.children)) {
395
+ out += headingPlainText(node.children);
396
+ }
397
+ else if (node.type === 'code')
398
+ out += node.value;
399
+ }
400
+ return out.trim();
401
+ }
402
+ // ---------------------------------------------------------------------------
403
+ // Helpers
404
+ // ---------------------------------------------------------------------------
405
+ function isBlockNode(node) {
406
+ return Boolean(node && typeof node === 'object' && 'type' in node);
407
+ }
408
+ function lineLocation(uri, line, startChar, endChar) {
409
+ return {
410
+ uri,
411
+ range: {
412
+ start: { line, character: startChar },
413
+ end: { line, character: endChar },
414
+ },
415
+ };
416
+ }
417
+ function escapeRegExp(value) {
418
+ return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
419
+ }
420
+ function dedup(locs) {
421
+ const seen = new Set();
422
+ return locs.filter((loc) => {
423
+ const key = `${loc.uri}:${loc.range.start.line}:${loc.range.start.character}`;
424
+ if (seen.has(key))
425
+ return false;
426
+ seen.add(key);
427
+ return true;
428
+ });
429
+ }
430
+ //# sourceMappingURL=references.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"references.js","sourceRoot":"","sources":["../src/references.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,159 @@
1
+ import assert from 'node:assert/strict';
2
+ import test from 'node:test';
3
+ import { referencesAt } from './references.js';
4
+ const URI = 'file:///doc.crv';
5
+ const withDecl = { includeDeclaration: true };
6
+ const noDecl = { includeDeclaration: false };
7
+ // ---------------------------------------------------------------------------
8
+ // Heading / cross-reference
9
+ // ---------------------------------------------------------------------------
10
+ test('from heading line: finds all </#id> crossrefs', () => {
11
+ const source = '# Intro\n\nSee </#intro> and again </#intro>.';
12
+ const locs = referencesAt(URI, source, { line: 0, character: 3 }, noDecl);
13
+ assert.ok(locs);
14
+ assert.equal(locs.length, 2);
15
+ assert.ok(locs.every((l) => l.range.start.line === 2));
16
+ });
17
+ test('from heading line with includeDeclaration includes the heading', () => {
18
+ const source = '# Intro\n\nSee </#intro>.';
19
+ const locs = referencesAt(URI, source, { line: 0, character: 3 }, withDecl);
20
+ assert.ok(locs);
21
+ assert.equal(locs.length, 2); // heading + crossref
22
+ assert.ok(locs.some((l) => l.range.start.line === 0));
23
+ assert.ok(locs.some((l) => l.range.start.line === 2));
24
+ });
25
+ test('from crossref usage: finds all other crossrefs', () => {
26
+ const source = '# Intro\n\n</#intro> and </#intro>.';
27
+ const locs = referencesAt(URI, source, { line: 2, character: 3 }, noDecl);
28
+ assert.ok(locs);
29
+ assert.equal(locs.length, 2);
30
+ });
31
+ test('from fragment link [text](#id): finds all usages', () => {
32
+ const source = '# Setup\n\n[link](#setup) and [other](#setup).';
33
+ const locs = referencesAt(URI, source, { line: 2, character: 5 }, noDecl);
34
+ assert.ok(locs);
35
+ assert.equal(locs.length, 2);
36
+ });
37
+ test('heading with no crossrefs returns empty array (noDecl)', () => {
38
+ const source = '# Lonely\n\nsome text.';
39
+ const locs = referencesAt(URI, source, { line: 0, character: 3 }, noDecl);
40
+ assert.ok(locs);
41
+ assert.equal(locs.length, 0);
42
+ });
43
+ // ---------------------------------------------------------------------------
44
+ // Footnote
45
+ // ---------------------------------------------------------------------------
46
+ test('from footnote reference: finds all usages', () => {
47
+ const source = 'first[^fn] and second[^fn]\n\n[^fn]: text';
48
+ const locs = referencesAt(URI, source, { line: 0, character: 7 }, noDecl);
49
+ assert.ok(locs);
50
+ assert.equal(locs.length, 2);
51
+ assert.ok(locs.every((l) => l.range.start.line === 0));
52
+ });
53
+ test('from footnote reference with includeDeclaration includes def', () => {
54
+ const source = 'see[^fn]\n\n[^fn]: note';
55
+ const locs = referencesAt(URI, source, { line: 0, character: 5 }, withDecl);
56
+ assert.ok(locs);
57
+ assert.equal(locs.length, 2);
58
+ assert.ok(locs.some((l) => l.range.start.line === 2));
59
+ });
60
+ test('from footnote definition line: finds all usages', () => {
61
+ const source = 'see[^fn]\n\n[^fn]: note';
62
+ const locs = referencesAt(URI, source, { line: 2, character: 3 }, noDecl);
63
+ assert.ok(locs);
64
+ // noDecl: only usages on line 0
65
+ assert.equal(locs.length, 1);
66
+ assert.equal(locs[0].range.start.line, 0);
67
+ });
68
+ test('footnote with no usages returns empty array (noDecl)', () => {
69
+ const source = '[^fn]: an unused footnote';
70
+ const locs = referencesAt(URI, source, { line: 0, character: 3 }, noDecl);
71
+ assert.ok(locs);
72
+ assert.equal(locs.length, 0);
73
+ });
74
+ // ---------------------------------------------------------------------------
75
+ // Citation
76
+ // ---------------------------------------------------------------------------
77
+ test('from citation usage: finds all usages', () => {
78
+ const source = '[@smith2024]: citation\n\nsee [@smith2024] and [@smith2024].';
79
+ const locs = referencesAt(URI, source, { line: 2, character: 8 }, noDecl);
80
+ assert.ok(locs);
81
+ assert.equal(locs.length, 2);
82
+ assert.ok(locs.every((l) => l.range.start.line === 2));
83
+ });
84
+ test('from citation definition: finds all usages with includeDeclaration', () => {
85
+ const source = '[@key]: ref\n\n[@key] is cited here.';
86
+ const locs = referencesAt(URI, source, { line: 0, character: 3 }, withDecl);
87
+ assert.ok(locs);
88
+ assert.equal(locs.length, 2);
89
+ assert.ok(locs.some((l) => l.range.start.line === 0));
90
+ });
91
+ test('citation with no usages returns empty array (noDecl)', () => {
92
+ const source = '[@key]: a reference\n\nno citations here.';
93
+ const locs = referencesAt(URI, source, { line: 0, character: 3 }, noDecl);
94
+ assert.ok(locs);
95
+ assert.equal(locs.length, 0);
96
+ });
97
+ // ---------------------------------------------------------------------------
98
+ // Link reference
99
+ // ---------------------------------------------------------------------------
100
+ test('from link-ref definition: finds all usages', () => {
101
+ const source = '[carve]: https://example.com\n\n[site][carve] and [text][carve]';
102
+ const locs = referencesAt(URI, source, { line: 0, character: 3 }, noDecl);
103
+ assert.ok(locs);
104
+ assert.equal(locs.length, 2);
105
+ assert.ok(locs.every((l) => l.range.start.line === 2));
106
+ });
107
+ test('from link-ref definition with includeDeclaration includes def', () => {
108
+ const source = '[carve]: https://example.com\n\n[site][carve]';
109
+ const locs = referencesAt(URI, source, { line: 0, character: 3 }, withDecl);
110
+ assert.ok(locs);
111
+ assert.equal(locs.length, 2);
112
+ assert.ok(locs.some((l) => l.range.start.line === 0));
113
+ });
114
+ test('from link-ref usage: finds all usages', () => {
115
+ const source = '[ref]: https://example.com\n\n[a][ref] and [b][ref]';
116
+ const locs = referencesAt(URI, source, { line: 2, character: 5 }, noDecl);
117
+ assert.ok(locs);
118
+ assert.equal(locs.length, 2);
119
+ });
120
+ test('collapsed [ref][] usage is found', () => {
121
+ const source = '[ref]: https://example.com\n\n[ref][] and [ref][]';
122
+ const locs = referencesAt(URI, source, { line: 0, character: 3 }, noDecl);
123
+ assert.ok(locs);
124
+ assert.equal(locs.length, 2);
125
+ });
126
+ test('link-ref with no usages returns empty array (noDecl)', () => {
127
+ const source = '[ref]: https://example.com\n\nno refs here.';
128
+ const locs = referencesAt(URI, source, { line: 0, character: 3 }, noDecl);
129
+ assert.ok(locs);
130
+ assert.equal(locs.length, 0);
131
+ });
132
+ // ---------------------------------------------------------------------------
133
+ // Wikilink
134
+ // ---------------------------------------------------------------------------
135
+ test('wikilink [[Page]]: finds all usages (case-insensitive)', () => {
136
+ const source = '# Tigers\n\nSee [[Tigers]] and [[tigers]].';
137
+ const locs = referencesAt(URI, source, { line: 2, character: 6 }, noDecl);
138
+ assert.ok(locs);
139
+ assert.equal(locs.length, 2);
140
+ });
141
+ test('wikilink with includeDeclaration includes heading', () => {
142
+ const source = '# Tigers\n\nSee [[Tigers]].';
143
+ const locs = referencesAt(URI, source, { line: 2, character: 6 }, withDecl);
144
+ assert.ok(locs);
145
+ assert.equal(locs.length, 2);
146
+ assert.ok(locs.some((l) => l.range.start.line === 0));
147
+ });
148
+ // ---------------------------------------------------------------------------
149
+ // No-op cases
150
+ // ---------------------------------------------------------------------------
151
+ test('returns null on plain text with no navigable construct', () => {
152
+ const locs = referencesAt(URI, 'just some text', { line: 0, character: 5 }, noDecl);
153
+ assert.equal(locs, null);
154
+ });
155
+ test('returns null on empty line', () => {
156
+ const locs = referencesAt(URI, 'line one\n\nline three', { line: 1, character: 0 }, noDecl);
157
+ assert.equal(locs, null);
158
+ });
159
+ //# sourceMappingURL=references.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"references.test.js","sourceRoot":"","sources":["../src/references.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { type Position, type Range, type WorkspaceEdit } from 'vscode-languageserver/node.js';
2
+ /** Validate the cursor sits on a renameable label; return its range + text. */
3
+ export declare function prepareRename(source: string, position: Position): {
4
+ range: Range;
5
+ placeholder: string;
6
+ } | null;
7
+ /** Rename every occurrence of the label under the cursor (within its kind). */
8
+ export declare function renameEdits(uri: string, source: string, position: Position, newName: string): WorkspaceEdit | null;