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.
- package/README.md +1 -1
- package/out/features/codeActions.d.ts +11 -32
- package/out/features/codeActions.d.ts.map +1 -1
- package/out/features/codeActions.js +98 -226
- package/out/features/codeActions.js.map +1 -1
- package/out/features/codeLens.d.ts.map +1 -1
- package/out/features/findReferences.d.ts +32 -11
- package/out/features/findReferences.d.ts.map +1 -1
- package/out/features/findReferences.js +495 -30
- package/out/features/findReferences.js.map +1 -1
- package/out/features/formatter.js +1 -0
- package/out/features/formatter.js.map +1 -1
- package/out/features/hover.d.ts.map +1 -1
- package/out/features/hover.js +2 -2
- package/out/features/hover.js.map +1 -1
- package/out/features/inlayHints.d.ts +3 -0
- package/out/features/inlayHints.d.ts.map +1 -1
- package/out/features/inlayHints.js +112 -301
- package/out/features/inlayHints.js.map +1 -1
- package/out/features/selectionRange.d.ts +1 -2
- package/out/features/selectionRange.d.ts.map +1 -1
- package/out/features/selectionRange.js +7 -7
- package/out/features/selectionRange.js.map +1 -1
- package/out/features/semanticTokens.d.ts +1 -2
- package/out/features/semanticTokens.d.ts.map +1 -1
- package/out/features/semanticTokens.js +5 -5
- package/out/features/semanticTokens.js.map +1 -1
- package/out/features/symbols.d.ts +1 -16
- package/out/features/symbols.d.ts.map +1 -1
- package/out/features/symbols.js +7 -53
- package/out/features/symbols.js.map +1 -1
- package/out/features/validator.d.ts.map +1 -1
- package/out/features/validator.js.map +1 -1
- package/out/parser/ast.d.ts.map +1 -1
- package/out/parser/ast.js.map +1 -1
- package/out/parser/index.d.ts.map +1 -1
- package/out/server/workspace.d.ts +5 -0
- package/out/server/workspace.d.ts.map +1 -1
- package/out/server/workspace.js +28 -0
- package/out/server/workspace.js.map +1 -1
- package/out/server.js +32 -56
- package/out/server.js.map +1 -1
- package/out/utils/balanceCalculator.d.ts +1 -8
- package/out/utils/balanceCalculator.d.ts.map +1 -1
- package/out/utils/balanceCalculator.js +0 -28
- package/out/utils/balanceCalculator.js.map +1 -1
- package/out/utils/index.d.ts +0 -4
- package/out/utils/index.d.ts.map +1 -1
- package/out/utils/index.js +0 -7
- package/out/utils/index.js.map +1 -1
- package/out/utils/runningBalanceCalculator.d.ts +1 -12
- package/out/utils/runningBalanceCalculator.d.ts.map +1 -1
- package/out/utils/runningBalanceCalculator.js +0 -43
- package/out/utils/runningBalanceCalculator.js.map +1 -1
- package/package.json +1 -1
- package/out/extension.d.ts +0 -1
- package/out/extension.d.ts.map +0 -1
- package/out/extension.js +0 -2
- 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
|
|
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
|
|
52
|
+
findReferences(document, position, parsed) {
|
|
17
53
|
// Get the item at cursor
|
|
18
|
-
const item =
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
|
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
|
-
|
|
52
|
-
|
|
53
|
-
|
|
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
|
-
*
|
|
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
|
-
|
|
59
|
-
const
|
|
60
|
-
|
|
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
|
|
280
|
+
* Find all account references in parsed document
|
|
64
281
|
*/
|
|
65
|
-
|
|
66
|
-
const ranges =
|
|
67
|
-
|
|
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
|
-
*
|
|
536
|
+
* Escape special regex characters
|
|
71
537
|
*/
|
|
72
|
-
|
|
73
|
-
|
|
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);
|