@markup-carve/carve-lsp 0.1.3 → 0.1.4

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 (120) hide show
  1. package/README.md +52 -13
  2. package/dist/analyze.d.ts +6 -0
  3. package/dist/analyze.js +39 -2
  4. package/dist/analyze.js.map +1 -1
  5. package/dist/analyze.test.js +7 -0
  6. package/dist/analyze.test.js.map +1 -1
  7. package/dist/codelens.js +12 -0
  8. package/dist/codelens.js.map +1 -1
  9. package/dist/codelens.test.js +5 -0
  10. package/dist/codelens.test.js.map +1 -1
  11. package/dist/colon-fence-kinds.test.d.ts +1 -0
  12. package/dist/colon-fence-kinds.test.js +128 -0
  13. package/dist/colon-fence-kinds.test.js.map +1 -0
  14. package/dist/colon-fences.d.ts +24 -0
  15. package/dist/colon-fences.js +174 -0
  16. package/dist/colon-fences.js.map +1 -0
  17. package/dist/colon-fences.test.d.ts +1 -0
  18. package/dist/colon-fences.test.js +23 -0
  19. package/dist/colon-fences.test.js.map +1 -0
  20. package/dist/completion.d.ts +5 -1
  21. package/dist/completion.js +40 -10
  22. package/dist/completion.js.map +1 -1
  23. package/dist/completion.test.js +7 -0
  24. package/dist/completion.test.js.map +1 -1
  25. package/dist/document-highlights.d.ts +2 -0
  26. package/dist/document-highlights.js +21 -0
  27. package/dist/document-highlights.js.map +1 -0
  28. package/dist/document-highlights.test.d.ts +1 -0
  29. package/dist/document-highlights.test.js +13 -0
  30. package/dist/document-highlights.test.js.map +1 -0
  31. package/dist/document-links.d.ts +3 -0
  32. package/dist/document-links.js +36 -0
  33. package/dist/document-links.js.map +1 -0
  34. package/dist/document-links.test.d.ts +1 -0
  35. package/dist/document-links.test.js +12 -0
  36. package/dist/document-links.test.js.map +1 -0
  37. package/dist/format-corpus.test.d.ts +1 -0
  38. package/dist/format-corpus.test.js +16 -0
  39. package/dist/format-corpus.test.js.map +1 -0
  40. package/dist/format.d.ts +3 -0
  41. package/dist/format.js +38 -74
  42. package/dist/format.js.map +1 -1
  43. package/dist/format.test.js +27 -32
  44. package/dist/format.test.js.map +1 -1
  45. package/dist/hover.js +20 -0
  46. package/dist/hover.js.map +1 -1
  47. package/dist/include-completion.d.ts +3 -0
  48. package/dist/include-completion.js +68 -0
  49. package/dist/include-completion.js.map +1 -0
  50. package/dist/include-completion.test.d.ts +1 -0
  51. package/dist/include-completion.test.js +15 -0
  52. package/dist/include-completion.test.js.map +1 -0
  53. package/dist/inlay-hints.d.ts +3 -0
  54. package/dist/inlay-hints.js +43 -0
  55. package/dist/inlay-hints.js.map +1 -0
  56. package/dist/inlay-hints.test.d.ts +1 -0
  57. package/dist/inlay-hints.test.js +10 -0
  58. package/dist/inlay-hints.test.js.map +1 -0
  59. package/dist/lint-actions.d.ts +3 -0
  60. package/dist/lint-actions.js +90 -0
  61. package/dist/lint-actions.js.map +1 -0
  62. package/dist/lint-actions.test.d.ts +1 -0
  63. package/dist/lint-actions.test.js +31 -0
  64. package/dist/lint-actions.test.js.map +1 -0
  65. package/dist/no-git-dependencies.test.d.ts +1 -0
  66. package/dist/no-git-dependencies.test.js +243 -0
  67. package/dist/no-git-dependencies.test.js.map +1 -0
  68. package/dist/packaging.test.d.ts +1 -0
  69. package/dist/packaging.test.js +69 -0
  70. package/dist/packaging.test.js.map +1 -0
  71. package/dist/selection.d.ts +2 -0
  72. package/dist/selection.js +36 -0
  73. package/dist/selection.js.map +1 -0
  74. package/dist/selection.test.d.ts +1 -0
  75. package/dist/selection.test.js +10 -0
  76. package/dist/selection.test.js.map +1 -0
  77. package/dist/semantic.d.ts +5 -3
  78. package/dist/semantic.js +31 -4
  79. package/dist/semantic.js.map +1 -1
  80. package/dist/semantic.test.js +5 -0
  81. package/dist/semantic.test.js.map +1 -1
  82. package/dist/server-capabilities.test.d.ts +1 -0
  83. package/dist/server-capabilities.test.js +84 -0
  84. package/dist/server-capabilities.test.js.map +1 -0
  85. package/dist/server.js +236 -20
  86. package/dist/server.js.map +1 -1
  87. package/dist/settings.d.ts +11 -0
  88. package/dist/settings.js +50 -0
  89. package/dist/settings.js.map +1 -0
  90. package/dist/settings.test.d.ts +1 -0
  91. package/dist/settings.test.js +22 -0
  92. package/dist/settings.test.js.map +1 -0
  93. package/dist/spec-0-1-4-constructs.test.d.ts +1 -0
  94. package/dist/spec-0-1-4-constructs.test.js +101 -0
  95. package/dist/spec-0-1-4-constructs.test.js.map +1 -0
  96. package/dist/table-diagnostics.d.ts +3 -0
  97. package/dist/table-diagnostics.js +60 -0
  98. package/dist/table-diagnostics.js.map +1 -0
  99. package/dist/table-diagnostics.test.d.ts +1 -0
  100. package/dist/table-diagnostics.test.js +12 -0
  101. package/dist/table-diagnostics.test.js.map +1 -0
  102. package/dist/workspace-graph.d.ts +25 -0
  103. package/dist/workspace-graph.js +94 -0
  104. package/dist/workspace-graph.js.map +1 -0
  105. package/dist/workspace-graph.test.d.ts +1 -0
  106. package/dist/workspace-graph.test.js +31 -0
  107. package/dist/workspace-graph.test.js.map +1 -0
  108. package/dist/workspace-index.d.ts +40 -0
  109. package/dist/workspace-index.js +254 -0
  110. package/dist/workspace-index.js.map +1 -0
  111. package/dist/workspace-index.test.d.ts +1 -0
  112. package/dist/workspace-index.test.js +65 -0
  113. package/dist/workspace-index.test.js.map +1 -0
  114. package/dist/workspace-loader.d.ts +11 -0
  115. package/dist/workspace-loader.js +50 -0
  116. package/dist/workspace-loader.js.map +1 -0
  117. package/dist/workspace-loader.test.d.ts +1 -0
  118. package/dist/workspace-loader.test.js +19 -0
  119. package/dist/workspace-loader.test.js.map +1 -0
  120. package/package.json +4 -3
package/dist/format.js CHANGED
@@ -1,83 +1,47 @@
1
1
  /*
2
2
  * Conservative Carve formatter.
3
3
  *
4
- * Carve has no canonical source serializer, so this does not reflow content.
5
- * It only applies safe, idempotent normalizations OUTSIDE verbatim blocks
6
- * (fenced code, raw blocks, comment blocks):
7
- * - strip trailing whitespace
8
- * - collapse runs of 2+ blank lines to a single blank line
9
- * - trim leading/trailing blank lines
10
- * - end the file with exactly one newline
11
- *
12
- * Verbatim block interiors are emitted byte-for-byte (only the file-final
13
- * newline is enforced), so code, raw HTML, and comments are never altered.
4
+ * Carve source does not have a canonical serializer, and whitespace that looks
5
+ * cosmetic can be structural: a second blank line detaches captions, trailing
6
+ * blank lines can belong to an unclosed fence, and trailing spaces are content
7
+ * in line blocks. Preserve every source byte except for adding a missing final
8
+ * line ending, which is render-equivalent and keeps the formatter idempotent.
14
9
  */
15
10
  export function formatDocument(source) {
16
- const eol = source.includes('\r\n') ? '\r\n' : '\n';
17
- const lines = source.split(/\r?\n/);
18
- const out = [];
19
- let openFence = null;
20
- let blankRun = 0;
21
- for (const raw of lines) {
22
- if (openFence !== null) {
23
- out.push(raw);
24
- if (closesFence(raw, openFence))
25
- openFence = null;
26
- blankRun = 0;
27
- continue;
28
- }
29
- const opener = fenceOpener(raw);
30
- if (opener) {
31
- openFence = opener;
32
- out.push(raw.replace(/[ \t]+$/, ''));
33
- blankRun = 0;
34
- continue;
35
- }
36
- const trimmed = raw.replace(/[ \t]+$/, '');
37
- if (trimmed === '') {
38
- blankRun++;
39
- if (blankRun === 1)
40
- out.push('');
41
- continue;
42
- }
43
- blankRun = 0;
44
- out.push(trimmed);
45
- }
46
- while (out.length && out[0] === '')
47
- out.shift();
48
- while (out.length && out[out.length - 1] === '')
49
- out.pop();
50
- return out.length ? out.join(eol) + eol : '';
11
+ if (source === '' || source.endsWith('\n'))
12
+ return source;
13
+ return source + (source.includes('\r\n') ? '\r\n' : '\n');
51
14
  }
52
- /**
53
- * A verbatim block opener: a fence marker indented at most three spaces.
54
- * Backtick fences cannot carry a backtick in the info string, and a comment
55
- * fence (`%%%`) must stand alone (no info), matching the parser.
56
- */
57
- function fenceOpener(line) {
58
- const match = /^( {0,3})(`{3,}|~{3,}|%{3,})(.*)$/.exec(line);
59
- if (!match)
60
- return null;
61
- const marker = match[2];
62
- const info = match[3];
63
- if (marker[0] === '`' && info.includes('`'))
64
- return null;
65
- if (marker[0] === '%' && info.trim() !== '')
66
- return null;
67
- return marker;
15
+ export function formatRange(source, startLine, endLine) {
16
+ const eol = source.includes('\r\n') ? '\r\n' : '\n';
17
+ return source.split(/\r?\n/).slice(startLine, endLine + 1).join(eol);
68
18
  }
69
- /**
70
- * A verbatim block closes on a lone fence (indent <= 3) of the same char.
71
- * Comment blocks close only on an exact-length marker; code/raw fences close
72
- * on a marker at least as long as the opener (CommonMark rule).
73
- */
74
- function closesFence(line, openFence) {
75
- const match = /^ {0,3}(`{3,}|~{3,}|%{3,})[ \t]*$/.exec(line);
76
- if (!match)
77
- return false;
78
- const close = match[1];
79
- if (close[0] !== openFence[0])
80
- return false;
81
- return openFence[0] === '%' ? close.length === openFence.length : close.length >= openFence.length;
19
+ /** Prefix inserted after Enter for container-shaped lines. */
20
+ export function continuationPrefix(source, line) {
21
+ const previous = source.split(/\r?\n/)[line - 1] ?? '';
22
+ const container = /^(\s*)(:{3,}) [^\s].*$/.exec(previous);
23
+ if (container)
24
+ return `\n${container[1]}${container[2]}`;
25
+ const quote = /^(\s*(?:> )+)/.exec(previous);
26
+ if (quote)
27
+ return quote[1];
28
+ const table = /^(\s*)\|/.exec(previous);
29
+ if (table)
30
+ return `${table[1]}| `;
31
+ // A description marker is a colon, a run of SPACES, then something. PART 2
32
+ // (MARKER REQUIRES CONTENT, carve#1830, corpus 439) makes a colon followed by
33
+ // only whitespace a paragraph, so there is no description to continue - and a
34
+ // tab separator is not a marker either. The separator run sets the body's
35
+ // content column (corpus 424), so the continuation is as wide as it is rather
36
+ // than always two.
37
+ //
38
+ // The lookahead asks whether the REST OF THE LINE is blank, not whether the
39
+ // next character is non-blank, on purpose: `: ` followed by a tab is the case
40
+ // carve#1836 rules and every engine is still wrong about, so this decides it
41
+ // neither way and keeps the answer it already gave.
42
+ const definition = /^([ \t]*)(: +)(?![ \t]*$)/.exec(previous);
43
+ if (definition)
44
+ return definition[1] + ' '.repeat(definition[2].length);
45
+ return '';
82
46
  }
83
47
  //# sourceMappingURL=format.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,IAAI,MAAM,KAAK,EAAE,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,MAAM,CAAA;IACzD,OAAO,MAAM,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;AAC3D,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAc,EAAE,SAAiB,EAAE,OAAe;IAC5E,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAA;IACnD,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACtE,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,kBAAkB,CAAC,MAAc,EAAE,IAAY;IAC7D,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;IACtD,MAAM,SAAS,GAAG,wBAAwB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACzD,IAAI,SAAS;QAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,CAAA;IACxD,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC5C,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC,CAAC,CAAE,CAAA;IAC3B,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACvC,IAAI,KAAK;QAAE,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;IACjC,2EAA2E;IAC3E,8EAA8E;IAC9E,8EAA8E;IAC9E,0EAA0E;IAC1E,8EAA8E;IAC9E,mBAAmB;IACnB,EAAE;IACF,4EAA4E;IAC5E,8EAA8E;IAC9E,6EAA6E;IAC7E,oDAAoD;IACpD,MAAM,UAAU,GAAG,2BAA2B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC7D,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC,CAAC,CAAE,GAAG,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC,CAAA;IACzE,OAAO,EAAE,CAAA;AACX,CAAC"}
@@ -1,46 +1,41 @@
1
1
  import assert from 'node:assert/strict';
2
2
  import test from 'node:test';
3
- import { formatDocument } from './format.js';
4
- test('strips trailing whitespace and enforces a final newline', () => {
5
- assert.equal(formatDocument('# Title \n\npara\t'), '# Title\n\npara\n');
3
+ import { continuationPrefix, formatDocument, formatRange } from './format.js';
4
+ test('adds a missing final line ending', () => {
5
+ assert.equal(formatDocument('# Title'), '# Title\n');
6
+ assert.equal(formatDocument('# Title\r\nbody'), '# Title\r\nbody\r\n');
6
7
  });
7
- test('collapses runs of blank lines to a single blank line', () => {
8
- assert.equal(formatDocument('a\n\n\n\nb'), 'a\n\nb\n');
8
+ test('preserves an empty document and existing final line endings', () => {
9
+ assert.equal(formatDocument(''), '');
10
+ assert.equal(formatDocument('# Title\n'), '# Title\n');
11
+ assert.equal(formatDocument('# Title\r\n'), '# Title\r\n');
9
12
  });
10
- test('trims leading and trailing blank lines', () => {
11
- assert.equal(formatDocument('\n\n# Title\n\n\n'), '# Title\n');
13
+ test('preserves a blank-line run that detaches a caption', () => {
14
+ const source = '|= City |= People |\n| Oslo | 700k |\n\n\n^ Table: city sizes\n';
15
+ assert.equal(formatDocument(source), source);
12
16
  });
13
- test('preserves verbatim interiors of fenced code blocks', () => {
14
- const src = '```js\ncode \n\n\n more\n```\n';
15
- // Trailing spaces and blank runs inside the fence are untouched.
16
- assert.equal(formatDocument(src), src);
17
+ test('preserves a trailing blank line inside an unclosed fence', () => {
18
+ const source = '```\nx\n\n';
19
+ assert.equal(formatDocument(source), source);
17
20
  });
18
- test('still normalizes outside a closed fence', () => {
19
- const src = '```\nx\n```\n\n\n\ntail \n';
20
- assert.equal(formatDocument(src), '```\nx\n```\n\ntail\n');
21
+ test('preserves trailing spaces in a line block', () => {
22
+ const source = '::: |\nabc \ndef \n:::\n';
23
+ assert.equal(formatDocument(source), source);
21
24
  });
22
- test('handles nested longer fences without closing early', () => {
23
- const src = '````md\n```\ninner \n```\n````\n';
24
- assert.equal(formatDocument(src), src);
25
+ test('range formatting preserves structural whitespace', () => {
26
+ assert.equal(formatRange('a \n\n\nb \n', 0, 3), 'a \n\n\nb ');
25
27
  });
26
- test('a 4-space-indented fence does not close a code block', () => {
27
- const src = '```\ncode\n ```\n```\n\n\n\ntail \n';
28
- // The indented ``` stays inside the block; the flush ``` closes it; only the
29
- // prose after the block is normalized.
30
- assert.equal(formatDocument(src), '```\ncode\n ```\n```\n\ntail\n');
28
+ test('continues structural prefixes', () => {
29
+ assert.equal(continuationPrefix('> q\n', 1), '> ');
30
+ assert.equal(continuationPrefix('| a |\n', 1), '| ');
31
31
  });
32
- test('comment block closes only on an exact-length marker', () => {
33
- const src = '%%%\nhidden \n%%%%\nstill \n%%%\n';
34
- // %%%% (len 4) does not close %%% (len 3); the block runs to the matching %%%.
35
- assert.equal(formatDocument(src), src);
36
- });
37
- test('a backtick line with inline backticks is not a fence', () => {
38
- // Not a real opener, so trailing whitespace after it is still trimmed.
39
- const src = '``` not `a` fence \nbody \n';
40
- assert.equal(formatDocument(src), '``` not `a` fence\nbody\n');
32
+ test('inserts an exact closer after a typed colon-fence opener', () => {
33
+ assert.equal(continuationPrefix(':::: warning\n', 1), '\n::::');
34
+ assert.equal(continuationPrefix(' ::: note\n', 1), '\n :::');
35
+ assert.equal(continuationPrefix(':::\n', 1), '');
41
36
  });
42
37
  test('is idempotent', () => {
43
- const once = formatDocument('# T \n\n\n\nbody \n');
38
+ const once = formatDocument('# T');
44
39
  assert.equal(formatDocument(once), once);
45
40
  });
46
41
  //# sourceMappingURL=format.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"format.test.js","sourceRoot":"","sources":["../src/format.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAA;AACvC,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAE5C,IAAI,CAAC,yDAAyD,EAAE,GAAG,EAAE;IACnE,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,sBAAsB,CAAC,EAAE,mBAAmB,CAAC,CAAA;AAC3E,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,sDAAsD,EAAE,GAAG,EAAE;IAChE,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,UAAU,CAAC,CAAA;AACxD,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,wCAAwC,EAAE,GAAG,EAAE;IAClD,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,mBAAmB,CAAC,EAAE,WAAW,CAAC,CAAA;AAChE,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,oDAAoD,EAAE,GAAG,EAAE;IAC9D,MAAM,GAAG,GAAG,mCAAmC,CAAA;IAC/C,iEAAiE;IACjE,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAA;AACxC,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,yCAAyC,EAAE,GAAG,EAAE;IACnD,MAAM,GAAG,GAAG,8BAA8B,CAAA;IAC1C,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,uBAAuB,CAAC,CAAA;AAC5D,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,oDAAoD,EAAE,GAAG,EAAE;IAC9D,MAAM,GAAG,GAAG,oCAAoC,CAAA;IAChD,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAA;AACxC,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,sDAAsD,EAAE,GAAG,EAAE;IAChE,MAAM,GAAG,GAAG,0CAA0C,CAAA;IACtD,6EAA6E;IAC7E,uCAAuC;IACvC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,mCAAmC,CAAC,CAAA;AACxE,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,qDAAqD,EAAE,GAAG,EAAE;IAC/D,MAAM,GAAG,GAAG,uCAAuC,CAAA;IACnD,+EAA+E;IAC/E,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAA;AACxC,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,sDAAsD,EAAE,GAAG,EAAE;IAChE,uEAAuE;IACvE,MAAM,GAAG,GAAG,iCAAiC,CAAA;IAC7C,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,2BAA2B,CAAC,CAAA;AAChE,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE;IACzB,MAAM,IAAI,GAAG,cAAc,CAAC,uBAAuB,CAAC,CAAA;IACpD,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAA;AAC1C,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"format.test.js","sourceRoot":"","sources":["../src/format.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAA;AACvC,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE7E,IAAI,CAAC,kCAAkC,EAAE,GAAG,EAAE;IAC5C,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,CAAA;IACpD,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,iBAAiB,CAAC,EAAE,qBAAqB,CAAC,CAAA;AACxE,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,6DAA6D,EAAE,GAAG,EAAE;IACvE,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;IACpC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,CAAA;IACtD,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC,CAAA;AAC5D,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,oDAAoD,EAAE,GAAG,EAAE;IAC9D,MAAM,MAAM,GAAG,oEAAoE,CAAA;IACnF,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAA;AAC9C,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,0DAA0D,EAAE,GAAG,EAAE;IACpE,MAAM,MAAM,GAAG,YAAY,CAAA;IAC3B,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAA;AAC9C,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,2CAA2C,EAAE,GAAG,EAAE;IACrD,MAAM,MAAM,GAAG,2BAA2B,CAAA;IAC1C,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAA;AAC9C,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,kDAAkD,EAAE,GAAG,EAAE;IAC5D,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC,CAAA;AACjE,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,+BAA+B,EAAE,GAAG,EAAE;IACzC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;IAClD,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;AACtD,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,0DAA0D,EAAE,GAAG,EAAE;IACpE,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;IAC/D,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,CAAA;IAC9D,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;AAClD,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,eAAe,EAAE,GAAG,EAAE;IACzB,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,CAAA;IAClC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAA;AAC1C,CAAC,CAAC,CAAA"}
package/dist/hover.js CHANGED
@@ -2,7 +2,24 @@ import { MarkupKind } from 'vscode-languageserver/node.js';
2
2
  import { parse, resolve, } from '@markup-carve/carve';
3
3
  import { astColumnToCharacter, characterToAstColumn, sourceLines } from './position.js';
4
4
  import { captionTargetById } from './captions.js';
5
+ import { colonFenceHover } from './colon-fences.js';
5
6
  const rules = [
7
+ {
8
+ pattern: /\|=?\s*[<>~^v]{1,2}(?=\{| )/g,
9
+ contents: '**Table alignment**\n\nA one- or two-character run sets horizontal and/or vertical cell alignment. Two-axis runs normalize to horizontal then vertical.',
10
+ },
11
+ {
12
+ pattern: /\b(?:aligns|valigns|widths|header-rows|header-cols|footer-rows)=/g,
13
+ contents: '**Table metadata**\n\nA positional table/ListTable field. Empty list entries leave that column unset; cell-local values win.',
14
+ },
15
+ {
16
+ pattern: /\[@[^\]\n]+\]/g,
17
+ contents: '**Citation**\n\nCitation groups reference `[@key]: ...` bibliography entries when the Citations extension is enabled.',
18
+ },
19
+ {
20
+ pattern: /\{\{[^}\n]+\}\}/g,
21
+ contents: '**Include**\n\nProcessor-level file inclusion. The language server resolves it only in a trusted, explicitly enabled workspace.',
22
+ },
6
23
  {
7
24
  pattern: /#{1,6}/g,
8
25
  contents: '**Heading**\n\n`#` through `######` create section headings.',
@@ -41,6 +58,9 @@ const rules = [
41
58
  },
42
59
  ];
43
60
  export function hoverAt(source, position) {
61
+ const fence = colonFenceHover(source, position);
62
+ if (fence)
63
+ return fence;
44
64
  const lines = sourceLines(source);
45
65
  try {
46
66
  const hover = astHoverAt(resolve(parse(source)), position, lines);
package/dist/hover.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"hover.js","sourceRoot":"","sources":["../src/hover.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hover.js","sourceRoot":"","sources":["../src/hover.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type CompletionItem, type Position } from 'vscode-languageserver/node.js';
2
+ import type { IncludeOptions } from './includes.js';
3
+ export declare function includeCompletions(source: string, position: Position, options?: IncludeOptions): CompletionItem[];
@@ -0,0 +1,68 @@
1
+ import { readdirSync, readFileSync, realpathSync } from 'node:fs';
2
+ import path from 'node:path';
3
+ import { CompletionItemKind } from 'vscode-languageserver/node.js';
4
+ import { scanDocument } from './workspace-index.js';
5
+ export function includeCompletions(source, position, options) {
6
+ if (!options?.sourcePath || !options.includeRoot)
7
+ return [];
8
+ const line = source.replace(/\r\n?/g, '\n').split('\n')[position.line] ?? '';
9
+ const prefix = line.slice(0, position.character);
10
+ const match = /\{\{\s*([^\s}@]*)$/.exec(prefix);
11
+ if (!match)
12
+ return [];
13
+ const authored = match[1];
14
+ const [filePart, fragment] = authored.split('#', 2);
15
+ const root = realpathSafe(options.includeRoot);
16
+ if (!root)
17
+ return [];
18
+ const base = path.resolve(path.dirname(options.sourcePath), path.dirname(filePart || '.'));
19
+ const contained = realpathSafe(base);
20
+ if (!contained || !isInside(root, contained))
21
+ return [];
22
+ const replaceStart = position.character - (fragment === undefined ? path.basename(filePart) : fragment).length;
23
+ if (fragment !== undefined) {
24
+ const target = realpathSafe(path.resolve(path.dirname(options.sourcePath), filePart));
25
+ if (!target || !isInside(root, target))
26
+ return [];
27
+ let targetSource;
28
+ try {
29
+ targetSource = readFileSync(target, 'utf8');
30
+ }
31
+ catch {
32
+ return [];
33
+ }
34
+ return scanDocument(target, targetSource)
35
+ .filter((token) => token.kind === 'heading' && token.declaration)
36
+ .map((token) => item(token.key, CompletionItemKind.Reference, position, replaceStart, 'Section in included file'));
37
+ }
38
+ const partial = path.basename(filePart);
39
+ let entries;
40
+ try {
41
+ entries = readdirSync(contained, { withFileTypes: true });
42
+ }
43
+ catch {
44
+ return [];
45
+ }
46
+ return entries
47
+ .filter((entry) => entry.name.startsWith(partial) && (entry.isDirectory() || entry.name.endsWith('.crv')))
48
+ .map((entry) => item(entry.name + (entry.isDirectory() ? '/' : ''), entry.isDirectory() ? CompletionItemKind.Folder : CompletionItemKind.File, position, replaceStart, 'Contained include path'));
49
+ }
50
+ function item(label, kind, position, start, detail) {
51
+ return { label, kind, detail, textEdit: {
52
+ range: { start: { line: position.line, character: start }, end: position },
53
+ newText: label,
54
+ } };
55
+ }
56
+ function realpathSafe(value) {
57
+ try {
58
+ return realpathSync(value);
59
+ }
60
+ catch {
61
+ return null;
62
+ }
63
+ }
64
+ function isInside(root, target) {
65
+ const relative = path.relative(root, target);
66
+ return relative === '' || (!path.isAbsolute(relative) && !relative.split(path.sep).includes('..'));
67
+ }
68
+ //# sourceMappingURL=include-completion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"include-completion.js","sourceRoot":"","sources":["../src/include-completion.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,15 @@
1
+ import test from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { mkdtempSync, writeFileSync } from 'node:fs';
4
+ import { tmpdir } from 'node:os';
5
+ import path from 'node:path';
6
+ import { includeCompletions } from './include-completion.js';
7
+ test('completes contained files and their heading fragments', () => {
8
+ const root = mkdtempSync(path.join(tmpdir(), 'carve-include-complete-'));
9
+ const sourcePath = path.join(root, 'main.crv');
10
+ writeFileSync(path.join(root, 'chapter.crv'), '# First section\n');
11
+ const options = { sourcePath, includeRoot: root };
12
+ assert.deepEqual(includeCompletions('{{ cha', { line: 0, character: 6 }, options).map((item) => item.label), ['chapter.crv']);
13
+ assert.deepEqual(includeCompletions('{{ chapter.crv#Fir', { line: 0, character: 18 }, options).map((item) => item.label), ['First-section']);
14
+ });
15
+ //# sourceMappingURL=include-completion.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"include-completion.test.js","sourceRoot":"","sources":["../src/include-completion.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,MAAM,MAAM,oBAAoB,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAE5D,IAAI,CAAC,uDAAuD,EAAE,GAAG,EAAE;IACjE,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,yBAAyB,CAAC,CAAC,CAAA;IACxE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;IAC9C,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,mBAAmB,CAAC,CAAA;IAClE,MAAM,OAAO,GAAG,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,CAAA;IACjD,MAAM,CAAC,SAAS,CAAC,kBAAkB,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAA;IAC7H,MAAM,CAAC,SAAS,CAAC,kBAAkB,CAAC,oBAAoB,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAA;AAC9I,CAAC,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { type InlayHint, type Range } from 'vscode-languageserver/node.js';
2
+ /** Quiet, author-value hints. Clients can disable the provider globally. */
3
+ export declare function inlayHints(source: string, requested?: Range): InlayHint[];
@@ -0,0 +1,43 @@
1
+ import { InlayHintKind } from 'vscode-languageserver/node.js';
2
+ import { parse, resolve } from '@markup-carve/carve';
3
+ /** Quiet, author-value hints. Clients can disable the provider globally. */
4
+ export function inlayHints(source, requested) {
5
+ const hints = [];
6
+ try {
7
+ const doc = resolve(parse(source, { positions: true }));
8
+ walk(doc.children, (node) => {
9
+ if (node.type !== 'heading' || !node.pos || !node.attrs?.id)
10
+ return;
11
+ const line = node.pos.startLine - 1;
12
+ if (requested && (line < requested.start.line || line > requested.end.line))
13
+ return;
14
+ const lines = source.replace(/\r\n?/g, '\n').split('\n');
15
+ const text = lines[line] ?? '';
16
+ // An authored id is already visible; the useful hint is the generated one.
17
+ if (text.includes(`{#${node.attrs.id}`) || (lines[line - 1] ?? '').includes(`#${node.attrs.id}`))
18
+ return;
19
+ hints.push({
20
+ position: { line, character: text.length },
21
+ label: ` #${node.attrs.id}`,
22
+ kind: InlayHintKind.Type,
23
+ paddingLeft: true,
24
+ tooltip: 'Generated heading id',
25
+ });
26
+ });
27
+ }
28
+ catch {
29
+ return [];
30
+ }
31
+ return hints;
32
+ }
33
+ function walk(nodes, visit) {
34
+ for (const node of nodes) {
35
+ visit(node);
36
+ if ('children' in node && Array.isArray(node.children))
37
+ walk(node.children.filter(isBlock), visit);
38
+ }
39
+ }
40
+ function isBlock(value) {
41
+ return Boolean(value && typeof value === 'object' && 'type' in value);
42
+ }
43
+ //# sourceMappingURL=inlay-hints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inlay-hints.js","sourceRoot":"","sources":["../src/inlay-hints.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA8B,MAAM,+BAA+B,CAAA;AACzF,OAAO,EAAE,KAAK,EAAE,OAAO,EAAkB,MAAM,qBAAqB,CAAA;AAEpE,4EAA4E;AAC5E,MAAM,UAAU,UAAU,CAAC,MAAc,EAAE,SAAiB;IAC1D,MAAM,KAAK,GAAgB,EAAE,CAAA;IAC7B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QACvD,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;YAC1B,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE;gBAAE,OAAM;YACnE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,CAAA;YACnC,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,OAAM;YACnF,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YACxD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;YAC9B,2EAA2E;YAC3E,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;gBAAE,OAAM;YACxG,KAAK,CAAC,IAAI,CAAC;gBACT,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE;gBAC1C,KAAK,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE;gBAC5B,IAAI,EAAE,aAAa,CAAC,IAAI;gBACxB,WAAW,EAAE,IAAI;gBACjB,OAAO,EAAE,sBAAsB;aAChC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,IAAI,CAAC,KAAkB,EAAE,KAAgC;IAChE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,CAAA;QACX,IAAI,UAAU,IAAI,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAA;IACpG,CAAC;AACH,CAAC;AAED,SAAS,OAAO,CAAC,KAAc;IAC7B,OAAO,OAAO,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,CAAC,CAAA;AACvE,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,10 @@
1
+ import test from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { inlayHints } from './inlay-hints.js';
4
+ test('shows generated heading ids and omits authored ids', () => {
5
+ const generated = inlayHints('# Hello world\n');
6
+ assert.equal(generated.length, 1);
7
+ assert.match(String(generated[0].label).toLocaleLowerCase(), /hello-world/);
8
+ assert.equal(inlayHints('{#custom}\n# Hello world\n').length, 0);
9
+ });
10
+ //# sourceMappingURL=inlay-hints.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inlay-hints.test.js","sourceRoot":"","sources":["../src/inlay-hints.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,MAAM,MAAM,oBAAoB,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C,IAAI,CAAC,oDAAoD,EAAE,GAAG,EAAE;IAC9D,MAAM,SAAS,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAA;IAC/C,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACjC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,CAAC,iBAAiB,EAAE,EAAE,aAAa,CAAC,CAAA;IAC5E,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,4BAA4B,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;AAClE,CAAC,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { type CodeAction, type Diagnostic } from 'vscode-languageserver/node.js';
2
+ /** Safe, local rewrites for diagnostics emitted by lintCarve. */
3
+ export declare function lintCodeActions(uri: string, source: string, diagnostics: Diagnostic[]): CodeAction[];
@@ -0,0 +1,90 @@
1
+ import { CodeActionKind } from 'vscode-languageserver/node.js';
2
+ /** Safe, local rewrites for diagnostics emitted by lintCarve. */
3
+ export function lintCodeActions(uri, source, diagnostics) {
4
+ const lines = source.replace(/\r\n?/g, '\n').split('\n');
5
+ const actions = [];
6
+ for (const diagnostic of diagnostics) {
7
+ const code = String(diagnostic.code ?? '');
8
+ const line = lines[diagnostic.range.start.line] ?? '';
9
+ let edit = null;
10
+ let title = '';
11
+ if (code === 'raw-block-syntax') {
12
+ const match = /^(\s*`{3,})raw(?: +([^\s]+))?/.exec(line);
13
+ if (match) {
14
+ const replacement = `${match[1]}=${match[2] ?? 'html'}`;
15
+ edit = replace(diagnostic.range.start.line, match[0].length, replacement);
16
+ title = 'Convert to a Carve raw fence';
17
+ }
18
+ }
19
+ else if (code === 'blockquote-marker-without-space') {
20
+ const marker = /^\s*>/.exec(line);
21
+ if (marker) {
22
+ const character = marker[0].length;
23
+ edit = { range: point(diagnostic.range.start.line, character), newText: ' ' };
24
+ title = 'Insert the block-quote separator';
25
+ }
26
+ }
27
+ else if (code === 'table-alignment-run-padding') {
28
+ const marker = /\|=?[<>~^v]{1,2}(?=\S)/.exec(line);
29
+ if (marker) {
30
+ const character = marker.index + marker[0].length;
31
+ edit = { range: point(diagnostic.range.start.line, character), newText: ' ' };
32
+ title = 'Terminate the table alignment run with a space';
33
+ }
34
+ }
35
+ else if (code === 'unresolved-footnote') {
36
+ const match = /\[\^([^\]]+)\]/.exec(line.slice(diagnostic.range.start.character)) ?? /\[\^([^\]]+)\]/.exec(line);
37
+ if (match) {
38
+ edit = append(source, `\n[^${match[1]}]: `);
39
+ title = `Create footnote definition “${match[1]}”`;
40
+ }
41
+ }
42
+ else if (code === 'unresolved-reference-link') {
43
+ const match = /\]\[([^\]]+)\]/.exec(line.slice(diagnostic.range.start.character)) ?? /\]\[([^\]]+)\]/.exec(line);
44
+ if (match && match[1]) {
45
+ edit = append(source, `\n[${match[1]}]: `);
46
+ title = `Create link definition “${match[1]}”`;
47
+ }
48
+ }
49
+ else if (code === 'colon-fence-length-mismatch') {
50
+ const authored = /^\s*(:{3,})/.exec(line);
51
+ const expected = Number(diagnostic.data?.expectedWidth);
52
+ if (authored && Number.isInteger(expected) && expected >= 3) {
53
+ const start = line.indexOf(authored[1]);
54
+ const range = { start: { line: diagnostic.range.start.line, character: start }, end: { line: diagnostic.range.start.line, character: start + authored[1].length } };
55
+ actions.push({
56
+ title: `Resize to ${expected} colons and close the container`, kind: CodeActionKind.QuickFix,
57
+ diagnostics: [diagnostic], isPreferred: true,
58
+ edit: { changes: { [uri]: [{ range, newText: ':'.repeat(expected) }] } },
59
+ });
60
+ actions.push({
61
+ title: 'Preserve the colon run as literal text', kind: CodeActionKind.QuickFix,
62
+ diagnostics: [diagnostic], isPreferred: false,
63
+ edit: { changes: { [uri]: [{ range: point(diagnostic.range.start.line, start), newText: '\\' }] } },
64
+ });
65
+ }
66
+ }
67
+ if (!edit)
68
+ continue;
69
+ actions.push({
70
+ title,
71
+ kind: CodeActionKind.QuickFix,
72
+ diagnostics: [diagnostic],
73
+ isPreferred: true,
74
+ edit: { changes: { [uri]: [edit] } },
75
+ });
76
+ }
77
+ return actions;
78
+ }
79
+ function append(source, newText) {
80
+ const lines = source.replace(/\r\n?/g, '\n').split('\n');
81
+ const line = Math.max(0, lines.length - 1);
82
+ return { range: point(line, lines[line]?.length ?? 0), newText };
83
+ }
84
+ function point(line, character) {
85
+ return { start: { line, character }, end: { line, character } };
86
+ }
87
+ function replace(line, end, newText) {
88
+ return { range: { start: { line, character: 0 }, end: { line, character: end } }, newText };
89
+ }
90
+ //# sourceMappingURL=lint-actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lint-actions.js","sourceRoot":"","sources":["../src/lint-actions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};