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