hledger-lsp 0.2.12 → 0.2.13

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 (59) hide show
  1. package/README.md +1 -1
  2. package/out/features/codeActions.d.ts +11 -32
  3. package/out/features/codeActions.d.ts.map +1 -1
  4. package/out/features/codeActions.js +98 -226
  5. package/out/features/codeActions.js.map +1 -1
  6. package/out/features/codeLens.d.ts.map +1 -1
  7. package/out/features/findReferences.d.ts +32 -11
  8. package/out/features/findReferences.d.ts.map +1 -1
  9. package/out/features/findReferences.js +495 -30
  10. package/out/features/findReferences.js.map +1 -1
  11. package/out/features/formatter.js +1 -0
  12. package/out/features/formatter.js.map +1 -1
  13. package/out/features/hover.d.ts.map +1 -1
  14. package/out/features/hover.js +2 -2
  15. package/out/features/hover.js.map +1 -1
  16. package/out/features/inlayHints.d.ts +3 -0
  17. package/out/features/inlayHints.d.ts.map +1 -1
  18. package/out/features/inlayHints.js +112 -301
  19. package/out/features/inlayHints.js.map +1 -1
  20. package/out/features/selectionRange.d.ts +1 -2
  21. package/out/features/selectionRange.d.ts.map +1 -1
  22. package/out/features/selectionRange.js +7 -7
  23. package/out/features/selectionRange.js.map +1 -1
  24. package/out/features/semanticTokens.d.ts +1 -2
  25. package/out/features/semanticTokens.d.ts.map +1 -1
  26. package/out/features/semanticTokens.js +5 -5
  27. package/out/features/semanticTokens.js.map +1 -1
  28. package/out/features/symbols.d.ts +1 -16
  29. package/out/features/symbols.d.ts.map +1 -1
  30. package/out/features/symbols.js +7 -53
  31. package/out/features/symbols.js.map +1 -1
  32. package/out/features/validator.d.ts.map +1 -1
  33. package/out/features/validator.js.map +1 -1
  34. package/out/parser/ast.d.ts.map +1 -1
  35. package/out/parser/ast.js.map +1 -1
  36. package/out/parser/index.d.ts.map +1 -1
  37. package/out/server/workspace.d.ts +5 -0
  38. package/out/server/workspace.d.ts.map +1 -1
  39. package/out/server/workspace.js +28 -0
  40. package/out/server/workspace.js.map +1 -1
  41. package/out/server.js +32 -56
  42. package/out/server.js.map +1 -1
  43. package/out/utils/balanceCalculator.d.ts +1 -8
  44. package/out/utils/balanceCalculator.d.ts.map +1 -1
  45. package/out/utils/balanceCalculator.js +0 -28
  46. package/out/utils/balanceCalculator.js.map +1 -1
  47. package/out/utils/index.d.ts +0 -4
  48. package/out/utils/index.d.ts.map +1 -1
  49. package/out/utils/index.js +0 -7
  50. package/out/utils/index.js.map +1 -1
  51. package/out/utils/runningBalanceCalculator.d.ts +1 -12
  52. package/out/utils/runningBalanceCalculator.d.ts.map +1 -1
  53. package/out/utils/runningBalanceCalculator.js +0 -43
  54. package/out/utils/runningBalanceCalculator.js.map +1 -1
  55. package/package.json +1 -1
  56. package/out/extension.d.ts +0 -1
  57. package/out/extension.d.ts.map +0 -1
  58. package/out/extension.js +0 -2
  59. package/out/extension.js.map +0 -1
@@ -5,73 +5,538 @@
5
5
  * Finds all occurrences of accounts, payees, commodities, and tags
6
6
  * across the journal file and its includes.
7
7
  */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
8
41
  Object.defineProperty(exports, "__esModule", { value: true });
9
42
  exports.findReferencesProvider = exports.FindReferencesProvider = void 0;
10
43
  const vscode_languageserver_1 = require("vscode-languageserver");
11
- const codeActions_1 = require("./codeActions");
44
+ const vscode_languageserver_textdocument_1 = require("vscode-languageserver-textdocument");
45
+ const vscode_uri_1 = require("vscode-uri");
46
+ const uri_1 = require("../utils/uri");
47
+ const fs = __importStar(require("fs"));
12
48
  class FindReferencesProvider {
13
49
  /**
14
50
  * Find all references to the symbol at the given position
15
51
  */
16
- findReferences(document, position, parsed, includeDeclaration) {
52
+ findReferences(document, position, parsed) {
17
53
  // Get the item at cursor
18
- const item = codeActions_1.codeActionProvider.getItemAtCursor(document, position, parsed);
54
+ const item = this.getItemAtCursor(document, position, parsed);
19
55
  if (!item) {
20
56
  return null;
21
57
  }
22
58
  // Find all references across all files
23
59
  const locations = [];
24
- // Build a map of URI -> document content for all files
25
- const fileContents = new Map();
26
- fileContents.set(document.uri, document.getText());
27
- // We need to process the main document and any included files
28
- // For now, we'll only search the current document since we don't have
29
- // access to other file contents in this provider
30
- // TODO: This could be extended to search included files if we have access to them
31
60
  // Find references based on item type
32
61
  switch (item.type) {
33
62
  case 'account':
34
- locations.push(...this.findAccountReferences(document, item.name, parsed));
63
+ locations.push(...this.findAccountReferences(parsed, item.name, vscode_uri_1.URI.parse(document.uri), (uri) => uri.toString() === document.uri ? document : null).map(r => vscode_languageserver_1.Location.create(document.uri, r)));
35
64
  break;
36
65
  case 'payee':
37
- locations.push(...this.findPayeeReferences(document, item.name, parsed));
66
+ locations.push(...this.findPayeeReferences(parsed, item.name, vscode_uri_1.URI.parse(document.uri), (uri) => uri.toString() === document.uri ? document : null).map(r => vscode_languageserver_1.Location.create(document.uri, r)));
38
67
  break;
39
68
  case 'commodity':
40
- locations.push(...this.findCommodityReferences(document, item.name, parsed));
69
+ locations.push(...this.findCommodityReferences(parsed, item.name, vscode_uri_1.URI.parse(document.uri), (uri) => uri.toString() === document.uri ? document : null).map(r => vscode_languageserver_1.Location.create(document.uri, r)));
41
70
  break;
42
71
  case 'tag':
43
- locations.push(...this.findTagReferences(document, item.name, parsed));
72
+ locations.push(...this.findTagReferences(parsed, item.name, vscode_uri_1.URI.parse(document.uri), (uri) => uri.toString() === document.uri ? document : null).map(r => vscode_languageserver_1.Location.create(document.uri, r)));
44
73
  break;
45
74
  }
46
75
  return locations;
47
76
  }
48
77
  /**
49
- * Find all references to an account
78
+ * Find all references to the symbol at the given position across workspace files
79
+ * Uses parsed documents for accurate reference finding
50
80
  */
51
- findAccountReferences(document, accountName, parsed) {
52
- const ranges = codeActions_1.codeActionProvider.findAccountReferences(document, accountName, parsed);
53
- return ranges.map(range => vscode_languageserver_1.Location.create(document.uri, range));
81
+ findWorkspaceReferences(document, position, parsed, fileUris, parser, // HledgerParser
82
+ fileReader) {
83
+ // Get the item at cursor
84
+ // Get the item at cursor
85
+ const item = this.getItemAtCursor(document, position, parsed);
86
+ if (!item) {
87
+ return null;
88
+ }
89
+ // Parse all files once (parser will handle caching)
90
+ const parsedDocs = new Map();
91
+ for (const fileUri of fileUris) {
92
+ try {
93
+ // Get the TextDocument for this URI
94
+ let doc = null;
95
+ if (fileReader) {
96
+ doc = fileReader(fileUri);
97
+ }
98
+ if (!doc) {
99
+ // Fallback to reading from disk
100
+ const fs = require('fs');
101
+ const { toFilePath } = require('../utils/uri');
102
+ const filePath = toFilePath(fileUri);
103
+ const content = fs.readFileSync(filePath, 'utf8');
104
+ doc = vscode_languageserver_textdocument_1.TextDocument.create(fileUri.toString(), 'hledger', 1, content);
105
+ }
106
+ const parsedFile = parser.parse(doc, { fileReader });
107
+ parsedDocs.set(fileUri.toString(), parsedFile);
108
+ }
109
+ catch (error) {
110
+ // Skip files that can't be parsed
111
+ continue;
112
+ }
113
+ }
114
+ // Find all references across all workspace files
115
+ const locations = [];
116
+ for (const [uriString, parsedDoc] of parsedDocs) {
117
+ const fileUri = vscode_uri_1.URI.parse(uriString);
118
+ let ranges = [];
119
+ switch (item.type) {
120
+ case 'account':
121
+ ranges = this.findAccountReferences(parsedDoc, item.name, fileUri, fileReader);
122
+ break;
123
+ case 'payee':
124
+ ranges = this.findPayeeReferences(parsedDoc, item.name, fileUri, fileReader);
125
+ break;
126
+ case 'commodity':
127
+ ranges = this.findCommodityReferences(parsedDoc, item.name, fileUri, fileReader);
128
+ break;
129
+ case 'tag':
130
+ ranges = this.findTagReferences(parsedDoc, item.name, fileUri, fileReader);
131
+ break;
132
+ default:
133
+ continue;
134
+ }
135
+ if (ranges.length > 0) {
136
+ locations.push(...ranges.map(range => vscode_languageserver_1.Location.create(uriString, range)));
137
+ }
138
+ }
139
+ return locations;
54
140
  }
55
141
  /**
56
- * Find all references to a payee
142
+ * Get the item (account, payee, commodity, tag) at the cursor position
143
+ */
144
+ /**
145
+ * Get the item (account, payee, commodity, tag) at the cursor position
57
146
  */
58
- findPayeeReferences(document, payeeName, parsed) {
59
- const ranges = codeActions_1.codeActionProvider.findPayeeReferences(document, payeeName, parsed);
60
- return ranges.map(range => vscode_languageserver_1.Location.create(document.uri, range));
147
+ getItemAtCursor(document, position, parsedDoc) {
148
+ const lines = document.getText().split('\n');
149
+ if (position.line >= lines.length) {
150
+ return null;
151
+ }
152
+ const line = lines[position.line];
153
+ if (!line) {
154
+ return null;
155
+ }
156
+ const char = position.character;
157
+ const currentLineIndex = position.line;
158
+ // 1. Check if we are on a directive line
159
+ const directive = parsedDoc.directives.find(d => d.line === currentLineIndex);
160
+ if (directive) {
161
+ switch (directive.type) {
162
+ case 'account':
163
+ case 'payee':
164
+ case 'tag':
165
+ if (char >= line.indexOf(directive.value)) {
166
+ return { type: directive.type, name: directive.value };
167
+ }
168
+ break;
169
+ case 'commodity':
170
+ // For commodity, we might have format information, but the value starts with the symbol
171
+ // The value in the directive object might include format info, so we double check the line content
172
+ const commodityMatch = line.match(/^commodity\s+(.+?)(?:\s|$)/);
173
+ if (commodityMatch && char >= line.indexOf(commodityMatch[1])) {
174
+ const commodityPart = commodityMatch[1].trim().split(/\s+/)[0];
175
+ return { type: 'commodity', name: commodityPart };
176
+ }
177
+ break;
178
+ }
179
+ return null;
180
+ }
181
+ // 2. Check if we are inside a transaction
182
+ const transaction = parsedDoc.transactions.find(t => t.line !== undefined && currentLineIndex >= t.line &&
183
+ // We don't have an explicit end line, but we can assume it ends where the next transaction starts
184
+ // or if we match one of its postings
185
+ (t.line === currentLineIndex || t.postings.some(p => p.line === currentLineIndex)));
186
+ if (transaction) {
187
+ // Check if we are on the transaction header
188
+ if (transaction.line === currentLineIndex) {
189
+ // Check for payee
190
+ const payeeName = transaction.payee;
191
+ const payeeStart = line.indexOf(payeeName);
192
+ if (payeeStart !== -1 && char >= payeeStart && char <= payeeStart + payeeName.length) {
193
+ return { type: 'payee', name: payeeName };
194
+ }
195
+ // Check for tags in comment
196
+ // Fallback to regex for tags as they are locally scoped in the comment
197
+ const tagMatch = line.match(/;\s*(\w+):/g);
198
+ if (tagMatch) {
199
+ for (const match of tagMatch) {
200
+ const tagName = match.match(/(\w+):/)?.[1];
201
+ if (tagName) {
202
+ const tagStart = line.indexOf(match) + match.indexOf(tagName);
203
+ const tagEnd = tagStart + tagName.length;
204
+ if (char >= tagStart && char <= tagEnd) {
205
+ return { type: 'tag', name: tagName };
206
+ }
207
+ }
208
+ }
209
+ }
210
+ return null;
211
+ }
212
+ // Check if we are on a posting line
213
+ const posting = transaction.postings.find(p => p.line === currentLineIndex);
214
+ if (posting) {
215
+ // Check for account
216
+ const accountName = posting.account;
217
+ const accountStart = line.indexOf(accountName);
218
+ if (accountStart !== -1 && char >= accountStart && char <= accountStart + accountName.length) {
219
+ return { type: 'account', name: accountName };
220
+ }
221
+ // Check for commodity in amount
222
+ if (posting.amount?.commodity) {
223
+ const commodityName = posting.amount.commodity;
224
+ // Look for commodity in the line. It might appear multiple times (cost, assertion),
225
+ // so we need to be careful, but checking simple occurrence is a good start
226
+ const commodityRegex = new RegExp(this.escapeRegExp(commodityName), 'g');
227
+ let match;
228
+ while ((match = commodityRegex.exec(line)) !== null) {
229
+ if (char >= match.index && char <= match.index + commodityName.length) {
230
+ return { type: 'commodity', name: commodityName };
231
+ }
232
+ }
233
+ }
234
+ // Fallback check for any commodity symbol (e.g. in cost that isn't parsed into amount yet)
235
+ const commodityFallbackRegex = /[$£€¥₹]|[A-Z]{3,4}\b/g;
236
+ let commodityMatch;
237
+ while ((commodityMatch = commodityFallbackRegex.exec(line)) !== null) {
238
+ const commodityStart = commodityMatch.index;
239
+ const commodityEnd = commodityStart + commodityMatch[0].length;
240
+ if (char >= commodityStart && char <= commodityEnd) {
241
+ // Only return if checking against the known amount commodity didn't work
242
+ // or if it's a different one
243
+ return { type: 'commodity', name: commodityMatch[0] };
244
+ }
245
+ }
246
+ // Check for tags in posting comment
247
+ const tagMatch = line.match(/;\s*(\w+):/g);
248
+ if (tagMatch) {
249
+ for (const match of tagMatch) {
250
+ const tagName = match.match(/(\w+):/)?.[1];
251
+ if (tagName) {
252
+ const tagStart = line.indexOf(match) + match.indexOf(tagName);
253
+ const tagEnd = tagStart + tagName.length;
254
+ if (char >= tagStart && char <= tagEnd) {
255
+ return { type: 'tag', name: tagName };
256
+ }
257
+ }
258
+ }
259
+ }
260
+ }
261
+ }
262
+ // 3. Fallback: Check for global tags in comments on any other lines
263
+ // (This might be redundant if we covered directives and transactions, but good for safety)
264
+ const tagMatch = line.match(/;\s*(\w+):/g);
265
+ if (tagMatch) {
266
+ for (const match of tagMatch) {
267
+ const tagName = match.match(/(\w+):/)?.[1];
268
+ if (tagName) {
269
+ const tagStart = line.indexOf(match) + match.indexOf(tagName);
270
+ const tagEnd = tagStart + tagName.length;
271
+ if (char >= tagStart && char <= tagEnd) {
272
+ return { type: 'tag', name: tagName };
273
+ }
274
+ }
275
+ }
276
+ }
277
+ return null;
61
278
  }
62
279
  /**
63
- * Find all references to a commodity
280
+ * Find all account references in parsed document
64
281
  */
65
- findCommodityReferences(document, commodityName, parsed) {
66
- const ranges = codeActions_1.codeActionProvider.findCommodityReferences(document, commodityName, parsed);
67
- return ranges.map(range => vscode_languageserver_1.Location.create(document.uri, range));
282
+ findAccountReferences(parsedDoc, accountName, fileUri, fileReader) {
283
+ const ranges = [];
284
+ const fileUriString = fileUri.toString();
285
+ // Get file lines for finding character positions
286
+ let lines = null;
287
+ if (fileReader) {
288
+ const doc = fileReader(fileUri);
289
+ if (doc) {
290
+ lines = doc.getText().split('\n');
291
+ }
292
+ }
293
+ if (!lines) {
294
+ // Fallback to reading from disk
295
+ try {
296
+ const filePath = (0, uri_1.toFilePath)(fileUri);
297
+ const content = fs.readFileSync(filePath, 'utf8');
298
+ lines = content.split('\n');
299
+ }
300
+ catch (error) {
301
+ return ranges; // Can't read file, return empty
302
+ }
303
+ }
304
+ // Find in directives
305
+ for (const directive of parsedDoc.directives) {
306
+ if (directive.type === 'account' &&
307
+ directive.value === accountName &&
308
+ directive.sourceUri?.toString() === fileUriString &&
309
+ directive.line !== undefined &&
310
+ directive.line < lines.length) {
311
+ const line = lines[directive.line];
312
+ const start = line.indexOf(accountName);
313
+ if (start !== -1) {
314
+ ranges.push(vscode_languageserver_1.Range.create(directive.line, start, directive.line, start + accountName.length));
315
+ }
316
+ }
317
+ }
318
+ // Find in postings
319
+ for (const transaction of parsedDoc.transactions) {
320
+ if (transaction.sourceUri?.toString() !== fileUriString)
321
+ continue;
322
+ for (const posting of transaction.postings) {
323
+ if (posting.account === accountName &&
324
+ posting.line !== undefined &&
325
+ posting.line < lines.length) {
326
+ const line = lines[posting.line];
327
+ const start = line.indexOf(accountName);
328
+ if (start !== -1) {
329
+ ranges.push(vscode_languageserver_1.Range.create(posting.line, start, posting.line, start + accountName.length));
330
+ }
331
+ }
332
+ }
333
+ }
334
+ return ranges;
335
+ }
336
+ /**
337
+ * Find all payee references in parsed document
338
+ */
339
+ findPayeeReferences(parsedDoc, payeeName, fileUri, fileReader) {
340
+ const ranges = [];
341
+ const fileUriString = fileUri.toString();
342
+ // Get file lines for finding character positions
343
+ let lines = null;
344
+ if (fileReader) {
345
+ const doc = fileReader(fileUri);
346
+ if (doc) {
347
+ lines = doc.getText().split('\n');
348
+ }
349
+ }
350
+ if (!lines) {
351
+ try {
352
+ const filePath = (0, uri_1.toFilePath)(fileUri);
353
+ const content = fs.readFileSync(filePath, 'utf8');
354
+ lines = content.split('\n');
355
+ }
356
+ catch (error) {
357
+ return ranges;
358
+ }
359
+ }
360
+ // Find in directives
361
+ for (const directive of parsedDoc.directives) {
362
+ if (directive.type === 'payee' &&
363
+ directive.value === payeeName &&
364
+ directive.sourceUri?.toString() === fileUriString &&
365
+ directive.line !== undefined &&
366
+ directive.line < lines.length) {
367
+ const line = lines[directive.line];
368
+ const start = line.indexOf(payeeName);
369
+ if (start !== -1) {
370
+ ranges.push(vscode_languageserver_1.Range.create(directive.line, start, directive.line, start + payeeName.length));
371
+ }
372
+ }
373
+ }
374
+ // Find in transactions
375
+ for (const transaction of parsedDoc.transactions) {
376
+ if (transaction.sourceUri?.toString() !== fileUriString)
377
+ continue;
378
+ if (transaction.payee === payeeName &&
379
+ transaction.line !== undefined &&
380
+ transaction.line < lines.length) {
381
+ const line = lines[transaction.line];
382
+ const start = line.indexOf(payeeName);
383
+ if (start !== -1) {
384
+ ranges.push(vscode_languageserver_1.Range.create(transaction.line, start, transaction.line, start + payeeName.length));
385
+ }
386
+ }
387
+ }
388
+ return ranges;
389
+ }
390
+ /**
391
+ * Find all commodity references in parsed document
392
+ */
393
+ findCommodityReferences(parsedDoc, commodityName, fileUri, fileReader) {
394
+ const ranges = [];
395
+ const fileUriString = fileUri.toString();
396
+ // Get file lines for finding character positions
397
+ let lines = null;
398
+ if (fileReader) {
399
+ const doc = fileReader(fileUri);
400
+ if (doc) {
401
+ lines = doc.getText().split('\n');
402
+ }
403
+ }
404
+ if (!lines) {
405
+ try {
406
+ const filePath = (0, uri_1.toFilePath)(fileUri);
407
+ const content = fs.readFileSync(filePath, 'utf8');
408
+ lines = content.split('\n');
409
+ }
410
+ catch (error) {
411
+ return ranges;
412
+ }
413
+ }
414
+ // Find in directives
415
+ for (const directive of parsedDoc.directives) {
416
+ if (directive.type === 'commodity' &&
417
+ directive.value.startsWith(commodityName) &&
418
+ directive.sourceUri?.toString() === fileUriString &&
419
+ directive.line !== undefined &&
420
+ directive.line < lines.length) {
421
+ const line = lines[directive.line];
422
+ const start = line.indexOf(commodityName);
423
+ if (start !== -1) {
424
+ ranges.push(vscode_languageserver_1.Range.create(directive.line, start, directive.line, start + commodityName.length));
425
+ }
426
+ }
427
+ }
428
+ // Find in posting amounts
429
+ for (const transaction of parsedDoc.transactions) {
430
+ if (transaction.sourceUri?.toString() !== fileUriString)
431
+ continue;
432
+ for (const posting of transaction.postings) {
433
+ if (posting.line === undefined || posting.line >= lines.length)
434
+ continue;
435
+ const line = lines[posting.line];
436
+ // Check amount commodity
437
+ if (posting.amount?.commodity === commodityName) {
438
+ const start = line.indexOf(commodityName);
439
+ if (start !== -1) {
440
+ ranges.push(vscode_languageserver_1.Range.create(posting.line, start, posting.line, start + commodityName.length));
441
+ }
442
+ }
443
+ // Check assertion commodity
444
+ if (posting.assertion?.commodity === commodityName) {
445
+ const assertionStart = line.indexOf('=');
446
+ if (assertionStart !== -1) {
447
+ const start = line.indexOf(commodityName, assertionStart);
448
+ if (start !== -1) {
449
+ ranges.push(vscode_languageserver_1.Range.create(posting.line, start, posting.line, start + commodityName.length));
450
+ }
451
+ }
452
+ }
453
+ // Check cost commodity
454
+ if (posting.cost?.amount?.commodity === commodityName) {
455
+ const costStart = line.indexOf('@');
456
+ if (costStart !== -1) {
457
+ const start = line.indexOf(commodityName, costStart);
458
+ if (start !== -1) {
459
+ ranges.push(vscode_languageserver_1.Range.create(posting.line, start, posting.line, start + commodityName.length));
460
+ }
461
+ }
462
+ }
463
+ }
464
+ }
465
+ return ranges;
466
+ }
467
+ /**
468
+ * Find all tag references in parsed document
469
+ */
470
+ findTagReferences(parsedDoc, tagName, fileUri, fileReader) {
471
+ const ranges = [];
472
+ const fileUriString = fileUri.toString();
473
+ // Get file lines for finding character positions
474
+ let lines = null;
475
+ if (fileReader) {
476
+ const doc = fileReader(fileUri);
477
+ if (doc) {
478
+ lines = doc.getText().split('\n');
479
+ }
480
+ }
481
+ if (!lines) {
482
+ try {
483
+ const filePath = (0, uri_1.toFilePath)(fileUri);
484
+ const content = fs.readFileSync(filePath, 'utf8');
485
+ lines = content.split('\n');
486
+ }
487
+ catch (error) {
488
+ return ranges;
489
+ }
490
+ }
491
+ // Find in directives
492
+ for (const directive of parsedDoc.directives) {
493
+ if (directive.type === 'tag' &&
494
+ directive.value === tagName &&
495
+ directive.sourceUri?.toString() === fileUriString &&
496
+ directive.line !== undefined &&
497
+ directive.line < lines.length) {
498
+ const line = lines[directive.line];
499
+ const start = line.indexOf(tagName);
500
+ if (start !== -1) {
501
+ ranges.push(vscode_languageserver_1.Range.create(directive.line, start, directive.line, start + tagName.length));
502
+ }
503
+ }
504
+ }
505
+ // Find in transaction tags
506
+ for (const transaction of parsedDoc.transactions) {
507
+ if (transaction.sourceUri?.toString() !== fileUriString)
508
+ continue;
509
+ if (transaction.tags && tagName in transaction.tags &&
510
+ transaction.line !== undefined &&
511
+ transaction.line < lines.length) {
512
+ const line = lines[transaction.line];
513
+ const tagPattern = new RegExp(`\\b${this.escapeRegExp(tagName)}:`, 'g');
514
+ let match;
515
+ while ((match = tagPattern.exec(line)) !== null) {
516
+ ranges.push(vscode_languageserver_1.Range.create(transaction.line, match.index, transaction.line, match.index + tagName.length));
517
+ }
518
+ }
519
+ // Find in posting tags
520
+ for (const posting of transaction.postings) {
521
+ if (posting.tags && tagName in posting.tags &&
522
+ posting.line !== undefined &&
523
+ posting.line < lines.length) {
524
+ const line = lines[posting.line];
525
+ const tagPattern = new RegExp(`\\b${this.escapeRegExp(tagName)}:`, 'g');
526
+ let match;
527
+ while ((match = tagPattern.exec(line)) !== null) {
528
+ ranges.push(vscode_languageserver_1.Range.create(posting.line, match.index, posting.line, match.index + tagName.length));
529
+ }
530
+ }
531
+ }
532
+ }
533
+ return ranges;
68
534
  }
69
535
  /**
70
- * Find all references to a tag
536
+ * Escape special regex characters
71
537
  */
72
- findTagReferences(document, tagName, parsed) {
73
- const ranges = codeActions_1.codeActionProvider.findTagReferences(document, tagName, parsed);
74
- return ranges.map(range => vscode_languageserver_1.Location.create(document.uri, range));
538
+ escapeRegExp(string) {
539
+ return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
75
540
  }
76
541
  }
77
542
  exports.FindReferencesProvider = FindReferencesProvider;
@@ -1 +1 @@
1
- {"version":3,"file":"findReferences.js","sourceRoot":"","sources":["../../src/features/findReferences.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"findReferences.js","sourceRoot":"","sources":["../../src/features/findReferences.ts"],"names":[],"mappings":"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"}
@@ -377,6 +377,7 @@ class FormattingProvider {
377
377
  };
378
378
  }
379
379
  updateAmountWidths(widths, layout, options) {
380
+ widths.marker = Math.max(widths.marker, layout.marker.length);
380
381
  widths.commodityBefore = Math.max(widths.commodityBefore, layout.commodityBefore.length);
381
382
  widths.commodityBefore = Math.min(widths.commodityBefore, options.maxCommodityWidth);
382
383
  widths.spaceBetweenCommodityBeforeAndAmount = Math.max(widths.spaceBetweenCommodityBeforeAndAmount, (layout.spaceBetweenCommodityAndAmount && layout.commodityBefore.length) ? 1 : 0);