@markup-carve/carve-lsp 0.1.2 → 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 (74) hide show
  1. package/README.md +11 -3
  2. package/dist/analyze.d.ts +9 -1
  3. package/dist/analyze.js +175 -14
  4. package/dist/analyze.js.map +1 -1
  5. package/dist/analyze.test.js +22 -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 +28 -5
  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 +58 -19
  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-features.test.d.ts +1 -0
  48. package/dist/include-features.test.js +133 -0
  49. package/dist/include-features.test.js.map +1 -0
  50. package/dist/include-path.d.ts +6 -0
  51. package/dist/include-path.js +31 -2
  52. package/dist/include-path.js.map +1 -1
  53. package/dist/include-settings.d.ts +2 -0
  54. package/dist/include-settings.js +1 -0
  55. package/dist/include-settings.js.map +1 -1
  56. package/dist/includes.d.ts +8 -0
  57. package/dist/includes.js +28 -7
  58. package/dist/includes.js.map +1 -1
  59. package/dist/references.d.ts +2 -0
  60. package/dist/references.js +113 -21
  61. package/dist/references.js.map +1 -1
  62. package/dist/semantic.js +14 -0
  63. package/dist/semantic.js.map +1 -1
  64. package/dist/semantic.test.js +6 -0
  65. package/dist/semantic.test.js.map +1 -1
  66. package/dist/server.js +128 -15
  67. package/dist/server.js.map +1 -1
  68. package/dist/versioned-cache.d.ts +8 -0
  69. package/dist/versioned-cache.js +17 -0
  70. package/dist/versioned-cache.js.map +1 -0
  71. package/dist/versioned-cache.test.d.ts +1 -0
  72. package/dist/versioned-cache.test.js +13 -0
  73. package/dist/versioned-cache.test.js.map +1 -0
  74. package/package.json +2 -2
@@ -1,12 +1,14 @@
1
1
  import { type Location, type Position } from 'vscode-languageserver/node.js';
2
+ import type { IncludeOptions } from './includes.js';
2
3
  /**
3
4
  * Go-to-definition for Carve constructs:
4
5
  *
5
- * - Cross-reference `</#id>` -> the heading whose generated id is `id`
6
+ * - Cross-reference `</#id>` -> the heading whose generated id is `id`,
7
+ * or the captioned host carrying it
6
8
  * - Fragment link `[text](#id)` -> same (href starts with `#`)
7
9
  * - Footnote ref `[^name]` -> the `[^name]:` definition line
8
10
  * - Link reference `[text][ref]` -> the `[ref]:` definition line
9
11
  * - Citation `[@key]` -> the `[@key]:` definition line
10
12
  * - Wikilink `[[Page]]` -> heading whose text matches Page (best-effort)
11
13
  */
12
- export declare function definitionAt(uri: string, source: string, position: Position): Location | null;
14
+ export declare function definitionAt(uri: string, source: string, position: Position, includes?: IncludeOptions): Location | null;
@@ -1,17 +1,23 @@
1
1
  import { parse, resolve } from '@markup-carve/carve';
2
2
  import { astColumnToCharacter, sourceLines } from './position.js';
3
3
  import { smartPunctuationText } from './inline-text.js';
4
+ import { captionTargetById } from './captions.js';
5
+ import { includeDefinitionAt } from './include-definition.js';
4
6
  /**
5
7
  * Go-to-definition for Carve constructs:
6
8
  *
7
- * - Cross-reference `</#id>` -> the heading whose generated id is `id`
9
+ * - Cross-reference `</#id>` -> the heading whose generated id is `id`,
10
+ * or the captioned host carrying it
8
11
  * - Fragment link `[text](#id)` -> same (href starts with `#`)
9
12
  * - Footnote ref `[^name]` -> the `[^name]:` definition line
10
13
  * - Link reference `[text][ref]` -> the `[ref]:` definition line
11
14
  * - Citation `[@key]` -> the `[@key]:` definition line
12
15
  * - Wikilink `[[Page]]` -> heading whose text matches Page (best-effort)
13
16
  */
14
- export function definitionAt(uri, source, position) {
17
+ export function definitionAt(uri, source, position, includes) {
18
+ const included = includeDefinitionAt(source, position, includes);
19
+ if (included)
20
+ return included;
15
21
  const lines = source.replace(/\r\n?/g, '\n').split('\n');
16
22
  const line = lines[position.line] ?? '';
17
23
  // 1. Citation [@key] - check before link-ref so `[@foo]` doesn't match as link-ref
@@ -100,14 +106,19 @@ function resolveCrossrefAt(uri, source, line, position) {
100
106
  function findHeadingById(uri, source, targetId) {
101
107
  let doc;
102
108
  try {
103
- doc = resolve(parse(source));
109
+ doc = resolve(parse(source, { positions: true }));
104
110
  }
105
111
  catch {
106
112
  return null;
107
113
  }
108
114
  const heading = findHeadingWithId(doc.children, targetId.toLowerCase());
109
- if (!heading || !heading.pos)
110
- return null;
115
+ if (!heading || !heading.pos) {
116
+ // A crossref reaches a CAPTIONED HOST as well - a figure, a table, a
117
+ // composite figure or one of its panels (PART 9R R4). Only headings were
118
+ // searched here, so `</#fig>` jumped nowhere on a construct that predates
119
+ // composite figures entirely.
120
+ return findCaptionById(uri, doc, targetId);
121
+ }
111
122
  const line = heading.pos.startLine - 1;
112
123
  return {
113
124
  uri,
@@ -125,6 +136,18 @@ function findHeadingById(uri, source, targetId) {
125
136
  },
126
137
  };
127
138
  }
139
+ /**
140
+ * The host's own first line. A captioned host has no single "definition line"
141
+ * the way a heading does - its id sits on a block-attribute line above it, its
142
+ * caption below it - so the jump lands on the host itself, which is the line an
143
+ * author is looking for.
144
+ */
145
+ function findCaptionById(uri, doc, targetId) {
146
+ const target = captionTargetById(doc, targetId);
147
+ if (!target?.pos)
148
+ return null;
149
+ return locationAtLine(uri, target.pos.startLine - 1);
150
+ }
128
151
  function findHeadingWithId(nodes, targetId) {
129
152
  for (const node of nodes) {
130
153
  if (node.type === 'heading') {
@@ -1 +1 @@
1
- {"version":3,"file":"definition.js","sourceRoot":"","sources":["../src/definition.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"definition.js","sourceRoot":"","sources":["../src/definition.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /** Bidirectional index from open documents to include paths they depend on. */
2
+ export declare class DependencyIndex {
3
+ #private;
4
+ update(documentUri: string, paths: Iterable<string>): boolean;
5
+ remove(documentUri: string): boolean;
6
+ documentsFor(target: string): string[];
7
+ watchedPaths(): string[];
8
+ }
9
+ /** Build a watcher rooted at the nearest existing ancestor, including missing trees. */
10
+ export declare function watcherFor(target: string): {
11
+ globPattern: {
12
+ baseUri: string;
13
+ pattern: string;
14
+ };
15
+ };
@@ -0,0 +1,59 @@
1
+ /** Bidirectional index from open documents to include paths they depend on. */
2
+ export class DependencyIndex {
3
+ #byDocument = new Map();
4
+ #byPath = new Map();
5
+ update(documentUri, paths) {
6
+ const next = new Set(paths);
7
+ const previous = this.#byDocument.get(documentUri) ?? new Set();
8
+ if (same(previous, next))
9
+ return false;
10
+ for (const target of previous) {
11
+ const documents = this.#byPath.get(target);
12
+ documents?.delete(documentUri);
13
+ if (documents?.size === 0)
14
+ this.#byPath.delete(target);
15
+ }
16
+ if (next.size === 0)
17
+ this.#byDocument.delete(documentUri);
18
+ else
19
+ this.#byDocument.set(documentUri, next);
20
+ for (const target of next) {
21
+ const documents = this.#byPath.get(target) ?? new Set();
22
+ documents.add(documentUri);
23
+ this.#byPath.set(target, documents);
24
+ }
25
+ return true;
26
+ }
27
+ remove(documentUri) {
28
+ return this.update(documentUri, []);
29
+ }
30
+ documentsFor(target) {
31
+ return [...(this.#byPath.get(target) ?? [])];
32
+ }
33
+ watchedPaths() {
34
+ return [...this.#byPath.keys()].sort();
35
+ }
36
+ }
37
+ /** Build a watcher rooted at the nearest existing ancestor, including missing trees. */
38
+ export function watcherFor(target) {
39
+ let base = path.dirname(target);
40
+ while (!existsSync(base) && base !== path.dirname(base))
41
+ base = path.dirname(base);
42
+ const pattern = path.relative(base, target).split(path.sep).map(escapeGlob).join('/');
43
+ return {
44
+ globPattern: {
45
+ baseUri: pathToFileURL(base).toString(),
46
+ pattern,
47
+ },
48
+ };
49
+ }
50
+ function escapeGlob(name) {
51
+ return name.replace(/([*?{}\[\]])/g, '[$1]');
52
+ }
53
+ function same(left, right) {
54
+ return left.size === right.size && [...left].every((value) => right.has(value));
55
+ }
56
+ import { existsSync } from 'node:fs';
57
+ import path from 'node:path';
58
+ import { pathToFileURL } from 'node:url';
59
+ //# sourceMappingURL=dependencies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../src/dependencies.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Coalesce per-document analysis so a burst of keystrokes produces one run.
3
+ *
4
+ * The server advertises incremental text sync, but analysis is whole-document:
5
+ * every change re-parses, re-resolves, and runs the migration and lint passes.
6
+ * On a book-sized file that crosses interactive latency on its own, and running
7
+ * it once per keystroke multiplies the cost by the typing rate
8
+ * (markup-carve/carve-lsp#68).
9
+ *
10
+ * Scheduling is separated from the server wiring so it can be tested without a
11
+ * connection. The server supplies `run`; this decides WHEN.
12
+ *
13
+ * Two guarantees the caller depends on:
14
+ *
15
+ * - one run per coalesced burst per URI, never one per edit;
16
+ * - a run always carries the NEWEST version seen for that URI, so diagnostics
17
+ * computed for a superseded version are never published. A queued run is
18
+ * replaced rather than queued behind, which is what makes that true.
19
+ */
20
+ export interface DiagnosticSchedulerOptions {
21
+ /**
22
+ * How long to wait for the burst to end. Around 100-150 ms keeps diagnostics
23
+ * feeling immediate while absorbing normal typing; it is a constructor
24
+ * argument rather than a constant so a host can tune it.
25
+ */
26
+ delayMs?: number;
27
+ /** Analyze `uri`, which is at `version`. */
28
+ run: (uri: string, version: number) => void;
29
+ }
30
+ /** The default burst window, in milliseconds. */
31
+ export declare const DEFAULT_DIAGNOSTIC_DELAY_MS = 120;
32
+ export declare class DiagnosticScheduler {
33
+ private readonly timers;
34
+ private readonly versions;
35
+ private readonly delayMs;
36
+ private readonly run;
37
+ constructor(options: DiagnosticSchedulerOptions);
38
+ /**
39
+ * Queue analysis for `uri` at `version`, superseding any queued run for it.
40
+ *
41
+ * Superseding rather than queueing is the whole point: a run already waiting
42
+ * would otherwise publish diagnostics for text the author has since changed.
43
+ */
44
+ schedule(uri: string, version: number): void;
45
+ /**
46
+ * Analyze `uri` now, dropping any queued run for it.
47
+ *
48
+ * For open and save, where waiting out a burst that is not happening only
49
+ * adds latency.
50
+ */
51
+ flush(uri: string, version: number): void;
52
+ /** Forget `uri` entirely: no queued run of it will fire. */
53
+ cancel(uri: string): void;
54
+ /** Drop every queued run. */
55
+ dispose(): void;
56
+ /** Is a run queued for `uri`? Test and diagnostic aid. */
57
+ pending(uri: string): boolean;
58
+ }
@@ -0,0 +1,70 @@
1
+ /** The default burst window, in milliseconds. */
2
+ export const DEFAULT_DIAGNOSTIC_DELAY_MS = 120;
3
+ export class DiagnosticScheduler {
4
+ timers = new Map();
5
+ versions = new Map();
6
+ delayMs;
7
+ run;
8
+ constructor(options) {
9
+ this.delayMs = options.delayMs ?? DEFAULT_DIAGNOSTIC_DELAY_MS;
10
+ this.run = options.run;
11
+ }
12
+ /**
13
+ * Queue analysis for `uri` at `version`, superseding any queued run for it.
14
+ *
15
+ * Superseding rather than queueing is the whole point: a run already waiting
16
+ * would otherwise publish diagnostics for text the author has since changed.
17
+ */
18
+ schedule(uri, version) {
19
+ this.versions.set(uri, version);
20
+ const queued = this.timers.get(uri);
21
+ if (queued !== undefined)
22
+ clearTimeout(queued);
23
+ const timer = setTimeout(() => {
24
+ this.timers.delete(uri);
25
+ const latest = this.versions.get(uri);
26
+ // `cancel` removes the version, so a document closed while its run was
27
+ // waiting produces no diagnostics for a document that is gone.
28
+ if (latest === undefined)
29
+ return;
30
+ this.run(uri, latest);
31
+ }, this.delayMs);
32
+ this.timers.set(uri, timer);
33
+ }
34
+ /**
35
+ * Analyze `uri` now, dropping any queued run for it.
36
+ *
37
+ * For open and save, where waiting out a burst that is not happening only
38
+ * adds latency.
39
+ */
40
+ flush(uri, version) {
41
+ const queued = this.timers.get(uri);
42
+ if (queued !== undefined) {
43
+ clearTimeout(queued);
44
+ this.timers.delete(uri);
45
+ }
46
+ this.versions.set(uri, version);
47
+ this.run(uri, version);
48
+ }
49
+ /** Forget `uri` entirely: no queued run of it will fire. */
50
+ cancel(uri) {
51
+ const queued = this.timers.get(uri);
52
+ if (queued !== undefined) {
53
+ clearTimeout(queued);
54
+ this.timers.delete(uri);
55
+ }
56
+ this.versions.delete(uri);
57
+ }
58
+ /** Drop every queued run. */
59
+ dispose() {
60
+ for (const timer of this.timers.values())
61
+ clearTimeout(timer);
62
+ this.timers.clear();
63
+ this.versions.clear();
64
+ }
65
+ /** Is a run queued for `uri`? Test and diagnostic aid. */
66
+ pending(uri) {
67
+ return this.timers.has(uri);
68
+ }
69
+ }
70
+ //# sourceMappingURL=diagnostic-scheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostic-scheduler.js","sourceRoot":"","sources":["../src/diagnostic-scheduler.ts"],"names":[],"mappings":"AA8BA,iDAAiD;AACjD,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAG,CAAA;AAE9C,MAAM,OAAO,mBAAmB;IACb,MAAM,GAAG,IAAI,GAAG,EAAyC,CAAA;IACzD,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAA;IACpC,OAAO,CAAQ;IACf,GAAG,CAAwC;IAE5D,YAAY,OAAmC;QAC7C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,2BAA2B,CAAA;QAC7D,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAA;IACxB,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,GAAW,EAAE,OAAe;QACnC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACnC,IAAI,MAAM,KAAK,SAAS;YAAE,YAAY,CAAC,MAAM,CAAC,CAAA;QAE9C,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YACvB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACrC,uEAAuE;YACvE,+DAA+D;YAC/D,IAAI,MAAM,KAAK,SAAS;gBAAE,OAAM;YAChC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QACvB,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;QAEhB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IAC7B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,GAAW,EAAE,OAAe;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACnC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,YAAY,CAAC,MAAM,CAAC,CAAA;YACpB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACzB,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QAC/B,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IACxB,CAAC;IAED,4DAA4D;IAC5D,MAAM,CAAC,GAAW;QAChB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACnC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,YAAY,CAAC,MAAM,CAAC,CAAA;YACpB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACzB,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IAC3B,CAAC;IAED,6BAA6B;IAC7B,OAAO;QACL,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YAAE,YAAY,CAAC,KAAK,CAAC,CAAA;QAC7D,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;QACnB,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAA;IACvB,CAAC;IAED,0DAA0D;IAC1D,OAAO,CAAC,GAAW;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC7B,CAAC;CACF"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,75 @@
1
+ import assert from 'node:assert/strict';
2
+ import test from 'node:test';
3
+ import { DiagnosticScheduler, DEFAULT_DIAGNOSTIC_DELAY_MS } from './diagnostic-scheduler.js';
4
+ test('runs once for a burst of edits, not once per edit', (t) => {
5
+ t.mock.timers.enable({ apis: ['setTimeout'] });
6
+ const runs = [];
7
+ const scheduler = new DiagnosticScheduler({ delayMs: 100, run: (u, v) => runs.push([u, v]) });
8
+ for (let version = 1; version <= 10; version++)
9
+ scheduler.schedule('file:///a', version);
10
+ assert.deepEqual(runs, []);
11
+ t.mock.timers.tick(100);
12
+ assert.deepEqual(runs, [['file:///a', 10]]);
13
+ });
14
+ // The reason a queued run is REPLACED rather than left to fire: it would
15
+ // otherwise publish diagnostics computed for text the author has changed.
16
+ test('carries the newest version, never a superseded one', (t) => {
17
+ t.mock.timers.enable({ apis: ['setTimeout'] });
18
+ const runs = [];
19
+ const scheduler = new DiagnosticScheduler({ delayMs: 100, run: (_u, v) => runs.push(v) });
20
+ scheduler.schedule('file:///a', 1);
21
+ t.mock.timers.tick(90);
22
+ scheduler.schedule('file:///a', 2);
23
+ t.mock.timers.tick(90);
24
+ scheduler.schedule('file:///a', 3);
25
+ t.mock.timers.tick(100);
26
+ assert.deepEqual(runs, [3]);
27
+ });
28
+ test('keeps documents independent', (t) => {
29
+ t.mock.timers.enable({ apis: ['setTimeout'] });
30
+ const runs = [];
31
+ const scheduler = new DiagnosticScheduler({ delayMs: 100, run: (u) => runs.push(u) });
32
+ scheduler.schedule('file:///a', 1);
33
+ scheduler.schedule('file:///b', 7);
34
+ t.mock.timers.tick(100);
35
+ assert.deepEqual(runs.sort(), ['file:///a', 'file:///b']);
36
+ });
37
+ test('cancels a queued run so a closed document publishes nothing', (t) => {
38
+ t.mock.timers.enable({ apis: ['setTimeout'] });
39
+ const runs = [];
40
+ const scheduler = new DiagnosticScheduler({ delayMs: 100, run: (u) => runs.push(u) });
41
+ scheduler.schedule('file:///a', 1);
42
+ assert.equal(scheduler.pending('file:///a'), true);
43
+ scheduler.cancel('file:///a');
44
+ t.mock.timers.tick(1000);
45
+ assert.deepEqual(runs, []);
46
+ assert.equal(scheduler.pending('file:///a'), false);
47
+ });
48
+ test('flushes immediately and drops the queued run', (t) => {
49
+ t.mock.timers.enable({ apis: ['setTimeout'] });
50
+ const runs = [];
51
+ const scheduler = new DiagnosticScheduler({ delayMs: 100, run: (_u, v) => runs.push(v) });
52
+ scheduler.schedule('file:///a', 1);
53
+ scheduler.flush('file:///a', 2);
54
+ assert.deepEqual(runs, [2]);
55
+ t.mock.timers.tick(1000);
56
+ assert.deepEqual(runs, [2]);
57
+ });
58
+ test('drops everything on dispose', (t) => {
59
+ t.mock.timers.enable({ apis: ['setTimeout'] });
60
+ const runs = [];
61
+ const scheduler = new DiagnosticScheduler({ delayMs: 100, run: (u) => runs.push(u) });
62
+ scheduler.schedule('file:///a', 1);
63
+ scheduler.schedule('file:///b', 1);
64
+ scheduler.dispose();
65
+ t.mock.timers.tick(1000);
66
+ assert.deepEqual(runs, []);
67
+ });
68
+ // BOUND, not proof: the default is exported so a host can reason about it, and
69
+ // this pins that it sits in the interactive range. No mutation of the
70
+ // coalescing logic breaks this row.
71
+ test('defaults to a delay inside the interactive range', () => {
72
+ assert.ok(DEFAULT_DIAGNOSTIC_DELAY_MS >= 100);
73
+ assert.ok(DEFAULT_DIAGNOSTIC_DELAY_MS <= 150);
74
+ });
75
+ //# sourceMappingURL=diagnostic-scheduler.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostic-scheduler.test.js","sourceRoot":"","sources":["../src/diagnostic-scheduler.test.ts"],"names":[],"mappings":"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"}
package/dist/folding.d.ts CHANGED
@@ -6,3 +6,4 @@ import { type FoldingRange } from 'vscode-languageserver/node.js';
6
6
  * the next heading of the same or shallower level (or end of document).
7
7
  */
8
8
  export declare function foldingRanges(source: string): FoldingRange[];
9
+ export declare function lexicalFolds(source: string): FoldingRange[];
package/dist/folding.js CHANGED
@@ -11,6 +11,9 @@ const FOLDABLE = new Set([
11
11
  'div',
12
12
  'definition_list',
13
13
  'figure',
14
+ // A composite figure is a fenced container like any other, and a long one is
15
+ // exactly what a reader wants to collapse (PART 9 §4c).
16
+ 'figure_group',
14
17
  ]);
15
18
  /**
16
19
  * Folding regions for a Carve document:
@@ -24,7 +27,7 @@ export function foldingRanges(source) {
24
27
  doc = resolve(parse(source, { positions: true }));
25
28
  }
26
29
  catch {
27
- return [];
30
+ return lexicalFolds(source);
28
31
  }
29
32
  const ranges = [];
30
33
  const headings = [];
@@ -58,6 +61,38 @@ export function foldingRanges(source) {
58
61
  }
59
62
  return ranges;
60
63
  }
64
+ export function lexicalFolds(source) {
65
+ const lines = source.replace(/\r\n?/g, '\n').split('\n');
66
+ const ranges = [];
67
+ const headings = [];
68
+ const fences = [];
69
+ for (let line = 0; line < lines.length; line += 1) {
70
+ const text = lines[line];
71
+ const heading = /^(#{1,6}) /.exec(text);
72
+ if (heading)
73
+ headings.push({ level: heading[1].length, line });
74
+ const fence = /^\s*(`{3,}|~{3,}|:{3,}|%{3,})/.exec(text);
75
+ if (!fence)
76
+ continue;
77
+ const top = fences.at(-1);
78
+ if (top && top.marker[0] === fence[1][0] && fence[1].length >= top.marker.length) {
79
+ fences.pop();
80
+ if (line > top.line)
81
+ ranges.push({ startLine: top.line, endLine: line });
82
+ }
83
+ else {
84
+ fences.push({ marker: fence[1], line });
85
+ }
86
+ }
87
+ for (let index = 0; index < headings.length; index += 1) {
88
+ const heading = headings[index];
89
+ const next = headings.slice(index + 1).find((candidate) => candidate.level <= heading.level);
90
+ const endLine = (next?.line ?? lines.length) - 1;
91
+ if (endLine > heading.line)
92
+ ranges.push({ startLine: heading.line, endLine, kind: 'region' });
93
+ }
94
+ return ranges;
95
+ }
61
96
  function isBlockNode(node) {
62
97
  return Boolean(node && typeof node === 'object' && 'type' in node);
63
98
  }
@@ -1 +1 @@
1
- {"version":3,"file":"folding.js","sourceRoot":"","sources":["../src/folding.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"folding.js","sourceRoot":"","sources":["../src/folding.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import assert from 'node:assert/strict';
2
2
  import test from 'node:test';
3
- import { foldingRanges } from './folding.js';
3
+ import { foldingRanges, lexicalFolds } from './folding.js';
4
4
  const src = '# A\n\ntext\n\n## B\n\nmore\n\n```js\none\ntwo\n```\n';
5
5
  test('folds the section under a top-level heading', () => {
6
6
  const ranges = foldingRanges(src);
@@ -17,4 +17,9 @@ test('folds a multi-line fenced code block', () => {
17
17
  test('returns nothing for an empty document', () => {
18
18
  assert.deepEqual(foldingRanges(''), []);
19
19
  });
20
+ test('lexical fallback preserves section and fence folds after analysis failure', () => {
21
+ const ranges = lexicalFolds('# One\n\n::: note\nbody\n:::\n\n## Two\ntext\n');
22
+ assert.ok(ranges.some((range) => range.startLine === 0 && range.endLine >= 7));
23
+ assert.ok(ranges.some((range) => range.startLine === 2 && range.endLine === 4));
24
+ });
20
25
  //# sourceMappingURL=folding.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"folding.test.js","sourceRoot":"","sources":["../src/folding.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAA;AACvC,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAE5C,MAAM,GAAG,GAAG,uDAAuD,CAAA;AAEnE,IAAI,CAAC,6CAA6C,EAAE,GAAG,EAAE;IACvD,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;IACjC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,iBAAiB,CAAC,CAAA;AACxF,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACrC,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;IACjC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAA;AACrE,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,sCAAsC,EAAE,GAAG,EAAE;IAChD,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;IACjC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,EAAE,iBAAiB,CAAC,CAAA;AACzF,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,uCAAuC,EAAE,GAAG,EAAE;IACjD,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;AACzC,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"folding.test.js","sourceRoot":"","sources":["../src/folding.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAA;AACvC,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAE1D,MAAM,GAAG,GAAG,uDAAuD,CAAA;AAEnE,IAAI,CAAC,6CAA6C,EAAE,GAAG,EAAE;IACvD,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;IACjC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,iBAAiB,CAAC,CAAA;AACxF,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACrC,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;IACjC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAA;AACrE,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,sCAAsC,EAAE,GAAG,EAAE;IAChD,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;IACjC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC,EAAE,iBAAiB,CAAC,CAAA;AACzF,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,uCAAuC,EAAE,GAAG,EAAE;IACjD,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;AACzC,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,2EAA2E,EAAE,GAAG,EAAE;IACrF,MAAM,MAAM,GAAG,YAAY,CAAC,gDAAgD,CAAC,CAAA;IAC7E,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAA;IAC9E,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAA;AACjF,CAAC,CAAC,CAAA"}