@markup-carve/carve-lsp 0.1.9 → 0.1.11

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 (165) hide show
  1. package/README.md +119 -7
  2. package/dist/analyze.d.ts +1 -1
  3. package/dist/analyze.js +86 -94
  4. package/dist/analyze.js.map +1 -1
  5. package/dist/ast-walk.d.ts +24 -0
  6. package/dist/ast-walk.js +35 -0
  7. package/dist/ast-walk.js.map +1 -0
  8. package/dist/ast-walk.test.d.ts +1 -0
  9. package/dist/ast-walk.test.js +23 -0
  10. package/dist/ast-walk.test.js.map +1 -0
  11. package/dist/attribute-completion.test.d.ts +1 -0
  12. package/dist/attribute-completion.test.js +18 -0
  13. package/dist/attribute-completion.test.js.map +1 -0
  14. package/dist/browser-entry.test.d.ts +1 -0
  15. package/dist/browser-entry.test.js +52 -0
  16. package/dist/browser-entry.test.js.map +1 -0
  17. package/dist/browser.d.ts +25 -0
  18. package/dist/browser.js +26 -0
  19. package/dist/browser.js.map +1 -0
  20. package/dist/captions.d.ts +1 -1
  21. package/dist/captions.js +27 -45
  22. package/dist/captions.js.map +1 -1
  23. package/dist/codelens.d.ts +4 -4
  24. package/dist/codelens.js +14 -37
  25. package/dist/codelens.js.map +1 -1
  26. package/dist/colon-fences.d.ts +1 -1
  27. package/dist/colon-fences.js +34 -10
  28. package/dist/colon-fences.js.map +1 -1
  29. package/dist/colon-fences.test.js +37 -0
  30. package/dist/colon-fences.test.js.map +1 -1
  31. package/dist/completion.d.ts +1 -1
  32. package/dist/completion.js +123 -22
  33. package/dist/completion.js.map +1 -1
  34. package/dist/completion.test.js +58 -1
  35. package/dist/completion.test.js.map +1 -1
  36. package/dist/composite-figure-crossref.test.js +2 -2
  37. package/dist/composite-figure-crossref.test.js.map +1 -1
  38. package/dist/corpus-through-server.test.d.ts +1 -0
  39. package/dist/corpus-through-server.test.js +109 -0
  40. package/dist/corpus-through-server.test.js.map +1 -0
  41. package/dist/definition.d.ts +2 -1
  42. package/dist/definition.js +76 -181
  43. package/dist/definition.js.map +1 -1
  44. package/dist/definition.test.js +13 -7
  45. package/dist/definition.test.js.map +1 -1
  46. package/dist/document-highlights.d.ts +1 -1
  47. package/dist/document-highlights.js +2 -2
  48. package/dist/document-highlights.js.map +1 -1
  49. package/dist/document-highlights.test.js +4 -0
  50. package/dist/document-highlights.test.js.map +1 -1
  51. package/dist/document-links.d.ts +2 -2
  52. package/dist/document-links.js +35 -18
  53. package/dist/document-links.js.map +1 -1
  54. package/dist/export-actions.d.ts +1 -1
  55. package/dist/export-actions.js +1 -1
  56. package/dist/export-actions.js.map +1 -1
  57. package/dist/folding.d.ts +22 -4
  58. package/dist/folding.js +94 -33
  59. package/dist/folding.js.map +1 -1
  60. package/dist/format.d.ts +46 -1
  61. package/dist/format.js +560 -8
  62. package/dist/format.js.map +1 -1
  63. package/dist/format.test.js +113 -2
  64. package/dist/format.test.js.map +1 -1
  65. package/dist/hover.d.ts +1 -1
  66. package/dist/hover.js +21 -65
  67. package/dist/hover.js.map +1 -1
  68. package/dist/include-completion.d.ts +1 -1
  69. package/dist/include-completion.js +8 -2
  70. package/dist/include-completion.js.map +1 -1
  71. package/dist/include-definition.d.ts +1 -1
  72. package/dist/include-definition.js +18 -4
  73. package/dist/include-definition.js.map +1 -1
  74. package/dist/include-merge-diagnostics.test.js +1 -1
  75. package/dist/include-merge-diagnostics.test.js.map +1 -1
  76. package/dist/include-paths.d.ts +13 -0
  77. package/dist/include-paths.js +18 -0
  78. package/dist/include-paths.js.map +1 -0
  79. package/dist/include-seam-navigation.test.js +11 -11
  80. package/dist/include-selection.d.ts +1 -1
  81. package/dist/include-settings.js +2 -1
  82. package/dist/include-settings.js.map +1 -1
  83. package/dist/includes.d.ts +3 -0
  84. package/dist/includes.js +0 -28
  85. package/dist/includes.js.map +1 -1
  86. package/dist/inlay-hints.d.ts +1 -1
  87. package/dist/inlay-hints.js +17 -19
  88. package/dist/inlay-hints.js.map +1 -1
  89. package/dist/lint-actions.d.ts +1 -1
  90. package/dist/lint-actions.js +11 -6
  91. package/dist/lint-actions.js.map +1 -1
  92. package/dist/lint-actions.test.js +17 -0
  93. package/dist/lint-actions.test.js.map +1 -1
  94. package/dist/list-continuation.test.d.ts +1 -0
  95. package/dist/list-continuation.test.js +322 -0
  96. package/dist/list-continuation.test.js.map +1 -0
  97. package/dist/list-indent.test.d.ts +1 -0
  98. package/dist/list-indent.test.js +138 -0
  99. package/dist/list-indent.test.js.map +1 -0
  100. package/dist/list-items.d.ts +65 -0
  101. package/dist/list-items.js +162 -0
  102. package/dist/list-items.js.map +1 -0
  103. package/dist/list-marker-hints.d.ts +16 -0
  104. package/dist/list-marker-hints.js +42 -0
  105. package/dist/list-marker-hints.js.map +1 -0
  106. package/dist/list-marker-hints.test.d.ts +1 -0
  107. package/dist/list-marker-hints.test.js +105 -0
  108. package/dist/list-marker-hints.test.js.map +1 -0
  109. package/dist/migration-actions.d.ts +1 -1
  110. package/dist/migration-actions.js +1 -1
  111. package/dist/migration-actions.js.map +1 -1
  112. package/dist/node-include-paths.d.ts +3 -0
  113. package/dist/node-include-paths.js +17 -0
  114. package/dist/node-include-paths.js.map +1 -0
  115. package/dist/parse-cache.d.ts +4 -0
  116. package/dist/parse-cache.js +27 -0
  117. package/dist/parse-cache.js.map +1 -0
  118. package/dist/position.js +35 -12
  119. package/dist/position.js.map +1 -1
  120. package/dist/position.test.js +30 -0
  121. package/dist/position.test.js.map +1 -1
  122. package/dist/reference-sites.d.ts +48 -0
  123. package/dist/reference-sites.js +223 -0
  124. package/dist/reference-sites.js.map +1 -0
  125. package/dist/references.d.ts +1 -1
  126. package/dist/references.js +101 -271
  127. package/dist/references.js.map +1 -1
  128. package/dist/references.test.js +20 -6
  129. package/dist/references.test.js.map +1 -1
  130. package/dist/rename.d.ts +1 -1
  131. package/dist/rename.js +25 -51
  132. package/dist/rename.js.map +1 -1
  133. package/dist/selection.d.ts +1 -1
  134. package/dist/semantic.js +90 -18
  135. package/dist/semantic.js.map +1 -1
  136. package/dist/semantic.test.js +33 -0
  137. package/dist/semantic.test.js.map +1 -1
  138. package/dist/server.js +46 -5
  139. package/dist/server.js.map +1 -1
  140. package/dist/settings.d.ts +2 -0
  141. package/dist/settings.js +8 -0
  142. package/dist/settings.js.map +1 -1
  143. package/dist/settings.test.js +13 -1
  144. package/dist/settings.test.js.map +1 -1
  145. package/dist/spec-0-1-4-constructs.test.js +18 -11
  146. package/dist/spec-0-1-4-constructs.test.js.map +1 -1
  147. package/dist/structure-views.test.d.ts +1 -0
  148. package/dist/structure-views.test.js +105 -0
  149. package/dist/structure-views.test.js.map +1 -0
  150. package/dist/table-diagnostics.d.ts +7 -2
  151. package/dist/table-diagnostics.js +34 -38
  152. package/dist/table-diagnostics.js.map +1 -1
  153. package/dist/table-diagnostics.test.js +18 -7
  154. package/dist/table-diagnostics.test.js.map +1 -1
  155. package/dist/workspace-graph.js +1 -1
  156. package/dist/workspace-graph.js.map +1 -1
  157. package/dist/workspace-index.d.ts +6 -3
  158. package/dist/workspace-index.js +65 -97
  159. package/dist/workspace-index.js.map +1 -1
  160. package/dist/workspace-index.test.js +5 -5
  161. package/dist/workspace-index.test.js.map +1 -1
  162. package/dist/workspace-navigation.test.d.ts +1 -0
  163. package/dist/workspace-navigation.test.js +205 -0
  164. package/dist/workspace-navigation.test.js.map +1 -0
  165. package/package.json +8 -3
package/README.md CHANGED
@@ -25,16 +25,16 @@ The server communicates over **stdio** (`--stdio` flag).
25
25
  | Diagnostics | Push, document-pull, and workspace-pull diagnostics for syntax, migration hazards, silent failures, include failures, table metadata, dead references, and duplicate declarations |
26
26
  | Symbols | Nested document outline plus queryable workspace symbols, including included files |
27
27
  | Hover | Markup, cross-reference, include, citation, and table-marker explanations |
28
- | Completion | Admonitions, attributes, semantic spans, citations, references, workspace anchors, and contained include paths, sections and options |
28
+ | Completion | Container kinds (admonitions, placement markers, extension containers), code fence languages, attributes, semantic spans, citations, references, heading titles as `[Heading][]` links, workspace anchors, and contained include paths, sections and options |
29
29
  | Navigation | Document links, go-to-definition, highlights, and references for anchors, captions, footnotes, citations, and link labels |
30
- | Rename | Workspace-wide, namespace-aware rename; generated heading ids become explicit when renamed |
30
+ | Rename | Namespace-aware rename: anchors, captions and citation keys across the workspace, footnote and link labels within their document; generated heading ids become explicit when renamed |
31
31
  | Code actions | Migration and lint quick-fixes, table marker repair, creation of missing definitions, and export to Markdown or HTML |
32
32
  | Code lens | Reference counts for anchors, captions, citations, footnotes, and link labels |
33
33
  | Selection and folding | Syntax-aware selection expansion and folding, with tolerant fallbacks during incomplete edits |
34
- | Formatting | Conservative document/range formatting, on-type continuation, or explicit migration formatting |
34
+ | Formatting | Conservative document/range formatting, on-type continuation (see below), or explicit migration formatting |
35
35
  | Semantic tokens | Full, ranged, and delta token updates, including table structure and alignment metadata |
36
- | Inlay hints | Generated heading ids (configurable) |
37
- | Commands | Preview/AST output plus workspace graph, backlinks, generated navigation, and transitive rebuild impact |
36
+ | Inlay hints | Generated heading ids, colon-fence closers, and a `list item` / `task` hint after a bare list marker on the line being edited (configurable) |
37
+ | Commands | Preview/AST output, list indent/outdent (`carve.listIndent`), workspace graph, backlinks, generated navigation, and transitive rebuild impact |
38
38
  | File inclusion | Resolves `{{ path }}` directives, watches dependencies, and reports failures as diagnostics - **off by default**, see below |
39
39
 
40
40
  Workspace navigation is backed by a versioned `.crv` index. The initial scan
@@ -46,6 +46,84 @@ The same index exposes `carve.workspaceGraph`, `carve.backlinks`,
46
46
  usage, document links, includes, and local asset dependencies; unresolved edges
47
47
  are reported separately for migration and build tooling.
48
48
 
49
+ ## On-type continuation
50
+
51
+ The server answers `textDocument/onTypeFormatting` for Enter. VS Code sends
52
+ it only with `editor.formatOnType` on.
53
+
54
+ | Line before Enter | Result |
55
+ |---|---|
56
+ | `- item`, `* item` | next line starts with the same bullet |
57
+ | `1. item`, `a) item`, `ii. item`, `. item` | next marker in the same style: `2. `, `b) `, `iii. `, `. ` |
58
+ | `- [x] item` | `- [ ] ` |
59
+ | `-{.c} item`, `1.{.c} item` | a plain next marker: `- `, `2. ` (attributes are not copied) |
60
+ | `- `, `2. `, `- [ ] ` (marker only) | the marker is removed and the list ends |
61
+ | `> - item`, `[^a]: - item`, `: - item` | the next marker after the container prefix: `> - `, ` - `, ` - ` |
62
+ | `> - ` (marker only, in a quote) | the line becomes `>` and the next line starts with `> ` |
63
+ | `:: term`, `: definition` | the next definition: `: `, keeping the separator width (`: def` continues as `: `) |
64
+ | `: ` (marker only, in a description list) | the marker is removed and the list ends |
65
+ | `> quote`, `\| cell` | the matching prefix |
66
+ | `> ` (quote prefix only) | one quote level is dropped: `> ` becomes an empty line, `> > ` becomes `>` with `> ` on the next line |
67
+ | `::: note`, ```` ```js ````, `~~~` | the matching closer below the cursor, unless the block is already closed |
68
+
69
+ The new marker keeps the indent and, where the marker's width allows, the
70
+ content column of the previous item (`9. item` continues as `10. `). Lists
71
+ inside quotes, divs, footnote bodies and descriptions continue too, including
72
+ nested combinations such as `> > - a` or a quote inside a list item; the quote
73
+ prefix and the marker arrive as one edit. Ending a quoted list leaves a blank
74
+ `>` line, so the quote stays open for the next paragraph. A line
75
+ starting with `+` (the continuation marker), `(1)`, and list lines inside code
76
+ or raw blocks are not continued. A lone `-` without a separator is left alone,
77
+ since it may be prose.
78
+
79
+ Closers are inserted only for an opener that has none yet, so Enter on the
80
+ opener of a closed container or code block adds nothing. A fence line that
81
+ closes a block, or one inside a code block, gets no closer; a code fence
82
+ inside a quote or list item continues with its container prefix instead. A
83
+ browser host that removes a content-less marker on Backspace, or hides it from
84
+ a preview, can test the text after the quote prefix and indent with the
85
+ exported `BARE_CONTINUATION_MARKER`.
86
+
87
+ ## Completion
88
+
89
+ | Typed | Offered |
90
+ |---|---|
91
+ | `::: ` | admonition kinds, `figure`, the placement markers (`toc`, `footnotes`, `references`, `bibliography`, `glossary`, `index`), the extension containers (`details`, `spoiler`, `tabs`, `tab`, `list-table`, `code-group`), and the symbol forms `>`, `\|`, `\` before a word is started |
92
+ | ```` ``` ````, `~~~` | common code languages, `math`, `mermaid`, `svg`, and the raw formats `=html`, `=latex` (not inside a code block) |
93
+ | `[` and at least one character | headings whose text starts with it, inserted as a collapsed reference `[Heading][]` |
94
+ | `{{ ` | include paths, sections and options (with file inclusion on); never attributes |
95
+
96
+ The heading list stays empty until the text after `[` matches a heading, so
97
+ ordinary link text and bracketed prose get no popup. `![`, `[[`, `\[`, `[^`
98
+ and `[@` are left to their own completions.
99
+
100
+ ## List indent and outdent
101
+
102
+ Hosts indent a line by a fixed amount, but Carve nests a list item only when
103
+ its marker reaches the content column of the item above (`1. a` needs three
104
+ spaces before `- b`, `10. a` needs four). The `carve.listIndent` command does
105
+ it the Carve way, for a host to bind to Tab and Shift+Tab:
106
+
107
+ ```json
108
+ { "command": "carve.listIndent", "arguments": [{ "uri": "file:///notes.crv", "line": 4, "direction": "indent" }] }
109
+ ```
110
+
111
+ - `indent` nests the item under its previous sibling, at that sibling's
112
+ content column. `outdent` moves it to its parent's level.
113
+ - The item's continuation lines and children move with it.
114
+ - A bullet keeps its character. An ordered item that starts a child list
115
+ restarts at the style's first ordinal (`1.`, `a.`, `i.`); joining an existing
116
+ child list, or outdenting into an ordered parent list, takes the next ordinal.
117
+ - It works on a content-less marker (`- ` right after Enter) and inside quotes,
118
+ divs, footnote bodies and descriptions. Each edit is checked against the
119
+ parser: the item must reparse at the intended depth.
120
+
121
+ The result is the `TextEdit[]` for that document, which the host applies
122
+ (as one undo step when several lines move), or `null` when there is nothing to
123
+ do: the first item of a list has nothing to nest under, a top-level item cannot
124
+ be outdented, or the line is not a list item. On `null` the host should run its
125
+ own Tab.
126
+
49
127
  ## Language settings
50
128
 
51
129
  Clients can send these under `carve` in initialization options or
@@ -57,7 +135,7 @@ watches it for changes.
57
135
  |---|---|---|
58
136
  | `platforms` | `[]` | Extra platform lint profiles. Currently supports `"github"`. |
59
137
  | `extensions` | `[]` | Enabled extension names, for example `"semantic-span"`. |
60
- | `inlayHints` | `true` | Show generated heading identifiers. |
138
+ | `inlayHints` | `true` | Show inlay hints: generated heading identifiers, colon-fence closers, and the bare list marker hint. `false` turns all of them off; an object such as `{ "bareListMarkers": false }` keeps the others and turns that one off. |
61
139
  | `exportActions` | `true` | Offer the *Export as Markdown* / *Export as HTML* source actions. Editors with their own export commands can turn this off. |
62
140
  | `formatter` | `"conservative"` | Use whitespace-only conservative formatting; `"migration"` opts into canonical whole-document conversion. |
63
141
  | `severities` | `{}` | Override a diagnostic code with `"error"`, `"warning"`, `"information"`, `"hint"`, or `"off"`. |
@@ -69,13 +147,25 @@ Example `.carverc.json`:
69
147
  "carve": {
70
148
  "platforms": ["github"],
71
149
  "extensions": ["semantic-span"],
72
- "inlayHints": true,
150
+ "inlayHints": { "bareListMarkers": true },
73
151
  "formatter": "conservative",
74
152
  "severities": { "table-width-total": "error" }
75
153
  }
76
154
  }
77
155
  ```
78
156
 
157
+ ### Bare list marker hint
158
+
159
+ A list marker with no content after it (`- `, `2. `, `- [ ] `) is paragraph
160
+ text, not an empty list item. While a new item is being typed, the server shows
161
+ `list item` (or `task` for `- [ ] `) as an inlay hint after the marker. The
162
+ hint appears only on the line the last edit touched, and only when the marker
163
+ belongs to a list (it is lazy text of an item, or would continue a list once
164
+ content lands, also inside a quote, div, footnote or description), so a lone
165
+ `- ` in prose is never hinted
166
+ and the hint goes away once the author edits elsewhere. Turn it off on its own
167
+ with `"inlayHints": { "bareListMarkers": false }`.
168
+
79
169
  ## File inclusion
80
170
 
81
171
  Carve's `{{ path }}` directive is a processor-level feature (PART 9 §19 of the
@@ -246,6 +336,28 @@ Any editor with LSP support can start the server as an external process:
246
336
  - **File extension:** `.crv` (language ID: `carve`)
247
337
  - **Root pattern:** `.git` or the project root
248
338
 
339
+ ## Browser use
340
+
341
+ `@markup-carve/carve-lsp/browser` exports the analysis functions without the
342
+ language-server transport or any Node.js built-in, for an editor that runs
343
+ them in the page (a CodeMirror or Monaco playground):
344
+
345
+ ```js
346
+ import { analyzeCarve, completionAt, hoverAt, listContinuationEdits } from '@markup-carve/carve-lsp/browser'
347
+
348
+ const { diagnostics, symbols } = analyzeCarve(source)
349
+ const items = completionAt(source, { line: 3, character: 4 })
350
+ ```
351
+
352
+ Positions are LSP positions (0-based line, UTF-16 character). File inclusion
353
+ stays off unless you pass `includes` with a `resolver` of your own; give it a
354
+ `paths` implementation too if your children are not plain file paths. The
355
+ exported set covers diagnostics, outline symbols, completion, hover, folding,
356
+ selection ranges, links, highlights, references, definitions, rename, inlay
357
+ hints, on-type continuation (`listContinuationEdits`, `continuationPrefix`,
358
+ `BARE_CONTINUATION_MARKER`) and list indent, quick fixes, table checks and
359
+ code lenses.
360
+
249
361
  ## Development
250
362
 
251
363
  Contributor setup, testing, and maintenance notes are in the [development guide](docs/development.md).
package/dist/analyze.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { DocumentSymbol, SymbolInformation, type Diagnostic, type Range } from 'vscode-languageserver/node.js';
1
+ import { DocumentSymbol, SymbolInformation, type Diagnostic, type Range } from 'vscode-languageserver-types';
2
2
  import { type LintPlatform } from '@markup-carve/carve';
3
3
  import { type IncludeDependency, type IncludeOptions } from './includes.js';
4
4
  import type { IncludeParseCache } from './include-cache.js';
package/dist/analyze.js CHANGED
@@ -1,19 +1,21 @@
1
- import { DiagnosticSeverity, SymbolKind, } from 'vscode-languageserver/node.js';
1
+ import { DiagnosticSeverity, SymbolKind, } from 'vscode-languageserver-types';
2
2
  import { djotMigrationWarnings, lintCarve, parse, resolve, } from '@markup-carve/carve';
3
- import path from 'node:path';
4
- import { pathToFileURL } from 'node:url';
3
+ import { portableIncludePaths } from './include-paths.js';
5
4
  import { smartPunctuationText } from './inline-text.js';
6
5
  import { panelLetter } from './captions.js';
7
6
  import { includeDenialCode } from './include-denial.js';
8
7
  import { resolveIncludes, } from './includes.js';
9
8
  import { tableDiagnostics } from './table-diagnostics.js';
10
9
  import { colonFenceStructure } from './colon-fences.js';
11
- import { astOffsetToIndex } from './position.js';
10
+ import { astOffsetToIndex, sourceLines } from './position.js';
11
+ import { walkNodes } from './ast-walk.js';
12
+ import { headingSections } from './folding.js';
13
+ import { resolvedDocument } from './parse-cache.js';
12
14
  export function analyzeCarve(source, options = {}) {
13
15
  const diagnostics = [];
14
16
  let doc = null;
15
17
  try {
16
- doc = resolve(parse(source));
18
+ doc = resolvedDocument(source);
17
19
  }
18
20
  catch (error) {
19
21
  const message = error instanceof Error ? error.message : String(error);
@@ -59,12 +61,12 @@ export function analyzeCarve(source, options = {}) {
59
61
  platforms: options.lint?.platforms,
60
62
  extensions: lintExtensions,
61
63
  })) {
62
- const len = Math.max(1, warning.end - warning.start);
64
+ // `start`/`end` are UTF-16 offsets into the source as given; `column` counts codepoints.
63
65
  const diagnostic = {
64
66
  severity: DiagnosticSeverity.Warning,
65
67
  range: {
66
- start: { line: warning.line - 1, character: warning.column - 1 },
67
- end: { line: warning.line - 1, character: warning.column - 1 + len },
68
+ start: positionAt(source, warning.start),
69
+ end: positionAt(source, Math.max(warning.start + 1, warning.end)),
68
70
  },
69
71
  source: 'carve',
70
72
  code: warning.rule,
@@ -93,8 +95,9 @@ export function analyzeCarve(source, options = {}) {
93
95
  // in an untrusted or unconfigured workspace keeps its `{{ … }}` literal and
94
96
  // nothing on disk is touched.
95
97
  const includes = resolveIncludes(norm, options.includes ?? {});
98
+ const paths = options.includes?.paths ?? portableIncludePaths;
96
99
  for (const warning of includes.warnings) {
97
- const child = childLocation(warning, includes.documents);
100
+ const child = childLocation(warning, includes.documents, paths);
98
101
  diagnostics.push({
99
102
  severity: DiagnosticSeverity.Warning,
100
103
  range: {
@@ -110,7 +113,7 @@ export function analyzeCarve(source, options = {}) {
110
113
  // resolver's own error out of author-visible text, and it routinely
111
114
  // carries absolute host paths. The attributed child is named relative to
112
115
  // the include root for the same reason - never as an absolute path.
113
- message: attributeToChild(warning.message, warning.file, options.includes),
116
+ message: attributeToChild(warning.message, warning.file, options.includes, paths),
114
117
  // The child is NAMED in the message for a client that renders none of
115
118
  // this, and LOCATED here for one that does. Both, because dropping the
116
119
  // prose regresses every client without related information, and dropping
@@ -120,9 +123,9 @@ export function analyzeCarve(source, options = {}) {
120
123
  }
121
124
  return {
122
125
  diagnostics: configuredDiagnostics(diagnostics, options.lint?.severities),
123
- symbols: doc ? documentSymbols(doc) : tolerantHeadingSymbols(source),
126
+ symbols: doc ? documentSymbols(doc, source) : tolerantHeadingSymbols(source),
124
127
  dependencies: includes.dependencies,
125
- includedSymbols: includedSymbols(includes.documents, options.includedParseCache),
128
+ includedSymbols: includedSymbols(includes.documents, options.includedParseCache, paths),
126
129
  };
127
130
  }
128
131
  function configuredDiagnostics(diagnostics, overrides) {
@@ -175,7 +178,7 @@ function firstDuplicateDeclaration(source, rule, message, repeatedLine) {
175
178
  const match = headingKey
176
179
  ? /^\{[^}]*#([^\s}]+)[^}]*\}\s*$/.exec(text)
177
180
  : /^(?: {0,3})\[\^([^\]]+)\]:/.exec(text);
178
- if (!match || match[1].toLocaleLowerCase() !== key.toLocaleLowerCase())
181
+ if (!match || match[1] !== key)
179
182
  continue;
180
183
  const character = text.indexOf(match[1]);
181
184
  if (line >= repeatedLine - 1)
@@ -187,7 +190,7 @@ function firstDuplicateDeclaration(source, rule, message, repeatedLine) {
187
190
  }
188
191
  return declarations[0] ?? null;
189
192
  }
190
- function includedSymbols(documents, cache) {
193
+ function includedSymbols(documents, cache, paths) {
191
194
  const symbols = [];
192
195
  for (const child of documents) {
193
196
  let document = child.version === undefined ? undefined : cache?.get(child.id, child.version);
@@ -201,19 +204,20 @@ function includedSymbols(documents, cache) {
201
204
  if (child.version !== undefined)
202
205
  cache?.set(child.id, child.version, document);
203
206
  }
204
- const uri = pathToFileURL(child.id).toString();
205
- for (const entry of walkOutline(document.children)) {
207
+ const uri = paths.toUri(child.id);
208
+ const lines = sourceLines(child.source);
209
+ for (const entry of walkOutline(document)) {
206
210
  // An INCLUDED file contributes its headings, flat. A composite figure is
207
211
  // a landmark inside its own file rather than a navigable entry in
208
212
  // another one, so it stays out of this list.
209
213
  if (entry.type !== 'heading')
210
214
  continue;
211
- const symbol = headingSymbol(entry);
215
+ const symbol = headingSymbol(entry, lines);
212
216
  symbols.push({
213
217
  name: symbol.name,
214
218
  kind: symbol.kind,
215
219
  location: { uri, range: symbol.range },
216
- containerName: path.basename(child.id),
220
+ containerName: paths.basename(child.id),
217
221
  });
218
222
  }
219
223
  }
@@ -231,7 +235,7 @@ function includedSymbols(documents, cache) {
231
235
  * `/virtual/child.crv`, which `path.isAbsolute` accepts and which no editor can
232
236
  * open. `watch` is only set by a resolver that read the target off a disk.
233
237
  */
234
- function childLocation(warning, documents) {
238
+ function childLocation(warning, documents, paths) {
235
239
  const { file, within } = warning;
236
240
  if (file === undefined || within === undefined)
237
241
  return undefined;
@@ -239,7 +243,7 @@ function childLocation(warning, documents) {
239
243
  if (child?.watch === undefined)
240
244
  return undefined;
241
245
  return {
242
- uri: pathToFileURL(child.watch).toString(),
246
+ uri: paths.toUri(child.watch),
243
247
  range: {
244
248
  start: positionAt(child.source, astOffsetToIndex(child.source, within.start)),
245
249
  end: positionAt(child.source, astOffsetToIndex(child.source, within.end)),
@@ -251,31 +255,20 @@ function childLocation(warning, documents) {
251
255
  * root. A warning raised in the document the client already has open adds
252
256
  * nothing and is left alone.
253
257
  */
254
- function attributeToChild(message, file, includes) {
258
+ function attributeToChild(message, file, includes, paths) {
255
259
  if (file === undefined || file === includes?.sourcePath)
256
260
  return message;
257
- return `${message} (in ${relativeToRoot(file, includes?.includeRoot)})`;
261
+ const root = includes?.includeRoot;
262
+ return `${message} (in ${root === undefined ? file : paths.relativeToRoot(file, root)})`;
258
263
  }
259
- /**
260
- * A child's identity as the author wrote it: relative to the include root,
261
- * segment-wise, so a sibling directory named `..foo` is not mistaken for an
262
- * escape. A file that is not under the root at all is named as it came, since
263
- * inventing a relative form for it would be a lie.
264
- */
265
- function relativeToRoot(file, root) {
266
- if (root === undefined)
267
- return file;
268
- const relative = path.relative(root, file);
269
- if (!relative || path.isAbsolute(relative))
270
- return file;
271
- if (relative.split(path.sep)[0] === '..')
272
- return file;
273
- return relative;
274
- }
275
- function documentSymbols(doc) {
264
+ function documentSymbols(doc, source) {
265
+ const lines = sourceLines(source);
276
266
  const stack = [];
277
267
  const roots = [];
278
268
  const place = (symbol) => {
269
+ // A section that ended (its container closed) cannot hold what follows.
270
+ while (stack.length && stack[stack.length - 1].symbol.range.end.line < symbol.range.start.line)
271
+ stack.pop();
279
272
  const parent = stack[stack.length - 1];
280
273
  if (parent) {
281
274
  parent.symbol.children ??= [];
@@ -285,61 +278,49 @@ function documentSymbols(doc) {
285
278
  roots.push(symbol);
286
279
  }
287
280
  };
288
- for (const entry of walkOutline(doc.children)) {
281
+ const sections = new Map(headingSections(doc, lines).map((section) => [section.heading, section.endLine]));
282
+ for (const entry of walkOutline(doc)) {
289
283
  if (entry.type === 'figure_group') {
290
284
  // A composite figure is a structural landmark: one figure holding
291
285
  // ordered panels (PART 9 §4c). It takes NO level, so it never pops the
292
286
  // heading stack - it hangs under the section it appears in, the way a
293
287
  // heading's own children do.
294
- place(figureGroupSymbol(entry));
288
+ place(figureGroupSymbol(entry, lines));
295
289
  continue;
296
290
  }
297
291
  while (stack.length && stack[stack.length - 1].level >= entry.level) {
298
292
  stack.pop();
299
293
  }
300
- const symbol = headingSymbol(entry);
294
+ const symbol = headingSymbol(entry, lines, sections.get(entry));
301
295
  place(symbol);
302
296
  stack.push({ level: entry.level, symbol });
303
297
  }
304
298
  return roots;
305
299
  }
306
300
  /**
307
- * The outline's entries in source order: headings, and composite figures.
301
+ * The outline's entries in source order: headings, and composite figures, at
302
+ * any depth (list items, definitions and footnote bodies included).
308
303
  *
309
304
  * A group is worth an entry where a plain figure is not, because it is a
310
305
  * CONTAINER an author folds, navigates and loses their place inside - the same
311
306
  * reason it folds. Its panels come with it, so the outline says how many there
312
307
  * are without scrolling the fence.
313
308
  */
314
- function* walkOutline(nodes) {
315
- for (const node of nodes) {
316
- if (node.type === 'heading')
317
- yield node;
318
- if (node.type === 'figure_group') {
319
- yield node;
320
- // Its panels ride on the group's own symbol - a `figure` or `table`
321
- // yields no entry of its own here - but the walk still DESCENDS through
322
- // them. A panel can wrap a quote holding headings, and skipping the panel
323
- // node dropped those headings out of the outline entirely.
324
- yield* walkOutline(node.children);
325
- continue;
326
- }
327
- if ('children' in node && Array.isArray(node.children)) {
328
- yield* walkOutline(node.children.filter(isBlockNode));
329
- }
330
- if (node.type === 'figure') {
331
- if ('children' in node.target && Array.isArray(node.target.children)) {
332
- yield* walkOutline(node.target.children.filter(isBlockNode));
333
- }
334
- }
335
- }
309
+ function walkOutline(doc) {
310
+ const entries = [];
311
+ walkNodes([doc.children, doc.footnoteDefs], (node) => {
312
+ if (node.type === 'heading' || node.type === 'figure_group')
313
+ entries.push(node);
314
+ return node.type !== 'heading' && node.type !== 'paragraph';
315
+ });
316
+ return entries.sort((a, b) => (a.pos?.startLine ?? 0) - (b.pos?.startLine ?? 0));
336
317
  }
337
318
  /** A group's panels are its direct `figure` and `table` children (§4c). */
338
319
  function isPanel(node) {
339
320
  return node.type === 'figure' || node.type === 'table';
340
321
  }
341
- function figureGroupSymbol(group) {
342
- const range = blockRange(group);
322
+ function figureGroupSymbol(group, lines) {
323
+ const range = blockRange(group, lines);
343
324
  const panels = group.children.filter(isPanel);
344
325
  return {
345
326
  name: (group.caption ? plainText(group.caption) : '') || 'Composite figure',
@@ -347,7 +328,7 @@ function figureGroupSymbol(group) {
347
328
  kind: SymbolKind.Struct,
348
329
  range,
349
330
  selectionRange: range,
350
- children: panels.map((panel, index) => panelSymbol(panel, index)),
331
+ children: panels.map((panel, index) => panelSymbol(panel, index, lines)),
351
332
  };
352
333
  }
353
334
  /**
@@ -355,9 +336,9 @@ function figureGroupSymbol(group) {
355
336
  * would use for it (§4c) - not to a number, which would read as a figure number
356
337
  * the panel does not have.
357
338
  */
358
- function panelSymbol(panel, index) {
339
+ function panelSymbol(panel, index, lines) {
359
340
  const caption = panel.caption;
360
- const range = blockRange(panel);
341
+ const range = blockRange(panel, lines);
361
342
  return {
362
343
  name: (caption ? plainText(caption) : '') || `Panel ${panelLetter(index)}`,
363
344
  kind: panel.type === 'table' ? SymbolKind.Array : SymbolKind.Object,
@@ -366,33 +347,32 @@ function panelSymbol(panel, index) {
366
347
  children: [],
367
348
  };
368
349
  }
369
- function blockRange(node) {
350
+ function blockRange(node, lines) {
370
351
  if (!node.pos) {
371
352
  return { start: { line: 0, character: 0 }, end: { line: 0, character: 0 } };
372
353
  }
354
+ return lineSpan(lines, node.pos.startLine - 1, node.pos.endLine - 1);
355
+ }
356
+ /** Whole lines `start` through `end`, 0-based and inclusive. */
357
+ function lineSpan(lines, start, end) {
373
358
  return {
374
- start: { line: node.pos.startLine - 1, character: 0 },
375
- end: { line: node.pos.endLine - 1, character: 200 },
359
+ start: { line: start, character: 0 },
360
+ end: { line: end, character: lines[end]?.length ?? 0 },
376
361
  };
377
362
  }
378
- function isBlockNode(node) {
379
- return Boolean(node && typeof node === 'object' && 'type' in node);
380
- }
381
- function headingSymbol(heading) {
382
- const range = heading.pos
383
- ? {
384
- start: { line: heading.pos.startLine - 1, character: 0 },
385
- end: { line: heading.pos.endLine - 1, character: 200 },
386
- }
387
- : {
388
- start: { line: 0, character: 0 },
389
- end: { line: 0, character: 0 },
390
- };
363
+ /** `range` spans the section when `sectionEnd` is known; `selectionRange` is the heading's own lines. */
364
+ function headingSymbol(heading, lines, sectionEnd) {
365
+ const selectionRange = heading.pos
366
+ ? lineSpan(lines, heading.pos.startLine - 1, heading.pos.endLine - 1)
367
+ : { start: { line: 0, character: 0 }, end: { line: 0, character: 0 } };
368
+ const range = heading.pos && sectionEnd !== undefined && sectionEnd >= selectionRange.end.line
369
+ ? lineSpan(lines, selectionRange.start.line, sectionEnd)
370
+ : selectionRange;
391
371
  return {
392
372
  name: plainText(heading.children) || `Heading ${heading.level}`,
393
373
  kind: SymbolKind.String,
394
374
  range,
395
- selectionRange: range,
375
+ selectionRange,
396
376
  children: [],
397
377
  };
398
378
  }
@@ -426,14 +406,26 @@ function plainText(nodes) {
426
406
  }
427
407
  return out.trim();
428
408
  }
409
+ let locatedSource;
410
+ let lineStarts = [];
411
+ /** An offset to an LSP position; any line ending counts as one break. */
429
412
  function positionAt(source, offset) {
430
- const before = source.slice(0, offset);
431
- const line = before.split('\n').length - 1;
432
- const lastNewline = before.lastIndexOf('\n');
433
- return {
434
- line,
435
- character: offset - lastNewline - 1,
436
- };
413
+ if (source !== locatedSource) {
414
+ locatedSource = source;
415
+ lineStarts = [0];
416
+ for (const match of source.matchAll(/\r\n?|\n/g))
417
+ lineStarts.push(match.index + match[0].length);
418
+ }
419
+ let low = 0;
420
+ let high = lineStarts.length - 1;
421
+ while (low < high) {
422
+ const middle = (low + high + 1) >> 1;
423
+ if (lineStarts[middle] <= offset)
424
+ low = middle;
425
+ else
426
+ high = middle - 1;
427
+ }
428
+ return { line: low, character: offset - lineStarts[low] };
437
429
  }
438
430
  function rangeAt(source, index, length) {
439
431
  const before = source.slice(0, index);
@@ -1 +1 @@
1
- {"version":3,"file":"analyze.js","sourceRoot":"","sources":["../src/analyze.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"analyze.js","sourceRoot":"","sources":["../src/analyze.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Walks every node of a parsed Carve document, parents before children.
3
+ *
4
+ * Blocks do not all hang off `children`: list items sit in `items`, a
5
+ * description list's bodies in `items[].definitions`, and footnote bodies in
6
+ * the document's `footnoteDefs`. A walker that follows `children` alone sees
7
+ * only some of them, so this one descends into every property except `pos`
8
+ * and `attrs`.
9
+ */
10
+ export interface AstNode {
11
+ type?: string;
12
+ pos?: {
13
+ startLine?: number;
14
+ startColumn?: number;
15
+ endLine?: number;
16
+ endColumn?: number;
17
+ startOffset?: number;
18
+ endOffset?: number;
19
+ };
20
+ children?: unknown;
21
+ [key: string]: unknown;
22
+ }
23
+ /** Return `false` from `visit` to skip the node's subtree. `ancestors` holds the enclosing typed nodes, outermost first. */
24
+ export declare function walkNodes(root: unknown, visit: (node: AstNode, ancestors: readonly AstNode[]) => boolean | void): void;