@birdcc/lsp 0.0.1-alpha.1 → 0.1.0-beta.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 (86) hide show
  1. package/README.md +25 -23
  2. package/dist/asn-completion.d.ts +21 -0
  3. package/dist/asn-completion.d.ts.map +1 -0
  4. package/dist/asn-completion.js +42 -0
  5. package/dist/asn-completion.js.map +1 -0
  6. package/dist/asn-context.d.ts +9 -0
  7. package/dist/asn-context.d.ts.map +1 -0
  8. package/dist/asn-context.js +203 -0
  9. package/dist/asn-context.js.map +1 -0
  10. package/dist/asn-hover.d.ts +11 -0
  11. package/dist/asn-hover.d.ts.map +1 -0
  12. package/dist/asn-hover.js +33 -0
  13. package/dist/asn-hover.js.map +1 -0
  14. package/dist/asn-inlay-hints.d.ts +13 -0
  15. package/dist/asn-inlay-hints.d.ts.map +1 -0
  16. package/dist/asn-inlay-hints.js +47 -0
  17. package/dist/asn-inlay-hints.js.map +1 -0
  18. package/dist/diagnostic.d.ts.map +1 -1
  19. package/dist/diagnostic.js +2 -10
  20. package/dist/diagnostic.js.map +1 -1
  21. package/dist/document-symbol.js +1 -1
  22. package/dist/document-symbol.js.map +1 -1
  23. package/dist/hover-context.d.ts +31 -0
  24. package/dist/hover-context.d.ts.map +1 -0
  25. package/dist/hover-context.js +125 -0
  26. package/dist/hover-context.js.map +1 -0
  27. package/dist/hover-docs/00-base.yaml +5 -0
  28. package/dist/hover-docs/10-global-options.yaml +442 -0
  29. package/dist/hover-docs/20-filter-language.yaml +209 -0
  30. package/dist/hover-docs/30-channel-options.yaml +244 -0
  31. package/dist/hover-docs/40-protocol-common.yaml +59 -0
  32. package/dist/hover-docs/41-protocol-igp.yaml +305 -0
  33. package/dist/hover-docs/42-protocol-kernel-static.yaml +220 -0
  34. package/dist/hover-docs/43-protocol-mpls.yaml +40 -0
  35. package/dist/hover-docs/44-protocol-extended.yaml +635 -0
  36. package/dist/hover-docs/50-protocol-bgp.yaml +482 -0
  37. package/dist/hover-docs/60-protocol-ospf.yaml +527 -0
  38. package/dist/hover-docs.d.ts +5 -1
  39. package/dist/hover-docs.d.ts.map +1 -1
  40. package/dist/hover-docs.js +376 -51
  41. package/dist/hover-docs.js.map +1 -1
  42. package/dist/hover-usage/00-base.yaml +2 -0
  43. package/dist/hover-usage/10-global-usage.yaml +73 -0
  44. package/dist/hover-usage/20-filter-usage.yaml +41 -0
  45. package/dist/hover-usage/30-channel-usage.yaml +41 -0
  46. package/dist/hover-usage/40-protocol-usage.yaml +258 -0
  47. package/dist/hover-usage/50-bgp-usage.yaml +254 -0
  48. package/dist/hover-usage/60-ospf-usage.yaml +340 -0
  49. package/dist/hover.d.ts +10 -0
  50. package/dist/hover.d.ts.map +1 -1
  51. package/dist/hover.js +152 -46
  52. package/dist/hover.js.map +1 -1
  53. package/dist/index.d.ts +7 -1
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +6 -0
  56. package/dist/index.js.map +1 -1
  57. package/dist/init/workspace-init.d.ts +28 -0
  58. package/dist/init/workspace-init.d.ts.map +1 -0
  59. package/dist/init/workspace-init.js +72 -0
  60. package/dist/init/workspace-init.js.map +1 -0
  61. package/dist/lsp-server.d.ts +7 -1
  62. package/dist/lsp-server.d.ts.map +1 -1
  63. package/dist/lsp-server.js +277 -65
  64. package/dist/lsp-server.js.map +1 -1
  65. package/dist/project-config.d.ts +22 -0
  66. package/dist/project-config.d.ts.map +1 -0
  67. package/dist/project-config.js +307 -0
  68. package/dist/project-config.js.map +1 -0
  69. package/dist/shared.d.ts +1 -0
  70. package/dist/shared.d.ts.map +1 -1
  71. package/dist/shared.js +4 -24
  72. package/dist/shared.js.map +1 -1
  73. package/dist/symbol-utils.d.ts +6 -6
  74. package/dist/symbol-utils.d.ts.map +1 -1
  75. package/dist/symbol-utils.js +24 -25
  76. package/dist/symbol-utils.js.map +1 -1
  77. package/dist/type-hint-inlay.d.ts +4 -0
  78. package/dist/type-hint-inlay.d.ts.map +1 -0
  79. package/dist/type-hint-inlay.js +27 -0
  80. package/dist/type-hint-inlay.js.map +1 -0
  81. package/dist/utils.d.ts +65 -0
  82. package/dist/utils.d.ts.map +1 -0
  83. package/dist/utils.js +97 -0
  84. package/dist/utils.js.map +1 -0
  85. package/package.json +11 -7
  86. package/dist/hover-docs.yaml +0 -600
@@ -1,7 +1,10 @@
1
- import { readFileSync } from "node:fs";
1
+ import { existsSync, readdirSync, readFileSync } from "node:fs";
2
2
  import path from "node:path";
3
3
  import { fileURLToPath } from "node:url";
4
4
  import { parse } from "yaml";
5
+ import { toCanonicalKey } from "./utils.js";
6
+ const HOVER_MARKDOWN_CACHE_LIMIT = 2048;
7
+ const hoverMarkdownCache = new Map();
5
8
  const normalizeAnchor = (value) => {
6
9
  if (typeof value !== "string") {
7
10
  return undefined;
@@ -9,27 +12,219 @@ const normalizeAnchor = (value) => {
9
12
  const normalized = value.trim().replace(/^#/, "");
10
13
  return normalized.length > 0 ? normalized : undefined;
11
14
  };
15
+ const normalizePathSegments = (value) => value
16
+ .trim()
17
+ .toLowerCase()
18
+ .split(/[./]/)
19
+ .map((segment) => segment.trim())
20
+ .filter((segment) => segment.length > 0);
21
+ const toNormalizedPaths = (value) => {
22
+ if (!value) {
23
+ return [];
24
+ }
25
+ if (typeof value === "string") {
26
+ const normalized = normalizePathSegments(value);
27
+ return normalized.length > 0 ? [normalized] : [];
28
+ }
29
+ return value
30
+ .map((item) => normalizePathSegments(item))
31
+ .filter((segments) => segments.length > 0);
32
+ };
33
+ const resolveDataDir = (directoryName) => {
34
+ const currentDir = path.dirname(fileURLToPath(import.meta.url));
35
+ const candidates = [
36
+ path.join(currentDir, directoryName),
37
+ path.resolve(currentDir, "..", "data", directoryName),
38
+ ];
39
+ const resolved = candidates.find((candidate) => existsSync(candidate));
40
+ if (!resolved) {
41
+ throw new Error(`${directoryName} directory not found`);
42
+ }
43
+ return resolved;
44
+ };
12
45
  const loadHoverDocYaml = () => {
13
- const hoverDocsPath = path.join(path.dirname(fileURLToPath(import.meta.url)), "hover-docs.yaml");
14
- const raw = readFileSync(hoverDocsPath, "utf8");
15
- const parsed = parse(raw);
16
- if (!parsed || !Array.isArray(parsed.entries) || !parsed.baseUrls) {
17
- throw new Error("Invalid hover docs yaml structure");
46
+ const hoverDocsDir = resolveDataDir("hover-docs");
47
+ const fileNames = readdirSync(hoverDocsDir)
48
+ .filter((fileName) => fileName.endsWith(".yaml"))
49
+ .sort((left, right) => left.localeCompare(right));
50
+ if (fileNames.length === 0) {
51
+ throw new Error("Hover docs directory is empty");
52
+ }
53
+ let version = 1;
54
+ let v2BaseUrl;
55
+ let v3BaseUrl;
56
+ const entries = [];
57
+ for (const fileName of fileNames) {
58
+ const filePath = path.join(hoverDocsDir, fileName);
59
+ const raw = readFileSync(filePath, "utf8");
60
+ const parsed = parse(raw);
61
+ if (!parsed || typeof parsed !== "object") {
62
+ throw new Error(`Invalid hover docs yaml fragment: ${fileName}`);
63
+ }
64
+ if (typeof parsed.version === "number") {
65
+ version = parsed.version;
66
+ }
67
+ if (parsed.baseUrls?.v2) {
68
+ v2BaseUrl = parsed.baseUrls.v2;
69
+ }
70
+ if (parsed.baseUrls?.v3) {
71
+ v3BaseUrl = parsed.baseUrls.v3;
72
+ }
73
+ if (parsed.entries !== undefined && !Array.isArray(parsed.entries)) {
74
+ throw new Error(`Invalid entries in hover docs yaml fragment: ${fileName}`);
75
+ }
76
+ if (Array.isArray(parsed.entries)) {
77
+ entries.push(...parsed.entries);
78
+ }
79
+ }
80
+ if (!v2BaseUrl || !v3BaseUrl) {
81
+ throw new Error("Missing baseUrls.v2 or baseUrls.v3 in hover docs yaml");
82
+ }
83
+ if (entries.length === 0) {
84
+ throw new Error("No hover docs entries found");
85
+ }
86
+ return {
87
+ version,
88
+ baseUrls: {
89
+ v2: v2BaseUrl,
90
+ v3: v3BaseUrl,
91
+ },
92
+ entries,
93
+ };
94
+ };
95
+ const loadHoverUsageEntries = () => {
96
+ const hoverUsageDir = resolveDataDir("hover-usage");
97
+ const fileNames = readdirSync(hoverUsageDir)
98
+ .filter((fileName) => fileName.endsWith(".yaml"))
99
+ .sort((left, right) => left.localeCompare(right));
100
+ if (fileNames.length === 0) {
101
+ return [];
102
+ }
103
+ const usageEntries = [];
104
+ for (const fileName of fileNames) {
105
+ const filePath = path.join(hoverUsageDir, fileName);
106
+ const raw = readFileSync(filePath, "utf8");
107
+ const parsed = parse(raw);
108
+ if (!parsed || typeof parsed !== "object") {
109
+ throw new Error(`Invalid hover usage yaml fragment: ${fileName}`);
110
+ }
111
+ if (parsed.entries !== undefined && !Array.isArray(parsed.entries)) {
112
+ throw new Error(`Invalid entries in hover usage yaml fragment: ${fileName}`);
113
+ }
114
+ for (const entry of parsed.entries ?? []) {
115
+ if (!entry ||
116
+ typeof entry.keyword !== "string" ||
117
+ typeof entry.usage !== "string") {
118
+ throw new Error(`Invalid usage entry in fragment: ${fileName}`);
119
+ }
120
+ const keyword = toCanonicalKey(entry.keyword);
121
+ const usage = entry.usage.trim();
122
+ if (keyword.length === 0 || usage.length === 0) {
123
+ continue;
124
+ }
125
+ usageEntries.push({
126
+ keyword,
127
+ usage,
128
+ normalizedPaths: toNormalizedPaths(entry.path),
129
+ });
130
+ }
18
131
  }
19
- return parsed;
132
+ return usageEntries;
20
133
  };
21
134
  const isDiffType = (value) => value === "same" ||
22
135
  value === "added" ||
23
136
  value === "modified" ||
24
137
  value === "removed";
25
138
  const isVersionTag = (value) => value === "v2+" || value === "v3+" || value === "v2" || value === "v2-v3";
139
+ const isPrefixPath = (pathSegments, contextSegments) => {
140
+ if (pathSegments.length === 0 ||
141
+ pathSegments.length > contextSegments.length) {
142
+ return false;
143
+ }
144
+ for (let index = 0; index < pathSegments.length; index += 1) {
145
+ if (pathSegments[index] !== contextSegments[index]) {
146
+ return false;
147
+ }
148
+ }
149
+ return true;
150
+ };
151
+ const isSubsequencePath = (pathSegments, contextSegments) => {
152
+ if (pathSegments.length === 0 ||
153
+ pathSegments.length > contextSegments.length) {
154
+ return false;
155
+ }
156
+ let contextIndex = 0;
157
+ for (const segment of pathSegments) {
158
+ while (contextIndex < contextSegments.length &&
159
+ contextSegments[contextIndex] !== segment) {
160
+ contextIndex += 1;
161
+ }
162
+ if (contextIndex >= contextSegments.length) {
163
+ return false;
164
+ }
165
+ contextIndex += 1;
166
+ }
167
+ return true;
168
+ };
169
+ const scorePathMatch = (normalizedPaths, contextPath) => {
170
+ if (!contextPath || contextPath.length === 0) {
171
+ return normalizedPaths.length === 0 ? 0 : -1;
172
+ }
173
+ if (normalizedPaths.length === 0) {
174
+ return 0;
175
+ }
176
+ const normalizedContext = contextPath.map((segment) => segment.toLowerCase());
177
+ let bestScore = -1;
178
+ for (const pathSegments of normalizedPaths) {
179
+ if (isPrefixPath(pathSegments, normalizedContext)) {
180
+ bestScore = Math.max(bestScore, pathSegments.length * 10);
181
+ continue;
182
+ }
183
+ if (isSubsequencePath(pathSegments, normalizedContext)) {
184
+ bestScore = Math.max(bestScore, pathSegments.length * 5);
185
+ }
186
+ }
187
+ return bestScore;
188
+ };
189
+ const resolveDefaultUsage = (entries) => {
190
+ if (entries.length === 0) {
191
+ return undefined;
192
+ }
193
+ const genericEntry = entries.find((entry) => entry.normalizedPaths.length === 0);
194
+ if (genericEntry) {
195
+ return genericEntry.usage;
196
+ }
197
+ return entries[0]?.usage;
198
+ };
199
+ const resolveUsageForContext = (entries, contextPath) => {
200
+ if (entries.length === 0) {
201
+ return undefined;
202
+ }
203
+ let selectedUsage;
204
+ let selectedScore = Number.NEGATIVE_INFINITY;
205
+ for (const entry of entries) {
206
+ const score = scorePathMatch(entry.normalizedPaths, contextPath);
207
+ if (score > selectedScore) {
208
+ selectedUsage = entry.usage;
209
+ selectedScore = score;
210
+ }
211
+ }
212
+ return selectedUsage ?? entries[0]?.usage;
213
+ };
26
214
  const hoverDocSource = loadHoverDocYaml();
215
+ const hoverUsageEntries = loadHoverUsageEntries();
216
+ const hoverUsageByKeyword = new Map();
217
+ for (const usageEntry of hoverUsageEntries) {
218
+ const existing = hoverUsageByKeyword.get(usageEntry.keyword) ?? [];
219
+ existing.push(usageEntry);
220
+ hoverUsageByKeyword.set(usageEntry.keyword, existing);
221
+ }
27
222
  const VERSION_BASE_URLS = {
28
223
  v2: hoverDocSource.baseUrls.v2,
29
224
  v3: hoverDocSource.baseUrls.v3,
30
225
  };
31
226
  const toCanonicalEntry = (entry) => {
32
- const keyword = entry.keyword.trim().toLowerCase();
227
+ const keyword = toCanonicalKey(entry.keyword);
33
228
  if (keyword.length === 0) {
34
229
  throw new Error("Hover keyword must not be empty");
35
230
  }
@@ -61,23 +256,36 @@ const toCanonicalEntry = (entry) => {
61
256
  (!anchors || Object.keys(anchors).length === 0)) {
62
257
  throw new Error(`Keyword '${keyword}' requires anchor or anchors for version 'v2-v3'`);
63
258
  }
259
+ const usageCandidates = hoverUsageByKeyword.get(keyword) ?? [];
64
260
  return {
65
261
  ...entry,
66
262
  keyword,
263
+ usage: entry.usage ?? resolveDefaultUsage(usageCandidates),
67
264
  anchor,
68
265
  anchors,
266
+ normalizedPaths: toNormalizedPaths(entry.path),
267
+ usageCandidates,
69
268
  };
70
269
  };
71
270
  const normalizedEntries = hoverDocSource.entries.map(toCanonicalEntry);
72
- const dedupedEntries = [];
73
- const seenKeywords = new Set();
271
+ const entriesByKeyword = new Map();
74
272
  for (const entry of normalizedEntries) {
75
- if (seenKeywords.has(entry.keyword)) {
76
- continue;
77
- }
78
- seenKeywords.add(entry.keyword);
79
- dedupedEntries.push(entry);
273
+ const existing = entriesByKeyword.get(entry.keyword) ?? [];
274
+ existing.push(entry);
275
+ entriesByKeyword.set(entry.keyword, existing);
80
276
  }
277
+ const selectEntryForContext = (entries, contextPath) => {
278
+ let selected;
279
+ let selectedScore = Number.NEGATIVE_INFINITY;
280
+ for (const entry of entries) {
281
+ const score = scorePathMatch(entry.normalizedPaths, contextPath);
282
+ if (score > selectedScore) {
283
+ selected = entry;
284
+ selectedScore = score;
285
+ }
286
+ }
287
+ return selected;
288
+ };
81
289
  const buildDocUrl = (version, anchor) => {
82
290
  const baseUrl = VERSION_BASE_URLS[version];
83
291
  if (!anchor || anchor.length === 0) {
@@ -86,56 +294,173 @@ const buildDocUrl = (version, anchor) => {
86
294
  return `${baseUrl}#${anchor}`;
87
295
  };
88
296
  const buildDocsSection = (entry) => {
89
- const lines = [];
90
297
  if (entry.version === "v2+") {
91
- lines.push(`- [BIRD v2.18 / v3.2.0](${buildDocUrl("v2", entry.anchor)})`);
298
+ return `Reference: [BIRD User's Guide](${buildDocUrl("v2", entry.anchor)})`;
92
299
  }
93
- else if (entry.version === "v3+") {
94
- lines.push(`- [BIRD v3.2.0](${buildDocUrl("v3", entry.anchor)})`);
300
+ if (entry.version === "v3+") {
301
+ return `Reference: [BIRD v3 User's Guide](${buildDocUrl("v3", entry.anchor)})`;
95
302
  }
96
- else if (entry.version === "v2") {
97
- lines.push(`- [BIRD v2.18](${buildDocUrl("v2", entry.anchor)})`);
303
+ if (entry.version === "v2") {
304
+ return `Reference: [BIRD v2 User's Guide](${buildDocUrl("v2", entry.anchor)})`;
98
305
  }
99
- else {
100
- const v2Anchor = entry.anchors?.v2 ?? entry.anchor;
101
- const v3Anchor = entry.anchors?.v3 ?? entry.anchor;
102
- if (v2Anchor) {
103
- lines.push(`- [BIRD v2.18](${buildDocUrl("v2", v2Anchor)})`);
104
- }
105
- if (v3Anchor) {
106
- lines.push(`- [BIRD v3.2.0](${buildDocUrl("v3", v3Anchor)})`);
107
- }
306
+ // v2-v3: separate anchors
307
+ const v2Anchor = entry.anchors?.v2 ?? entry.anchor;
308
+ const v3Anchor = entry.anchors?.v3 ?? entry.anchor;
309
+ const links = [];
310
+ if (v2Anchor) {
311
+ links.push(`[BIRD v2 User's Guide](${buildDocUrl("v2", v2Anchor)})`);
312
+ }
313
+ if (v3Anchor) {
314
+ links.push(`[BIRD v3 User's Guide](${buildDocUrl("v3", v3Anchor)})`);
108
315
  }
109
- return lines.join("\n");
316
+ return links.length > 0 ? `Reference: ${links.join(" | ")}` : "";
110
317
  };
111
318
  const buildNotesSection = (entry) => {
112
319
  if (!entry.notes) {
113
320
  return "";
114
321
  }
115
- const lines = [];
322
+ const parts = [];
116
323
  if (entry.notes.v2) {
117
- lines.push(`- v2: ${entry.notes.v2}`);
324
+ parts.push(`v2: ${entry.notes.v2}`);
118
325
  }
119
326
  if (entry.notes.v3) {
120
- lines.push(`- v3: ${entry.notes.v3}`);
327
+ parts.push(`v3: ${entry.notes.v3}`);
121
328
  }
122
- if (lines.length === 0) {
329
+ return parts.length > 0 ? `\n\n> **Note:** ${parts.join(" \u00b7 ")}` : "";
330
+ };
331
+ const buildContextSection = (entry) => {
332
+ if (!entry.path) {
333
+ return "";
334
+ }
335
+ const paths = Array.isArray(entry.path) ? entry.path : [entry.path];
336
+ if (paths.length === 0) {
337
+ return "";
338
+ }
339
+ return `**Context:** ${paths.map((item) => `\`${item}\``).join(", ")}`;
340
+ };
341
+ const buildRelatedSection = (entry) => {
342
+ if (!entry.related || entry.related.length === 0) {
123
343
  return "";
124
344
  }
125
- return `\n\nNotes:\n${lines.join("\n")}`;
126
- };
127
- const toHoverMarkdown = (entry) => {
128
- return ([
129
- `### ${entry.description}`,
130
- "",
131
- entry.detail,
132
- "",
133
- `Diff: \`${entry.diff}\``,
134
- `Version: \`${entry.version}\``,
135
- "Docs:",
136
- buildDocsSection(entry),
137
- ].join("\n") + buildNotesSection(entry));
138
- };
139
- export const HOVER_KEYWORD_DOCS = Object.fromEntries(dedupedEntries.map((entry) => [entry.keyword, toHoverMarkdown(entry)]));
140
- export const HOVER_KEYWORDS = Object.freeze(dedupedEntries.map((entry) => entry.keyword));
345
+ return `**Related:** ${entry.related.map((item) => `\`${item}\``).join(", ")}`;
346
+ };
347
+ const buildParametersSection = (entry) => {
348
+ if (!entry.parameters || entry.parameters.length === 0) {
349
+ return "";
350
+ }
351
+ const header = "\n| Parameter | | Description |\n|:---|:---|:---|";
352
+ const rows = entry.parameters.map((parameter) => {
353
+ const requiredLabel = parameter.required ? "required" : "optional";
354
+ return `| \`${parameter.name}\` | *${requiredLabel}* | ${parameter.description} |`;
355
+ });
356
+ return `${header}\n${rows.join("\n")}`;
357
+ };
358
+ const DIFF_LABELS = {
359
+ same: "Behaves identically to BIRD2",
360
+ added: "Introduced in BIRD3",
361
+ modified: "Behavior revised from BIRD2",
362
+ removed: "Deprecated since BIRD3",
363
+ };
364
+ const DIFF_ICONS = {
365
+ same: "\uD83D\uDFE2 \u2714", // 🟢 ✔
366
+ added: "\uD83D\uDD35 \u2795", // 🔵 ➕
367
+ modified: "\uD83D\uDFE0 \u270E", // 🟠 ✎
368
+ removed: "\uD83D\uDD34 \u2716", // 🔴 ✖
369
+ };
370
+ /**
371
+ * Build a complete, self-contained hover markdown document for a keyword entry.
372
+ * The output intentionally includes the keyword heading so callers can render
373
+ * the result directly without prepending extra titles.
374
+ */
375
+ const toHoverMarkdown = (entry, usage) => {
376
+ const sections = [];
377
+ // ── Title ──────────────────────────────────────────────────────────────
378
+ sections.push(`## \`${entry.keyword}\`\n`);
379
+ sections.push(`> ${entry.description}\n`);
380
+ sections.push(entry.detail);
381
+ // ── Separator ──────────────────────────────────────────────────────────
382
+ sections.push("\n---\n");
383
+ // ── Metadata ───────────────────────────────────────────────────────────
384
+ const diffIcon = DIFF_ICONS[entry.diff];
385
+ const diffLabel = DIFF_LABELS[entry.diff];
386
+ sections.push(`${diffIcon} *${diffLabel}*\u2002\u00b7\u2002Version \`${entry.version}\`\n`);
387
+ sections.push(buildDocsSection(entry));
388
+ // ── Usage ──────────────────────────────────────────────────────────────
389
+ if (usage) {
390
+ sections.push(`\n\`\`\`bird\n${usage}\n\`\`\``);
391
+ }
392
+ // ── Parameters (table for wider hover) ─────────────────────────────────
393
+ const parametersSection = buildParametersSection(entry);
394
+ if (parametersSection) {
395
+ sections.push(parametersSection);
396
+ }
397
+ // ── Footer: context, related, notes ────────────────────────────────────
398
+ const footerParts = [];
399
+ const contextSection = buildContextSection(entry);
400
+ if (contextSection) {
401
+ footerParts.push(contextSection);
402
+ }
403
+ const relatedSection = buildRelatedSection(entry);
404
+ if (relatedSection) {
405
+ footerParts.push(relatedSection);
406
+ }
407
+ if (footerParts.length > 0) {
408
+ sections.push(`\n${footerParts.join("\u2002\u00b7\u2002")}`);
409
+ }
410
+ const notesSection = buildNotesSection(entry);
411
+ if (notesSection) {
412
+ sections.push(notesSection);
413
+ }
414
+ return sections.join("\n");
415
+ };
416
+ const toContextCacheKey = (contextPath) => contextPath && contextPath.length > 0
417
+ ? contextPath.map((segment) => segment.toLowerCase()).join(".")
418
+ : "";
419
+ const setCachedMarkdown = (cacheKey, markdown) => {
420
+ if (hoverMarkdownCache.has(cacheKey)) {
421
+ hoverMarkdownCache.delete(cacheKey);
422
+ }
423
+ hoverMarkdownCache.set(cacheKey, markdown);
424
+ if (hoverMarkdownCache.size > HOVER_MARKDOWN_CACHE_LIMIT) {
425
+ const oldestKey = hoverMarkdownCache.keys().next().value;
426
+ if (oldestKey) {
427
+ hoverMarkdownCache.delete(oldestKey);
428
+ }
429
+ }
430
+ };
431
+ export const resolveHoverKeywordDoc = (keyword, options) => {
432
+ const canonicalKey = toCanonicalKey(keyword);
433
+ if (canonicalKey.length === 0) {
434
+ return undefined;
435
+ }
436
+ const contextCacheKey = toContextCacheKey(options?.contextPath);
437
+ const cacheKey = `${canonicalKey}::${contextCacheKey}`;
438
+ const cachedMarkdown = hoverMarkdownCache.get(cacheKey);
439
+ if (cachedMarkdown !== undefined) {
440
+ return cachedMarkdown;
441
+ }
442
+ const entries = entriesByKeyword.get(canonicalKey);
443
+ if (!entries || entries.length === 0) {
444
+ return undefined;
445
+ }
446
+ const entry = selectEntryForContext(entries, options?.contextPath);
447
+ if (!entry) {
448
+ return undefined;
449
+ }
450
+ const usage = resolveUsageForContext(entry.usageCandidates, options?.contextPath) ??
451
+ entry.usage;
452
+ const markdown = toHoverMarkdown(entry, usage);
453
+ setCachedMarkdown(cacheKey, markdown);
454
+ return markdown;
455
+ };
456
+ export const HOVER_KEYWORDS = Object.freeze([
457
+ ...entriesByKeyword.keys(),
458
+ ]);
459
+ export const HOVER_KEYWORD_DOCS = Object.fromEntries(HOVER_KEYWORDS.flatMap((keyword) => {
460
+ const markdown = resolveHoverKeywordDoc(keyword);
461
+ if (!markdown) {
462
+ return [];
463
+ }
464
+ return [[keyword, markdown]];
465
+ }));
141
466
  //# sourceMappingURL=hover-docs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hover-docs.js","sourceRoot":"","sources":["../src/hover-docs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hover-docs.js","sourceRoot":"","sources":["../src/hover-docs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ version: 1
2
+ entries: []
@@ -0,0 +1,73 @@
1
+ entries:
2
+ - keyword: attribute
3
+ usage: attribute int my_tag;
4
+ - keyword: define
5
+ usage: define LOCAL_AS = 65001;
6
+ - keyword: eval
7
+ usage: eval 1 + 1;
8
+ - keyword: filter
9
+ usage: |
10
+ filter only_bgp {
11
+ if source = RTS_BGP then accept;
12
+ reject;
13
+ }
14
+ - keyword: function
15
+ usage: |
16
+ function set_pref(int base) -> int {
17
+ return base + 100;
18
+ }
19
+ - keyword: include
20
+ usage: include "/etc/bird/conf.d/*.conf";
21
+ - keyword: log
22
+ usage: log syslog all;
23
+ - keyword: mrtdump
24
+ usage: mrtdump "/var/log/bird.mrt";
25
+ - keyword: protocol
26
+ usage: protocol device {}
27
+ - keyword: router id
28
+ usage: router id 10.0.0.1;
29
+ - keyword: router id from
30
+ usage: router id from "lo";
31
+ - keyword: sorted
32
+ usage: table master4 sorted;
33
+ - keyword: table
34
+ usage: table master4;
35
+ - keyword: template
36
+ usage: |
37
+ template bgp IBGP_BASE {
38
+ local as 65001;
39
+ }
40
+ - keyword: thread group
41
+ usage: thread group worker { threads 4; max latency 200 ms; };
42
+ - keyword: max latency
43
+ usage: max latency 200 ms;
44
+ - keyword: cork threshold
45
+ usage: cork threshold 50000;
46
+ - keyword: debug
47
+ usage: debug protocols { states, routes };
48
+ - keyword: debug latency
49
+ usage: debug latency { scheduling, timers };
50
+ - keyword: debug tables
51
+ usage: debug tables on;
52
+ - keyword: graceful restart wait
53
+ usage: graceful restart wait 240;
54
+ - keyword: hostname
55
+ usage: hostname "router-edge-01";
56
+ - keyword: threads
57
+ usage: threads 4;
58
+ - keyword: timeformat
59
+ usage: timeformat base "%F %T";
60
+ - keyword: trie
61
+ usage: trie on;
62
+ - keyword: watchdog warning
63
+ usage: watchdog warning 5 s;
64
+ - keyword: max settle time
65
+ usage: max settle time 30;
66
+ - keyword: min settle time
67
+ usage: min settle time 1;
68
+ - keyword: gc period
69
+ usage: gc period 60;
70
+ - keyword: gc threshold
71
+ usage: gc threshold 1000;
72
+ - keyword: export settle time
73
+ usage: export settle time 100 ms;
@@ -0,0 +1,41 @@
1
+ entries:
2
+ - keyword: .asn
3
+ usage: if bgp_path.last.asn = 65001 then accept;
4
+ - keyword: .data
5
+ usage: if pair_value.data = 100 then accept;
6
+ - keyword: .ip
7
+ usage: if net.ip = 192.0.2.0 then accept;
8
+ - keyword: .len
9
+ usage: if net.len = 24 then accept;
10
+ - keyword: .mask
11
+ usage: if net.mask = 255.255.255.0 then accept;
12
+ - keyword: accept
13
+ usage: accept;
14
+ - keyword: reject
15
+ usage: reject;
16
+ - keyword: return
17
+ usage: return true;
18
+ - keyword: if
19
+ usage: if net ~ [10.0.0.0/8+] then accept;
20
+ - keyword: then
21
+ usage: if roa_check(roa4, net, bgp_path.last) = ROA_VALID then accept;
22
+ - keyword: else
23
+ usage: if source = RTS_STATIC then accept; else reject;
24
+ - keyword: case
25
+ usage: |
26
+ case source {
27
+ RTS_BGP: accept;
28
+ else: reject;
29
+ }
30
+ - keyword: defined
31
+ usage: if defined(bgp_next_hop) then accept;
32
+ - keyword: print
33
+ usage: print "reject route ", net;
34
+ - keyword: int
35
+ usage: int med;
36
+ - keyword: ip
37
+ usage: ip next_hop;
38
+ - keyword: prefix
39
+ usage: prefix allowed_net;
40
+ - keyword: string
41
+ usage: string policy_name;