@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
@@ -0,0 +1,340 @@
1
+ entries:
2
+ # ── Protocol-level ────────────────────────────────────────────────
3
+ - keyword: ospf
4
+ usage: |
5
+ protocol ospf v2 core {
6
+ rfc1583compat no;
7
+ ecmp on;
8
+ area 0 {
9
+ interface "eth*" {
10
+ cost 10;
11
+ hello 10;
12
+ dead 40;
13
+ type broadcast;
14
+ };
15
+ };
16
+ }
17
+ - keyword: rfc1583compat
18
+ path: protocol.ospf
19
+ usage: |
20
+ protocol ospf v2 <name> {
21
+ rfc1583compat <switch>;
22
+ }
23
+ - keyword: stub router
24
+ path: protocol.ospf
25
+ usage: |
26
+ protocol ospf v2 <name> {
27
+ stub router on;
28
+ }
29
+ - keyword: tick
30
+ path: protocol.ospf
31
+ usage: |
32
+ protocol ospf v2 <name> {
33
+ tick <seconds>;
34
+ }
35
+ - keyword: ecmp
36
+ path: protocol.ospf
37
+ usage: |
38
+ protocol ospf v2 <name> {
39
+ ecmp on limit 16;
40
+ }
41
+ - keyword: merge external
42
+ path: protocol.ospf
43
+ usage: |
44
+ protocol ospf v2 <name> {
45
+ merge external on;
46
+ }
47
+ - keyword: instance id
48
+ path: protocol.ospf
49
+ usage: |
50
+ protocol ospf v3 <name> {
51
+ instance id <number>;
52
+ }
53
+ - keyword: graceful restart
54
+ path: protocol.ospf
55
+ usage: |
56
+ protocol ospf v2 <name> {
57
+ graceful restart on;
58
+ graceful restart time 120;
59
+ }
60
+ - keyword: graceful restart time
61
+ path: protocol.ospf
62
+ usage: |
63
+ protocol ospf v2 <name> {
64
+ graceful restart time 120;
65
+ }
66
+ # ── Area-level ────────────────────────────────────────────────────
67
+ - keyword: area
68
+ path: protocol.ospf
69
+ usage: |
70
+ protocol ospf v2 <name> {
71
+ area <id> {
72
+ interface "eth*" {
73
+ cost 10;
74
+ };
75
+ };
76
+ }
77
+ - keyword: stub
78
+ path: protocol.ospf.area
79
+ usage: |
80
+ protocol ospf v2 <name> {
81
+ area 1 {
82
+ stub;
83
+ default cost 1000;
84
+ };
85
+ }
86
+ - keyword: nssa
87
+ path: protocol.ospf.area
88
+ usage: |
89
+ protocol ospf v2 <name> {
90
+ area 1 {
91
+ nssa;
92
+ default nssa on;
93
+ };
94
+ }
95
+ - keyword: summary
96
+ path: protocol.ospf.area
97
+ usage: |
98
+ protocol ospf v2 <name> {
99
+ area 1 {
100
+ stub;
101
+ summary no;
102
+ };
103
+ }
104
+ - keyword: default cost
105
+ path: protocol.ospf.area
106
+ usage: |
107
+ protocol ospf v2 <name> {
108
+ area 1 {
109
+ stub;
110
+ default cost 1000;
111
+ };
112
+ }
113
+ - keyword: default nssa
114
+ path: protocol.ospf.area
115
+ usage: |
116
+ protocol ospf v2 <name> {
117
+ area 1 {
118
+ nssa;
119
+ default nssa on;
120
+ };
121
+ }
122
+ - keyword: translator
123
+ path: protocol.ospf.area
124
+ usage: |
125
+ protocol ospf v2 <name> {
126
+ area 1 {
127
+ nssa;
128
+ translator on;
129
+ };
130
+ }
131
+ - keyword: networks
132
+ path: protocol.ospf.area
133
+ usage: |
134
+ protocol ospf v2 <name> {
135
+ area 0 {
136
+ networks {
137
+ 10.0.0.0/16;
138
+ 192.168.0.0/24 hidden;
139
+ };
140
+ };
141
+ }
142
+ - keyword: stubnet
143
+ path: protocol.ospf.area
144
+ usage: |
145
+ protocol ospf v2 <name> {
146
+ area 0 {
147
+ stubnet 10.0.0.0/24 {
148
+ cost 100;
149
+ };
150
+ };
151
+ }
152
+ - keyword: external
153
+ path: protocol.ospf.area
154
+ usage: |
155
+ protocol ospf v2 <name> {
156
+ area 1 {
157
+ nssa;
158
+ external {
159
+ 192.168.0.0/16;
160
+ 10.0.0.0/8 hidden;
161
+ 172.16.0.0/12 tag 42;
162
+ };
163
+ };
164
+ }
165
+ - keyword: virtual link
166
+ path: protocol.ospf.area
167
+ usage: |
168
+ protocol ospf v2 <name> {
169
+ area 1 {
170
+ virtual link 10.0.0.1;
171
+ };
172
+ }
173
+ # ── Interface-level ───────────────────────────────────────────────
174
+ - keyword: interface
175
+ path: protocol.ospf.area
176
+ usage: |
177
+ protocol ospf v2 <name> {
178
+ area 0 {
179
+ interface "eth*" {
180
+ cost 10;
181
+ hello 10;
182
+ dead 40;
183
+ type broadcast;
184
+ };
185
+ };
186
+ }
187
+ - keyword: cost
188
+ path: protocol.ospf.area.interface
189
+ usage: |
190
+ protocol ospf v2 <name> {
191
+ area 0 {
192
+ interface <pattern> {
193
+ cost <number>;
194
+ };
195
+ };
196
+ }
197
+ - keyword: hello
198
+ path: protocol.ospf.area.interface
199
+ usage: |
200
+ protocol ospf v2 <name> {
201
+ area 0 {
202
+ interface <pattern> {
203
+ hello <seconds>;
204
+ };
205
+ };
206
+ }
207
+ - keyword: dead
208
+ path: protocol.ospf.area.interface
209
+ usage: |
210
+ protocol ospf v2 <name> {
211
+ area 0 {
212
+ interface <pattern> {
213
+ dead <seconds>;
214
+ };
215
+ };
216
+ }
217
+ - keyword: dead count
218
+ path: protocol.ospf.area.interface
219
+ usage: |
220
+ protocol ospf v2 <name> {
221
+ area 0 {
222
+ interface <pattern> {
223
+ dead count <number>;
224
+ };
225
+ };
226
+ }
227
+ - keyword: type
228
+ path: protocol.ospf.area.interface
229
+ usage: |
230
+ protocol ospf v2 <name> {
231
+ area 0 {
232
+ interface <pattern> {
233
+ type broadcast;
234
+ };
235
+ };
236
+ }
237
+ - keyword: priority
238
+ path: protocol.ospf.area.interface
239
+ usage: |
240
+ protocol ospf v2 <name> {
241
+ area 0 {
242
+ interface <pattern> {
243
+ priority <number>;
244
+ };
245
+ };
246
+ }
247
+ - keyword: retransmit
248
+ path: protocol.ospf.area.interface
249
+ usage: |
250
+ protocol ospf v2 <name> {
251
+ area 0 {
252
+ interface <pattern> {
253
+ retransmit <seconds>;
254
+ };
255
+ };
256
+ }
257
+ - keyword: transmit delay
258
+ path: protocol.ospf.area.interface
259
+ usage: |
260
+ protocol ospf v2 <name> {
261
+ area 0 {
262
+ interface <pattern> {
263
+ transmit delay <seconds>;
264
+ };
265
+ };
266
+ }
267
+ - keyword: wait
268
+ path: protocol.ospf.area.interface
269
+ usage: |
270
+ protocol ospf v2 <name> {
271
+ area 0 {
272
+ interface <pattern> {
273
+ wait <seconds>;
274
+ };
275
+ };
276
+ }
277
+ - keyword: poll
278
+ path: protocol.ospf.area.interface
279
+ usage: |
280
+ protocol ospf v2 <name> {
281
+ area 0 {
282
+ interface <pattern> {
283
+ poll <seconds>;
284
+ };
285
+ };
286
+ }
287
+ - keyword: bfd
288
+ path: protocol.ospf.area.interface
289
+ usage: |
290
+ protocol ospf v2 <name> {
291
+ area 0 {
292
+ interface <pattern> {
293
+ bfd on;
294
+ };
295
+ };
296
+ }
297
+ - keyword: authentication
298
+ path: protocol.ospf.area.interface
299
+ usage: |
300
+ protocol ospf v2 <name> {
301
+ area 0 {
302
+ interface <pattern> {
303
+ authentication cryptographic;
304
+ password "secret";
305
+ };
306
+ };
307
+ }
308
+ - keyword: password
309
+ path:
310
+ - protocol.ospf.authentication
311
+ - protocol.ospf.area
312
+ - protocol.ospf
313
+ usage: |
314
+ protocol ospf v2 <name> {
315
+ area 0 {
316
+ interface <pattern> {
317
+ password "ospf-secret";
318
+ };
319
+ };
320
+ }
321
+ - keyword: ecmp weight
322
+ path: protocol.ospf.area.interface
323
+ usage: |
324
+ protocol ospf v2 <name> {
325
+ area 0 {
326
+ interface <pattern> {
327
+ ecmp weight <number>;
328
+ };
329
+ };
330
+ }
331
+ - keyword: ttl security
332
+ path: protocol.ospf.area.interface
333
+ usage: |
334
+ protocol ospf v2 <name> {
335
+ area 0 {
336
+ interface <pattern> {
337
+ ttl security on;
338
+ };
339
+ };
340
+ }
package/dist/hover.d.ts CHANGED
@@ -1,5 +1,15 @@
1
1
  import { type Hover, type Position } from "vscode-languageserver/node.js";
2
2
  import { TextDocument } from "vscode-languageserver-textdocument";
3
3
  import type { ParsedBirdDocument } from "@birdcc/parser";
4
+ export interface KeywordHoverResolutionOptions {
5
+ readonly contextPath?: readonly string[];
6
+ }
7
+ export interface ResolvedKeywordHover {
8
+ readonly key: string;
9
+ readonly markdown: string;
10
+ readonly startCharacter: number;
11
+ readonly endCharacter: number;
12
+ }
13
+ export declare const resolveKeywordHoverOnLine: (lineText: string, character: number, options?: KeywordHoverResolutionOptions) => ResolvedKeywordHover | null;
4
14
  export declare const createHoverFromParsed: (parsed: ParsedBirdDocument, document: TextDocument, position: Position) => Hover | null;
5
15
  //# sourceMappingURL=hover.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hover.d.ts","sourceRoot":"","sources":["../src/hover.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,KAAK,EACV,KAAK,QAAQ,EAEd,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AA8EzD,eAAO,MAAM,qBAAqB,GAChC,QAAQ,kBAAkB,EAC1B,UAAU,YAAY,EACtB,UAAU,QAAQ,KACjB,KAAK,GAAG,IAiCV,CAAC"}
1
+ {"version":3,"file":"hover.d.ts","sourceRoot":"","sources":["../src/hover.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,KAAK,EACV,KAAK,QAAQ,EAEd,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AA6BzD,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1C;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAoKD,eAAO,MAAM,yBAAyB,GACpC,UAAU,MAAM,EAChB,WAAW,MAAM,EACjB,UAAU,6BAA6B,KACtC,oBAAoB,GAAG,IAoBzB,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,QAAQ,kBAAkB,EAC1B,UAAU,YAAY,EACtB,UAAU,QAAQ,KACjB,KAAK,GAAG,IAiDV,CAAC"}
package/dist/hover.js CHANGED
@@ -1,51 +1,145 @@
1
- import { declarationMetadata, isPositionInRange, KEYWORD_DOCS, toLspRange, } from "./shared.js";
2
- const escapeRegExp = (value) => value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
3
- const keywordAtPosition = (document, position) => {
4
- const text = document.getText();
5
- const positionOffset = document.offsetAt(position);
6
- if (positionOffset < 0 || positionOffset > text.length) {
7
- return null;
1
+ import { declarationMetadata, KEYWORD_DOCS } from "./shared.js";
2
+ import { resolveHoverKeywordDoc } from "./hover-docs.js";
3
+ import { resolveHoverContextPath } from "./hover-context.js";
4
+ import { toCanonicalKey, isPositionInRange, toLspRange, getLineText, } from "./utils.js";
5
+ const HOVER_WORD_PATTERN = /(?:\.[A-Za-z_][A-Za-z0-9_]*|[A-Za-z_][A-Za-z0-9_]*)/g;
6
+ const toKeyAliases = (keyword) => {
7
+ const canonicalKey = toCanonicalKey(keyword);
8
+ const aliases = new Set();
9
+ const addAlias = (value) => {
10
+ const normalized = value.trim().toLowerCase();
11
+ if (!normalized) {
12
+ return;
13
+ }
14
+ aliases.add(normalized);
15
+ if (normalized.startsWith(".")) {
16
+ aliases.add(normalized.slice(1));
17
+ return;
18
+ }
19
+ if (!normalized.includes(" ")) {
20
+ aliases.add(`.${normalized}`);
21
+ }
22
+ };
23
+ addAlias(canonicalKey);
24
+ addAlias(canonicalKey.replace(/[_-]+/g, " "));
25
+ if (canonicalKey.includes(" ")) {
26
+ addAlias(canonicalKey.replace(/\s+/g, "_"));
27
+ addAlias(canonicalKey.replace(/\s+/g, "-"));
8
28
  }
9
- const keywords = Object.keys(KEYWORD_DOCS).sort((left, right) => right.length - left.length);
10
- for (const keyword of keywords) {
11
- const keywordPattern = new RegExp(`\\b${escapeRegExp(keyword).replaceAll("\\ ", "\\\\s+")}\\b`, "gi");
12
- let match = keywordPattern.exec(text);
13
- while (match) {
14
- const start = match.index;
15
- const end = start + match[0].length;
16
- if (positionOffset >= start && positionOffset <= end) {
17
- return {
18
- word: keyword,
19
- range: {
20
- start: document.positionAt(start),
21
- end: document.positionAt(end),
22
- },
23
- };
24
- }
25
- match = keywordPattern.exec(text);
29
+ return [...aliases];
30
+ };
31
+ const toKeywordWordCount = (keyword) => keyword
32
+ .trim()
33
+ .split(/\s+/)
34
+ .filter((word) => word.length > 0).length;
35
+ const keywordDocsByAlias = new Map();
36
+ const keywordWordCounts = [
37
+ ...new Set(Object.keys(KEYWORD_DOCS).map(toKeywordWordCount)),
38
+ ].sort((left, right) => right - left);
39
+ for (const [keyword, doc] of Object.entries(KEYWORD_DOCS)) {
40
+ const canonicalKeyword = toCanonicalKey(keyword);
41
+ const resolved = {
42
+ keyword: canonicalKeyword,
43
+ doc,
44
+ };
45
+ for (const alias of toKeyAliases(canonicalKeyword)) {
46
+ if (!keywordDocsByAlias.has(alias)) {
47
+ keywordDocsByAlias.set(alias, resolved);
48
+ }
49
+ }
50
+ }
51
+ const getLineTextFromDocument = (document, line) => getLineText(document, line);
52
+ const collectLineWords = (lineText) => {
53
+ const words = [];
54
+ for (const match of lineText.matchAll(HOVER_WORD_PATTERN)) {
55
+ const value = match[0];
56
+ const start = match.index ?? 0;
57
+ words.push({
58
+ value: value.toLowerCase(),
59
+ start,
60
+ end: start + value.length,
61
+ });
62
+ }
63
+ return words;
64
+ };
65
+ const resolveFocusedWordIndex = (words, character) => {
66
+ const exactIndex = words.findIndex((word) => character >= word.start && character < word.end);
67
+ if (exactIndex !== -1) {
68
+ return exactIndex;
69
+ }
70
+ const boundaryIndex = words.findIndex((word) => character === word.end);
71
+ if (boundaryIndex !== -1) {
72
+ return boundaryIndex;
73
+ }
74
+ for (let index = words.length - 1; index >= 0; index -= 1) {
75
+ const word = words[index];
76
+ if (character > word.end && character - word.end <= 1) {
77
+ return index;
26
78
  }
27
79
  }
28
- const isWordChar = (char) => /[A-Za-z_]/.test(char);
29
- let start = positionOffset;
30
- while (start > 0 && isWordChar(text[start - 1] ?? "")) {
31
- start -= 1;
80
+ return -1;
81
+ };
82
+ const findResolvedKeywordDoc = (candidateKey) => {
83
+ for (const alias of toKeyAliases(candidateKey)) {
84
+ const resolved = keywordDocsByAlias.get(alias);
85
+ if (resolved) {
86
+ return resolved;
87
+ }
32
88
  }
33
- let end = positionOffset;
34
- while (end < text.length && isWordChar(text[end] ?? "")) {
35
- end += 1;
89
+ return undefined;
90
+ };
91
+ const keywordAtLine = (lineText, character) => {
92
+ const words = collectLineWords(lineText);
93
+ if (words.length === 0) {
94
+ return null;
36
95
  }
37
- if (start === end) {
96
+ const focusedWordIndex = resolveFocusedWordIndex(words, character);
97
+ if (focusedWordIndex === -1) {
38
98
  return null;
39
99
  }
40
- const word = text.slice(start, end).toLowerCase();
41
- const startPosition = document.positionAt(start);
42
- const endPosition = document.positionAt(end);
100
+ for (const phraseLength of keywordWordCounts) {
101
+ if (phraseLength < 1 || phraseLength > words.length) {
102
+ continue;
103
+ }
104
+ const minStart = Math.max(0, focusedWordIndex - phraseLength + 1);
105
+ const maxStart = Math.min(focusedWordIndex, words.length - phraseLength);
106
+ for (let startIndex = minStart; startIndex <= maxStart; startIndex += 1) {
107
+ const endIndex = startIndex + phraseLength - 1;
108
+ const key = words
109
+ .slice(startIndex, endIndex + 1)
110
+ .map((word) => word.value)
111
+ .join(" ");
112
+ const resolved = findResolvedKeywordDoc(key);
113
+ if (!resolved) {
114
+ continue;
115
+ }
116
+ return {
117
+ word: resolved.keyword,
118
+ doc: resolved.doc,
119
+ startCharacter: words[startIndex].start,
120
+ endCharacter: words[endIndex].end,
121
+ };
122
+ }
123
+ }
124
+ return null;
125
+ };
126
+ export const resolveKeywordHoverOnLine = (lineText, character, options) => {
127
+ const keyword = keywordAtLine(lineText, character);
128
+ if (!keyword) {
129
+ return null;
130
+ }
131
+ // Prefer context-aware docs from hover-docs.ts (already self-contained
132
+ // with a keyword heading). Fall back to the static KEYWORD_DOCS value
133
+ // and wrap it with a heading to keep the format consistent.
134
+ const resolvedDoc = resolveHoverKeywordDoc(keyword.word, {
135
+ contextPath: options?.contextPath,
136
+ });
137
+ const markdown = resolvedDoc ?? `## \`${keyword.word}\`\n\n${keyword.doc}`;
43
138
  return {
44
- word,
45
- range: {
46
- start: startPosition,
47
- end: endPosition,
48
- },
139
+ key: keyword.word,
140
+ markdown,
141
+ startCharacter: keyword.startCharacter,
142
+ endCharacter: keyword.endCharacter,
49
143
  };
50
144
  };
51
145
  export const createHoverFromParsed = (parsed, document, position) => {
@@ -62,20 +156,32 @@ export const createHoverFromParsed = (parsed, document, position) => {
62
156
  range: toLspRange(metadata.selectionRange),
63
157
  };
64
158
  }
65
- const keyword = keywordAtPosition(document, position);
66
- if (!keyword) {
159
+ if (position.line < 0 || position.line >= document.lineCount) {
67
160
  return null;
68
161
  }
69
- const keywordDoc = KEYWORD_DOCS[keyword.word];
70
- if (!keywordDoc) {
162
+ const lineText = getLineTextFromDocument(document, position.line);
163
+ const contextPath = resolveHoverContextPath(document, position.line, position.character);
164
+ const keyword = resolveKeywordHoverOnLine(lineText, position.character, {
165
+ contextPath,
166
+ });
167
+ if (!keyword) {
71
168
  return null;
72
169
  }
73
170
  return {
74
171
  contents: {
75
172
  kind: "markdown",
76
- value: `**${keyword.word}**\n\n${keywordDoc}`,
173
+ value: keyword.markdown,
174
+ },
175
+ range: {
176
+ start: {
177
+ line: position.line,
178
+ character: keyword.startCharacter,
179
+ },
180
+ end: {
181
+ line: position.line,
182
+ character: keyword.endCharacter,
183
+ },
77
184
  },
78
- range: keyword.range,
79
185
  };
80
186
  };
81
187
  //# sourceMappingURL=hover.js.map
package/dist/hover.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"hover.js","sourceRoot":"","sources":["../src/hover.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hover.js","sourceRoot":"","sources":["../src/hover.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -4,6 +4,12 @@ export { createDefinitionLocations } from "./definition.js";
4
4
  export { toInternalErrorDiagnostic, toLspDiagnostic } from "./diagnostic.js";
5
5
  export { createDocumentSymbolsFromParsed } from "./document-symbol.js";
6
6
  export { createHoverFromParsed } from "./hover.js";
7
+ export { resolveKeywordHoverOnLine, type KeywordHoverResolutionOptions, type ResolvedKeywordHover, } from "./hover.js";
8
+ export { resolveHoverContextPath, type HoverContextDocumentLike, } from "./hover-context.js";
7
9
  export { createReferenceLocations } from "./references.js";
8
- export { startLspServer } from "./lsp-server.js";
10
+ export { createAsnCompletionItems, extractAsnPrefix, } from "./asn-completion.js";
11
+ export { createAsnInlayHints } from "./asn-inlay-hints.js";
12
+ export { createAsnHover } from "./asn-hover.js";
13
+ export { startLspServer, type LspServerOptions } from "./lsp-server.js";
14
+ export { toCanonicalKey, toLspRange, isPositionInRange, getLineText, type SourceRangeLike, type GetLineTextDocument, } from "./utils.js";
9
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,MAAM,iBAAiB,CAAC;AAClE,YAAY,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAE,+BAA+B,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,MAAM,iBAAiB,CAAC;AAClE,YAAY,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAE,+BAA+B,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EACL,yBAAyB,EACzB,KAAK,6BAA6B,EAClC,KAAK,oBAAoB,GAC1B,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,uBAAuB,EACvB,KAAK,wBAAwB,GAC9B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EACL,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EACL,cAAc,EACd,UAAU,EACV,iBAAiB,EACjB,WAAW,EACX,KAAK,eAAe,EACpB,KAAK,mBAAmB,GACzB,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -3,6 +3,12 @@ export { createDefinitionLocations } from "./definition.js";
3
3
  export { toInternalErrorDiagnostic, toLspDiagnostic } from "./diagnostic.js";
4
4
  export { createDocumentSymbolsFromParsed } from "./document-symbol.js";
5
5
  export { createHoverFromParsed } from "./hover.js";
6
+ export { resolveKeywordHoverOnLine, } from "./hover.js";
7
+ export { resolveHoverContextPath, } from "./hover-context.js";
6
8
  export { createReferenceLocations } from "./references.js";
9
+ export { createAsnCompletionItems, extractAsnPrefix, } from "./asn-completion.js";
10
+ export { createAsnInlayHints } from "./asn-inlay-hints.js";
11
+ export { createAsnHover } from "./asn-hover.js";
7
12
  export { startLspServer } from "./lsp-server.js";
13
+ export { toCanonicalKey, toLspRange, isPositionInRange, getLineText, } from "./utils.js";
8
14
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,MAAM,iBAAiB,CAAC;AAElE,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAE,+BAA+B,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,MAAM,iBAAiB,CAAC;AAElE,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAE,+BAA+B,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EACL,yBAAyB,GAG1B,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,uBAAuB,GAExB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EACL,wBAAwB,EACxB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAyB,MAAM,iBAAiB,CAAC;AACxE,OAAO,EACL,cAAc,EACd,UAAU,EACV,iBAAiB,EACjB,WAAW,GAGZ,MAAM,YAAY,CAAC"}