hledger-lsp 0.1.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 (99) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +632 -0
  3. package/out/extension.d.ts +1 -0
  4. package/out/extension.d.ts.map +1 -0
  5. package/out/extension.js +2 -0
  6. package/out/extension.js.map +1 -0
  7. package/out/features/codeActions.d.ts +73 -0
  8. package/out/features/codeActions.d.ts.map +1 -0
  9. package/out/features/codeActions.js +417 -0
  10. package/out/features/codeActions.js.map +1 -0
  11. package/out/features/completion.d.ts +94 -0
  12. package/out/features/completion.d.ts.map +1 -0
  13. package/out/features/completion.js +323 -0
  14. package/out/features/completion.js.map +1 -0
  15. package/out/features/definition.d.ts +12 -0
  16. package/out/features/definition.d.ts.map +1 -0
  17. package/out/features/definition.js +61 -0
  18. package/out/features/definition.js.map +1 -0
  19. package/out/features/documentLinks.d.ts +17 -0
  20. package/out/features/documentLinks.d.ts.map +1 -0
  21. package/out/features/documentLinks.js +68 -0
  22. package/out/features/documentLinks.js.map +1 -0
  23. package/out/features/findReferences.d.ts +33 -0
  24. package/out/features/findReferences.d.ts.map +1 -0
  25. package/out/features/findReferences.js +79 -0
  26. package/out/features/findReferences.js.map +1 -0
  27. package/out/features/foldingRanges.d.ts +27 -0
  28. package/out/features/foldingRanges.d.ts.map +1 -0
  29. package/out/features/foldingRanges.js +111 -0
  30. package/out/features/foldingRanges.js.map +1 -0
  31. package/out/features/formatter.d.ts +70 -0
  32. package/out/features/formatter.d.ts.map +1 -0
  33. package/out/features/formatter.js +373 -0
  34. package/out/features/formatter.js.map +1 -0
  35. package/out/features/hover.d.ts +66 -0
  36. package/out/features/hover.d.ts.map +1 -0
  37. package/out/features/hover.js +387 -0
  38. package/out/features/hover.js.map +1 -0
  39. package/out/features/inlayHints.d.ts +43 -0
  40. package/out/features/inlayHints.d.ts.map +1 -0
  41. package/out/features/inlayHints.js +221 -0
  42. package/out/features/inlayHints.js.map +1 -0
  43. package/out/features/selectionRange.d.ts +47 -0
  44. package/out/features/selectionRange.d.ts.map +1 -0
  45. package/out/features/selectionRange.js +273 -0
  46. package/out/features/selectionRange.js.map +1 -0
  47. package/out/features/semanticTokens.d.ts +83 -0
  48. package/out/features/semanticTokens.d.ts.map +1 -0
  49. package/out/features/semanticTokens.js +370 -0
  50. package/out/features/semanticTokens.js.map +1 -0
  51. package/out/features/symbols.d.ts +47 -0
  52. package/out/features/symbols.d.ts.map +1 -0
  53. package/out/features/symbols.js +249 -0
  54. package/out/features/symbols.js.map +1 -0
  55. package/out/features/transactionAnalyzer.d.ts +63 -0
  56. package/out/features/transactionAnalyzer.d.ts.map +1 -0
  57. package/out/features/transactionAnalyzer.js +127 -0
  58. package/out/features/transactionAnalyzer.js.map +1 -0
  59. package/out/features/validator.d.ts +142 -0
  60. package/out/features/validator.d.ts.map +1 -0
  61. package/out/features/validator.js +633 -0
  62. package/out/features/validator.js.map +1 -0
  63. package/out/parser/ast.d.ts +37 -0
  64. package/out/parser/ast.d.ts.map +1 -0
  65. package/out/parser/ast.js +606 -0
  66. package/out/parser/ast.js.map +1 -0
  67. package/out/parser/includes.d.ts +25 -0
  68. package/out/parser/includes.d.ts.map +1 -0
  69. package/out/parser/includes.js +106 -0
  70. package/out/parser/includes.js.map +1 -0
  71. package/out/parser/index.d.ts +54 -0
  72. package/out/parser/index.d.ts.map +1 -0
  73. package/out/parser/index.js +146 -0
  74. package/out/parser/index.js.map +1 -0
  75. package/out/server/deps.d.ts +19 -0
  76. package/out/server/deps.d.ts.map +1 -0
  77. package/out/server/deps.js +77 -0
  78. package/out/server/deps.js.map +1 -0
  79. package/out/server/settings.d.ts +60 -0
  80. package/out/server/settings.d.ts.map +1 -0
  81. package/out/server/settings.js +110 -0
  82. package/out/server/settings.js.map +1 -0
  83. package/out/server.d.ts +3 -0
  84. package/out/server.d.ts.map +1 -0
  85. package/out/server.js +420 -0
  86. package/out/server.js.map +1 -0
  87. package/out/types.d.ts +84 -0
  88. package/out/types.d.ts.map +1 -0
  89. package/out/types.js +6 -0
  90. package/out/types.js.map +1 -0
  91. package/out/utils/index.d.ts +38 -0
  92. package/out/utils/index.d.ts.map +1 -0
  93. package/out/utils/index.js +89 -0
  94. package/out/utils/index.js.map +1 -0
  95. package/out/utils/uri.d.ts +32 -0
  96. package/out/utils/uri.d.ts.map +1 -0
  97. package/out/utils/uri.js +215 -0
  98. package/out/utils/uri.js.map +1 -0
  99. package/package.json +58 -0
@@ -0,0 +1,370 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.semanticTokensProvider = exports.SemanticTokensProvider = exports.tokenModifiers = exports.tokenTypes = exports.TokenModifier = exports.TokenType = void 0;
4
+ const node_1 = require("vscode-languageserver/node");
5
+ /**
6
+ * Semantic token types for hledger syntax.
7
+ * These map to standard LSP semantic token types where possible.
8
+ */
9
+ var TokenType;
10
+ (function (TokenType) {
11
+ TokenType[TokenType["namespace"] = 0] = "namespace";
12
+ TokenType[TokenType["type"] = 1] = "type";
13
+ TokenType[TokenType["class"] = 2] = "class";
14
+ TokenType[TokenType["enum"] = 3] = "enum";
15
+ TokenType[TokenType["property"] = 4] = "property";
16
+ TokenType[TokenType["keyword"] = 5] = "keyword";
17
+ TokenType[TokenType["number"] = 6] = "number";
18
+ TokenType[TokenType["string"] = 7] = "string";
19
+ TokenType[TokenType["comment"] = 8] = "comment";
20
+ TokenType[TokenType["operator"] = 9] = "operator";
21
+ })(TokenType || (exports.TokenType = TokenType = {}));
22
+ /**
23
+ * Semantic token modifiers for hledger syntax.
24
+ */
25
+ var TokenModifier;
26
+ (function (TokenModifier) {
27
+ TokenModifier[TokenModifier["declaration"] = 0] = "declaration";
28
+ TokenModifier[TokenModifier["readonly"] = 1] = "readonly";
29
+ TokenModifier[TokenModifier["deprecated"] = 2] = "deprecated";
30
+ })(TokenModifier || (exports.TokenModifier = TokenModifier = {}));
31
+ /**
32
+ * Token type names in the order they appear in the enum.
33
+ * This array is sent to the client during initialization.
34
+ */
35
+ exports.tokenTypes = [
36
+ 'namespace', // 0
37
+ 'type', // 1
38
+ 'class', // 2
39
+ 'enum', // 3
40
+ 'property', // 4
41
+ 'keyword', // 5
42
+ 'number', // 6
43
+ 'string', // 7
44
+ 'comment', // 8
45
+ 'operator', // 9
46
+ ];
47
+ /**
48
+ * Token modifier names in the order they appear in the enum.
49
+ * This array is sent to the client during initialization.
50
+ */
51
+ exports.tokenModifiers = [
52
+ 'declaration', // 0
53
+ 'readonly', // 1
54
+ 'deprecated', // 2
55
+ ];
56
+ /**
57
+ * Convert modifier enums to bitmask
58
+ */
59
+ function encodeModifiers(modifiers) {
60
+ let result = 0;
61
+ for (const modifier of modifiers) {
62
+ result |= (1 << modifier);
63
+ }
64
+ return result;
65
+ }
66
+ /**
67
+ * Provides semantic tokens for hledger journal files.
68
+ */
69
+ class SemanticTokensProvider {
70
+ /**
71
+ * Provide semantic tokens for the entire document.
72
+ */
73
+ provideSemanticTokens(document, parsedDoc) {
74
+ const builder = new node_1.SemanticTokensBuilder();
75
+ const lines = document.getText().split('\n');
76
+ for (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {
77
+ const line = lines[lineIndex];
78
+ this.tokenizeLine(line, lineIndex, builder, parsedDoc);
79
+ }
80
+ return builder.build().data;
81
+ }
82
+ /**
83
+ * Tokenize a single line.
84
+ */
85
+ tokenizeLine(line, lineIndex, builder, parsedDoc) {
86
+ // Skip empty lines
87
+ if (line.trim().length === 0) {
88
+ return;
89
+ }
90
+ // Handle comments
91
+ if (line.match(/^\s*[;#]/)) {
92
+ this.tokenizeComment(line, lineIndex, builder);
93
+ return;
94
+ }
95
+ // Handle directives
96
+ if (this.tokenizeDirective(line, lineIndex, builder, parsedDoc)) {
97
+ return;
98
+ }
99
+ // Handle transaction headers
100
+ if (this.tokenizeTransactionHeader(line, lineIndex, builder)) {
101
+ return;
102
+ }
103
+ // Handle postings
104
+ if (this.tokenizePosting(line, lineIndex, builder)) {
105
+ return;
106
+ }
107
+ }
108
+ /**
109
+ * Tokenize a comment line.
110
+ * @param line The line or substring containing the comment
111
+ * @param lineIndex The line number in the document
112
+ * @param builder The semantic tokens builder
113
+ * @param offset The character offset to add to all positions (used when line is a substring)
114
+ */
115
+ tokenizeComment(line, lineIndex, builder, offset = 0) {
116
+ // Find the start of the comment
117
+ const commentMatch = line.match(/^\s*[;#]/);
118
+ if (!commentMatch)
119
+ return;
120
+ const commentStart = line.indexOf(commentMatch[0].trim());
121
+ // Check for tags in the comment
122
+ const tagRegex = /\b(\w+):/g;
123
+ let match;
124
+ let lastIndex = 0;
125
+ while ((match = tagRegex.exec(line)) !== null) {
126
+ const tagName = match[1];
127
+ const tagStart = match.index;
128
+ // Add comment token for text before tag
129
+ if (tagStart > lastIndex) {
130
+ const beforeTag = line.substring(lastIndex, tagStart);
131
+ if (beforeTag.trim().length > 0 || lastIndex === 0) {
132
+ builder.push(lineIndex, offset + (lastIndex === 0 ? commentStart : lastIndex), tagStart - lastIndex, TokenType.comment, 0);
133
+ }
134
+ }
135
+ // Add tag token
136
+ builder.push(lineIndex, offset + tagStart, tagName.length, TokenType.property, 0);
137
+ lastIndex = tagStart + tagName.length;
138
+ }
139
+ // Add remaining comment text
140
+ if (lastIndex < line.length) {
141
+ const remaining = line.substring(lastIndex);
142
+ if (remaining.trim().length > 0 || lastIndex === commentStart) {
143
+ builder.push(lineIndex, offset + (lastIndex === 0 ? commentStart : lastIndex), remaining.length, TokenType.comment, 0);
144
+ }
145
+ }
146
+ }
147
+ /**
148
+ * Tokenize a directive line.
149
+ * Returns true if the line was a directive.
150
+ */
151
+ tokenizeDirective(line, lineIndex, builder, parsedDoc) {
152
+ const directiveKeywords = [
153
+ 'account', 'commodity', 'payee', 'tag',
154
+ 'include', 'alias', 'end', 'apply', 'Y', 'P', 'D'
155
+ ];
156
+ for (const keyword of directiveKeywords) {
157
+ const pattern = new RegExp(`^(${keyword})\\b`);
158
+ const match = line.match(pattern);
159
+ if (match) {
160
+ // Add keyword token
161
+ builder.push(lineIndex, 0, keyword.length, TokenType.keyword, 0);
162
+ // Add declaration token for the declared item
163
+ const restOfLine = line.substring(keyword.length).trim();
164
+ if (restOfLine.length > 0) {
165
+ const declStart = line.indexOf(restOfLine);
166
+ // Split by comment or end of line
167
+ const declText = restOfLine.split(/[;#]/)[0].trim();
168
+ if (declText.length > 0) {
169
+ // Determine token type based on directive
170
+ let tokenType;
171
+ switch (keyword) {
172
+ case 'account':
173
+ tokenType = TokenType.namespace;
174
+ break;
175
+ case 'payee':
176
+ tokenType = TokenType.class;
177
+ break;
178
+ case 'commodity':
179
+ tokenType = TokenType.enum;
180
+ break;
181
+ case 'tag':
182
+ tokenType = TokenType.property;
183
+ break;
184
+ default:
185
+ tokenType = TokenType.string;
186
+ }
187
+ builder.push(lineIndex, declStart, declText.length, tokenType, encodeModifiers([TokenModifier.declaration]));
188
+ }
189
+ }
190
+ // Handle comment at end of directive
191
+ const commentMatch = line.match(/[;#](.*)$/);
192
+ if (commentMatch) {
193
+ const commentStart = line.indexOf(commentMatch[0]);
194
+ builder.push(lineIndex, commentStart, commentMatch[0].length, TokenType.comment, 0);
195
+ }
196
+ return true;
197
+ }
198
+ }
199
+ return false;
200
+ }
201
+ /**
202
+ * Tokenize a transaction header line.
203
+ * Returns true if the line was a transaction header.
204
+ */
205
+ tokenizeTransactionHeader(line, lineIndex, builder) {
206
+ // Match transaction header: DATE [STATUS] [(CODE)] DESCRIPTION [; COMMENT]
207
+ const headerMatch = line.match(/^(\d{4}[-/]\d{2}[-/]\d{2})(?:\s+([*!]))?(?:\s+\(([^)]+)\))?\s+([^;#]*?)(?:\s*([;#].*))?$/);
208
+ if (!headerMatch) {
209
+ return false;
210
+ }
211
+ const [, date, status, code, description, comment] = headerMatch;
212
+ // Date token
213
+ builder.push(lineIndex, 0, date.length, TokenType.type, encodeModifiers([TokenModifier.readonly]));
214
+ // Status token
215
+ if (status) {
216
+ const statusStart = line.indexOf(status, date.length);
217
+ builder.push(lineIndex, statusStart, 1, TokenType.operator, 0);
218
+ }
219
+ // Code token
220
+ if (code) {
221
+ const codeStart = line.indexOf(`(${code})`, date.length);
222
+ builder.push(lineIndex, codeStart, code.length + 2, // Include parentheses
223
+ TokenType.string, 0);
224
+ }
225
+ // Payee/description token
226
+ if (description && description.trim().length > 0) {
227
+ const descStart = line.indexOf(description.trim(), date.length);
228
+ builder.push(lineIndex, descStart, description.trim().length, TokenType.class, 0);
229
+ }
230
+ // Comment token (with tag handling)
231
+ if (comment) {
232
+ const commentStart = line.indexOf(comment);
233
+ this.tokenizeComment(line.substring(commentStart), lineIndex, builder, commentStart // Pass the offset so positions are relative to the original line
234
+ );
235
+ }
236
+ return true;
237
+ }
238
+ /**
239
+ * Tokenize a posting line.
240
+ * Returns true if the line was a posting.
241
+ */
242
+ tokenizePosting(line, lineIndex, builder) {
243
+ // Postings must be indented
244
+ if (!line.match(/^\s+\S/)) {
245
+ return false;
246
+ }
247
+ // Extract account, amount, and comment
248
+ const postingMatch = line.match(/^\s+([^;\s]+(?:\s+[^;\s]+)*?)(?:\s{2,}(.*?))?(?:\s*([;#].*))?$/);
249
+ if (!postingMatch) {
250
+ return false;
251
+ }
252
+ const [, account, amountPart, comment] = postingMatch;
253
+ // Account token
254
+ const accountStart = line.indexOf(account);
255
+ builder.push(lineIndex, accountStart, account.length, TokenType.namespace, 0);
256
+ // Amount and commodity tokens
257
+ if (amountPart && amountPart.trim().length > 0) {
258
+ this.tokenizeAmount(amountPart, lineIndex, line.indexOf(amountPart), builder);
259
+ }
260
+ // Comment token
261
+ if (comment) {
262
+ const commentStart = line.indexOf(comment);
263
+ this.tokenizeComment(line.substring(commentStart), lineIndex, builder);
264
+ }
265
+ return true;
266
+ }
267
+ /**
268
+ * Tokenize an amount (number + commodity), potentially with cost and assertion.
269
+ * Format: [COMMODITY] NUMBER [COMMODITY] [@ COST | @@ COST] [= ASSERTION]
270
+ */
271
+ tokenizeAmount(amountPart, lineIndex, startOffset, builder) {
272
+ // Split by balance assertion first (=)
273
+ const assertionMatch = amountPart.match(/^(.*?)\s*=\s*(.+)$/);
274
+ let mainPart = amountPart;
275
+ let assertionPart = null;
276
+ if (assertionMatch) {
277
+ mainPart = assertionMatch[1].trim();
278
+ assertionPart = assertionMatch[2].trim();
279
+ }
280
+ // Split by cost notation (@@ or @)
281
+ const totalCostMatch = mainPart.match(/^(.*?)\s*@@\s*(.+)$/);
282
+ const unitCostMatch = !totalCostMatch ? mainPart.match(/^(.*?)\s*@\s*(.+)$/) : null;
283
+ let basePart = mainPart;
284
+ let costOperator = null;
285
+ let costPart = null;
286
+ if (totalCostMatch) {
287
+ basePart = totalCostMatch[1].trim();
288
+ costOperator = '@@';
289
+ costPart = totalCostMatch[2].trim();
290
+ }
291
+ else if (unitCostMatch) {
292
+ basePart = unitCostMatch[1].trim();
293
+ costOperator = '@';
294
+ costPart = unitCostMatch[2].trim();
295
+ }
296
+ // Tokenize base amount
297
+ this.tokenizeSingleAmount(basePart, lineIndex, startOffset + amountPart.indexOf(basePart), builder);
298
+ // Tokenize cost operator and cost amount if present
299
+ if (costOperator && costPart) {
300
+ const operatorStart = startOffset + amountPart.indexOf(costOperator, basePart.length);
301
+ builder.push(lineIndex, operatorStart, costOperator.length, TokenType.operator, 0);
302
+ const costStart = startOffset + amountPart.indexOf(costPart, operatorStart + costOperator.length);
303
+ this.tokenizeSingleAmount(costPart, lineIndex, costStart, builder);
304
+ }
305
+ // Tokenize assertion operator and assertion amount if present
306
+ if (assertionPart) {
307
+ const equalIndex = amountPart.indexOf('=');
308
+ const equalStart = startOffset + equalIndex;
309
+ builder.push(lineIndex, equalStart, 1, TokenType.operator, 0);
310
+ const assertionStart = startOffset + amountPart.indexOf(assertionPart, equalIndex + 1);
311
+ this.tokenizeSingleAmount(assertionPart, lineIndex, assertionStart, builder);
312
+ }
313
+ }
314
+ /**
315
+ * Tokenize a single amount (number + commodity) without cost or assertion.
316
+ */
317
+ tokenizeSingleAmount(amountStr, lineIndex, startOffset, builder) {
318
+ // Match commodity-first with space: $ 100.00
319
+ let match = amountStr.match(/^([^\d\s;+-]+)\s+([-+]?\d[\d,.']*(?:\.\d+)?)/);
320
+ if (match) {
321
+ const [, commodity, number] = match;
322
+ const commodityStart = startOffset + amountStr.indexOf(commodity);
323
+ const numberStart = startOffset + amountStr.indexOf(number);
324
+ builder.push(lineIndex, commodityStart, commodity.length, TokenType.enum, 0);
325
+ builder.push(lineIndex, numberStart, number.length, TokenType.number, encodeModifiers([TokenModifier.readonly]));
326
+ return;
327
+ }
328
+ // Match commodity-first without space: $100.00
329
+ match = amountStr.match(/^([^\d\s;+-]+)([-+]?\d[\d,.']*(?:\.\d+)?)/);
330
+ if (match) {
331
+ const [, commodity, number] = match;
332
+ const commodityStart = startOffset + amountStr.indexOf(commodity);
333
+ const numberStart = commodityStart + commodity.length;
334
+ builder.push(lineIndex, commodityStart, commodity.length, TokenType.enum, 0);
335
+ builder.push(lineIndex, numberStart, number.length, TokenType.number, encodeModifiers([TokenModifier.readonly]));
336
+ return;
337
+ }
338
+ // Match commodity-after with space: 100.00 USD
339
+ match = amountStr.match(/([-+]?\d[\d,.']*(?:\.\d+)?)\s+([^\d\s;+-]+)/);
340
+ if (match) {
341
+ const [, number, commodity] = match;
342
+ const numberStart = startOffset + amountStr.indexOf(number);
343
+ const commodityStart = startOffset + amountStr.indexOf(commodity, number.length);
344
+ builder.push(lineIndex, numberStart, number.length, TokenType.number, encodeModifiers([TokenModifier.readonly]));
345
+ builder.push(lineIndex, commodityStart, commodity.length, TokenType.enum, 0);
346
+ return;
347
+ }
348
+ // Match commodity-after without space: 100.00USD
349
+ match = amountStr.match(/([-+]?\d[\d,.']*(?:\.\d+)?)([^\d\s;+-]+)/);
350
+ if (match) {
351
+ const [, number, commodity] = match;
352
+ const numberStart = startOffset + amountStr.indexOf(number);
353
+ const commodityStart = numberStart + number.length;
354
+ builder.push(lineIndex, numberStart, number.length, TokenType.number, encodeModifiers([TokenModifier.readonly]));
355
+ builder.push(lineIndex, commodityStart, commodity.length, TokenType.enum, 0);
356
+ return;
357
+ }
358
+ // Match number only (no commodity)
359
+ match = amountStr.match(/([-+]?\d[\d,.']*(?:\.\d+)?)/);
360
+ if (match) {
361
+ const number = match[1];
362
+ const numberStart = startOffset + amountStr.indexOf(number);
363
+ builder.push(lineIndex, numberStart, number.length, TokenType.number, encodeModifiers([TokenModifier.readonly]));
364
+ }
365
+ }
366
+ }
367
+ exports.SemanticTokensProvider = SemanticTokensProvider;
368
+ // Export singleton instance
369
+ exports.semanticTokensProvider = new SemanticTokensProvider();
370
+ //# sourceMappingURL=semanticTokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semanticTokens.js","sourceRoot":"","sources":["../../src/features/semanticTokens.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Symbol providers for document outline and workspace-wide search
3
+ */
4
+ import { DocumentSymbol, SymbolInformation } from 'vscode-languageserver';
5
+ import { TextDocument } from 'vscode-languageserver-textdocument';
6
+ import { ParsedDocument } from '../types';
7
+ export declare class DocumentSymbolProvider {
8
+ /**
9
+ * Provide document symbols for outline view
10
+ * Returns hierarchical symbols representing the structure of the document
11
+ */
12
+ provideDocumentSymbols(document: TextDocument, parsedDoc: ParsedDocument): DocumentSymbol[];
13
+ /**
14
+ * Find the line number of a directive in the document
15
+ */
16
+ private findDirectiveLine;
17
+ /**
18
+ * Find the line number of a transaction in the document
19
+ */
20
+ private findTransactionLine;
21
+ /**
22
+ * Find the end line of a transaction (last posting or comment)
23
+ */
24
+ private findTransactionEndLine;
25
+ /**
26
+ * Find a posting line within a transaction
27
+ */
28
+ private findPostingLine;
29
+ /**
30
+ * Get the appropriate SymbolKind for a directive type
31
+ */
32
+ private getDirectiveSymbolKind;
33
+ /**
34
+ * Escape special regex characters
35
+ */
36
+ private escapeRegex;
37
+ }
38
+ export declare class WorkspaceSymbolProvider {
39
+ /**
40
+ * Provide workspace-wide symbol search
41
+ * Returns flat list of symbols matching the query across all files
42
+ */
43
+ provideWorkspaceSymbols(query: string, parsedDoc: ParsedDocument): SymbolInformation[];
44
+ }
45
+ export declare const documentSymbolProvider: DocumentSymbolProvider;
46
+ export declare const workspaceSymbolProvider: WorkspaceSymbolProvider;
47
+ //# sourceMappingURL=symbols.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbols.d.ts","sourceRoot":"","sources":["../../src/features/symbols.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAA+B,MAAM,uBAAuB,CAAC;AACvG,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,cAAc,EAA0B,MAAM,UAAU,CAAC;AAElE,qBAAa,sBAAsB;IACjC;;;OAGG;IACH,sBAAsB,CAAC,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,cAAc,GAAG,cAAc,EAAE;IA2E3F;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAUzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAmB3B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAkB9B;;OAEG;IACH,OAAO,CAAC,eAAe;IAYvB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAmB9B;;OAEG;IACH,OAAO,CAAC,WAAW;CAGpB;AAED,qBAAa,uBAAuB;IAClC;;;OAGG;IACH,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,GAAG,iBAAiB,EAAE;CAyFvF;AAED,eAAO,MAAM,sBAAsB,wBAA+B,CAAC;AACnE,eAAO,MAAM,uBAAuB,yBAAgC,CAAC"}