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.
Files changed (99) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +632 -0
  3. package/out/extension.d.ts +1 -0
  4. package/out/extension.d.ts.map +1 -0
  5. package/out/extension.js +2 -0
  6. package/out/extension.js.map +1 -0
  7. package/out/features/codeActions.d.ts +73 -0
  8. package/out/features/codeActions.d.ts.map +1 -0
  9. package/out/features/codeActions.js +417 -0
  10. package/out/features/codeActions.js.map +1 -0
  11. package/out/features/completion.d.ts +94 -0
  12. package/out/features/completion.d.ts.map +1 -0
  13. package/out/features/completion.js +323 -0
  14. package/out/features/completion.js.map +1 -0
  15. package/out/features/definition.d.ts +12 -0
  16. package/out/features/definition.d.ts.map +1 -0
  17. package/out/features/definition.js +61 -0
  18. package/out/features/definition.js.map +1 -0
  19. package/out/features/documentLinks.d.ts +17 -0
  20. package/out/features/documentLinks.d.ts.map +1 -0
  21. package/out/features/documentLinks.js +68 -0
  22. package/out/features/documentLinks.js.map +1 -0
  23. package/out/features/findReferences.d.ts +33 -0
  24. package/out/features/findReferences.d.ts.map +1 -0
  25. package/out/features/findReferences.js +79 -0
  26. package/out/features/findReferences.js.map +1 -0
  27. package/out/features/foldingRanges.d.ts +27 -0
  28. package/out/features/foldingRanges.d.ts.map +1 -0
  29. package/out/features/foldingRanges.js +111 -0
  30. package/out/features/foldingRanges.js.map +1 -0
  31. package/out/features/formatter.d.ts +70 -0
  32. package/out/features/formatter.d.ts.map +1 -0
  33. package/out/features/formatter.js +373 -0
  34. package/out/features/formatter.js.map +1 -0
  35. package/out/features/hover.d.ts +66 -0
  36. package/out/features/hover.d.ts.map +1 -0
  37. package/out/features/hover.js +387 -0
  38. package/out/features/hover.js.map +1 -0
  39. package/out/features/inlayHints.d.ts +43 -0
  40. package/out/features/inlayHints.d.ts.map +1 -0
  41. package/out/features/inlayHints.js +221 -0
  42. package/out/features/inlayHints.js.map +1 -0
  43. package/out/features/selectionRange.d.ts +47 -0
  44. package/out/features/selectionRange.d.ts.map +1 -0
  45. package/out/features/selectionRange.js +273 -0
  46. package/out/features/selectionRange.js.map +1 -0
  47. package/out/features/semanticTokens.d.ts +83 -0
  48. package/out/features/semanticTokens.d.ts.map +1 -0
  49. package/out/features/semanticTokens.js +370 -0
  50. package/out/features/semanticTokens.js.map +1 -0
  51. package/out/features/symbols.d.ts +47 -0
  52. package/out/features/symbols.d.ts.map +1 -0
  53. package/out/features/symbols.js +249 -0
  54. package/out/features/symbols.js.map +1 -0
  55. package/out/features/transactionAnalyzer.d.ts +63 -0
  56. package/out/features/transactionAnalyzer.d.ts.map +1 -0
  57. package/out/features/transactionAnalyzer.js +127 -0
  58. package/out/features/transactionAnalyzer.js.map +1 -0
  59. package/out/features/validator.d.ts +142 -0
  60. package/out/features/validator.d.ts.map +1 -0
  61. package/out/features/validator.js +633 -0
  62. package/out/features/validator.js.map +1 -0
  63. package/out/parser/ast.d.ts +37 -0
  64. package/out/parser/ast.d.ts.map +1 -0
  65. package/out/parser/ast.js +606 -0
  66. package/out/parser/ast.js.map +1 -0
  67. package/out/parser/includes.d.ts +25 -0
  68. package/out/parser/includes.d.ts.map +1 -0
  69. package/out/parser/includes.js +106 -0
  70. package/out/parser/includes.js.map +1 -0
  71. package/out/parser/index.d.ts +54 -0
  72. package/out/parser/index.d.ts.map +1 -0
  73. package/out/parser/index.js +146 -0
  74. package/out/parser/index.js.map +1 -0
  75. package/out/server/deps.d.ts +19 -0
  76. package/out/server/deps.d.ts.map +1 -0
  77. package/out/server/deps.js +77 -0
  78. package/out/server/deps.js.map +1 -0
  79. package/out/server/settings.d.ts +60 -0
  80. package/out/server/settings.d.ts.map +1 -0
  81. package/out/server/settings.js +110 -0
  82. package/out/server/settings.js.map +1 -0
  83. package/out/server.d.ts +3 -0
  84. package/out/server.d.ts.map +1 -0
  85. package/out/server.js +420 -0
  86. package/out/server.js.map +1 -0
  87. package/out/types.d.ts +84 -0
  88. package/out/types.d.ts.map +1 -0
  89. package/out/types.js +6 -0
  90. package/out/types.js.map +1 -0
  91. package/out/utils/index.d.ts +38 -0
  92. package/out/utils/index.d.ts.map +1 -0
  93. package/out/utils/index.js +89 -0
  94. package/out/utils/index.js.map +1 -0
  95. package/out/utils/uri.d.ts +32 -0
  96. package/out/utils/uri.d.ts.map +1 -0
  97. package/out/utils/uri.js +215 -0
  98. package/out/utils/uri.js.map +1 -0
  99. package/package.json +58 -0
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Code actions provider for quick fixes and refactorings
3
+ */
4
+ import { CodeAction, Diagnostic, WorkspaceEdit, Range, Position } from 'vscode-languageserver';
5
+ import { TextDocument } from 'vscode-languageserver-textdocument';
6
+ import { ParsedDocument } from '../types';
7
+ export declare class CodeActionProvider {
8
+ /**
9
+ * Provide code actions for the given range and diagnostics
10
+ */
11
+ provideCodeActions(document: TextDocument, range: Range, diagnostics: Diagnostic[], parsedDoc: ParsedDocument): CodeAction[];
12
+ /**
13
+ * Create a code action to add an account declaration
14
+ */
15
+ private createAddAccountDeclarationAction;
16
+ /**
17
+ * Create a code action to add a payee declaration
18
+ */
19
+ private createAddPayeeDeclarationAction;
20
+ /**
21
+ * Create a code action to add a commodity declaration
22
+ */
23
+ private createAddCommodityDeclarationAction;
24
+ /**
25
+ * Create a code action to add a tag declaration
26
+ */
27
+ private createAddTagDeclarationAction;
28
+ /**
29
+ * Find the best position to insert a directive
30
+ * Tries to group directives of the same type together
31
+ */
32
+ private findInsertPositionForDirective;
33
+ /**
34
+ * Get the item (account, payee, commodity, tag) at the cursor position
35
+ */
36
+ getItemAtCursor(document: TextDocument, position: Position, parsedDoc: ParsedDocument): {
37
+ type: 'account' | 'payee' | 'commodity' | 'tag';
38
+ name: string;
39
+ } | null;
40
+ /**
41
+ * Create a rename refactoring action
42
+ */
43
+ private createRenameAction;
44
+ /**
45
+ * Find all occurrences of an account name in the document
46
+ */
47
+ findAccountReferences(document: TextDocument, accountName: string, parsedDoc: ParsedDocument): Range[];
48
+ /**
49
+ * Find all occurrences of a payee name in the document
50
+ */
51
+ findPayeeReferences(document: TextDocument, payeeName: string, parsedDoc: ParsedDocument): Range[];
52
+ /**
53
+ * Find all occurrences of a commodity in the document
54
+ */
55
+ findCommodityReferences(document: TextDocument, commodityName: string, parsedDoc: ParsedDocument): Range[];
56
+ /**
57
+ * Find all occurrences of a tag in the document
58
+ */
59
+ findTagReferences(document: TextDocument, tagName: string, parsedDoc: ParsedDocument): Range[];
60
+ /**
61
+ * Escape special regex characters
62
+ */
63
+ private escapeRegExp;
64
+ /**
65
+ * Create workspace edit to rename an item across all its references
66
+ */
67
+ createRenameEdit(document: TextDocument, item: {
68
+ type: 'account' | 'payee' | 'commodity' | 'tag';
69
+ name: string;
70
+ }, newName: string, parsedDoc: ParsedDocument): WorkspaceEdit;
71
+ }
72
+ export declare const codeActionProvider: CodeActionProvider;
73
+ //# sourceMappingURL=codeActions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codeActions.d.ts","sourceRoot":"","sources":["../../src/features/codeActions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,UAAU,EAEV,UAAU,EAEV,aAAa,EACb,KAAK,EACL,QAAQ,EACT,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C,qBAAa,kBAAkB;IAC7B;;OAEG;IACH,kBAAkB,CAChB,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,UAAU,EAAE,EACzB,SAAS,EAAE,cAAc,GACxB,UAAU,EAAE;IA4Cf;;OAEG;IACH,OAAO,CAAC,iCAAiC;IAyBzC;;OAEG;IACH,OAAO,CAAC,+BAA+B;IAyBvC;;OAEG;IACH,OAAO,CAAC,mCAAmC;IAyB3C;;OAEG;IACH,OAAO,CAAC,6BAA6B;IAyBrC;;;OAGG;IACH,OAAO,CAAC,8BAA8B;IA4CtC;;OAEG;IACI,eAAe,CACpB,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,cAAc,GACxB;QAAE,IAAI,EAAE,SAAS,GAAG,OAAO,GAAG,WAAW,GAAG,KAAK,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IA4F3E;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAwB1B;;OAEG;IACI,qBAAqB,CAC1B,QAAQ,EAAE,YAAY,EACtB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,cAAc,GACxB,KAAK,EAAE;IA6BV;;OAEG;IACI,mBAAmB,CACxB,QAAQ,EAAE,YAAY,EACtB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,cAAc,GACxB,KAAK,EAAE;IA6BV;;OAEG;IACI,uBAAuB,CAC5B,QAAQ,EAAE,YAAY,EACtB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,cAAc,GACxB,KAAK,EAAE;IA8BV;;OAEG;IACI,iBAAiB,CACtB,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,cAAc,GACxB,KAAK,EAAE;IA2BV;;OAEG;IACH,OAAO,CAAC,YAAY;IAIpB;;OAEG;IACI,gBAAgB,CACrB,QAAQ,EAAE,YAAY,EACtB,IAAI,EAAE;QAAE,IAAI,EAAE,SAAS,GAAG,OAAO,GAAG,WAAW,GAAG,KAAK,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EACvE,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,cAAc,GACxB,aAAa;CA0BjB;AAED,eAAO,MAAM,kBAAkB,oBAA2B,CAAC"}
@@ -0,0 +1,417 @@
1
+ "use strict";
2
+ /**
3
+ * Code actions provider for quick fixes and refactorings
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.codeActionProvider = exports.CodeActionProvider = void 0;
7
+ const vscode_languageserver_1 = require("vscode-languageserver");
8
+ class CodeActionProvider {
9
+ /**
10
+ * Provide code actions for the given range and diagnostics
11
+ */
12
+ provideCodeActions(document, range, diagnostics, parsedDoc) {
13
+ const actions = [];
14
+ // Quick fixes for diagnostics
15
+ for (const diagnostic of diagnostics) {
16
+ // Quick fix for undeclared accounts
17
+ if (diagnostic.code === 'undeclared-account') {
18
+ const data = diagnostic.data;
19
+ if (data?.accountName) {
20
+ actions.push(this.createAddAccountDeclarationAction(document, data.accountName, diagnostic, parsedDoc));
21
+ }
22
+ }
23
+ // Quick fix for undeclared payees
24
+ if (diagnostic.code === 'undeclared-payee') {
25
+ const data = diagnostic.data;
26
+ if (data?.payeeName) {
27
+ actions.push(this.createAddPayeeDeclarationAction(document, data.payeeName, diagnostic, parsedDoc));
28
+ }
29
+ }
30
+ // Quick fix for undeclared commodities
31
+ if (diagnostic.code === 'undeclared-commodity') {
32
+ const data = diagnostic.data;
33
+ if (data?.commodityName) {
34
+ actions.push(this.createAddCommodityDeclarationAction(document, data.commodityName, diagnostic, parsedDoc));
35
+ }
36
+ }
37
+ // Quick fix for undeclared tags
38
+ if (diagnostic.code === 'undeclared-tag') {
39
+ const data = diagnostic.data;
40
+ if (data?.tagName) {
41
+ actions.push(this.createAddTagDeclarationAction(document, data.tagName, diagnostic, parsedDoc));
42
+ }
43
+ }
44
+ }
45
+ // Note: Rename refactoring is now handled via the LSP rename provider
46
+ // (vim.lsp.buf.rename() or F2), not through code actions
47
+ return actions;
48
+ }
49
+ /**
50
+ * Create a code action to add an account declaration
51
+ */
52
+ createAddAccountDeclarationAction(document, accountName, diagnostic, parsedDoc) {
53
+ const insertPosition = this.findInsertPositionForDirective(document, parsedDoc, 'account');
54
+ const edit = {
55
+ changes: {
56
+ [document.uri]: [
57
+ vscode_languageserver_1.TextEdit.insert(insertPosition, `account ${accountName}\n`)
58
+ ]
59
+ }
60
+ };
61
+ const action = {
62
+ title: `Add declaration for account '${accountName}'`,
63
+ kind: vscode_languageserver_1.CodeActionKind.QuickFix,
64
+ diagnostics: [diagnostic],
65
+ edit
66
+ };
67
+ return action;
68
+ }
69
+ /**
70
+ * Create a code action to add a payee declaration
71
+ */
72
+ createAddPayeeDeclarationAction(document, payeeName, diagnostic, parsedDoc) {
73
+ const insertPosition = this.findInsertPositionForDirective(document, parsedDoc, 'payee');
74
+ const edit = {
75
+ changes: {
76
+ [document.uri]: [
77
+ vscode_languageserver_1.TextEdit.insert(insertPosition, `payee ${payeeName}\n`)
78
+ ]
79
+ }
80
+ };
81
+ const action = {
82
+ title: `Add declaration for payee '${payeeName}'`,
83
+ kind: vscode_languageserver_1.CodeActionKind.QuickFix,
84
+ diagnostics: [diagnostic],
85
+ edit
86
+ };
87
+ return action;
88
+ }
89
+ /**
90
+ * Create a code action to add a commodity declaration
91
+ */
92
+ createAddCommodityDeclarationAction(document, commodityName, diagnostic, parsedDoc) {
93
+ const insertPosition = this.findInsertPositionForDirective(document, parsedDoc, 'commodity');
94
+ const edit = {
95
+ changes: {
96
+ [document.uri]: [
97
+ vscode_languageserver_1.TextEdit.insert(insertPosition, `commodity ${commodityName}\n`)
98
+ ]
99
+ }
100
+ };
101
+ const action = {
102
+ title: `Add declaration for commodity '${commodityName}'`,
103
+ kind: vscode_languageserver_1.CodeActionKind.QuickFix,
104
+ diagnostics: [diagnostic],
105
+ edit
106
+ };
107
+ return action;
108
+ }
109
+ /**
110
+ * Create a code action to add a tag declaration
111
+ */
112
+ createAddTagDeclarationAction(document, tagName, diagnostic, parsedDoc) {
113
+ const insertPosition = this.findInsertPositionForDirective(document, parsedDoc, 'tag');
114
+ const edit = {
115
+ changes: {
116
+ [document.uri]: [
117
+ vscode_languageserver_1.TextEdit.insert(insertPosition, `tag ${tagName}\n`)
118
+ ]
119
+ }
120
+ };
121
+ const action = {
122
+ title: `Add declaration for tag '${tagName}'`,
123
+ kind: vscode_languageserver_1.CodeActionKind.QuickFix,
124
+ diagnostics: [diagnostic],
125
+ edit
126
+ };
127
+ return action;
128
+ }
129
+ /**
130
+ * Find the best position to insert a directive
131
+ * Tries to group directives of the same type together
132
+ */
133
+ findInsertPositionForDirective(document, parsedDoc, directiveType) {
134
+ const lines = document.getText().split('\n');
135
+ // Find the last directive of the same type
136
+ const directivesOfType = parsedDoc.directives
137
+ .filter(d => d.type === directiveType && d.sourceUri === document.uri);
138
+ if (directivesOfType.length > 0) {
139
+ // Insert after the last directive of the same type
140
+ for (let i = lines.length - 1; i >= 0; i--) {
141
+ const line = lines[i];
142
+ if (line.trim().startsWith(`${directiveType} `)) {
143
+ return vscode_languageserver_1.Position.create(i + 1, 0);
144
+ }
145
+ }
146
+ }
147
+ // Find the last directive of any type
148
+ const allDirectives = parsedDoc.directives
149
+ .filter(d => d.sourceUri === document.uri);
150
+ if (allDirectives.length > 0) {
151
+ // Insert after the last directive
152
+ for (let i = lines.length - 1; i >= 0; i--) {
153
+ const line = lines[i].trim();
154
+ if (line.startsWith('account ') ||
155
+ line.startsWith('commodity ') ||
156
+ line.startsWith('payee ') ||
157
+ line.startsWith('tag ') ||
158
+ line.startsWith('include ') ||
159
+ line.startsWith('alias ')) {
160
+ return vscode_languageserver_1.Position.create(i + 1, 0);
161
+ }
162
+ }
163
+ }
164
+ // If no directives, insert at the top of the file
165
+ return vscode_languageserver_1.Position.create(0, 0);
166
+ }
167
+ /**
168
+ * Get the item (account, payee, commodity, tag) at the cursor position
169
+ */
170
+ getItemAtCursor(document, position, parsedDoc) {
171
+ const lines = document.getText().split('\n');
172
+ if (position.line >= lines.length) {
173
+ return null;
174
+ }
175
+ const line = lines[position.line];
176
+ if (!line) {
177
+ return null;
178
+ }
179
+ const char = position.character;
180
+ // Check if on an account directive
181
+ const accountDirectiveMatch = line.match(/^account\s+(.+?)(?:\s|$)/);
182
+ if (accountDirectiveMatch && char >= line.indexOf(accountDirectiveMatch[1])) {
183
+ return { type: 'account', name: accountDirectiveMatch[1].trim() };
184
+ }
185
+ // Check if on a payee directive
186
+ const payeeDirectiveMatch = line.match(/^payee\s+(.+?)(?:\s*;|$)/);
187
+ if (payeeDirectiveMatch && char >= line.indexOf(payeeDirectiveMatch[1])) {
188
+ return { type: 'payee', name: payeeDirectiveMatch[1].trim() };
189
+ }
190
+ // Check if on a commodity directive
191
+ const commodityDirectiveMatch = line.match(/^commodity\s+(.+?)(?:\s|$)/);
192
+ if (commodityDirectiveMatch && char >= line.indexOf(commodityDirectiveMatch[1])) {
193
+ // Extract just the commodity symbol, not the format
194
+ const commodityPart = commodityDirectiveMatch[1].trim().split(/\s+/)[0];
195
+ return { type: 'commodity', name: commodityPart };
196
+ }
197
+ // Check if on a tag directive
198
+ const tagDirectiveMatch = line.match(/^tag\s+(\w+)/);
199
+ if (tagDirectiveMatch && char >= line.indexOf(tagDirectiveMatch[1])) {
200
+ return { type: 'tag', name: tagDirectiveMatch[1] };
201
+ }
202
+ // Check if on an account in a posting
203
+ if (line.match(/^\s+\S/)) { // Indented line (posting)
204
+ const accountMatch = line.match(/^\s+([^;\s]+(?:\s+[^;\s]+)*?)(?:\s{2,}|\s+[-+$£€¥₹]|\s*$)/);
205
+ if (accountMatch) {
206
+ const accountName = accountMatch[1].trim();
207
+ const accountStart = line.indexOf(accountName);
208
+ const accountEnd = accountStart + accountName.length;
209
+ if (char >= accountStart && char <= accountEnd) {
210
+ return { type: 'account', name: accountName };
211
+ }
212
+ }
213
+ // Check if on a commodity in a posting amount
214
+ // Match common commodity symbols and currency codes
215
+ const commodityRegex = /[$£€¥₹]|[A-Z]{3,4}\b/g;
216
+ let commodityMatch;
217
+ while ((commodityMatch = commodityRegex.exec(line)) !== null) {
218
+ const commodityStart = commodityMatch.index;
219
+ const commodityEnd = commodityStart + commodityMatch[0].length;
220
+ if (char >= commodityStart && char <= commodityEnd) {
221
+ return { type: 'commodity', name: commodityMatch[0] };
222
+ }
223
+ }
224
+ }
225
+ // Check if on a payee in a transaction header
226
+ const txHeaderMatch = line.match(/^\d{4}[-/]\d{2}[-/]\d{2}(?:\s+[*!])?(?:\s+\([^)]+\))?\s+(.+?)(?:\s*;|$)/);
227
+ if (txHeaderMatch) {
228
+ const payeeName = txHeaderMatch[1].trim();
229
+ const payeeStart = line.indexOf(payeeName);
230
+ const payeeEnd = payeeStart + payeeName.length;
231
+ if (char >= payeeStart && char <= payeeEnd) {
232
+ return { type: 'payee', name: payeeName };
233
+ }
234
+ }
235
+ // Check if on a tag in a comment
236
+ const tagMatch = line.match(/;\s*(\w+):/g);
237
+ if (tagMatch) {
238
+ for (const match of tagMatch) {
239
+ const tagName = match.match(/(\w+):/)?.[1];
240
+ if (tagName) {
241
+ const tagStart = line.indexOf(match) + match.indexOf(tagName);
242
+ const tagEnd = tagStart + tagName.length;
243
+ if (char >= tagStart && char <= tagEnd) {
244
+ return { type: 'tag', name: tagName };
245
+ }
246
+ }
247
+ }
248
+ }
249
+ return null;
250
+ }
251
+ /**
252
+ * Create a rename refactoring action
253
+ */
254
+ createRenameAction(document, item, parsedDoc) {
255
+ // Note: This creates a code action that would need user input for the new name
256
+ // In a real implementation, this would trigger a rename dialog
257
+ // For now, we'll create an action that shows it's available
258
+ const action = {
259
+ title: `Rename ${item.type} '${item.name}'...`,
260
+ kind: vscode_languageserver_1.CodeActionKind.Refactor,
261
+ // In a full implementation, this would use the 'command' field to trigger
262
+ // a rename dialog. For now, we mark it as available but don't provide an edit.
263
+ command: {
264
+ title: `Rename ${item.type}`,
265
+ command: 'hledger.rename',
266
+ arguments: [document.uri, item.type, item.name]
267
+ }
268
+ };
269
+ return action;
270
+ }
271
+ /**
272
+ * Find all occurrences of an account name in the document
273
+ */
274
+ findAccountReferences(document, accountName, parsedDoc) {
275
+ const ranges = [];
276
+ const lines = document.getText().split('\n');
277
+ for (let i = 0; i < lines.length; i++) {
278
+ const line = lines[i];
279
+ if (!line)
280
+ continue;
281
+ // Check account directives
282
+ const accountDirectiveMatch = line.match(/^account\s+(.+?)(?:\s|$)/);
283
+ if (accountDirectiveMatch && accountDirectiveMatch[1].trim() === accountName) {
284
+ const start = line.indexOf(accountName);
285
+ ranges.push(vscode_languageserver_1.Range.create(i, start, i, start + accountName.length));
286
+ continue;
287
+ }
288
+ // Check postings
289
+ if (line.match(/^\s+\S/)) {
290
+ const accountMatch = line.match(/^\s+([^;\s]+(?:\s+[^;\s]+)*?)(?:\s{2,}|\s+[-+$£€¥₹]|\s*$)/);
291
+ if (accountMatch && accountMatch[1].trim() === accountName) {
292
+ const start = line.indexOf(accountName);
293
+ ranges.push(vscode_languageserver_1.Range.create(i, start, i, start + accountName.length));
294
+ }
295
+ }
296
+ }
297
+ return ranges;
298
+ }
299
+ /**
300
+ * Find all occurrences of a payee name in the document
301
+ */
302
+ findPayeeReferences(document, payeeName, parsedDoc) {
303
+ const ranges = [];
304
+ const lines = document.getText().split('\n');
305
+ for (let i = 0; i < lines.length; i++) {
306
+ const line = lines[i];
307
+ if (!line)
308
+ continue;
309
+ // Check payee directives (match everything after "payee " up to comment or end of line)
310
+ if (line.startsWith('payee ')) {
311
+ const payeeText = line.substring(6).split(';')[0].trim();
312
+ if (payeeText === payeeName) {
313
+ const start = line.indexOf(payeeName);
314
+ ranges.push(vscode_languageserver_1.Range.create(i, start, i, start + payeeName.length));
315
+ continue;
316
+ }
317
+ }
318
+ // Check transaction headers
319
+ const txHeaderMatch = line.match(/^\d{4}[-/]\d{2}[-/]\d{2}(?:\s+[*!])?(?:\s+\([^)]+\))?\s+(.+?)(?:\s*;|$)/);
320
+ if (txHeaderMatch && txHeaderMatch[1].trim() === payeeName) {
321
+ const start = line.indexOf(payeeName);
322
+ ranges.push(vscode_languageserver_1.Range.create(i, start, i, start + payeeName.length));
323
+ }
324
+ }
325
+ return ranges;
326
+ }
327
+ /**
328
+ * Find all occurrences of a commodity in the document
329
+ */
330
+ findCommodityReferences(document, commodityName, parsedDoc) {
331
+ const ranges = [];
332
+ const lines = document.getText().split('\n');
333
+ for (let i = 0; i < lines.length; i++) {
334
+ const line = lines[i];
335
+ if (!line)
336
+ continue;
337
+ // Check commodity directives
338
+ const commodityDirectiveMatch = line.match(/^commodity\s+(.+?)(?:\s|$)/);
339
+ if (commodityDirectiveMatch) {
340
+ const commodityPart = commodityDirectiveMatch[1].trim().split(/\s+/)[0];
341
+ if (commodityPart === commodityName) {
342
+ const start = line.indexOf(commodityName);
343
+ ranges.push(vscode_languageserver_1.Range.create(i, start, i, start + commodityName.length));
344
+ continue;
345
+ }
346
+ }
347
+ // Check for commodity in amounts (this is a simple match, may need refinement)
348
+ const regex = new RegExp(`\\b${this.escapeRegExp(commodityName)}\\b`, 'g');
349
+ let match;
350
+ while ((match = regex.exec(line)) !== null) {
351
+ ranges.push(vscode_languageserver_1.Range.create(i, match.index, i, match.index + commodityName.length));
352
+ }
353
+ }
354
+ return ranges;
355
+ }
356
+ /**
357
+ * Find all occurrences of a tag in the document
358
+ */
359
+ findTagReferences(document, tagName, parsedDoc) {
360
+ const ranges = [];
361
+ const lines = document.getText().split('\n');
362
+ for (let i = 0; i < lines.length; i++) {
363
+ const line = lines[i];
364
+ if (!line)
365
+ continue;
366
+ // Check tag directives
367
+ const tagDirectiveMatch = line.match(/^tag\s+(\w+)/);
368
+ if (tagDirectiveMatch && tagDirectiveMatch[1] === tagName) {
369
+ const start = line.indexOf(tagName);
370
+ ranges.push(vscode_languageserver_1.Range.create(i, start, i, start + tagName.length));
371
+ continue;
372
+ }
373
+ // Check for tags in comments
374
+ const regex = new RegExp(`\\b${tagName}:`, 'g');
375
+ let match;
376
+ while ((match = regex.exec(line)) !== null) {
377
+ ranges.push(vscode_languageserver_1.Range.create(i, match.index, i, match.index + tagName.length));
378
+ }
379
+ }
380
+ return ranges;
381
+ }
382
+ /**
383
+ * Escape special regex characters
384
+ */
385
+ escapeRegExp(string) {
386
+ return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
387
+ }
388
+ /**
389
+ * Create workspace edit to rename an item across all its references
390
+ */
391
+ createRenameEdit(document, item, newName, parsedDoc) {
392
+ let ranges = [];
393
+ switch (item.type) {
394
+ case 'account':
395
+ ranges = this.findAccountReferences(document, item.name, parsedDoc);
396
+ break;
397
+ case 'payee':
398
+ ranges = this.findPayeeReferences(document, item.name, parsedDoc);
399
+ break;
400
+ case 'commodity':
401
+ ranges = this.findCommodityReferences(document, item.name, parsedDoc);
402
+ break;
403
+ case 'tag':
404
+ ranges = this.findTagReferences(document, item.name, parsedDoc);
405
+ break;
406
+ }
407
+ const edits = ranges.map(range => vscode_languageserver_1.TextEdit.replace(range, newName));
408
+ return {
409
+ changes: {
410
+ [document.uri]: edits
411
+ }
412
+ };
413
+ }
414
+ }
415
+ exports.CodeActionProvider = CodeActionProvider;
416
+ exports.codeActionProvider = new CodeActionProvider();
417
+ //# sourceMappingURL=codeActions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codeActions.js","sourceRoot":"","sources":["../../src/features/codeActions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Completion provider for hledger language server
3
+ *
4
+ * Provides intelligent auto-completion for:
5
+ * - Account names
6
+ * - Payee names
7
+ * - Commodity symbols
8
+ * - Directive keywords
9
+ * - Include file paths
10
+ * - Tags
11
+ */
12
+ import { CompletionItem } from 'vscode-languageserver';
13
+ import { TextDocument } from 'vscode-languageserver-textdocument';
14
+ import { Position } from 'vscode-languageserver-protocol';
15
+ import { ParsedDocument } from '../types';
16
+ interface CompletionSettings {
17
+ onlyDeclaredAccounts?: boolean;
18
+ onlyDeclaredPayees?: boolean;
19
+ onlyDeclaredCommodities?: boolean;
20
+ onlyDeclaredTags?: boolean;
21
+ }
22
+ export declare class CompletionProvider {
23
+ private accounts;
24
+ private payees;
25
+ private commodities;
26
+ private tags;
27
+ /**
28
+ * Update the list of known accounts
29
+ */
30
+ updateAccounts(accounts: Array<{
31
+ name: string;
32
+ declared: boolean;
33
+ }>): void;
34
+ /**
35
+ * Update the list of known payees
36
+ */
37
+ updatePayees(payees: Array<{
38
+ name: string;
39
+ declared: boolean;
40
+ }>): void;
41
+ /**
42
+ * Update the list of known commodities
43
+ */
44
+ updateCommodities(commodities: Array<{
45
+ name: string;
46
+ declared: boolean;
47
+ }>): void;
48
+ /**
49
+ * Update the list of known tags
50
+ */
51
+ updateTags(tags: Array<{
52
+ name: string;
53
+ declared: boolean;
54
+ }>): void;
55
+ /**
56
+ * Get completion items for the current position
57
+ */
58
+ getCompletionItems(document: TextDocument, position: Position, parsed?: ParsedDocument, settings?: CompletionSettings): CompletionItem[];
59
+ /**
60
+ * Get account name completions
61
+ */
62
+ private getAccountCompletions;
63
+ /**
64
+ * Get payee completions
65
+ */
66
+ private getPayeeCompletions;
67
+ /**
68
+ * Get directive keyword completions
69
+ */
70
+ private getDirectiveCompletions;
71
+ /**
72
+ * Get commodity completions
73
+ */
74
+ getCommodityCompletions(settings?: CompletionSettings): CompletionItem[];
75
+ /**
76
+ * Get tag name completions
77
+ */
78
+ getTagCompletions(settings?: CompletionSettings): CompletionItem[];
79
+ /**
80
+ * Get include file path completions
81
+ */
82
+ private getIncludePathCompletions;
83
+ /**
84
+ * Get the payee of the current transaction being edited
85
+ */
86
+ private getCurrentTransactionPayee;
87
+ /**
88
+ * Get smart account completions based on payee history
89
+ */
90
+ private getSmartAccountCompletions;
91
+ }
92
+ export declare const completionProvider: CompletionProvider;
93
+ export {};
94
+ //# sourceMappingURL=completion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../../src/features/completion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,cAAc,EAAsB,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAG1D,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG1C,UAAU,kBAAkB;IAC1B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAkD;IAClE,OAAO,CAAC,MAAM,CAAkD;IAChE,OAAO,CAAC,WAAW,CAAkD;IACrE,OAAO,CAAC,IAAI,CAAkD;IAE9D;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC;IAInE;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC;IAI/D;;OAEG;IACH,iBAAiB,CAAC,WAAW,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC;IAIzE;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC;IAI3D;;OAEG;IACH,kBAAkB,CAChB,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,QAAQ,EAClB,MAAM,CAAC,EAAE,cAAc,EACvB,QAAQ,CAAC,EAAE,kBAAkB,GAC5B,cAAc,EAAE;IAsDnB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAW7B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAW3B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAiB/B;;OAEG;IACH,uBAAuB,CAAC,QAAQ,CAAC,EAAE,kBAAkB,GAAG,cAAc,EAAE;IAWxE;;OAEG;IACH,iBAAiB,CAAC,QAAQ,CAAC,EAAE,kBAAkB,GAAG,cAAc,EAAE;IAYlE;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAkEjC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAsBlC;;OAEG;IACH,OAAO,CAAC,0BAA0B;CA8CnC;AAED,eAAO,MAAM,kBAAkB,oBAA2B,CAAC"}