hledger-lsp 0.1.15 → 0.2.1

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 (82) hide show
  1. package/out/features/codeActions.d.ts.map +1 -1
  2. package/out/features/codeActions.js +2 -5
  3. package/out/features/codeActions.js.map +1 -1
  4. package/out/features/codeLens.d.ts.map +1 -1
  5. package/out/features/codeLens.js +1 -4
  6. package/out/features/codeLens.js.map +1 -1
  7. package/out/features/completion.d.ts.map +1 -1
  8. package/out/features/completion.js +2 -1
  9. package/out/features/completion.js.map +1 -1
  10. package/out/features/definition.js +4 -4
  11. package/out/features/definition.js.map +1 -1
  12. package/out/features/documentLinks.d.ts.map +1 -1
  13. package/out/features/documentLinks.js +4 -2
  14. package/out/features/documentLinks.js.map +1 -1
  15. package/out/features/foldingRanges.d.ts.map +1 -1
  16. package/out/features/foldingRanges.js +1 -4
  17. package/out/features/foldingRanges.js.map +1 -1
  18. package/out/features/formatter.d.ts +3 -7
  19. package/out/features/formatter.d.ts.map +1 -1
  20. package/out/features/formatter.js +104 -256
  21. package/out/features/formatter.js.map +1 -1
  22. package/out/features/hover.d.ts.map +1 -1
  23. package/out/features/hover.js +24 -9
  24. package/out/features/hover.js.map +1 -1
  25. package/out/features/inlayHints.d.ts +0 -11
  26. package/out/features/inlayHints.d.ts.map +1 -1
  27. package/out/features/inlayHints.js +6 -85
  28. package/out/features/inlayHints.js.map +1 -1
  29. package/out/features/semanticTokens.js +6 -6
  30. package/out/features/semanticTokens.js.map +1 -1
  31. package/out/features/symbols.d.ts.map +1 -1
  32. package/out/features/symbols.js +7 -10
  33. package/out/features/symbols.js.map +1 -1
  34. package/out/features/validator.d.ts +3 -3
  35. package/out/features/validator.d.ts.map +1 -1
  36. package/out/features/validator.js +44 -34
  37. package/out/features/validator.js.map +1 -1
  38. package/out/parser/ast.d.ts +10 -9
  39. package/out/parser/ast.d.ts.map +1 -1
  40. package/out/parser/ast.js +11 -62
  41. package/out/parser/ast.js.map +1 -1
  42. package/out/parser/includes.d.ts +7 -7
  43. package/out/parser/includes.d.ts.map +1 -1
  44. package/out/parser/includes.js +7 -7
  45. package/out/parser/includes.js.map +1 -1
  46. package/out/parser/index.d.ts +6 -10
  47. package/out/parser/index.d.ts.map +1 -1
  48. package/out/parser/index.js +13 -16
  49. package/out/parser/index.js.map +1 -1
  50. package/out/server/configFile.d.ts +7 -6
  51. package/out/server/configFile.d.ts.map +1 -1
  52. package/out/server/configFile.js +11 -8
  53. package/out/server/configFile.js.map +1 -1
  54. package/out/server/deps.d.ts +5 -4
  55. package/out/server/deps.d.ts.map +1 -1
  56. package/out/server/deps.js.map +1 -1
  57. package/out/server/settings.d.ts +3 -2
  58. package/out/server/settings.d.ts.map +1 -1
  59. package/out/server/settings.js +2 -3
  60. package/out/server/settings.js.map +1 -1
  61. package/out/server/workspace.d.ts +9 -8
  62. package/out/server/workspace.d.ts.map +1 -1
  63. package/out/server/workspace.js +47 -48
  64. package/out/server/workspace.js.map +1 -1
  65. package/out/server.js +75 -99
  66. package/out/server.js.map +1 -1
  67. package/out/types.d.ts +10 -6
  68. package/out/types.d.ts.map +1 -1
  69. package/out/types.js.map +1 -1
  70. package/out/utils/amountFormatter.d.ts +31 -11
  71. package/out/utils/amountFormatter.d.ts.map +1 -1
  72. package/out/utils/amountFormatter.js +147 -70
  73. package/out/utils/amountFormatter.js.map +1 -1
  74. package/out/utils/runningBalanceCalculator.d.ts +44 -0
  75. package/out/utils/runningBalanceCalculator.d.ts.map +1 -0
  76. package/out/utils/runningBalanceCalculator.js +163 -0
  77. package/out/utils/runningBalanceCalculator.js.map +1 -0
  78. package/out/utils/uri.d.ts +6 -5
  79. package/out/utils/uri.d.ts.map +1 -1
  80. package/out/utils/uri.js +7 -78
  81. package/out/utils/uri.js.map +1 -1
  82. package/package.json +6 -5
@@ -4,8 +4,10 @@
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.formattingProvider = exports.FormattingProvider = void 0;
7
+ const vscode_uri_1 = require("vscode-uri");
7
8
  const ast_1 = require("../parser/ast");
8
9
  const index_1 = require("../utils/index");
10
+ const amountFormatter_1 = require("../utils/amountFormatter");
9
11
  const DEFAULT_OPTIONS = {
10
12
  indentation: 4,
11
13
  maxAccountWidth: 42,
@@ -22,6 +24,8 @@ class FormattingProvider {
22
24
  */
23
25
  formatDocument(document, parsed, _lspOptions, userOptions = {}) {
24
26
  const options = { ...DEFAULT_OPTIONS, ...userOptions };
27
+ // Normalize document URI to ensure proper encoding
28
+ const documentUri = vscode_uri_1.URI.parse(document.uri).toString();
25
29
  const text = document.getText();
26
30
  const lines = text.split('\n');
27
31
  // Format line by line, tracking transactions
@@ -35,7 +39,7 @@ class FormattingProvider {
35
39
  formattedLines.push(this.formatTransactionHeader(trimmed));
36
40
  // Find the corresponding transaction in the parsed document
37
41
  // to get inferred costs and other parsing results
38
- const transaction = parsed.transactions.find(t => t.line === i);
42
+ const transaction = parsed.transactions.find(t => (t.line === i && t.sourceUri?.toString() === documentUri));
39
43
  // Collect and format all postings in this transaction
40
44
  const transactionLines = [];
41
45
  i++;
@@ -85,204 +89,78 @@ class FormattingProvider {
85
89
  formattedLines = lines.map(line => line.trimEnd());
86
90
  return formattedLines;
87
91
  }
88
- let indentColumnWidth = 0;
89
- let accountColumnWidth = 0;
90
- let commodityBeforeColumnWidth = 0;
91
- let spaceBetweenCommodityBeforeAndAmount = 0;
92
- let negativeSignColumnWidth = 0;
93
- let amountIntegerColumnWidth = 0;
94
- let amountDecimalMarkColumnWidth = 0;
95
- let amountDecimalColumnWidth = 0;
96
- let spaceBetweenAmountAndCommodityAfterColumnWidth = 0;
97
- let commodityAfterColumnWidth = 0;
98
- let costColumnWidth = 0;
99
- let costCommodityBeforeColumnWidth = 0;
100
- let spaceBetweenCostCommodityBeforeAndAmount = 0;
101
- let costNegativeSignColumnWidth = 0;
102
- let costAmountIntegerColumnWidth = 0;
103
- let costAmountDecimalMarkColumnWidth = 0;
104
- let costAmountDecimalColumnWidth = 0;
105
- let spaceBetweenCostAmountAndCommodityAfterColumnWidth = 0;
106
- let costCommodityAfterColumnWidth = 0;
107
- let assertionColumnWidth = 0;
108
- let assertionCommodityBeforeColumnWidth = 0;
109
- let spaceBetweenAssertionCommodityBeforeAndAmount = 0;
110
- let assertionNegativeSignColumnWidth = 0;
111
- let assertionAmountIntegerColumnWidth = 0;
112
- let assertionAmountDecimalMarkColumnWidth = 0;
113
- let assertionAmountDecimalColumnWidth = 0;
114
- let spaceBetweenAssertionAmountAndCommodityAfterColumnWidth = 0;
115
- let assertionCommodityAfterColumnWidth = 0;
116
- // First pass: determine column widths and cache layouts
117
- const postingLayouts = [];
118
- for (let posting of transaction.postings) {
119
- let postingLayout = {};
120
- indentColumnWidth = Math.max(indentColumnWidth, options.indentation);
121
- accountColumnWidth = Math.max(accountColumnWidth, posting.account.length);
122
- // Skip layouting inferred amounts since they don't exist in the source
123
- if (posting.amount && !posting.amount.inferred) {
124
- const layout = this.layoutAmount(posting.amount, parsed, options);
125
- postingLayout.amountLayout = layout;
126
- commodityBeforeColumnWidth = Math.max(commodityBeforeColumnWidth, layout.commodityBefore.length);
127
- negativeSignColumnWidth = Math.max(negativeSignColumnWidth, layout.isNegative ? 1 : 0);
128
- spaceBetweenCommodityBeforeAndAmount = Math.max(spaceBetweenCommodityBeforeAndAmount, (layout.spaceBetweenCommodityAndAmount && layout.commodityBefore.length) ? 1 : 0);
129
- amountIntegerColumnWidth = Math.max(amountIntegerColumnWidth, layout.amountIntegerString.length);
130
- amountDecimalMarkColumnWidth = Math.max(amountDecimalMarkColumnWidth, layout.amountDecimalString ? 1 : 0);
131
- amountDecimalColumnWidth = Math.max(amountDecimalColumnWidth, layout.amountDecimalString.length);
132
- spaceBetweenAmountAndCommodityAfterColumnWidth = Math.max(spaceBetweenAmountAndCommodityAfterColumnWidth, (layout.spaceBetweenCommodityAndAmount && layout.commodityAfter.length) ? 1 : 0);
133
- commodityAfterColumnWidth = Math.max(commodityAfterColumnWidth, layout.commodityAfter.length);
134
- }
135
- // Skip layouting inferred costs since they don't exist in the source
136
- if (posting.cost && !posting.cost.inferred) {
137
- const layout = this.layoutAmount(posting.cost.amount, parsed, options);
138
- postingLayout.costLayout = layout;
139
- costColumnWidth = Math.max(costColumnWidth, posting.cost.type === 'unit' ? 3 : 4);
140
- costCommodityBeforeColumnWidth = Math.max(costCommodityBeforeColumnWidth, layout.commodityBefore.length);
141
- costNegativeSignColumnWidth = Math.max(costNegativeSignColumnWidth, layout.isNegative ? 1 : 0);
142
- spaceBetweenCostCommodityBeforeAndAmount = Math.max(spaceBetweenCostCommodityBeforeAndAmount, (layout.spaceBetweenCommodityAndAmount && layout.commodityBefore.length) ? 1 : 0);
143
- costAmountIntegerColumnWidth = Math.max(costAmountIntegerColumnWidth, layout.amountIntegerString.length);
144
- costAmountDecimalMarkColumnWidth = Math.max(costAmountDecimalMarkColumnWidth, layout.amountDecimalString ? 1 : 0);
145
- costAmountDecimalColumnWidth = Math.max(costAmountDecimalColumnWidth, layout.amountDecimalString.length);
146
- spaceBetweenCostAmountAndCommodityAfterColumnWidth = Math.max(spaceBetweenCostAmountAndCommodityAfterColumnWidth, (layout.spaceBetweenCommodityAndAmount && layout.commodityAfter.length) ? 1 : 0);
147
- costCommodityAfterColumnWidth = Math.max(costCommodityAfterColumnWidth, layout.commodityAfter.length);
148
- }
149
- if (posting.assertion) {
150
- const layout = this.layoutAmount(posting.assertion, parsed, options);
151
- postingLayout.assertionLayout = layout;
152
- assertionColumnWidth = Math.max(assertionColumnWidth, 3); // for the assertion operator with spaces
153
- assertionCommodityBeforeColumnWidth = Math.max(assertionCommodityBeforeColumnWidth, layout.commodityBefore.length);
154
- assertionNegativeSignColumnWidth = Math.max(assertionNegativeSignColumnWidth, layout.isNegative ? 1 : 0);
155
- spaceBetweenAssertionCommodityBeforeAndAmount = Math.max(spaceBetweenAssertionCommodityBeforeAndAmount, layout.isNegative ? 1 : 0);
156
- assertionAmountIntegerColumnWidth = Math.max(assertionAmountIntegerColumnWidth, layout.amountIntegerString.length);
157
- assertionAmountDecimalMarkColumnWidth = Math.max(assertionAmountDecimalMarkColumnWidth, layout.amountDecimalString ? 1 : 0);
158
- assertionAmountDecimalColumnWidth = Math.max(assertionAmountDecimalColumnWidth, layout.amountDecimalString.length);
159
- spaceBetweenAssertionAmountAndCommodityAfterColumnWidth = Math.max(spaceBetweenAssertionAmountAndCommodityAfterColumnWidth, (layout.spaceBetweenCommodityAndAmount && layout.commodityAfter.length) ? 1 : 0);
160
- assertionCommodityAfterColumnWidth = Math.max(assertionCommodityAfterColumnWidth, layout.commodityAfter.length);
161
- }
162
- postingLayouts.push(postingLayout);
163
- }
92
+ // First pass: Calculate all column widths
93
+ const widths = this.calculateTransactionWidths(transaction, parsed, options);
164
94
  // Second pass: format each posting line
165
95
  const formattedPostingLines = [];
166
- for (let idx = 0; idx < transaction.postings.length; idx++) {
167
- const posting = transaction.postings[idx];
168
- const postingLayout = postingLayouts[idx];
96
+ for (let posting of transaction.postings) {
169
97
  let line = ' '.repeat(options.indentation);
170
- line += posting.account.padEnd(accountColumnWidth, ' ');
98
+ line += posting.account.padEnd(widths.account, ' ');
171
99
  line += ' '.repeat(options.minSpacing);
172
- // Skip formatting inferred amounts since they don't exist in the source
100
+ // 1. Amount
173
101
  if (posting.amount && !posting.amount.inferred) {
174
- const lengthAtPaddingLocation = line.length;
175
- const layout = postingLayout.amountLayout;
176
- // Handle sign position based on layout.negativeSignBefore
177
- if (layout.negativeSignBefore) {
178
- // Format as: -$100 (sign before commodity)
179
- line += layout.isNegative ? '-'.padStart(negativeSignColumnWidth, ' ') : ' '.repeat(negativeSignColumnWidth);
180
- line += layout.commodityBefore.padStart(commodityBeforeColumnWidth, ' ');
181
- }
182
- else {
183
- // Format as: $-100 (commodity before sign, default)
184
- line += layout.commodityBefore.padStart(commodityBeforeColumnWidth, ' ');
185
- line += layout.isNegative ? '-'.padStart(negativeSignColumnWidth, ' ') : ' '.repeat(negativeSignColumnWidth);
186
- }
187
- line += ' '.repeat(spaceBetweenCommodityBeforeAndAmount);
188
- line += layout.amountIntegerString.padStart(amountIntegerColumnWidth, ' ');
189
- const lengthAtDecimalLocation = line.length;
190
- const targetDecimalColumn = options.decimalAlignColumn;
191
- const linePrePadding = line.substring(0, lengthAtPaddingLocation);
192
- const linePostPadding = line.substring(lengthAtPaddingLocation);
193
- const currentDecimalColumn = lengthAtDecimalLocation;
194
- const neededPadding = targetDecimalColumn - currentDecimalColumn;
195
- line = linePrePadding + ' '.repeat(Math.max(0, neededPadding)) + linePostPadding;
196
- if (layout.demicalMark) {
197
- line += layout.demicalMark.padEnd(amountDecimalMarkColumnWidth, ' ');
198
- line += layout.amountDecimalString.padEnd(amountDecimalColumnWidth, ' ');
199
- }
200
- else {
201
- line += ' '.repeat(amountDecimalMarkColumnWidth + amountDecimalColumnWidth);
202
- }
203
- line += ' '.repeat(spaceBetweenAmountAndCommodityAfterColumnWidth);
204
- line += layout.commodityAfter.padEnd(commodityAfterColumnWidth, ' ');
102
+ const layout = (0, amountFormatter_1.getAmountLayout)(posting.amount, parsed, options);
103
+ const amountBlock = (0, amountFormatter_1.renderAmountLayout)(layout, widths.amount);
104
+ // Calculate decimal alignment padding
105
+ const preDecimalWidth = widths.amount.commodityBefore +
106
+ widths.amount.spaceBetweenCommodityBeforeAndAmount +
107
+ widths.amount.negativeSign +
108
+ widths.amount.integer;
109
+ const currentLen = line.length;
110
+ const targetLen = options.decimalAlignColumn;
111
+ const padding = Math.max(0, targetLen - currentLen - preDecimalWidth);
112
+ line += ' '.repeat(padding) + amountBlock;
205
113
  }
206
114
  else {
207
- const lengthAtPaddingLocation = line.length;
208
- const neededPadding = options.decimalAlignColumn - lengthAtPaddingLocation;
209
- line += ' '.repeat(Math.max(0, neededPadding));
210
- line += ' '.repeat(amountDecimalMarkColumnWidth +
211
- amountDecimalColumnWidth +
212
- spaceBetweenAmountAndCommodityAfterColumnWidth +
213
- commodityAfterColumnWidth); // space for missing amount
115
+ // Space for missing amount
116
+ const preDecimalWidth = widths.amount.commodityBefore +
117
+ widths.amount.spaceBetweenCommodityBeforeAndAmount +
118
+ widths.amount.negativeSign +
119
+ widths.amount.integer;
120
+ const postDecimalWidth = widths.amount.decimalMark +
121
+ widths.amount.decimal +
122
+ widths.amount.spaceBetweenAmountAndCommodityAfter +
123
+ widths.amount.commodityAfter;
124
+ const currentLen = line.length;
125
+ const targetLen = options.decimalAlignColumn;
126
+ const padding = Math.max(0, targetLen - currentLen - preDecimalWidth);
127
+ line += ' '.repeat(padding + preDecimalWidth + postDecimalWidth);
214
128
  }
215
- // Skip formatting inferred costs since they don't exist in the source
129
+ // 2. Cost
216
130
  if (posting.cost && !posting.cost.inferred) {
217
- const layout = postingLayout.costLayout;
218
- line += posting.cost.type === 'unit' ? ' @'.padEnd(costColumnWidth, ' ') : ' @@'.padEnd(costColumnWidth, ' ');
219
- // Handle sign position for cost
220
- if (layout.negativeSignBefore) {
221
- line += layout.isNegative ? '-'.padStart(costNegativeSignColumnWidth, ' ') : ' '.repeat(costNegativeSignColumnWidth);
222
- line += layout.commodityBefore.padStart(costCommodityBeforeColumnWidth, ' ');
223
- }
224
- else {
225
- line += layout.commodityBefore.padStart(costCommodityBeforeColumnWidth, ' ');
226
- line += layout.isNegative ? '-'.padStart(costNegativeSignColumnWidth, ' ') : ' '.repeat(costNegativeSignColumnWidth);
227
- }
228
- line += ' '.repeat(spaceBetweenCostCommodityBeforeAndAmount);
229
- line += layout.amountIntegerString.padStart(costAmountIntegerColumnWidth, ' ');
230
- if (layout.demicalMark) {
231
- line += layout.demicalMark.padEnd(costAmountDecimalMarkColumnWidth, ' ');
232
- line += layout.amountDecimalString.padEnd(costAmountDecimalColumnWidth, ' ');
233
- }
234
- else {
235
- line += ' '.repeat(costAmountDecimalColumnWidth + costAmountDecimalMarkColumnWidth);
236
- }
237
- line += ' '.repeat(spaceBetweenCostAmountAndCommodityAfterColumnWidth);
238
- line += layout.commodityAfter.padEnd(costCommodityAfterColumnWidth, ' ');
131
+ line += (posting.cost.type === 'unit' ? ' @ ' : ' @@ ').padEnd(widths.cost.marker, ' ');
132
+ const layout = (0, amountFormatter_1.getAmountLayout)(posting.cost.amount, parsed, options);
133
+ line += (0, amountFormatter_1.renderAmountLayout)(layout, widths.cost);
239
134
  }
240
135
  else {
241
- line += ' '.repeat(costColumnWidth +
242
- costCommodityBeforeColumnWidth +
243
- spaceBetweenCostCommodityBeforeAndAmount +
244
- costNegativeSignColumnWidth +
245
- costAmountIntegerColumnWidth +
246
- costAmountDecimalMarkColumnWidth +
247
- costAmountDecimalColumnWidth +
248
- spaceBetweenCostAmountAndCommodityAfterColumnWidth +
249
- costCommodityAfterColumnWidth); // space for missing cost
136
+ const totalWidth = widths.cost.marker +
137
+ widths.cost.commodityBefore +
138
+ widths.cost.spaceBetweenCommodityBeforeAndAmount +
139
+ widths.cost.negativeSign +
140
+ widths.cost.integer +
141
+ widths.cost.decimalMark +
142
+ widths.cost.decimal +
143
+ widths.cost.spaceBetweenAmountAndCommodityAfter +
144
+ widths.cost.commodityAfter;
145
+ line += ' '.repeat(totalWidth);
250
146
  }
147
+ // 3. Assertion
251
148
  if (posting.assertion) {
252
- const layout = postingLayout.assertionLayout;
253
- line += ' ='.padEnd(assertionColumnWidth, ' ');
254
- // Handle sign position for assertion
255
- if (layout.negativeSignBefore) {
256
- line += layout.isNegative ? '-'.padStart(assertionNegativeSignColumnWidth, ' ') : ' '.repeat(assertionNegativeSignColumnWidth);
257
- line += layout.commodityBefore.padStart(assertionCommodityBeforeColumnWidth, ' ');
258
- }
259
- else {
260
- line += layout.commodityBefore.padStart(assertionCommodityBeforeColumnWidth, ' ');
261
- line += layout.isNegative ? '-'.padStart(assertionNegativeSignColumnWidth, ' ') : ' '.repeat(assertionNegativeSignColumnWidth);
262
- }
263
- line += ' '.repeat(spaceBetweenAssertionCommodityBeforeAndAmount);
264
- line += layout.amountIntegerString.padStart(assertionAmountIntegerColumnWidth, ' ');
265
- if (layout.demicalMark) {
266
- line += layout.demicalMark.padEnd(assertionAmountDecimalMarkColumnWidth, ' ');
267
- line += layout.amountDecimalString.padEnd(assertionAmountDecimalColumnWidth, ' ');
268
- }
269
- else {
270
- line += ' '.repeat(assertionAmountDecimalColumnWidth + assertionAmountDecimalMarkColumnWidth);
271
- }
272
- line += ' '.repeat(spaceBetweenAssertionAmountAndCommodityAfterColumnWidth);
273
- line += layout.commodityAfter.padEnd(assertionCommodityAfterColumnWidth, ' ');
149
+ line += ' = '.padEnd(widths.assertion.marker, ' ');
150
+ const layout = (0, amountFormatter_1.getAmountLayout)(posting.assertion, parsed, options);
151
+ line += (0, amountFormatter_1.renderAmountLayout)(layout, widths.assertion);
274
152
  }
275
153
  else {
276
- line += ' '.repeat(2 + // space for spaces around assertion indicator
277
- assertionColumnWidth +
278
- assertionCommodityBeforeColumnWidth +
279
- spaceBetweenAssertionCommodityBeforeAndAmount +
280
- assertionNegativeSignColumnWidth +
281
- assertionAmountIntegerColumnWidth +
282
- assertionAmountDecimalColumnWidth +
283
- assertionAmountDecimalMarkColumnWidth +
284
- spaceBetweenAssertionAmountAndCommodityAfterColumnWidth +
285
- assertionCommodityAfterColumnWidth); // space for missing assertion
154
+ const totalWidth = widths.assertion.marker +
155
+ widths.assertion.commodityBefore +
156
+ widths.assertion.spaceBetweenCommodityBeforeAndAmount +
157
+ widths.assertion.negativeSign +
158
+ widths.assertion.integer +
159
+ widths.assertion.decimalMark +
160
+ widths.assertion.decimal +
161
+ widths.assertion.spaceBetweenAmountAndCommodityAfter +
162
+ widths.assertion.commodityAfter;
163
+ line += ' '.repeat(totalWidth);
286
164
  }
287
165
  if (posting.comment) {
288
166
  line = line.trimEnd();
@@ -304,78 +182,54 @@ class FormattingProvider {
304
182
  }
305
183
  return formattedLines;
306
184
  }
307
- layoutAmount(amount, parsed, options) {
308
- const commodity = this.findCommodity(amount.commodity, parsed);
309
- let format = {};
310
- let declaredPrecision = undefined;
311
- if (commodity && commodity.format) {
312
- format = commodity.format;
313
- declaredPrecision = commodity.format.precision ?? undefined;
314
- }
315
- else if (amount.format) {
316
- format = amount.format;
317
- }
318
- else {
319
- format = {};
320
- }
321
- // Determine the actual precision to use based on the rules:
322
- // 1. Never reduce precision if posting has higher precision than declared
323
- // 2. Add zeros to match declared precision when actual < declared
324
- // 3. Don't change formatting when commodity is not declared
325
- const actualPrecision = amount.format?.precision ?? undefined;
326
- let targetPrecision = undefined;
327
- if (declaredPrecision !== undefined) {
328
- // Commodity is declared - use max of actual and declared precision
329
- if (actualPrecision !== undefined) {
330
- targetPrecision = Math.max(actualPrecision, declaredPrecision);
185
+ calculateTransactionWidths(transaction, parsed, options) {
186
+ const widths = {
187
+ indent: options.indentation,
188
+ account: 0,
189
+ amount: this.emptyAmountWidths(),
190
+ cost: { ...this.emptyAmountWidths(), marker: 0 },
191
+ assertion: { ...this.emptyAmountWidths(), marker: 0 }
192
+ };
193
+ for (const posting of transaction.postings) {
194
+ widths.account = Math.max(widths.account, posting.account.length);
195
+ if (posting.amount && !posting.amount.inferred) {
196
+ const layout = (0, amountFormatter_1.getAmountLayout)(posting.amount, parsed, options);
197
+ this.updateAmountWidths(widths.amount, layout);
331
198
  }
332
- else {
333
- targetPrecision = declaredPrecision;
199
+ if (posting.cost && !posting.cost.inferred) {
200
+ const layout = (0, amountFormatter_1.getAmountLayout)(posting.cost.amount, parsed, options);
201
+ this.updateAmountWidths(widths.cost, layout);
202
+ widths.cost.marker = Math.max(widths.cost.marker, posting.cost.type === 'unit' ? 3 : 4);
203
+ }
204
+ if (posting.assertion) {
205
+ const layout = (0, amountFormatter_1.getAmountLayout)(posting.assertion, parsed, options);
206
+ this.updateAmountWidths(widths.assertion, layout);
207
+ widths.assertion.marker = Math.max(widths.assertion.marker, 3);
334
208
  }
335
209
  }
336
- else {
337
- // Commodity is not declared - preserve original precision
338
- targetPrecision = actualPrecision;
339
- }
340
- // Determine if negative sign should be before commodity symbol
341
- // This only applies when commodity is on left
342
- const symbolOnLeft = format.symbolOnLeft || false;
343
- const negativeSignBefore = symbolOnLeft && options.signPosition === 'before-symbol';
210
+ return widths;
211
+ }
212
+ emptyAmountWidths() {
344
213
  return {
345
- commodityBefore: format.symbolOnLeft ? format.symbol || '' : '',
346
- isNegative: amount.quantity < 0,
347
- negativeSignBefore,
348
- amountIntegerString: this.formatIntegerAmount(amount, format),
349
- amountDecimalString: this.formatDecimalAmount(amount, format, targetPrecision),
350
- demicalMark: targetPrecision && targetPrecision > 0 ? (format.decimalMark || '.') : '',
351
- spaceBetweenCommodityAndAmount: format.spaceBetween || false,
352
- commodityAfter: !format.symbolOnLeft ? format.symbol || '' : ''
214
+ commodityBefore: 0,
215
+ spaceBetweenCommodityBeforeAndAmount: 0,
216
+ negativeSign: 0,
217
+ integer: 0,
218
+ decimalMark: 0,
219
+ decimal: 0,
220
+ spaceBetweenAmountAndCommodityAfter: 0,
221
+ commodityAfter: 0
353
222
  };
354
223
  }
355
- formatIntegerAmount(amount, format) {
356
- const integerPart = Math.floor(Math.abs(amount.quantity)).toString();
357
- // Format integer part with grouping if specified
358
- let integerString = '';
359
- if (format.thousandsSeparator) {
360
- const regex = /\B(?=(\d{3})+(?!\d))/g;
361
- integerString = integerPart.replace(regex, format.thousandsSeparator);
362
- }
363
- else {
364
- integerString = integerPart;
365
- }
366
- return integerString;
367
- }
368
- formatDecimalAmount(amount, format, targetPrecision) {
369
- const decimalPart = Math.abs(amount.quantity) % 1;
370
- // Format decimal part based on target precision
371
- let decimalString = '';
372
- if (targetPrecision !== undefined && targetPrecision > 0) {
373
- decimalString = decimalPart.toFixed(targetPrecision).substring(2); // Skip "0."
374
- }
375
- else if (decimalPart > 0) {
376
- decimalString = decimalPart.toString().substring(2); // Skip "0."
377
- }
378
- return decimalString;
224
+ updateAmountWidths(widths, layout) {
225
+ widths.commodityBefore = Math.max(widths.commodityBefore, layout.commodityBefore.length);
226
+ widths.spaceBetweenCommodityBeforeAndAmount = Math.max(widths.spaceBetweenCommodityBeforeAndAmount, (layout.spaceBetweenCommodityAndAmount && layout.commodityBefore.length) ? 1 : 0);
227
+ widths.negativeSign = Math.max(widths.negativeSign, layout.isNegative ? 1 : 0);
228
+ widths.integer = Math.max(widths.integer, layout.amountIntegerString.length);
229
+ widths.decimalMark = Math.max(widths.decimalMark, layout.amountDecimalString ? 1 : 0);
230
+ widths.decimal = Math.max(widths.decimal, layout.amountDecimalString.length);
231
+ widths.spaceBetweenAmountAndCommodityAfter = Math.max(widths.spaceBetweenAmountAndCommodityAfter, (layout.spaceBetweenCommodityAndAmount && layout.commodityAfter.length) ? 1 : 0);
232
+ widths.commodityAfter = Math.max(widths.commodityAfter, layout.commodityAfter.length);
379
233
  }
380
234
  /**
381
235
  * Format a range of lines
@@ -442,12 +296,6 @@ class FormattingProvider {
442
296
  }
443
297
  return result;
444
298
  }
445
- /**
446
- * Find the commodity format from parsed document
447
- */
448
- findCommodity(commodityName, parsed) {
449
- return parsed.commodities.get(commodityName);
450
- }
451
299
  }
452
300
  exports.FormattingProvider = FormattingProvider;
453
301
  exports.formattingProvider = new FormattingProvider();
@@ -1 +1 @@
1
- {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/features/formatter.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAKH,uCAAqE;AACrE,0CAAwF;AAuCxF,MAAM,eAAe,GAAgC;IACnD,WAAW,EAAE,CAAC;IACd,eAAe,EAAE,EAAE;IACnB,iBAAiB,EAAE,CAAC;IACpB,cAAc,EAAE,EAAE;IAClB,UAAU,EAAE,CAAC;IACb,kBAAkB,EAAE,EAAE;IACtB,2BAA2B,EAAE,EAAE;IAC/B,YAAY,EAAE,cAAc;CAC7B,CAAC;AAGF,MAAa,kBAAkB;IAC7B;;OAEG;IACH,cAAc,CACZ,QAAsB,EACtB,MAAsB,EACtB,WAAiC,EACjC,cAA0C,EAAE;QAE5C,MAAM,OAAO,GAAG,EAAE,GAAG,eAAe,EAAE,GAAG,WAAW,EAAE,CAAC;QACvD,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE/B,6CAA6C;QAC7C,MAAM,cAAc,GAAa,EAAE,CAAC;QACpC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEV,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YACxB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAE5B,IAAI,IAAA,2BAAmB,EAAC,OAAO,CAAC,EAAE,CAAC;gBACjC,gCAAgC;gBAChC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAC;gBAE3D,4DAA4D;gBAC5D,kDAAkD;gBAClD,MAAM,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;gBAEhE,sDAAsD;gBACtD,MAAM,gBAAgB,GAAa,EAAE,CAAC;gBACtC,CAAC,EAAE,CAAC;gBAEJ,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;oBACxB,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC7B,MAAM,cAAc,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;oBAE1C,qDAAqD;oBACrD,IAAI,CAAC,cAAc,IAAI,IAAA,2BAAmB,EAAC,cAAc,CAAC,IAAI,IAAA,mBAAW,EAAC,cAAc,CAAC,EAAE,CAAC;wBAC1F,MAAM;oBACR,CAAC;oBAED,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oBACnC,CAAC,EAAE,CAAC;gBACN,CAAC;gBAED,gEAAgE;gBAChE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAAC,gBAAgB,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;gBAEpG,qEAAqE;gBACrE,SAAS;YACX,CAAC;iBAAM,IAAI,IAAA,mBAAW,EAAC,OAAO,CAAC,EAAE,CAAC;gBAChC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC;YACrD,CAAC;iBAAM,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;gBAC1B,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1B,CAAC;iBAAM,IAAI,IAAA,iBAAS,EAAC,OAAO,CAAC,EAAE,CAAC;gBAC9B,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACN,oCAAoC;gBACpC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YACtC,CAAC;YAED,CAAC,EAAE,CAAC;QACN,CAAC;QAED,MAAM,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEhD,OAAO,CAAC;gBACN,KAAK,EAAE;oBACL,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE;oBAChC,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE;iBAC1C;gBACD,OAAO,EAAE,aAAa;aACvB,CAAC,CAAC;IACL,CAAC;IAEO,sBAAsB,CAC5B,KAAe,EACf,WAAoC,EAAE,MAAsB,EAC5D,OAAoC;QAEpC,IAAI,cAAc,GAAa,EAAE,CAAC;QAElC,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,uCAAuC;YACvC,cAAc,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YACnD,OAAO,cAAc,CAAC;QACxB,CAAC;QAED,IAAI,iBAAiB,GAAG,CAAC,CAAC;QAC1B,IAAI,kBAAkB,GAAG,CAAC,CAAC;QAC3B,IAAI,0BAA0B,GAAG,CAAC,CAAC;QACnC,IAAI,oCAAoC,GAAG,CAAC,CAAC;QAC7C,IAAI,uBAAuB,GAAG,CAAC,CAAC;QAChC,IAAI,wBAAwB,GAAG,CAAC,CAAC;QACjC,IAAI,4BAA4B,GAAG,CAAC,CAAC;QACrC,IAAI,wBAAwB,GAAG,CAAC,CAAC;QACjC,IAAI,8CAA8C,GAAG,CAAC,CAAC;QACvD,IAAI,yBAAyB,GAAG,CAAC,CAAC;QAClC,IAAI,eAAe,GAAG,CAAC,CAAC;QACxB,IAAI,8BAA8B,GAAG,CAAC,CAAC;QACvC,IAAI,wCAAwC,GAAG,CAAC,CAAC;QACjD,IAAI,2BAA2B,GAAG,CAAC,CAAC;QACpC,IAAI,4BAA4B,GAAG,CAAC,CAAC;QACrC,IAAI,gCAAgC,GAAG,CAAC,CAAC;QACzC,IAAI,4BAA4B,GAAG,CAAC,CAAC;QACrC,IAAI,kDAAkD,GAAG,CAAC,CAAC;QAC3D,IAAI,6BAA6B,GAAG,CAAC,CAAC;QACtC,IAAI,oBAAoB,GAAG,CAAC,CAAC;QAC7B,IAAI,mCAAmC,GAAG,CAAC,CAAC;QAC5C,IAAI,6CAA6C,GAAG,CAAC,CAAC;QACtD,IAAI,gCAAgC,GAAG,CAAC,CAAC;QACzC,IAAI,iCAAiC,GAAG,CAAC,CAAC;QAC1C,IAAI,qCAAqC,GAAG,CAAC,CAAC;QAC9C,IAAI,iCAAiC,GAAG,CAAC,CAAC;QAC1C,IAAI,uDAAuD,GAAG,CAAC,CAAC;QAChE,IAAI,kCAAkC,GAAG,CAAC,CAAC;QAE3C,wDAAwD;QACxD,MAAM,cAAc,GAAoB,EAAE,CAAC;QAC3C,KAAK,IAAI,OAAO,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;YACzC,IAAI,aAAa,GAAkB,EAAE,CAAC;YACtC,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;YACrE,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAE1E,uEAAuE;YACvE,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;gBAClE,aAAa,CAAC,YAAY,GAAG,MAAM,CAAC;gBACpC,0BAA0B,GAAG,IAAI,CAAC,GAAG,CAAC,0BAA0B,EAAE,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;gBACjG,uBAAuB,GAAG,IAAI,CAAC,GAAG,CAAC,uBAAuB,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvF,oCAAoC,GAAG,IAAI,CAAC,GAAG,CAAC,oCAAoC,EAAE,CAAC,MAAM,CAAC,8BAA8B,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxK,wBAAwB,GAAG,IAAI,CAAC,GAAG,CAAC,wBAAwB,EAAE,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;gBACjG,4BAA4B,GAAG,IAAI,CAAC,GAAG,CAAC,4BAA4B,EAAE,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1G,wBAAwB,GAAG,IAAI,CAAC,GAAG,CAAC,wBAAwB,EAAE,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;gBACjG,8CAA8C,GAAG,IAAI,CAAC,GAAG,CAAC,8CAA8C,EAAE,CAAC,MAAM,CAAC,8BAA8B,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3L,yBAAyB,GAAG,IAAI,CAAC,GAAG,CAAC,yBAAyB,EAAE,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAChG,CAAC;YAED,qEAAqE;YACrE,IAAI,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;gBACvE,aAAa,CAAC,UAAU,GAAG,MAAM,CAAC;gBAClC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClF,8BAA8B,GAAG,IAAI,CAAC,GAAG,CAAC,8BAA8B,EAAE,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;gBACzG,2BAA2B,GAAG,IAAI,CAAC,GAAG,CAAC,2BAA2B,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/F,wCAAwC,GAAG,IAAI,CAAC,GAAG,CAAC,wCAAwC,EAAE,CAAC,MAAM,CAAC,8BAA8B,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChL,4BAA4B,GAAG,IAAI,CAAC,GAAG,CAAC,4BAA4B,EAAE,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;gBACzG,gCAAgC,GAAG,IAAI,CAAC,GAAG,CAAC,gCAAgC,EAAE,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAClH,4BAA4B,GAAG,IAAI,CAAC,GAAG,CAAC,4BAA4B,EAAE,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;gBACzG,kDAAkD,GAAG,IAAI,CAAC,GAAG,CAAC,kDAAkD,EAAE,CAAC,MAAM,CAAC,8BAA8B,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnM,6BAA6B,GAAG,IAAI,CAAC,GAAG,CAAC,6BAA6B,EAAE,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YACxG,CAAC;YAED,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;gBACtB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;gBACrE,aAAa,CAAC,eAAe,GAAG,MAAM,CAAC;gBACvC,oBAAoB,GAAG,IAAI,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,CAAC,yCAAyC;gBACnG,mCAAmC,GAAG,IAAI,CAAC,GAAG,CAAC,mCAAmC,EAAE,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;gBACnH,gCAAgC,GAAG,IAAI,CAAC,GAAG,CAAC,gCAAgC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzG,6CAA6C,GAAG,IAAI,CAAC,GAAG,CAAC,6CAA6C,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnI,iCAAiC,GAAG,IAAI,CAAC,GAAG,CAAC,iCAAiC,EAAE,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;gBACnH,qCAAqC,GAAG,IAAI,CAAC,GAAG,CAAC,qCAAqC,EAAE,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC5H,iCAAiC,GAAG,IAAI,CAAC,GAAG,CAAC,iCAAiC,EAAE,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;gBACnH,uDAAuD,GAAG,IAAI,CAAC,GAAG,CAAC,uDAAuD,EAAE,CAAC,MAAM,CAAC,8BAA8B,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7M,kCAAkC,GAAG,IAAI,CAAC,GAAG,CAAC,kCAAkC,EAAE,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAClH,CAAC;YACD,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACrC,CAAC;QAED,wCAAwC;QACxC,MAAM,qBAAqB,GAAa,EAAE,CAAC;QAC3C,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;YAC3D,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC1C,MAAM,aAAa,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;YAC1C,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAC3C,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;YACxD,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAGvC,wEAAwE;YACxE,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAC/C,MAAM,uBAAuB,GAAG,IAAI,CAAC,MAAM,CAAC;gBAC5C,MAAM,MAAM,GAAG,aAAa,CAAC,YAAa,CAAC;gBAE3C,0DAA0D;gBAC1D,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC;oBAC9B,4CAA4C;oBAC5C,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;oBAC7G,IAAI,IAAI,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC;gBAC3E,CAAC;qBAAM,CAAC;oBACN,qDAAqD;oBACrD,IAAI,IAAI,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC;oBACzE,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;gBAC/G,CAAC;gBAED,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,oCAAoC,CAAC,CAAC;gBACzD,IAAI,IAAI,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC;gBAC3E,MAAM,uBAAuB,GAAG,IAAI,CAAC,MAAM,CAAC;gBAC5C,MAAM,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC;gBACvD,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,uBAAuB,CAAC,CAAC;gBAClE,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;gBAChE,MAAM,oBAAoB,GAAG,uBAAuB,CAAC;gBACrD,MAAM,aAAa,GAAG,mBAAmB,GAAG,oBAAoB,CAAC;gBACjE,IAAI,GAAG,cAAc,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,GAAG,eAAe,CAAC;gBACjF,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;oBACvB,IAAI,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC;oBACrE,IAAI,IAAI,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC;gBAC3E,CAAC;qBAAM,CAAC;oBACN,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,4BAA4B,GAAG,wBAAwB,CAAC,CAAC;gBAC9E,CAAC;gBACD,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,8CAA8C,CAAC,CAAC;gBACnE,IAAI,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,yBAAyB,EAAE,GAAG,CAAC,CAAC;YACvE,CAAC;iBAAM,CAAC;gBACN,MAAM,uBAAuB,GAAG,IAAI,CAAC,MAAM,CAAC;gBAC5C,MAAM,aAAa,GAAG,OAAO,CAAC,kBAAkB,GAAG,uBAAuB,CAAC;gBAC3E,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC;gBAC/C,IAAI,IAAI,GAAG,CAAC,MAAM,CAChB,4BAA4B;oBAC5B,wBAAwB;oBACxB,8CAA8C;oBAC9C,yBAAyB,CAC1B,CAAC,CAAC,2BAA2B;YAChC,CAAC;YAED,sEAAsE;YACtE,IAAI,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC3C,MAAM,MAAM,GAAG,aAAa,CAAC,UAAW,CAAC;gBACzC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;gBAE9G,gCAAgC;gBAChC,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC;oBAC9B,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC;oBACrH,IAAI,IAAI,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,8BAA8B,EAAE,GAAG,CAAC,CAAC;gBAC/E,CAAC;qBAAM,CAAC;oBACN,IAAI,IAAI,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,8BAA8B,EAAE,GAAG,CAAC,CAAC;oBAC7E,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC;gBACvH,CAAC;gBAED,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,wCAAwC,CAAC,CAAC;gBAC7D,IAAI,IAAI,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC;gBAC/E,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;oBACvB,IAAI,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,gCAAgC,EAAE,GAAG,CAAC,CAAC;oBACzE,IAAI,IAAI,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAC;gBAC/E,CAAC;qBAAM,CAAC;oBACN,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,4BAA4B,GAAG,gCAAgC,CAAC,CAAC;gBACtF,CAAC;gBACD,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,kDAAkD,CAAC,CAAC;gBACvE,IAAI,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;YAC3E,CAAC;iBAAM,CAAC;gBACN,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,eAAe;oBAChC,8BAA8B;oBAC9B,wCAAwC;oBACxC,2BAA2B;oBAC3B,4BAA4B;oBAC5B,gCAAgC;oBAChC,4BAA4B;oBAC5B,kDAAkD;oBAClD,6BAA6B,CAC9B,CAAC,CAAC,yBAAyB;YAC9B,CAAC;YAED,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;gBACtB,MAAM,MAAM,GAAG,aAAa,CAAC,eAAgB,CAAC;gBAC9C,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;gBAE/C,qCAAqC;gBACrC,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC;oBAC9B,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,gCAAgC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,gCAAgC,CAAC,CAAC;oBAC/H,IAAI,IAAI,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,mCAAmC,EAAE,GAAG,CAAC,CAAC;gBACpF,CAAC;qBAAM,CAAC;oBACN,IAAI,IAAI,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,mCAAmC,EAAE,GAAG,CAAC,CAAC;oBAClF,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,gCAAgC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,gCAAgC,CAAC,CAAC;gBACjI,CAAC;gBAED,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,6CAA6C,CAAC,CAAC;gBAClE,IAAI,IAAI,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,iCAAiC,EAAE,GAAG,CAAC,CAAC;gBACpF,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;oBACvB,IAAI,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,qCAAqC,EAAE,GAAG,CAAC,CAAC;oBAC9E,IAAI,IAAI,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,iCAAiC,EAAE,GAAG,CAAC,CAAC;gBACpF,CAAC;qBAAM,CAAC;oBACN,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,iCAAiC,GAAG,qCAAqC,CAAC,CAAC;gBAChG,CAAC;gBACD,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,uDAAuD,CAAC,CAAC;gBAC5E,IAAI,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,kCAAkC,EAAE,GAAG,CAAC,CAAC;YAChF,CAAC;iBAAM,CAAC;gBACN,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,8CAA8C;oBACnE,oBAAoB;oBACpB,mCAAmC;oBACnC,6CAA6C;oBAC7C,gCAAgC;oBAChC,iCAAiC;oBACjC,iCAAiC;oBACjC,qCAAqC;oBACrC,uDAAuD;oBACvD,kCAAkC,CACnC,CAAC,CAAC,8BAA8B;YACnC,CAAC;YAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;gBACtB,IAAI,IAAI,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACvC,CAAC;YAED,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;QAED,4DAA4D;QAC5D,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,IAAA,iBAAS,EAAC,OAAO,CAAC,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;gBACzC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YACtC,CAAC;iBAAM,CAAC;gBACN,cAAc,CAAC,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;gBACnE,YAAY,EAAE,CAAC;YACjB,CAAC;QACH,CAAC;QAED,OAAO,cAAc,CAAC;IAExB,CAAC;IAGO,YAAY,CAAC,MAAc,EAAE,MAAsB,EAAE,OAAoC;QAC/F,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC/D,IAAI,MAAM,GAAW,EAAE,CAAC;QACxB,IAAI,iBAAiB,GAAuB,SAAS,CAAC;QAEtD,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;YAClC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;YAC1B,iBAAiB,GAAG,SAAS,CAAC,MAAM,CAAC,SAAS,IAAI,SAAS,CAAC;QAC9D,CAAC;aAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YACzB,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,EAAE,CAAC;QACd,CAAC;QAED,4DAA4D;QAC5D,0EAA0E;QAC1E,kEAAkE;QAClE,4DAA4D;QAC5D,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,IAAI,SAAS,CAAC;QAC9D,IAAI,eAAe,GAAuB,SAAS,CAAC;QAEpD,IAAI,iBAAiB,KAAK,SAAS,EAAE,CAAC;YACpC,mEAAmE;YACnE,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;gBAClC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,iBAAiB,CAAC,CAAC;YACjE,CAAC;iBAAM,CAAC;gBACN,eAAe,GAAG,iBAAiB,CAAC;YACtC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,0DAA0D;YAC1D,eAAe,GAAG,eAAe,CAAC;QACpC,CAAC;QAED,+DAA+D;QAC/D,8CAA8C;QAE9C,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,KAAK,CAAC;QAClD,MAAM,kBAAkB,GAAG,YAAY,IAAI,OAAO,CAAC,YAAY,KAAK,eAAe,CAAC;QAEpF,OAAO;YACL,eAAe,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;YAC/D,UAAU,EAAE,MAAM,CAAC,QAAQ,GAAG,CAAC;YAC/B,kBAAkB;YAClB,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC;YAC7D,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,CAAC;YAC9E,WAAW,EAAE,eAAe,IAAI,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;YACtF,8BAA8B,EAAE,MAAM,CAAC,YAAY,IAAI,KAAK;YAC5D,cAAc,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;SAChE,CAAC;IACJ,CAAC;IAEO,mBAAmB,CAAC,MAAc,EAAE,MAAc;QACxD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QAErE,iDAAiD;QACjD,IAAI,aAAa,GAAG,EAAE,CAAC;QACvB,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,uBAAuB,CAAC;YACtC,aAAa,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACxE,CAAC;aAAM,CAAC;YACN,aAAa,GAAG,WAAW,CAAC;QAC9B,CAAC;QAED,OAAO,aAAa,CAAC;IACvB,CAAC;IAEO,mBAAmB,CAAC,MAAc,EAAE,MAAc,EAAE,eAAwB;QAClF,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAElD,gDAAgD;QAChD,IAAI,aAAa,GAAG,EAAE,CAAC;QACvB,IAAI,eAAe,KAAK,SAAS,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;YACzD,aAAa,GAAG,WAAW,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY;QACjF,CAAC;aAAM,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;YAC3B,aAAa,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY;QACnE,CAAC;QAED,OAAO,aAAa,CAAC;IACvB,CAAC;IAGD;;OAEG;IACH,WAAW,CACT,QAAsB,EACtB,MAAa,EACb,MAAsB,EACtB,WAAiC,EACjC,cAA0C,EAAE;QAE5C,iFAAiF;QACjF,8DAA8D;QAC9D,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IACzE,CAAC;IAED;;OAEG;IACH,YAAY,CACV,QAAsB,EACtB,SAAmB,EACnB,EAAU,EACV,MAAsB,EACtB,WAAiC,EACjC,cAA0C,EAAE;QAE5C,yBAAyB;QACzB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YAChB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,mDAAmD;QACnD,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IACzE,CAAC;IAED;;OAEG;IACK,uBAAuB,CAAC,IAAY;QAC1C,MAAM,MAAM,GAAG,IAAA,4BAAsB,EAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;QACxB,CAAC;QAED,IAAI,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC;QAEzB,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,aAAa,CAAC;QACvC,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,IAAI,IAAI,CAAC;QACjB,CAAC;aAAM,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACvC,MAAM,IAAI,IAAI,CAAC;QACjB,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,MAAM,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC;QACrC,CAAC;QAED,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC;QACrC,CAAC;QAED,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC;QACnC,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,IAAY;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAE5B,6BAA6B;QAC7B,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACrD,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QACjE,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAElE,qCAAqC;QACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE7B,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,GAAG,OAAO,CAAC;QAC5B,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,aAAqB,EAAE,MAAsB;QACjE,OAAO,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC/C,CAAC;CACF;AAzfD,gDAyfC;AAEY,QAAA,kBAAkB,GAAG,IAAI,kBAAkB,EAAE,CAAC"}
1
+ {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/features/formatter.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"hover.d.ts","sourceRoot":"","sources":["../../src/features/hover.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,KAAK,EAAc,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAe,MAAM,UAAU,CAAC;AAOvD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,qBAAa,aAAa;IACxB;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc,EAAE,QAAQ,CAAC,EAAE,eAAe,GAAG,KAAK,GAAG,IAAI;IA8FxI;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAuB1B;;OAEG;IACH,OAAO,CAAC,MAAM;IAId;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAiBxB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA+C3B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAuD7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA8BzB;;OAEG;IACH,OAAO,CAAC,eAAe;IAoDvB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA0D/B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAYzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAwB1B;AAED,eAAO,MAAM,aAAa,eAAsB,CAAC"}
1
+ {"version":3,"file":"hover.d.ts","sourceRoot":"","sources":["../../src/features/hover.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,KAAK,EAAc,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAe,MAAM,UAAU,CAAC;AAOvD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGrD,qBAAa,aAAa;IACxB;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,cAAc,EAAE,QAAQ,CAAC,EAAE,eAAe,GAAG,KAAK,GAAG,IAAI;IA+FxI;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAuB1B;;OAEG;IACH,OAAO,CAAC,MAAM;IAId;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAiBxB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAmD3B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA2D7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAkCzB;;OAEG;IACH,OAAO,CAAC,eAAe;IAwDvB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAuD/B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAYzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAwB1B;AAED,eAAO,MAAM,aAAa,eAAsB,CAAC"}
@@ -51,6 +51,7 @@ const balanceCalculator_1 = require("../utils/balanceCalculator");
51
51
  const amountFormatter_1 = require("../utils/amountFormatter");
52
52
  const uri_1 = require("../utils/uri");
53
53
  const path = __importStar(require("path"));
54
+ const vscode_uri_1 = require("vscode-uri");
54
55
  class HoverProvider {
55
56
  /**
56
57
  * Provide hover information at the given document position
@@ -127,8 +128,9 @@ class HoverProvider {
127
128
  }
128
129
  // Check if we're on a transaction header (lowest priority)
129
130
  const trimmedLine = fullLine.trim();
131
+ const documentUri = vscode_uri_1.URI.parse(document.uri);
130
132
  if ((0, index_1.isTransactionHeader)(trimmedLine)) {
131
- return this.provideTransactionHover(fullLine, line, parsed, document.uri, settings);
133
+ return this.provideTransactionHover(fullLine, line, parsed, documentUri, settings);
132
134
  }
133
135
  return null;
134
136
  }
@@ -204,7 +206,11 @@ class HoverProvider {
204
206
  parts.push(`**Status:** Declared`);
205
207
  if (account.sourceUri) {
206
208
  const filePath = (0, uri_1.toFilePath)(account.sourceUri);
207
- const fileName = path.basename(filePath);
209
+ let fileName = path.basename(filePath);
210
+ // Handle edge case where fsPath is invalid (e.g., file://test.journal with 2 slashes)
211
+ if (!fileName || fileName === '/') {
212
+ fileName = path.basename(account.sourceUri.toString().replace(/^file:\/\/+/, ''));
213
+ }
208
214
  const lineNum = (account.line ?? 0) + 1;
209
215
  parts.push(`**Location:** ${fileName}:${lineNum}`);
210
216
  }
@@ -234,7 +240,11 @@ class HoverProvider {
234
240
  parts.push(`**Status:** Declared`);
235
241
  if (commodity.sourceUri) {
236
242
  const filePath = (0, uri_1.toFilePath)(commodity.sourceUri);
237
- const fileName = path.basename(filePath);
243
+ let fileName = path.basename(filePath);
244
+ // Handle edge case where fsPath is invalid (e.g., file://test.journal with 2 slashes)
245
+ if (!fileName || fileName === '/') {
246
+ fileName = path.basename(commodity.sourceUri.toString().replace(/^file:\/\/+/, ''));
247
+ }
238
248
  const lineNum = (commodity.line ?? 0) + 1;
239
249
  parts.push(`**Location:** ${fileName}:${lineNum}`);
240
250
  }
@@ -283,7 +293,11 @@ class HoverProvider {
283
293
  parts.push(`**Status:** Declared`);
284
294
  if (payee.sourceUri) {
285
295
  const filePath = (0, uri_1.toFilePath)(payee.sourceUri);
286
- const fileName = path.basename(filePath);
296
+ let fileName = path.basename(filePath);
297
+ // Handle edge case where fsPath is invalid (e.g., file://test.journal with 2 slashes)
298
+ if (!fileName || fileName === '/') {
299
+ fileName = path.basename(payee.sourceUri.toString().replace(/^file:\/\/+/, ''));
300
+ }
287
301
  const lineNum = (payee.line ?? 0) + 1;
288
302
  parts.push(`**Location:** ${fileName}:${lineNum}`);
289
303
  }
@@ -322,7 +336,11 @@ class HoverProvider {
322
336
  parts.push(`**Status:** Declared`);
323
337
  if (tag.sourceUri) {
324
338
  const filePath = (0, uri_1.toFilePath)(tag.sourceUri);
325
- const fileName = path.basename(filePath);
339
+ let fileName = path.basename(filePath);
340
+ // Handle edge case where fsPath is invalid (e.g., file://test.journal with 2 slashes)
341
+ if (!fileName || fileName === '/') {
342
+ fileName = path.basename(tag.sourceUri.toString().replace(/^file:\/\/+/, ''));
343
+ }
326
344
  const lineNum = (tag.line ?? 0) + 1;
327
345
  parts.push(`**Location:** ${fileName}:${lineNum}`);
328
346
  }
@@ -357,16 +375,13 @@ class HoverProvider {
357
375
  */
358
376
  provideTransactionHover(line, lineNumber, parsed, documentUri, settings) {
359
377
  // Find the transaction at this line
360
- // Must match both line number AND source URI (normalized) to avoid collisions in workspace mode
361
- const normalizedDocUri = (0, uri_1.toFileUri)((0, uri_1.toFilePath)(documentUri));
362
378
  const transaction = parsed.transactions.find(t => {
363
379
  if (t.line !== lineNumber)
364
380
  return false;
365
381
  // If transaction has sourceUri, check it. If not, assume it matches (std parser behavior?)
366
382
  // Actually, parseTransactionHeader adds sourceUri.
367
383
  if (t.sourceUri) {
368
- const normalizedSource = (0, uri_1.toFileUri)((0, uri_1.toFilePath)(t.sourceUri));
369
- return normalizedSource === normalizedDocUri;
384
+ return t.sourceUri.toString() === documentUri.toString();
370
385
  }
371
386
  return true;
372
387
  });