@birdcc/lsp 0.0.1-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/.oxfmtrc.json +16 -0
  2. package/LICENSE +674 -0
  3. package/README.md +343 -0
  4. package/dist/completion.d.ts +8 -0
  5. package/dist/completion.d.ts.map +1 -0
  6. package/dist/completion.js +137 -0
  7. package/dist/completion.js.map +1 -0
  8. package/dist/definition.d.ts +5 -0
  9. package/dist/definition.d.ts.map +1 -0
  10. package/dist/definition.js +21 -0
  11. package/dist/definition.js.map +1 -0
  12. package/dist/diagnostic.d.ts +6 -0
  13. package/dist/diagnostic.d.ts.map +1 -0
  14. package/dist/diagnostic.js +38 -0
  15. package/dist/diagnostic.js.map +1 -0
  16. package/dist/document-symbol.d.ts +4 -0
  17. package/dist/document-symbol.d.ts.map +1 -0
  18. package/dist/document-symbol.js +20 -0
  19. package/dist/document-symbol.js.map +1 -0
  20. package/dist/hover-docs.d.ts +5 -0
  21. package/dist/hover-docs.d.ts.map +1 -0
  22. package/dist/hover-docs.js +141 -0
  23. package/dist/hover-docs.js.map +1 -0
  24. package/dist/hover-docs.yaml +600 -0
  25. package/dist/hover.d.ts +5 -0
  26. package/dist/hover.d.ts.map +1 -0
  27. package/dist/hover.js +81 -0
  28. package/dist/hover.js.map +1 -0
  29. package/dist/index.d.ts +9 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +8 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/lsp-server.d.ts +3 -0
  34. package/dist/lsp-server.d.ts.map +1 -0
  35. package/dist/lsp-server.js +250 -0
  36. package/dist/lsp-server.js.map +1 -0
  37. package/dist/references.d.ts +5 -0
  38. package/dist/references.d.ts.map +1 -0
  39. package/dist/references.js +48 -0
  40. package/dist/references.js.map +1 -0
  41. package/dist/server.d.ts +3 -0
  42. package/dist/server.d.ts.map +1 -0
  43. package/dist/server.js +4 -0
  44. package/dist/server.js.map +1 -0
  45. package/dist/shared.d.ts +17 -0
  46. package/dist/shared.d.ts.map +1 -0
  47. package/dist/shared.js +150 -0
  48. package/dist/shared.js.map +1 -0
  49. package/dist/symbol-utils.d.ts +17 -0
  50. package/dist/symbol-utils.d.ts.map +1 -0
  51. package/dist/symbol-utils.js +84 -0
  52. package/dist/symbol-utils.js.map +1 -0
  53. package/dist/validation.d.ts +21 -0
  54. package/dist/validation.d.ts.map +1 -0
  55. package/dist/validation.js +47 -0
  56. package/dist/validation.js.map +1 -0
  57. package/package.json +45 -0
  58. package/scripts/copy-hover-yaml.mjs +14 -0
  59. package/src/completion.ts +223 -0
  60. package/src/definition.ts +50 -0
  61. package/src/diagnostic.ts +48 -0
  62. package/src/document-symbol.ts +27 -0
  63. package/src/hover-docs.ts +223 -0
  64. package/src/hover-docs.yaml +600 -0
  65. package/src/hover.ts +122 -0
  66. package/src/index.ts +8 -0
  67. package/src/lsp-server.ts +350 -0
  68. package/src/references.ts +107 -0
  69. package/src/server.ts +4 -0
  70. package/src/shared.ts +182 -0
  71. package/src/symbol-utils.ts +126 -0
  72. package/src/validation.ts +85 -0
  73. package/test/hover-docs.test.ts +18 -0
  74. package/test/lsp.test.ts +304 -0
  75. package/test/perf-baseline.test.ts +96 -0
  76. package/test/validation.test.ts +212 -0
  77. package/tsconfig.json +8 -0
package/README.md ADDED
@@ -0,0 +1,343 @@
1
+ <div align="center">
2
+
3
+ # 🕊 BIRD Config LSP (@birdcc/lsp)
4
+
5
+ </div>
6
+
7
+ [![npm version](https://img.shields.io/badge/version-0.1.0--alpha-blue)](https://www.npmjs.com/package/@birdcc/lsp) [![License: GPL-3.0](https://img.shields.io/badge/License-GPL--3.0--only-green.svg)](https://www.gnu.org/licenses/gpl-3.0) [![TypeScript](https://img.shields.io/badge/TypeScript-5.0+-3178c6?logo=typescript)](https://www.typescriptlang.org/) [![VSCode-languageserver](https://img.shields.io/badge/vscode--languageserver-powered-9f5ec2)](https://github.com/microsoft/vscode-languageserver-node)
8
+
9
+ > [Overview](#overview) · [Features](#features) · [Installation](#installation) · [Usage](#usage) · [Editor Integration](#editor-integration) · [API Reference](#api-reference) · [Architecture](#architecture)
10
+
11
+ ## Overview
12
+
13
+ **@birdcc/lsp** is the Language Server Protocol implementation for BIRD2 configuration files, delivering real-time diagnostics, intelligent code completion, hover tooltips, and more for editor integration.
14
+
15
+ | Package | Version | Description |
16
+ | ------- | ------- | ----------- |
17
+ | `@birdcc/lsp` | 0.1.0 | LSP server implementation with real-time diagnostics |
18
+
19
+ ---
20
+
21
+ ## Features
22
+
23
+ ### LSP Capabilities
24
+
25
+ - **Incremental Synchronization** — `TextDocumentSyncKind.Incremental` for efficient handling of large files
26
+ - **Real-time Diagnostics** — Automatic validation on document open and modification
27
+ - **Code Completion** — Auto-completion for keywords, symbols, and snippets
28
+ - **Hover Information** — Type information and documentation on hover
29
+ - **Go to Definition** — Navigate to symbol definitions
30
+ - **Find References** — Find all references to a symbol
31
+ - **Document Symbols** — Outline view for quick navigation
32
+
33
+ ### Protocol Features
34
+
35
+ - **Standard LSP** — Full protocol support powered by `vscode-languageserver`
36
+ - **Diagnostic Push** — Server-initiated diagnostic updates
37
+ - **Workspace Folders** — Multi-root workspace support
38
+
39
+ ---
40
+
41
+ ## Installation
42
+
43
+ ```bash
44
+ # Using pnpm (recommended)
45
+ pnpm add @birdcc/lsp
46
+
47
+ # Using npm
48
+ npm install @birdcc/lsp
49
+
50
+ # Using yarn
51
+ yarn add @birdcc/lsp
52
+ ```
53
+
54
+ ---
55
+
56
+ ## Usage
57
+
58
+ ### Start LSP Server
59
+
60
+ ```bash
61
+ # stdio mode (for editor integration)
62
+ npx birdcc lsp --stdio
63
+ ```
64
+
65
+ ### Programmatic Usage
66
+
67
+ ```typescript
68
+ import { startLspServer, toLspDiagnostic } from "@birdcc/lsp";
69
+ import type { BirdDiagnostic } from "@birdcc/core";
70
+
71
+ // Start the LSP server
72
+ startLspServer();
73
+
74
+ // Convert internal diagnostic to LSP format
75
+ const lspDiagnostic = toLspDiagnostic(birdDiagnostic);
76
+ ```
77
+
78
+ ---
79
+
80
+ ## Editor Integration
81
+
82
+ ### Visual Studio Code
83
+
84
+ ```json
85
+ // settings.json
86
+ {
87
+ "bird-lsp.enable": true,
88
+ "bird-lsp.path": "./node_modules/.bin/birdcc",
89
+ "bird-lsp.validateWithBird": true
90
+ }
91
+ ```
92
+
93
+ ### Neovim
94
+
95
+ ```lua
96
+ -- init.lua with nvim-lspconfig
97
+ local lspconfig = require("lspconfig")
98
+ local configs = require("lspconfig.configs")
99
+
100
+ if not configs.birdcc then
101
+ configs.birdcc = {
102
+ default_config = {
103
+ cmd = { "npx", "birdcc", "lsp", "--stdio" },
104
+ filetypes = { "bird", "conf" },
105
+ root_dir = lspconfig.util.root_pattern(".git", "bird.conf"),
106
+ single_file_support = true,
107
+ },
108
+ }
109
+ end
110
+
111
+ lspconfig.birdcc.setup({})
112
+ ```
113
+
114
+ ### Helix
115
+
116
+ ```toml
117
+ # ~/.config/helix/languages.toml
118
+ [[language]]
119
+ name = "bird"
120
+ file-types = ["conf"]
121
+ roots = [".git", "bird.conf"]
122
+ language-servers = ["birdcc"]
123
+
124
+ [language-server.birdcc]
125
+ command = "npx"
126
+ args = ["birdcc", "lsp", "--stdio"]
127
+ ```
128
+
129
+ ---
130
+
131
+ ## API Reference
132
+
133
+ ### Exports
134
+
135
+ ```typescript
136
+ import {
137
+ startLspServer,
138
+ toLspDiagnostic,
139
+ createConnection,
140
+ } from "@birdcc/lsp";
141
+ ```
142
+
143
+ ### `startLspServer(): void`
144
+
145
+ Start the LSP server with stdio transport.
146
+
147
+ ### `toLspDiagnostic(diagnostic: BirdDiagnostic): Diagnostic`
148
+
149
+ Convert a BIRD diagnostic to LSP Diagnostic format.
150
+
151
+ ### Types
152
+
153
+ ```typescript
154
+ interface LspOptions {
155
+ connection?: Connection;
156
+ documents?: TextDocuments<TextDocument>;
157
+ }
158
+ ```
159
+
160
+ ---
161
+
162
+ ## Architecture
163
+
164
+ ### System Overview
165
+
166
+ ```mermaid
167
+ flowchart TB
168
+ subgraph "Editor Layer"
169
+ E1[VS Code]
170
+ E2[Neovim]
171
+ E3[Vim]
172
+ E4[Helix]
173
+ end
174
+
175
+ subgraph "LSP Protocol"
176
+ LSP[LSP Protocol<br/>JSON-RPC]
177
+ end
178
+
179
+ subgraph "LSP Server"
180
+ S[@birdcc/lsp<br/>LSP Server]
181
+ SYNC[Document Sync<br/>Incremental]
182
+ DIAG[Diagnostics Handler]
183
+ COMP[Completion Provider]
184
+ HOVER[Hover Provider]
185
+ DEF[Definition Provider]
186
+ end
187
+
188
+ subgraph "Service Layer"
189
+ LINTER[@birdcc/linter<br/>32+ Rules]
190
+ FORMATTER[@birdcc/formatter<br/>dprint/builtin]
191
+ end
192
+
193
+ subgraph "Core Layer"
194
+ CORE[@birdcc/core<br/>Symbol Table]
195
+ end
196
+
197
+ subgraph "Parser Layer"
198
+ PARSER[@birdcc/parser<br/>Tree-sitter]
199
+ end
200
+
201
+ E1 --> LSP
202
+ E2 --> LSP
203
+ E3 --> LSP
204
+ E4 --> LSP
205
+ LSP --> S
206
+ S --> SYNC
207
+ S --> DIAG
208
+ S --> COMP
209
+ S --> HOVER
210
+ S --> DEF
211
+ DIAG --> LINTER
212
+ COMP --> CORE
213
+ HOVER --> CORE
214
+ DEF --> CORE
215
+ LINTER --> CORE
216
+ FORMATTER --> PARSER
217
+ CORE --> PARSER
218
+
219
+ style S fill:#e3f2fd
220
+ style LSP fill:#f3e5f5
221
+ ```
222
+
223
+ ### Request Handling Flow
224
+
225
+ ```mermaid
226
+ sequenceDiagram
227
+ participant Editor as Editor
228
+ participant LSP as LSP Connection
229
+ participant Server as @birdcc/lsp
230
+ participant Services as Services
231
+ participant Core as @birdcc/core
232
+
233
+ Editor->>LSP: Initialize Request
234
+ LSP->>Server: onInitialize()
235
+ Server-->>LSP: ServerCapabilities
236
+ LSP-->>Editor: Initialize Result
237
+
238
+ Editor->>LSP: textDocument/didOpen
239
+ LSP->>Server: onDidOpen()
240
+ Server->>Services: validate(document)
241
+ Services->>Core: buildCoreSnapshot()
242
+ Core-->>Services: snapshot
243
+ Services-->>Server: diagnostics
244
+ Server->>LSP: publishDiagnostics
245
+ LSP->>Editor: Diagnostics
246
+
247
+ Editor->>LSP: textDocument/completion
248
+ LSP->>Server: onCompletion()
249
+ Server->>Core: getSymbols()
250
+ Core-->>Server: symbols[]
251
+ Server-->>LSP: CompletionItem[]
252
+ LSP-->>Editor: Completions
253
+
254
+ Editor->>LSP: textDocument/hover
255
+ LSP->>Server: onHover()
256
+ Server->>Core: resolveSymbol()
257
+ Core-->>Server: symbol info
258
+ Server-->>LSP: Hover
259
+ LSP-->>Editor: Tooltip
260
+ ```
261
+
262
+ ### Document Synchronization
263
+
264
+ ```mermaid
265
+ flowchart LR
266
+ subgraph "Editor"
267
+ E[Document Changes]
268
+ end
269
+
270
+ subgraph "LSP Server"
271
+ S[Text Documents Manager]
272
+ AST[AST Cache]
273
+ SYM[Symbol Cache]
274
+ end
275
+
276
+ subgraph "Validation"
277
+ V[Validator]
278
+ D[Diagnostics Engine]
279
+ end
280
+
281
+ E -->|didChange| S
282
+ E -->|didOpen| S
283
+ E -->|didClose| S
284
+ S -->|parse| AST
285
+ AST -->|analyze| SYM
286
+ SYM -->|validate| V
287
+ V -->|report| D
288
+ D -->|publish| E
289
+
290
+ style S fill:#e3f2fd
291
+ style AST fill:#e8f5e9
292
+ style SYM fill:#fff3e0
293
+ ```
294
+
295
+ ### Server Capabilities
296
+
297
+ | Capability | Status |
298
+ | ---------- | ------ |
299
+ | `textDocumentSync` | Incremental |
300
+ | `documentSymbolProvider` | ✅ |
301
+ | `hoverProvider` | ✅ |
302
+ | `definitionProvider` | ✅ |
303
+ | `referencesProvider` | ✅ |
304
+ | `completionProvider` | ✅ |
305
+
306
+ ---
307
+
308
+ ## Related Packages
309
+
310
+ | Package | Description |
311
+ | ------- | ----------- |
312
+ | [@birdcc/parser](../parser/) | Tree-sitter grammar and parser |
313
+ | [@birdcc/core](../core/) | Semantic analysis engine |
314
+ | [@birdcc/linter](../linter/) | 32+ lint rules |
315
+ | [@birdcc/formatter](../formatter/) | Code formatting engine |
316
+ | [@birdcc/cli](../cli/) | Command-line interface |
317
+
318
+ ---
319
+
320
+ ### 📖 Documentation
321
+
322
+ - [BIRD Official Documentation](https://bird.network.cz/)
323
+ - [BIRD2 User Manual](https://bird.network.cz/doc/bird.html)
324
+ - [LSP Specification](https://microsoft.github.io/language-server-protocol/)
325
+ - [GitHub Project](https://github.com/bird-chinese-community/BIRD-LSP)
326
+
327
+ ---
328
+
329
+ ## 📝 License
330
+
331
+ This project is licensed under the [GPL-3.0 License](https://github.com/bird-chinese-community/BIRD-LSP/blob/main/LICENSE).
332
+
333
+ ---
334
+
335
+ <p align="center">
336
+ <sub>Built with ❤️ by the BIRD Chinese Community (BIRDCC)</sub>
337
+ </p>
338
+
339
+ <p align="center">
340
+ <a href="https://github.com/bird-chinese-community/BIRD-LSP">🕊 GitHub</a> ·
341
+ <a href="https://marketplace.visualstudio.com/items?itemName=birdcc.bird2-lsp">🛒 Marketplace</a> ·
342
+ <a href="https://github.com/bird-chinese-community/BIRD-LSP/issues">🐛 Report Issues</a>
343
+ </p>
@@ -0,0 +1,8 @@
1
+ import { type CompletionItem } from "vscode-languageserver/node.js";
2
+ import type { ParsedBirdDocument } from "@birdcc/parser";
3
+ export interface CompletionContextOptions {
4
+ linePrefix?: string;
5
+ additionalDeclarations?: ParsedBirdDocument["program"]["declarations"];
6
+ }
7
+ export declare const createCompletionItemsFromParsed: (parsed: ParsedBirdDocument, options?: CompletionContextOptions) => CompletionItem[];
8
+ //# sourceMappingURL=completion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../src/completion.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAuDzD,MAAM,WAAW,wBAAwB;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sBAAsB,CAAC,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,CAAC;CACxE;AAmID,eAAO,MAAM,+BAA+B,GAC1C,QAAQ,kBAAkB,EAC1B,UAAS,wBAA6B,KACrC,cAAc,EAyBhB,CAAC"}
@@ -0,0 +1,137 @@
1
+ import { CompletionItemKind, InsertTextFormat, } from "vscode-languageserver/node.js";
2
+ import { declarationMetadata, KEYWORD_DOCS } from "./shared.js";
3
+ const COMPLETION_KEYWORDS = [
4
+ "protocol",
5
+ "template",
6
+ "filter",
7
+ "function",
8
+ "define",
9
+ "include",
10
+ "import",
11
+ "export",
12
+ "neighbor",
13
+ "local as",
14
+ "router id",
15
+ "table",
16
+ "ipv4",
17
+ "ipv6",
18
+ ];
19
+ const COMPLETION_SNIPPETS = [
20
+ {
21
+ label: 'include "..."',
22
+ detail: "BIRD snippet",
23
+ documentation: "Insert include statement.",
24
+ insertText: 'include "${1:path/to/file.conf}";',
25
+ },
26
+ {
27
+ label: "define NAME = value;",
28
+ detail: "BIRD snippet",
29
+ documentation: "Insert define statement.",
30
+ insertText: "define ${1:NAME} = ${2:value};",
31
+ },
32
+ {
33
+ label: "router id 1.1.1.1;",
34
+ detail: "BIRD snippet",
35
+ documentation: "Insert router id statement.",
36
+ insertText: "router id ${1:1.1.1.1};",
37
+ },
38
+ {
39
+ label: "protocol bgp ...",
40
+ detail: "BIRD snippet",
41
+ documentation: "Insert minimal BGP protocol block.",
42
+ insertText: "protocol bgp ${1:name} {\n neighbor ${2:192.0.2.1} as ${3:65001};\n local as ${4:65000};\n}",
43
+ },
44
+ ];
45
+ const isFromTemplateContext = (linePrefix) => /\bfrom\s+[A-Za-z_][A-Za-z0-9_]*$/i.test(linePrefix) ||
46
+ /\bfrom\s*$/i.test(linePrefix);
47
+ const isIncludePathContext = (linePrefix) => /\binclude\s+["'][^"']*$/i.test(linePrefix);
48
+ const isFilterContext = (linePrefix) => /\b(?:import|export)\s+filter\s+[A-Za-z_][A-Za-z0-9_]*$/i.test(linePrefix) ||
49
+ /\b(?:import|export)\s+filter\s*$/i.test(linePrefix);
50
+ const isTableContext = (linePrefix) => /\btable\s+[A-Za-z_][A-Za-z0-9_]*$/i.test(linePrefix) ||
51
+ /\btable\s*$/i.test(linePrefix);
52
+ const allDeclarations = (parsed, options) => {
53
+ const additional = options.additionalDeclarations ?? [];
54
+ if (additional.length === 0) {
55
+ return parsed.program.declarations;
56
+ }
57
+ return [...parsed.program.declarations, ...additional];
58
+ };
59
+ const keywordCompletionItems = () => COMPLETION_KEYWORDS.map((keyword) => ({
60
+ label: keyword,
61
+ kind: CompletionItemKind.Keyword,
62
+ detail: "BIRD keyword",
63
+ documentation: KEYWORD_DOCS[keyword] ?? "",
64
+ }));
65
+ const snippetCompletionItems = () => COMPLETION_SNIPPETS.map((snippet) => ({
66
+ label: snippet.label,
67
+ kind: CompletionItemKind.Snippet,
68
+ detail: snippet.detail,
69
+ documentation: snippet.documentation,
70
+ insertText: snippet.insertText,
71
+ insertTextFormat: InsertTextFormat.Snippet,
72
+ }));
73
+ const includePathCompletionItems = (declarations, options) => {
74
+ const paths = new Set();
75
+ for (const declaration of declarations) {
76
+ if (declaration.kind !== "include") {
77
+ continue;
78
+ }
79
+ if (declaration.path.length > 0) {
80
+ paths.add(declaration.path);
81
+ }
82
+ }
83
+ return Array.from(paths).map((path) => ({
84
+ label: path,
85
+ kind: CompletionItemKind.File,
86
+ detail: "include path",
87
+ insertText: options.quoteWrapped ? path : `"${path}"`,
88
+ }));
89
+ };
90
+ const collectDeclarationCompletionItems = (declarations, predicate) => {
91
+ const items = [];
92
+ const seen = new Set();
93
+ for (const declaration of declarations) {
94
+ if (!predicate(declaration)) {
95
+ continue;
96
+ }
97
+ const metadata = declarationMetadata(declaration);
98
+ if (!metadata?.completionLabel || seen.has(metadata.completionLabel)) {
99
+ continue;
100
+ }
101
+ seen.add(metadata.completionLabel);
102
+ items.push({
103
+ label: metadata.completionLabel,
104
+ kind: metadata.completionKind ?? CompletionItemKind.Reference,
105
+ detail: metadata.completionDetail ?? metadata.detail,
106
+ });
107
+ }
108
+ return items;
109
+ };
110
+ const templateCompletionItems = (declarations) => collectDeclarationCompletionItems(declarations, (declaration) => declaration.kind === "template");
111
+ const filterCompletionItems = (declarations) => collectDeclarationCompletionItems(declarations, (declaration) => declaration.kind === "filter");
112
+ const tableCompletionItems = (declarations) => collectDeclarationCompletionItems(declarations, (declaration) => declaration.kind === "table");
113
+ const declarationCompletionItems = (declarations) => {
114
+ return collectDeclarationCompletionItems(declarations, () => true);
115
+ };
116
+ export const createCompletionItemsFromParsed = (parsed, options = {}) => {
117
+ const linePrefix = options.linePrefix ?? "";
118
+ const declarations = allDeclarations(parsed, options);
119
+ if (isIncludePathContext(linePrefix)) {
120
+ return includePathCompletionItems(declarations, { quoteWrapped: true });
121
+ }
122
+ if (isFromTemplateContext(linePrefix)) {
123
+ return templateCompletionItems(declarations);
124
+ }
125
+ if (isFilterContext(linePrefix)) {
126
+ return filterCompletionItems(declarations);
127
+ }
128
+ if (isTableContext(linePrefix)) {
129
+ return tableCompletionItems(declarations);
130
+ }
131
+ return [
132
+ ...keywordCompletionItems(),
133
+ ...snippetCompletionItems(),
134
+ ...declarationCompletionItems(declarations),
135
+ ];
136
+ };
137
+ //# sourceMappingURL=completion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion.js","sourceRoot":"","sources":["../src/completion.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,gBAAgB,GAEjB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhE,MAAM,mBAAmB,GAAG;IAC1B,UAAU;IACV,UAAU;IACV,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,UAAU;IACV,UAAU;IACV,WAAW;IACX,OAAO;IACP,MAAM;IACN,MAAM;CACP,CAAC;AASF,MAAM,mBAAmB,GAAwB;IAC/C;QACE,KAAK,EAAE,eAAe;QACtB,MAAM,EAAE,cAAc;QACtB,aAAa,EAAE,2BAA2B;QAC1C,UAAU,EAAE,mCAAmC;KAChD;IACD;QACE,KAAK,EAAE,sBAAsB;QAC7B,MAAM,EAAE,cAAc;QACtB,aAAa,EAAE,0BAA0B;QACzC,UAAU,EAAE,gCAAgC;KAC7C;IACD;QACE,KAAK,EAAE,oBAAoB;QAC3B,MAAM,EAAE,cAAc;QACtB,aAAa,EAAE,6BAA6B;QAC5C,UAAU,EAAE,yBAAyB;KACtC;IACD;QACE,KAAK,EAAE,kBAAkB;QACzB,MAAM,EAAE,cAAc;QACtB,aAAa,EAAE,oCAAoC;QACnD,UAAU,EACR,+FAA+F;KAClG;CACF,CAAC;AAOF,MAAM,qBAAqB,GAAG,CAAC,UAAkB,EAAW,EAAE,CAC5D,mCAAmC,CAAC,IAAI,CAAC,UAAU,CAAC;IACpD,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAEjC,MAAM,oBAAoB,GAAG,CAAC,UAAkB,EAAW,EAAE,CAC3D,0BAA0B,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAE9C,MAAM,eAAe,GAAG,CAAC,UAAkB,EAAW,EAAE,CACtD,yDAAyD,CAAC,IAAI,CAAC,UAAU,CAAC;IAC1E,mCAAmC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAEvD,MAAM,cAAc,GAAG,CAAC,UAAkB,EAAW,EAAE,CACrD,oCAAoC,CAAC,IAAI,CAAC,UAAU,CAAC;IACrD,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAElC,MAAM,eAAe,GAAG,CACtB,MAA0B,EAC1B,OAAiC,EACc,EAAE;IACjD,MAAM,UAAU,GAAG,OAAO,CAAC,sBAAsB,IAAI,EAAE,CAAC;IACxD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;IACrC,CAAC;IAED,OAAO,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,UAAU,CAAC,CAAC;AACzD,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,GAAqB,EAAE,CACpD,mBAAmB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACpC,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,kBAAkB,CAAC,OAAO;IAChC,MAAM,EAAE,cAAc;IACtB,aAAa,EAAE,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE;CAC3C,CAAC,CAAC,CAAC;AAEN,MAAM,sBAAsB,GAAG,GAAqB,EAAE,CACpD,mBAAmB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACpC,KAAK,EAAE,OAAO,CAAC,KAAK;IACpB,IAAI,EAAE,kBAAkB,CAAC,OAAO;IAChC,MAAM,EAAE,OAAO,CAAC,MAAM;IACtB,aAAa,EAAE,OAAO,CAAC,aAAa;IACpC,UAAU,EAAE,OAAO,CAAC,UAAU;IAC9B,gBAAgB,EAAE,gBAAgB,CAAC,OAAO;CAC3C,CAAC,CAAC,CAAC;AAEN,MAAM,0BAA0B,GAAG,CACjC,YAA2D,EAC3D,OAAkC,EAChB,EAAE;IACpB,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAEhC,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,IAAI,WAAW,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACnC,SAAS;QACX,CAAC;QAED,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACtC,KAAK,EAAE,IAAI;QACX,IAAI,EAAE,kBAAkB,CAAC,IAAI;QAC7B,MAAM,EAAE,cAAc;QACtB,UAAU,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG;KACtD,CAAC,CAAC,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,iCAAiC,GAAG,CACxC,YAA2D,EAC3D,SAEY,EACM,EAAE;IACpB,MAAM,KAAK,GAAqB,EAAE,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5B,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,EAAE,eAAe,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;YACrE,SAAS;QACX,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,QAAQ,CAAC,eAAe;YAC/B,IAAI,EAAE,QAAQ,CAAC,cAAc,IAAI,kBAAkB,CAAC,SAAS;YAC7D,MAAM,EAAE,QAAQ,CAAC,gBAAgB,IAAI,QAAQ,CAAC,MAAM;SACrD,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,uBAAuB,GAAG,CAC9B,YAA2D,EACzC,EAAE,CACpB,iCAAiC,CAC/B,YAAY,EACZ,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,KAAK,UAAU,CACjD,CAAC;AAEJ,MAAM,qBAAqB,GAAG,CAC5B,YAA2D,EACzC,EAAE,CACpB,iCAAiC,CAC/B,YAAY,EACZ,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,KAAK,QAAQ,CAC/C,CAAC;AAEJ,MAAM,oBAAoB,GAAG,CAC3B,YAA2D,EACzC,EAAE,CACpB,iCAAiC,CAC/B,YAAY,EACZ,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,KAAK,OAAO,CAC9C,CAAC;AAEJ,MAAM,0BAA0B,GAAG,CACjC,YAA2D,EACzC,EAAE;IACpB,OAAO,iCAAiC,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;AACrE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAC7C,MAA0B,EAC1B,UAAoC,EAAE,EACpB,EAAE;IACpB,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC;IAC5C,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEtD,IAAI,oBAAoB,CAAC,UAAU,CAAC,EAAE,CAAC;QACrC,OAAO,0BAA0B,CAAC,YAAY,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,IAAI,qBAAqB,CAAC,UAAU,CAAC,EAAE,CAAC;QACtC,OAAO,uBAAuB,CAAC,YAAY,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI,eAAe,CAAC,UAAU,CAAC,EAAE,CAAC;QAChC,OAAO,qBAAqB,CAAC,YAAY,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,OAAO,oBAAoB,CAAC,YAAY,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO;QACL,GAAG,sBAAsB,EAAE;QAC3B,GAAG,sBAAsB,EAAE;QAC3B,GAAG,0BAA0B,CAAC,YAAY,CAAC;KAC5C,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { SymbolTable } from "@birdcc/core";
2
+ import type { Location, Position } from "vscode-languageserver/node.js";
3
+ /** Resolves symbol definition locations from a merged cross-file symbol table. */
4
+ export declare const createDefinitionLocations: (symbolTable: SymbolTable, uri: string, position: Position, sourceText: string) => Location[];
5
+ //# sourceMappingURL=definition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition.d.ts","sourceRoot":"","sources":["../src/definition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AASxE,kFAAkF;AAClF,eAAO,MAAM,yBAAyB,GACpC,aAAa,WAAW,EACxB,KAAK,MAAM,EACX,UAAU,QAAQ,EAClB,YAAY,MAAM,KACjB,QAAQ,EAiCV,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { containsPosition, createSymbolLookupIndex, dedupeLocations, extractWordAtPosition, toLocation, } from "./symbol-utils.js";
2
+ /** Resolves symbol definition locations from a merged cross-file symbol table. */
3
+ export const createDefinitionLocations = (symbolTable, uri, position, sourceText) => {
4
+ const index = createSymbolLookupIndex(symbolTable.definitions, symbolTable.references);
5
+ const reference = symbolTable.references.find((item) => item.uri === uri && containsPosition(item, position));
6
+ if (reference) {
7
+ return dedupeLocations((index.definitionsByName.get(reference.name.toLowerCase()) ?? [])
8
+ .filter((definition) => definition.kind === reference.kind)
9
+ .map(toLocation));
10
+ }
11
+ const definition = symbolTable.definitions.find((item) => item.uri === uri && containsPosition(item, position));
12
+ if (definition) {
13
+ return [toLocation(definition)];
14
+ }
15
+ const name = extractWordAtPosition(sourceText, position);
16
+ if (!name) {
17
+ return [];
18
+ }
19
+ return dedupeLocations((index.definitionsByName.get(name.toLowerCase()) ?? []).map(toLocation));
20
+ };
21
+ //# sourceMappingURL=definition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition.js","sourceRoot":"","sources":["../src/definition.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,gBAAgB,EAChB,uBAAuB,EACvB,eAAe,EACf,qBAAqB,EACrB,UAAU,GACX,MAAM,mBAAmB,CAAC;AAE3B,kFAAkF;AAClF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACvC,WAAwB,EACxB,GAAW,EACX,QAAkB,EAClB,UAAkB,EACN,EAAE;IACd,MAAM,KAAK,GAAG,uBAAuB,CACnC,WAAW,CAAC,WAAW,EACvB,WAAW,CAAC,UAAU,CACvB,CAAC;IAEF,MAAM,SAAS,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,CAC3C,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,IAAI,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAC/D,CAAC;IAEF,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,eAAe,CACpB,CAAC,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;aAC9D,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC;aAC1D,GAAG,CAAC,UAAU,CAAC,CACnB,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,WAAW,CAAC,WAAW,CAAC,IAAI,CAC7C,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,IAAI,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAC/D,CAAC;IACF,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,IAAI,GAAG,qBAAqB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACzD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,eAAe,CACpB,CAAC,KAAK,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CACxE,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { type Diagnostic } from "vscode-languageserver/node.js";
2
+ import type { BirdDiagnostic } from "@birdcc/core";
3
+ /** Maps Bird diagnostic schema into LSP Diagnostic schema. */
4
+ export declare const toLspDiagnostic: (diagnostic: BirdDiagnostic) => Diagnostic;
5
+ export declare const toInternalErrorDiagnostic: (error: unknown) => Diagnostic;
6
+ //# sourceMappingURL=diagnostic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostic.d.ts","sourceRoot":"","sources":["../src/diagnostic.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,UAAU,EAChB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAgBnD,8DAA8D;AAC9D,eAAO,MAAM,eAAe,GAAI,YAAY,cAAc,KAAG,UAe3D,CAAC;AAEH,eAAO,MAAM,yBAAyB,GAAI,OAAO,OAAO,KAAG,UASzD,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { DiagnosticSeverity, } from "vscode-languageserver/node.js";
2
+ const toLspSeverity = (severity) => {
3
+ if (severity === "error") {
4
+ return DiagnosticSeverity.Error;
5
+ }
6
+ if (severity === "warning") {
7
+ return DiagnosticSeverity.Warning;
8
+ }
9
+ return DiagnosticSeverity.Information;
10
+ };
11
+ /** Maps Bird diagnostic schema into LSP Diagnostic schema. */
12
+ export const toLspDiagnostic = (diagnostic) => ({
13
+ code: diagnostic.code,
14
+ message: diagnostic.message,
15
+ severity: toLspSeverity(diagnostic.severity),
16
+ source: diagnostic.source,
17
+ range: {
18
+ start: {
19
+ line: Math.max(diagnostic.range.line - 1, 0),
20
+ character: Math.max(diagnostic.range.column - 1, 0),
21
+ },
22
+ end: {
23
+ line: Math.max(diagnostic.range.endLine - 1, 0),
24
+ character: Math.max(diagnostic.range.endColumn - 1, 0),
25
+ },
26
+ },
27
+ });
28
+ export const toInternalErrorDiagnostic = (error) => ({
29
+ code: "lsp/internal-error",
30
+ message: error instanceof Error ? error.message : String(error),
31
+ severity: DiagnosticSeverity.Error,
32
+ source: "lsp",
33
+ range: {
34
+ start: { line: 0, character: 0 },
35
+ end: { line: 0, character: 1 },
36
+ },
37
+ });
38
+ //# sourceMappingURL=diagnostic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostic.js","sourceRoot":"","sources":["../src/diagnostic.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,GAEnB,MAAM,+BAA+B,CAAC;AAGvC,MAAM,aAAa,GAAG,CACpB,QAAoC,EAChB,EAAE;IACtB,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,OAAO,kBAAkB,CAAC,KAAK,CAAC;IAClC,CAAC;IAED,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,kBAAkB,CAAC,OAAO,CAAC;IACpC,CAAC;IAED,OAAO,kBAAkB,CAAC,WAAW,CAAC;AACxC,CAAC,CAAC;AAEF,8DAA8D;AAC9D,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,UAA0B,EAAc,EAAE,CAAC,CAAC;IAC1E,IAAI,EAAE,UAAU,CAAC,IAAI;IACrB,OAAO,EAAE,UAAU,CAAC,OAAO;IAC3B,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC;IAC5C,MAAM,EAAE,UAAU,CAAC,MAAM;IACzB,KAAK,EAAE;QACL,KAAK,EAAE;YACL,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC;YAC5C,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC;SACpD;QACD,GAAG,EAAE;YACH,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC;YAC/C,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,CAAC;SACvD;KACF;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,KAAc,EAAc,EAAE,CAAC,CAAC;IACxE,IAAI,EAAE,oBAAoB;IAC1B,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;IAC/D,QAAQ,EAAE,kBAAkB,CAAC,KAAK;IAClC,MAAM,EAAE,KAAK;IACb,KAAK,EAAE;QACL,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE;QAChC,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE;KAC/B;CACF,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { DocumentSymbol } from "vscode-languageserver/node.js";
2
+ import type { ParsedBirdDocument } from "@birdcc/parser";
3
+ export declare const createDocumentSymbolsFromParsed: (parsed: ParsedBirdDocument) => DocumentSymbol[];
4
+ //# sourceMappingURL=document-symbol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-symbol.d.ts","sourceRoot":"","sources":["../src/document-symbol.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAGzD,eAAO,MAAM,+BAA+B,GAC1C,QAAQ,kBAAkB,KACzB,cAAc,EAoBhB,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { declarationMetadata, toLspRange } from "./shared.js";
2
+ export const createDocumentSymbolsFromParsed = (parsed) => {
3
+ const symbols = [];
4
+ for (const declaration of parsed.program.declarations) {
5
+ const metadata = declarationMetadata(declaration);
6
+ if (!metadata) {
7
+ continue;
8
+ }
9
+ symbols.push({
10
+ name: metadata.symbolName,
11
+ detail: metadata.detail,
12
+ kind: metadata.symbolKind,
13
+ range: toLspRange(declaration),
14
+ selectionRange: toLspRange(metadata.selectionRange),
15
+ children: [],
16
+ });
17
+ }
18
+ return symbols;
19
+ };
20
+ //# sourceMappingURL=document-symbol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-symbol.js","sourceRoot":"","sources":["../src/document-symbol.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9D,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAC7C,MAA0B,EACR,EAAE;IACpB,MAAM,OAAO,GAAqB,EAAE,CAAC;IAErC,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QACtD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,SAAS;QACX,CAAC;QAED,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,QAAQ,CAAC,UAAU;YACzB,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,IAAI,EAAE,QAAQ,CAAC,UAAU;YACzB,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC;YAC9B,cAAc,EAAE,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC;YACnD,QAAQ,EAAE,EAAE;SACb,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ export type HoverDocDiffType = "same" | "added" | "modified" | "removed";
2
+ export type HoverDocVersionTag = "v2+" | "v3+" | "v2" | "v2-v3";
3
+ export declare const HOVER_KEYWORD_DOCS: Record<string, string>;
4
+ export declare const HOVER_KEYWORDS: readonly string[];
5
+ //# sourceMappingURL=hover-docs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hover-docs.d.ts","sourceRoot":"","sources":["../src/hover-docs.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC;AACzE,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,OAAO,CAAC;AAiNhE,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAErD,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,SAAS,MAAM,EAE3C,CAAC"}