hledger-lsp 0.1.5 → 0.1.7

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 (81) hide show
  1. package/README.md +87 -167
  2. package/out/features/codeActions.d.ts +0 -4
  3. package/out/features/codeActions.d.ts.map +1 -1
  4. package/out/features/codeActions.js +11 -25
  5. package/out/features/codeActions.js.map +1 -1
  6. package/out/features/codeLens.d.ts +29 -0
  7. package/out/features/codeLens.d.ts.map +1 -0
  8. package/out/features/codeLens.js +105 -0
  9. package/out/features/codeLens.js.map +1 -0
  10. package/out/features/completion.d.ts.map +1 -1
  11. package/out/features/completion.js +21 -9
  12. package/out/features/completion.js.map +1 -1
  13. package/out/features/definition.d.ts.map +1 -1
  14. package/out/features/definition.js.map +1 -1
  15. package/out/features/foldingRanges.d.ts.map +1 -1
  16. package/out/features/foldingRanges.js +9 -2
  17. package/out/features/foldingRanges.js.map +1 -1
  18. package/out/features/formatter.d.ts +2 -0
  19. package/out/features/formatter.d.ts.map +1 -1
  20. package/out/features/formatter.js +36 -7
  21. package/out/features/formatter.js.map +1 -1
  22. package/out/features/formattingUtils.d.ts +38 -0
  23. package/out/features/formattingUtils.d.ts.map +1 -0
  24. package/out/features/formattingUtils.js +107 -0
  25. package/out/features/formattingUtils.js.map +1 -0
  26. package/out/features/hover.d.ts +2 -5
  27. package/out/features/hover.d.ts.map +1 -1
  28. package/out/features/hover.js +60 -36
  29. package/out/features/hover.js.map +1 -1
  30. package/out/features/inlayHints.d.ts +7 -5
  31. package/out/features/inlayHints.d.ts.map +1 -1
  32. package/out/features/inlayHints.js +164 -91
  33. package/out/features/inlayHints.js.map +1 -1
  34. package/out/features/semanticTokens.d.ts.map +1 -1
  35. package/out/features/semanticTokens.js +22 -1
  36. package/out/features/semanticTokens.js.map +1 -1
  37. package/out/features/symbols.d.ts.map +1 -1
  38. package/out/features/symbols.js +9 -3
  39. package/out/features/symbols.js.map +1 -1
  40. package/out/features/validator.d.ts +0 -8
  41. package/out/features/validator.d.ts.map +1 -1
  42. package/out/features/validator.js +367 -171
  43. package/out/features/validator.js.map +1 -1
  44. package/out/parser/ast.d.ts +2 -2
  45. package/out/parser/ast.d.ts.map +1 -1
  46. package/out/parser/ast.js +10 -5
  47. package/out/parser/ast.js.map +1 -1
  48. package/out/parser/index.d.ts +8 -5
  49. package/out/parser/index.d.ts.map +1 -1
  50. package/out/parser/index.js +0 -7
  51. package/out/parser/index.js.map +1 -1
  52. package/out/server/configFile.d.ts +104 -0
  53. package/out/server/configFile.d.ts.map +1 -0
  54. package/out/server/configFile.js +231 -0
  55. package/out/server/configFile.js.map +1 -0
  56. package/out/server/settings.d.ts +9 -0
  57. package/out/server/settings.d.ts.map +1 -1
  58. package/out/server/settings.js +9 -0
  59. package/out/server/settings.js.map +1 -1
  60. package/out/server/workspace.d.ts +126 -0
  61. package/out/server/workspace.d.ts.map +1 -0
  62. package/out/server/workspace.js +605 -0
  63. package/out/server/workspace.js.map +1 -0
  64. package/out/server.js +438 -29
  65. package/out/server.js.map +1 -1
  66. package/out/types.d.ts +15 -4
  67. package/out/types.d.ts.map +1 -1
  68. package/out/types.js +11 -0
  69. package/out/types.js.map +1 -1
  70. package/out/utils/amountFormatter.d.ts +26 -0
  71. package/out/utils/amountFormatter.d.ts.map +1 -0
  72. package/out/utils/amountFormatter.js +91 -0
  73. package/out/utils/amountFormatter.js.map +1 -0
  74. package/out/utils/balanceCalculator.d.ts +32 -0
  75. package/out/utils/balanceCalculator.d.ts.map +1 -0
  76. package/out/utils/balanceCalculator.js +93 -0
  77. package/out/utils/balanceCalculator.js.map +1 -0
  78. package/out/utils/index.d.ts.map +1 -1
  79. package/out/utils/index.js +2 -1
  80. package/out/utils/index.js.map +1 -1
  81. package/package.json +1 -1
@@ -14,11 +14,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
14
14
  exports.hoverProvider = exports.HoverProvider = void 0;
15
15
  const vscode_languageserver_1 = require("vscode-languageserver");
16
16
  const index_1 = require("../utils/index");
17
+ const balanceCalculator_1 = require("../utils/balanceCalculator");
18
+ const amountFormatter_1 = require("../utils/amountFormatter");
19
+ const uri_1 = require("../utils/uri");
17
20
  class HoverProvider {
18
21
  /**
19
22
  * Provide hover information at the given document position
20
23
  */
21
- provideHover(document, line, character, parsed) {
24
+ provideHover(document, line, character, parsed, settings) {
22
25
  if (!parsed) {
23
26
  return this.provideBasicHover(document, line, character);
24
27
  }
@@ -26,14 +29,6 @@ class HoverProvider {
26
29
  start: { line, character: 0 },
27
30
  end: { line, character: Number.MAX_SAFE_INTEGER }
28
31
  });
29
- // Get token at cursor position
30
- const token = this.getTokenAtPosition(fullLine, character);
31
- if (!token)
32
- return null;
33
- // Check for date first (highest priority)
34
- if (this.isDate(token)) {
35
- return this.provideDateHover(token);
36
- }
37
32
  // Check for tag (in comments) before other checks
38
33
  if (fullLine.includes(';') || fullLine.includes('#')) {
39
34
  // Check if cursor is after the comment marker
@@ -42,19 +37,47 @@ class HoverProvider {
42
37
  const commentStart = Math.min(semicolonPos >= 0 ? semicolonPos : Infinity, hashPos >= 0 ? hashPos : Infinity);
43
38
  if (character > commentStart) {
44
39
  // If token contains ':', extract just the tag name part
45
- let tagName = token;
46
- if (token.includes(':')) {
47
- tagName = token.substring(0, token.indexOf(':'));
48
- }
49
- // Check if this is a tag (tag name followed by colon in the line)
50
- if (tagName && fullLine.includes(`${tagName}:`)) {
51
- return this.provideTagHover(tagName, parsed);
40
+ const token = this.getTokenAtPosition(fullLine, character);
41
+ if (token) {
42
+ let tagName = token;
43
+ if (token.includes(':')) {
44
+ tagName = token.substring(0, token.indexOf(':'));
45
+ }
46
+ // Check if this is a tag (tag name followed by colon in the line)
47
+ if (tagName && fullLine.includes(`${tagName}:`)) {
48
+ return this.provideTagHover(tagName, parsed);
49
+ }
52
50
  }
53
51
  // If in comment but not a tag, return null
54
52
  return null;
55
53
  }
56
54
  }
57
- // Check for account (contains ':')
55
+ // Check if we are on a posting line (account) - Robust check for accounts with spaces
56
+ // This takes priority over generic token scanning for account,
57
+ // because extractAccountFromPosting handles "Expenses:Credit Card" correctly
58
+ // whereas getTokenAtPosition breaks on spaces.
59
+ if ((0, index_1.isPosting)(fullLine)) {
60
+ const accountName = (0, index_1.extractAccountFromPosting)(fullLine);
61
+ if (accountName) {
62
+ const indentation = (0, index_1.getIndentationLevel)(fullLine);
63
+ const start = indentation;
64
+ const end = start + accountName.length;
65
+ // Check if cursor is within the account name
66
+ if (character >= start && character <= end) {
67
+ return this.provideAccountHover(accountName, parsed);
68
+ }
69
+ }
70
+ }
71
+ // Fallback to token matching for other items
72
+ // Get token at cursor position
73
+ const token = this.getTokenAtPosition(fullLine, character);
74
+ if (!token)
75
+ return null;
76
+ // Check for date first (highest priority)
77
+ if (this.isDate(token)) {
78
+ return this.provideDateHover(token);
79
+ }
80
+ // Check for account (contains ':') - Legacy check, mostly covered above but good fallback
58
81
  if (token.includes(':')) {
59
82
  return this.provideAccountHover(token, parsed);
60
83
  }
@@ -71,7 +94,7 @@ class HoverProvider {
71
94
  // Check if we're on a transaction header (lowest priority)
72
95
  const trimmedLine = fullLine.trim();
73
96
  if ((0, index_1.isTransactionHeader)(trimmedLine)) {
74
- return this.provideTransactionHover(fullLine, line, parsed);
97
+ return this.provideTransactionHover(fullLine, line, parsed, document.uri, settings);
75
98
  }
76
99
  return null;
77
100
  }
@@ -294,9 +317,21 @@ class HoverProvider {
294
317
  /**
295
318
  * Provide hover for transaction headers
296
319
  */
297
- provideTransactionHover(line, lineNumber, parsed) {
320
+ provideTransactionHover(line, lineNumber, parsed, documentUri, settings) {
298
321
  // Find the transaction at this line
299
- const transaction = parsed.transactions.find(t => t.line === lineNumber);
322
+ // Must match both line number AND source URI (normalized) to avoid collisions in workspace mode
323
+ const normalizedDocUri = (0, uri_1.toFileUri)((0, uri_1.toFilePath)(documentUri));
324
+ const transaction = parsed.transactions.find(t => {
325
+ if (t.line !== lineNumber)
326
+ return false;
327
+ // If transaction has sourceUri, check it. If not, assume it matches (std parser behavior?)
328
+ // Actually, parseTransactionHeader adds sourceUri.
329
+ if (t.sourceUri) {
330
+ const normalizedSource = (0, uri_1.toFileUri)((0, uri_1.toFilePath)(t.sourceUri));
331
+ return normalizedSource === normalizedDocUri;
332
+ }
333
+ return true;
334
+ });
300
335
  if (!transaction)
301
336
  return null;
302
337
  const parts = [`**Transaction**\n\n\`${transaction.description}\``];
@@ -311,13 +346,15 @@ class HoverProvider {
311
346
  parts.push(`**Code:** \`${transaction.code}\``);
312
347
  }
313
348
  // Calculate totals per commodity
314
- const totals = this.calculateTransactionTotals(transaction);
349
+ const totals = (0, balanceCalculator_1.calculateTransactionBalanceSimple)(transaction);
315
350
  if (Object.keys(totals).length > 0) {
316
351
  const totalLines = ['**Totals:**'];
317
352
  for (const [commodity, total] of Object.entries(totals)) {
318
353
  const sign = total >= 0 ? '+' : '';
319
- const commodityStr = commodity || '(no commodity)';
320
- totalLines.push(`- ${sign}${total.toFixed(2)} ${commodityStr}`);
354
+ const formattedAmount = commodity
355
+ ? (0, amountFormatter_1.formatAmount)(total, commodity, parsed, settings?.formatting)
356
+ : total.toFixed(2);
357
+ totalLines.push(`- ${sign}${formattedAmount}`);
321
358
  }
322
359
  parts.push(totalLines.join('\n'));
323
360
  }
@@ -330,19 +367,6 @@ class HoverProvider {
330
367
  }
331
368
  };
332
369
  }
333
- /**
334
- * Calculate transaction totals per commodity
335
- */
336
- calculateTransactionTotals(transaction) {
337
- const totals = {};
338
- for (const posting of transaction.postings) {
339
- if (posting.amount) {
340
- const commodity = posting.amount.commodity || '';
341
- totals[commodity] = (totals[commodity] || 0) + posting.amount.quantity;
342
- }
343
- }
344
- return totals;
345
- }
346
370
  /**
347
371
  * Count how many times an account is used
348
372
  */
@@ -1 +1 @@
1
- {"version":3,"file":"hover.js","sourceRoot":"","sources":["../../src/features/hover.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hover.js","sourceRoot":"","sources":["../../src/features/hover.ts"],"names":[],"mappings":"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"}
@@ -17,19 +17,21 @@ export interface InlayHintsSettings {
17
17
  /** Show cost conversions (e.g., "= $135") */
18
18
  showCostConversions?: boolean;
19
19
  }
20
+ import { HledgerSettings } from '../server/settings';
20
21
  export declare class InlayHintsProvider {
21
- /**
22
- * Format an amount with proper commodity placement
23
- */
24
- private formatAmount;
25
22
  /**
26
23
  * Provide inlay hints for a document
27
24
  */
28
- provideInlayHints(document: TextDocument, range: Range, parsed: ParsedDocument, settings?: InlayHintsSettings): InlayHint[];
25
+ provideInlayHints(document: TextDocument, range: Range, parsed: ParsedDocument, settings?: HledgerSettings): InlayHint[];
29
26
  /**
30
27
  * Get hints for inferred amounts (postings without explicit amounts)
31
28
  */
32
29
  private getInferredAmountHints;
30
+ /**
31
+ * Calculate inferred amounts for a transaction
32
+ * Returns a map of posting index to inferred amounts (commodity -> quantity)
33
+ */
34
+ private calculateInferredAmounts;
33
35
  /**
34
36
  * Calculate running balances for all transactions
35
37
  * Returns a map of transaction->posting index->account->commodity->balance
@@ -1 +1 @@
1
- {"version":3,"file":"inlayHints.d.ts","sourceRoot":"","sources":["../../src/features/inlayHints.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAA2B,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAwB,MAAM,UAAU,CAAC;AAEhE,MAAM,WAAW,kBAAkB;IACjC,iEAAiE;IACjE,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,8CAA8C;IAC9C,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,6CAA6C;IAC7C,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAQD,qBAAa,kBAAkB;IAC7B;;OAEG;IACH,OAAO,CAAC,YAAY;IA+BpB;;OAEG;IACH,iBAAiB,CACf,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,cAAc,EACtB,QAAQ,CAAC,EAAE,kBAAkB,GAC5B,SAAS,EAAE;IAsCd;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAyE9B;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAuChC;;OAEG;IACH,OAAO,CAAC,+BAA+B;IA0DvC;;OAEG;IACH,OAAO,CAAC,sBAAsB;CAyC/B;AAED,eAAO,MAAM,kBAAkB,oBAA2B,CAAC"}
1
+ {"version":3,"file":"inlayHints.d.ts","sourceRoot":"","sources":["../../src/features/inlayHints.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAA+C,KAAK,EAAW,MAAM,uBAAuB,CAAC;AAC/G,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAwB,MAAM,UAAU,CAAC;AAKhE,MAAM,WAAW,kBAAkB;IACjC,iEAAiE;IACjE,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,8CAA8C;IAC9C,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,6CAA6C;IAC7C,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAQD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,qBAAa,kBAAkB;IAC7B;;OAEG;IACH,iBAAiB,CACf,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,cAAc,EACtB,QAAQ,CAAC,EAAE,eAAe,GACzB,SAAS,EAAE;IA6Cd;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAmE9B;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IA6ChC;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAwEhC;;OAEG;IACH,OAAO,CAAC,+BAA+B;IAgFvC;;OAEG;IACH,OAAO,CAAC,sBAAsB;CAsD/B;AAED,eAAO,MAAM,kBAAkB,oBAA2B,CAAC"}
@@ -10,49 +10,20 @@
10
10
  Object.defineProperty(exports, "__esModule", { value: true });
11
11
  exports.inlayHintsProvider = exports.InlayHintsProvider = void 0;
12
12
  const vscode_languageserver_1 = require("vscode-languageserver");
13
+ const amountFormatter_1 = require("../utils/amountFormatter");
14
+ const balanceCalculator_1 = require("../utils/balanceCalculator");
15
+ const uri_1 = require("../utils/uri");
13
16
  const DEFAULT_SETTINGS = {
14
17
  showInferredAmounts: false,
15
18
  showRunningBalances: false,
16
19
  showCostConversions: false
17
20
  };
18
21
  class InlayHintsProvider {
19
- /**
20
- * Format an amount with proper commodity placement
21
- */
22
- formatAmount(quantity, commodity, parsed) {
23
- // Find commodity format if available
24
- const commodityInfo = parsed.commodities.get(commodity);
25
- // Determine commodity placement
26
- let commodityBefore = '';
27
- let commodityAfter = '';
28
- if (commodityInfo?.format) {
29
- if (commodityInfo.format.symbolOnLeft) {
30
- commodityBefore = commodityInfo.format.symbol || commodity;
31
- }
32
- else {
33
- commodityAfter = commodityInfo.format.symbol || commodity;
34
- }
35
- }
36
- else if (commodity) {
37
- // Default heuristic: common currencies go on left
38
- const leftSymbols = ['$', '€', '£', '¥'];
39
- if (leftSymbols.includes(commodity)) {
40
- commodityBefore = commodity;
41
- }
42
- else {
43
- commodityAfter = ' ' + commodity;
44
- }
45
- }
46
- // Format the number
47
- const formattedNumber = quantity.toFixed(2);
48
- // Build the formatted amount
49
- return commodityBefore + formattedNumber + commodityAfter;
50
- }
51
22
  /**
52
23
  * Provide inlay hints for a document
53
24
  */
54
25
  provideInlayHints(document, range, parsed, settings) {
55
- const config = { ...DEFAULT_SETTINGS, ...settings };
26
+ const config = { ...DEFAULT_SETTINGS, ...settings?.inlayHints };
56
27
  const hints = [];
57
28
  // If showing running balances, we need to process all transactions to accumulate balances
58
29
  // Otherwise, only process transactions within the requested range
@@ -61,6 +32,12 @@ class InlayHintsProvider {
61
32
  : new Map();
62
33
  // Only process transactions within the requested range
63
34
  for (const transaction of parsed.transactions) {
35
+ // Only show inlay hints for transactions in the current document
36
+ // Normalize document URI to match internal storage format (decoded spaces, etc.)
37
+ const normalizedDocUri = (0, uri_1.toFileUri)((0, uri_1.toFilePath)(document.uri));
38
+ if (transaction.sourceUri !== normalizedDocUri) {
39
+ continue;
40
+ }
64
41
  const txLine = transaction.line ?? 0;
65
42
  // Skip transactions outside the range
66
43
  if (txLine < range.start.line || txLine > range.end.line) {
@@ -68,15 +45,15 @@ class InlayHintsProvider {
68
45
  }
69
46
  // Inferred amount hints
70
47
  if (config.showInferredAmounts) {
71
- hints.push(...this.getInferredAmountHints(document, transaction, parsed));
48
+ hints.push(...this.getInferredAmountHints(document, transaction, parsed, settings));
72
49
  }
73
50
  // Running balance hints
74
51
  if (config.showRunningBalances) {
75
- hints.push(...this.getRunningBalanceHintsWithState(document, transaction, parsed, runningBalances));
52
+ hints.push(...this.getRunningBalanceHintsWithState(document, transaction, parsed, runningBalances, settings));
76
53
  }
77
54
  // Cost conversion hints
78
55
  if (config.showCostConversions) {
79
- hints.push(...this.getCostConversionHints(document, transaction, parsed));
56
+ hints.push(...this.getCostConversionHints(document, transaction, parsed, settings));
80
57
  }
81
58
  }
82
59
  return hints;
@@ -84,7 +61,7 @@ class InlayHintsProvider {
84
61
  /**
85
62
  * Get hints for inferred amounts (postings without explicit amounts)
86
63
  */
87
- getInferredAmountHints(document, transaction, parsed) {
64
+ getInferredAmountHints(document, transaction, parsed, settings) {
88
65
  const hints = [];
89
66
  // Calculate which posting(s) have inferred amounts
90
67
  const postingsWithAmounts = transaction.postings.filter(p => p.amount);
@@ -93,7 +70,59 @@ class InlayHintsProvider {
93
70
  return hints;
94
71
  }
95
72
  // Calculate the inferred amount(s)
96
- // Group by commodity
73
+ const balances = (0, balanceCalculator_1.calculateTransactionBalance)(transaction);
74
+ // The inferred amount is the negation of the sum
75
+ const inferredAmounts = [];
76
+ for (const [commodity, balance] of balances.entries()) {
77
+ const amount = -balance;
78
+ inferredAmounts.push((0, amountFormatter_1.formatAmount)(amount, commodity, parsed, settings?.formatting));
79
+ }
80
+ // Find posting(s) without amounts and add hints
81
+ const txLine = transaction.line ?? 0;
82
+ let postingIndex = 0;
83
+ for (const posting of transaction.postings) {
84
+ if (!posting.amount) {
85
+ const lineNum = txLine + 1 + postingIndex; // +1 for header, then posting index
86
+ const line = document.getText({
87
+ start: { line: lineNum, character: 0 },
88
+ end: { line: lineNum, character: Number.MAX_SAFE_INTEGER }
89
+ });
90
+ // Find end of account name
91
+ const accountEnd = line.indexOf(posting.account) + posting.account.length;
92
+ const amountText = inferredAmounts.join(', ');
93
+ // Create clickable label part with command to insert the amount
94
+ const labelPart = {
95
+ value: ` ${amountText}`,
96
+ command: {
97
+ title: 'Insert inferred amount',
98
+ command: 'hledger.insertInferredAmount',
99
+ arguments: [
100
+ document.uri,
101
+ lineNum,
102
+ posting.account,
103
+ amountText
104
+ ]
105
+ }
106
+ };
107
+ hints.push({
108
+ position: vscode_languageserver_1.Position.create(lineNum, accountEnd),
109
+ label: [labelPart],
110
+ kind: vscode_languageserver_1.InlayHintKind.Parameter,
111
+ paddingLeft: true,
112
+ tooltip: 'Click to insert this inferred amount into the document'
113
+ });
114
+ }
115
+ postingIndex++;
116
+ }
117
+ return hints;
118
+ }
119
+ /**
120
+ * Calculate inferred amounts for a transaction
121
+ * Returns a map of posting index to inferred amounts (commodity -> quantity)
122
+ */
123
+ calculateInferredAmounts(transaction) {
124
+ const result = new Map();
125
+ // Calculate balance per commodity from explicit amounts
97
126
  const balances = new Map();
98
127
  for (const posting of transaction.postings) {
99
128
  if (posting.amount) {
@@ -118,33 +147,17 @@ class InlayHintsProvider {
118
147
  }
119
148
  }
120
149
  // The inferred amount is the negation of the sum
121
- const inferredAmounts = [];
150
+ const inferredAmounts = new Map();
122
151
  for (const [commodity, balance] of balances.entries()) {
123
- const amount = -balance;
124
- inferredAmounts.push(this.formatAmount(amount, commodity, parsed));
152
+ inferredAmounts.set(commodity, -balance);
125
153
  }
126
- // Find posting(s) without amounts and add hints
127
- const txLine = transaction.line ?? 0;
128
- let postingIndex = 0;
129
- for (const posting of transaction.postings) {
130
- if (!posting.amount) {
131
- const lineNum = txLine + 1 + postingIndex; // +1 for header, then posting index
132
- const line = document.getText({
133
- start: { line: lineNum, character: 0 },
134
- end: { line: lineNum, character: Number.MAX_SAFE_INTEGER }
135
- });
136
- // Find end of account name
137
- const accountEnd = line.indexOf(posting.account) + posting.account.length;
138
- hints.push({
139
- position: vscode_languageserver_1.Position.create(lineNum, accountEnd),
140
- label: ` ${inferredAmounts.join(', ')}`,
141
- kind: vscode_languageserver_1.InlayHintKind.Parameter,
142
- paddingLeft: true
143
- });
154
+ // Assign inferred amounts to postings without explicit amounts
155
+ for (let i = 0; i < transaction.postings.length; i++) {
156
+ if (!transaction.postings[i].amount) {
157
+ result.set(i, new Map(inferredAmounts));
144
158
  }
145
- postingIndex++;
146
159
  }
147
- return hints;
160
+ return result;
148
161
  }
149
162
  /**
150
163
  * Calculate running balances for all transactions
@@ -154,25 +167,55 @@ class InlayHintsProvider {
154
167
  const result = new Map();
155
168
  // Track global account balances across all transactions
156
169
  const accountBalances = new Map();
157
- for (let txIndex = 0; txIndex < parsed.transactions.length; txIndex++) {
158
- const transaction = parsed.transactions[txIndex];
170
+ // Sort transactions by date to calculate balances in chronological order
171
+ // This is important when transactions come from multiple files via includes
172
+ const sortedTransactions = [...parsed.transactions].sort((a, b) => {
173
+ return a.date.localeCompare(b.date);
174
+ });
175
+ // Create a map from sorted index to original index
176
+ const sortedToOriginalIndex = new Map();
177
+ sortedTransactions.forEach((tx, sortedIdx) => {
178
+ const originalIdx = parsed.transactions.indexOf(tx);
179
+ sortedToOriginalIndex.set(sortedIdx, originalIdx);
180
+ });
181
+ for (let sortedIdx = 0; sortedIdx < sortedTransactions.length; sortedIdx++) {
182
+ const transaction = sortedTransactions[sortedIdx];
183
+ const txIndex = sortedToOriginalIndex.get(sortedIdx);
159
184
  const postingBalances = new Map();
185
+ // Calculate inferred amounts for this transaction
186
+ const inferredAmounts = this.calculateInferredAmounts(transaction);
160
187
  for (let postingIndex = 0; postingIndex < transaction.postings.length; postingIndex++) {
161
188
  const posting = transaction.postings[postingIndex];
189
+ const account = posting.account;
190
+ // Get amount (either explicit or inferred)
191
+ let amountMap;
162
192
  if (posting.amount) {
163
- const account = posting.account;
193
+ // Explicit amount
164
194
  const commodity = posting.amount.commodity || '';
165
- // Get or create account balance map
166
- if (!accountBalances.has(account)) {
167
- accountBalances.set(account, new Map());
195
+ amountMap = new Map([[commodity, posting.amount.quantity]]);
196
+ }
197
+ else {
198
+ // Inferred amount
199
+ amountMap = inferredAmounts.get(postingIndex);
200
+ }
201
+ if (amountMap) {
202
+ // Update balance for each commodity in this posting
203
+ for (const [commodity, quantity] of amountMap.entries()) {
204
+ // Get or create account balance map
205
+ if (!accountBalances.has(account)) {
206
+ accountBalances.set(account, new Map());
207
+ }
208
+ const commodityBalances = accountBalances.get(account);
209
+ // Update balance
210
+ const currentBalance = commodityBalances.get(commodity) || 0;
211
+ const newBalance = currentBalance + quantity;
212
+ commodityBalances.set(commodity, newBalance);
213
+ // Store this posting's resulting balance
214
+ if (!postingBalances.has(postingIndex)) {
215
+ postingBalances.set(postingIndex, new Map());
216
+ }
217
+ postingBalances.get(postingIndex).set(commodity, newBalance);
168
218
  }
169
- const commodityBalances = accountBalances.get(account);
170
- // Update balance
171
- const currentBalance = commodityBalances.get(commodity) || 0;
172
- const newBalance = currentBalance + posting.amount.quantity;
173
- commodityBalances.set(commodity, newBalance);
174
- // Store this posting's resulting balance
175
- postingBalances.set(postingIndex, new Map([[commodity, newBalance]]));
176
219
  }
177
220
  }
178
221
  result.set(txIndex, postingBalances);
@@ -182,7 +225,7 @@ class InlayHintsProvider {
182
225
  /**
183
226
  * Get hints for running balances after each posting (with pre-calculated state)
184
227
  */
185
- getRunningBalanceHintsWithState(document, transaction, parsed, runningBalances) {
228
+ getRunningBalanceHintsWithState(document, transaction, parsed, runningBalances, settings) {
186
229
  const hints = [];
187
230
  // Find transaction index
188
231
  const txIndex = parsed.transactions.indexOf(transaction);
@@ -197,7 +240,9 @@ class InlayHintsProvider {
197
240
  for (let postingIndex = 0; postingIndex < transaction.postings.length; postingIndex++) {
198
241
  const posting = transaction.postings[postingIndex];
199
242
  const balanceMap = postingBalances.get(postingIndex);
200
- if (posting.amount && balanceMap) {
243
+ // Don't show running balance hint if posting already has a balance assertion
244
+ // Show hint for both explicit and inferred amounts
245
+ if (balanceMap && !posting.assertion) {
201
246
  const lineNum = txLine + 1 + postingIndex;
202
247
  const line = document.getText({
203
248
  start: { line: lineNum, character: 0 },
@@ -212,14 +257,31 @@ class InlayHintsProvider {
212
257
  // Format all commodity balances for this posting
213
258
  const balanceHints = [];
214
259
  for (const [commodity, balance] of balanceMap.entries()) {
215
- const formattedBalance = this.formatAmount(balance, commodity, parsed);
260
+ const formattedBalance = (0, amountFormatter_1.formatAmount)(balance, commodity, parsed, settings?.formatting);
216
261
  balanceHints.push(formattedBalance);
217
262
  }
263
+ const balanceText = balanceHints.join(', ');
264
+ // Create clickable label part with command to insert balance assertion
265
+ // Format as actual balance assertion syntax: " = $amount"
266
+ const labelPart = {
267
+ value: ` = ${balanceText} `,
268
+ command: {
269
+ title: 'Insert balance assertion',
270
+ command: 'hledger.insertBalanceAssertion',
271
+ arguments: [
272
+ document.uri,
273
+ lineNum,
274
+ posting.account,
275
+ balanceHints
276
+ ]
277
+ }
278
+ };
218
279
  hints.push({
219
280
  position: vscode_languageserver_1.Position.create(lineNum, endPos),
220
- label: ` [${balanceHints.join(', ')}]`,
281
+ label: [labelPart],
221
282
  kind: vscode_languageserver_1.InlayHintKind.Type,
222
- paddingLeft: true
283
+ paddingLeft: true,
284
+ tooltip: `Click to insert balance assertion for ${posting.account}`
223
285
  });
224
286
  }
225
287
  }
@@ -228,19 +290,15 @@ class InlayHintsProvider {
228
290
  /**
229
291
  * Get hints for cost conversions
230
292
  */
231
- getCostConversionHints(document, transaction, parsed) {
293
+ getCostConversionHints(document, transaction, parsed, settings) {
232
294
  const hints = [];
233
295
  const txLine = transaction.line ?? 0;
234
296
  let postingIndex = 0;
235
297
  for (const posting of transaction.postings) {
236
- if (posting.amount && posting.cost) {
237
- let totalCost;
238
- if (posting.cost.type === 'unit') {
239
- totalCost = posting.amount.quantity * posting.cost.amount.quantity;
240
- }
241
- else {
242
- totalCost = posting.cost.amount.quantity;
243
- }
298
+ // Only show cost conversion hints for unit cost (@), not total cost (@@)
299
+ // since total cost is already explicit
300
+ if (posting.amount && posting.cost && posting.cost.type === 'unit') {
301
+ const totalCost = posting.amount.quantity * posting.cost.amount.quantity;
244
302
  const lineNum = txLine + 1 + postingIndex;
245
303
  const line = document.getText({
246
304
  start: { line: lineNum, character: 0 },
@@ -250,12 +308,27 @@ class InlayHintsProvider {
250
308
  const costMatch = line.match(/@@?[^;#]*/);
251
309
  if (costMatch) {
252
310
  const costEnd = line.indexOf(costMatch[0]) + costMatch[0].length;
253
- const formattedCost = this.formatAmount(totalCost, posting.cost.amount.commodity || '', parsed);
311
+ const formattedCost = (0, amountFormatter_1.formatAmount)(totalCost, posting.cost.amount.commodity || '', parsed);
312
+ // For unit cost (@), show total cost equivalent (@@ notation)
313
+ const labelPart = {
314
+ value: ` @@${formattedCost} `,
315
+ command: {
316
+ title: 'Convert to total cost',
317
+ command: 'hledger.convertToTotalCost',
318
+ arguments: [
319
+ document.uri,
320
+ lineNum,
321
+ posting.account,
322
+ formattedCost
323
+ ]
324
+ }
325
+ };
254
326
  hints.push({
255
327
  position: vscode_languageserver_1.Position.create(lineNum, costEnd),
256
- label: ` = ${formattedCost}`,
328
+ label: [labelPart],
257
329
  kind: vscode_languageserver_1.InlayHintKind.Type,
258
- paddingLeft: true
330
+ paddingLeft: true,
331
+ tooltip: 'Click to convert unit cost (@) to total cost (@@)'
259
332
  });
260
333
  }
261
334
  }