tree-sitter-hledger 0.1.0 → 0.1.4

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 CHANGED
@@ -16,6 +16,7 @@ This parser complements the existing [hledger-lsp](../hledger-lsp) language serv
16
16
  ## Features
17
17
 
18
18
  **Transactions:**
19
+
19
20
  - Dates with flexible formats (`2024-01-15`, `2024.1.5`, `01/15`, `1-5`)
20
21
  - Status markers (`*` cleared, `!` pending)
21
22
  - Transaction codes (`(#123)`)
@@ -23,6 +24,7 @@ This parser complements the existing [hledger-lsp](../hledger-lsp) language serv
23
24
  - Inline comments with tags (`; category:food, project:home`)
24
25
 
25
26
  **Postings:**
27
+
26
28
  - Account names (including spaces)
27
29
  - Amounts with various formats:
28
30
  - Symbol on left: `$100`, `-$50`, `$-25`
@@ -33,31 +35,38 @@ This parser complements the existing [hledger-lsp](../hledger-lsp) language serv
33
35
  - Inline comments with tags
34
36
 
35
37
  **Commodities:**
38
+
36
39
  - Currency symbols: `$`, `€`, `£`, `¥`, etc.
37
40
  - Alphabetic codes: `USD`, `EUR`, `BTC`
38
41
  - Quoted symbols: `"AAPL US Equity"`
39
42
 
40
43
  **Directives:**
44
+
41
45
  - `account` - Account declarations
42
46
  - `commodity` - Commodity declarations
43
47
  - `include` - File includes
44
48
  - `payee` - Payee declarations
45
49
  - `tag` - Tag declarations
50
+ - `P` - Market price declarations
51
+ - `alias` - Alias declarations
52
+ - `decimal-mark` - Decimal mark declarations
46
53
 
47
54
  **Comments:**
55
+
48
56
  - Line comments: `;` or `#`
49
57
  - Block comments: `comment` ... `end comment`
50
58
  - Inline comments with tag parsing
51
59
 
52
60
  **Structure:**
61
+
53
62
  - Indentation-based posting blocks
54
63
  - Code folding support
55
64
  - Syntax highlighting queries
56
65
 
57
66
  ## Future Enhancements
67
+
58
68
  - Automated transaction rules (`=`)
59
69
  - Periodic transactions (`~`)
60
- - Additional directives (alias, apply account, etc.)
61
70
  - Multi-line commodity format blocks
62
71
 
63
72
  ## Usage
@@ -87,6 +96,7 @@ npm test
87
96
  ## Grammar Overview
88
97
 
89
98
  **Transactions:**
99
+
90
100
  ```hledger
91
101
  2024-01-05 * Groceries ; category:food
92
102
  Expenses:Food:Groceries $50.00
@@ -94,6 +104,7 @@ npm test
94
104
  ```
95
105
 
96
106
  **Costs and Assertions:**
107
+
97
108
  ```hledger
98
109
  2024-01-10 * Currency Exchange
99
110
  Assets:EUR 100 EUR @ $1.10
@@ -101,6 +112,7 @@ npm test
101
112
  ```
102
113
 
103
114
  **Directives:**
115
+
104
116
  ```hledger
105
117
  account Assets:Checking
106
118
  commodity $1000.00
@@ -109,6 +121,7 @@ include expenses.journal
109
121
  ```
110
122
 
111
123
  **Comments:**
124
+
112
125
  ```hledger
113
126
  ; Line comment
114
127
  # Another style
package/grammar.js CHANGED
@@ -125,11 +125,58 @@ module.exports = grammar({
125
125
  $.include_directive,
126
126
  $.payee_directive,
127
127
  $.tag_directive,
128
+ $.alias_directive,
129
+ $.decimal_mark_directive,
130
+ $.market_price_directive,
131
+ $.apply_account_directive,
132
+ $.default_commodity_directive,
133
+ $.default_year_directive,
128
134
  ),
129
135
  optional($.inline_comment),
130
136
  $._newline,
131
137
  ),
132
138
 
139
+ alias_directive: $ => seq(
140
+ 'alias',
141
+ field('old_name', $.account),
142
+ '=',
143
+ field('new_name', $.account),
144
+ ),
145
+
146
+ decimal_mark_directive: $ => seq(
147
+ 'decimal-mark',
148
+ field('decimal_mark', $.decimal_mark),
149
+ ),
150
+
151
+ decimal_mark: _$ => /[.,]/,
152
+
153
+ market_price_directive: $ => seq(
154
+ 'P',
155
+ field('date', $.date),
156
+ field('commodity_1_symbol', $.commodity),
157
+ field('commodity_2_amount', $.amount),
158
+ ),
159
+
160
+ default_commodity_directive: $ => seq(
161
+ 'D',
162
+ /[ \t]+/,
163
+ field('default_commodity', $.amount),
164
+ ),
165
+
166
+ default_year_directive: _$ => seq(
167
+ 'Y',
168
+ /[ \t]+/,
169
+ field('default_year', /\d{4}/),
170
+ ),
171
+
172
+ apply_account_directive: $ => seq(
173
+ 'apply account',
174
+ /[ \t]+/,
175
+ field('account', $.account),
176
+ ),
177
+
178
+
179
+
133
180
  account_directive: $ => seq(
134
181
  'account',
135
182
  field('name', $.account),
@@ -184,7 +231,7 @@ module.exports = grammar({
184
231
  description: _ => /[^*!=(;\s][^;\n]*/,
185
232
 
186
233
 
187
- account: _ => /([^\s;#\n]+([ \t][^;\s\n#]+)*?)/,
234
+ account: _ => /([^\s;#\n=]+([ \t][^;\s\n#=]+)*?)/,
188
235
 
189
236
  // Amount: quantity with optional commodity
190
237
  amount: $ => choice(
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tree-sitter-hledger",
3
- "version": "0.1.0",
3
+ "version": "0.1.4",
4
4
  "description": "Tree-sitter grammar for hledger journal files",
5
5
  "main": "bindings/node",
6
6
  "types": "bindings/node",
@@ -42,7 +42,7 @@
42
42
  "nan": "^2.17.0"
43
43
  },
44
44
  "devDependencies": {
45
- "tree-sitter-cli": "^0.20.8"
45
+ "tree-sitter-cli": "^0.26.3"
46
46
  },
47
47
  "tree-sitter": [
48
48
  {
package/src/grammar.json CHANGED
@@ -1,4 +1,5 @@
1
1
  {
2
+ "$schema": "https://tree-sitter.github.io/tree-sitter/assets/schemas/grammar.schema.json",
2
3
  "name": "hledger",
3
4
  "rules": {
4
5
  "source_file": {
@@ -437,6 +438,30 @@
437
438
  {
438
439
  "type": "SYMBOL",
439
440
  "name": "tag_directive"
441
+ },
442
+ {
443
+ "type": "SYMBOL",
444
+ "name": "alias_directive"
445
+ },
446
+ {
447
+ "type": "SYMBOL",
448
+ "name": "decimal_mark_directive"
449
+ },
450
+ {
451
+ "type": "SYMBOL",
452
+ "name": "market_price_directive"
453
+ },
454
+ {
455
+ "type": "SYMBOL",
456
+ "name": "apply_account_directive"
457
+ },
458
+ {
459
+ "type": "SYMBOL",
460
+ "name": "default_commodity_directive"
461
+ },
462
+ {
463
+ "type": "SYMBOL",
464
+ "name": "default_year_directive"
440
465
  }
441
466
  ]
442
467
  },
@@ -458,6 +483,152 @@
458
483
  }
459
484
  ]
460
485
  },
486
+ "alias_directive": {
487
+ "type": "SEQ",
488
+ "members": [
489
+ {
490
+ "type": "STRING",
491
+ "value": "alias"
492
+ },
493
+ {
494
+ "type": "FIELD",
495
+ "name": "old_name",
496
+ "content": {
497
+ "type": "SYMBOL",
498
+ "name": "account"
499
+ }
500
+ },
501
+ {
502
+ "type": "STRING",
503
+ "value": "="
504
+ },
505
+ {
506
+ "type": "FIELD",
507
+ "name": "new_name",
508
+ "content": {
509
+ "type": "SYMBOL",
510
+ "name": "account"
511
+ }
512
+ }
513
+ ]
514
+ },
515
+ "decimal_mark_directive": {
516
+ "type": "SEQ",
517
+ "members": [
518
+ {
519
+ "type": "STRING",
520
+ "value": "decimal-mark"
521
+ },
522
+ {
523
+ "type": "FIELD",
524
+ "name": "decimal_mark",
525
+ "content": {
526
+ "type": "SYMBOL",
527
+ "name": "decimal_mark"
528
+ }
529
+ }
530
+ ]
531
+ },
532
+ "decimal_mark": {
533
+ "type": "PATTERN",
534
+ "value": "[.,]"
535
+ },
536
+ "market_price_directive": {
537
+ "type": "SEQ",
538
+ "members": [
539
+ {
540
+ "type": "STRING",
541
+ "value": "P"
542
+ },
543
+ {
544
+ "type": "FIELD",
545
+ "name": "date",
546
+ "content": {
547
+ "type": "SYMBOL",
548
+ "name": "date"
549
+ }
550
+ },
551
+ {
552
+ "type": "FIELD",
553
+ "name": "commodity_1_symbol",
554
+ "content": {
555
+ "type": "SYMBOL",
556
+ "name": "commodity"
557
+ }
558
+ },
559
+ {
560
+ "type": "FIELD",
561
+ "name": "commodity_2_amount",
562
+ "content": {
563
+ "type": "SYMBOL",
564
+ "name": "amount"
565
+ }
566
+ }
567
+ ]
568
+ },
569
+ "default_commodity_directive": {
570
+ "type": "SEQ",
571
+ "members": [
572
+ {
573
+ "type": "STRING",
574
+ "value": "D"
575
+ },
576
+ {
577
+ "type": "PATTERN",
578
+ "value": "[ \\t]+"
579
+ },
580
+ {
581
+ "type": "FIELD",
582
+ "name": "default_commodity",
583
+ "content": {
584
+ "type": "SYMBOL",
585
+ "name": "amount"
586
+ }
587
+ }
588
+ ]
589
+ },
590
+ "default_year_directive": {
591
+ "type": "SEQ",
592
+ "members": [
593
+ {
594
+ "type": "STRING",
595
+ "value": "Y"
596
+ },
597
+ {
598
+ "type": "PATTERN",
599
+ "value": "[ \\t]+"
600
+ },
601
+ {
602
+ "type": "FIELD",
603
+ "name": "default_year",
604
+ "content": {
605
+ "type": "PATTERN",
606
+ "value": "\\d{4}"
607
+ }
608
+ }
609
+ ]
610
+ },
611
+ "apply_account_directive": {
612
+ "type": "SEQ",
613
+ "members": [
614
+ {
615
+ "type": "STRING",
616
+ "value": "apply account"
617
+ },
618
+ {
619
+ "type": "PATTERN",
620
+ "value": "[ \\t]+"
621
+ },
622
+ {
623
+ "type": "FIELD",
624
+ "name": "account",
625
+ "content": {
626
+ "type": "SYMBOL",
627
+ "name": "account"
628
+ }
629
+ }
630
+ ]
631
+ },
461
632
  "account_directive": {
462
633
  "type": "SEQ",
463
634
  "members": [
@@ -690,7 +861,7 @@
690
861
  },
691
862
  "account": {
692
863
  "type": "PATTERN",
693
- "value": "([^\\s;#\\n]+([ \\t][^;\\s\\n#]+)*?)"
864
+ "value": "([^\\s;#\\n=]+([ \\t][^;\\s\\n#=]+)*?)"
694
865
  },
695
866
  "amount": {
696
867
  "type": "CHOICE",
@@ -922,6 +1093,6 @@
922
1093
  }
923
1094
  ],
924
1095
  "inline": [],
925
- "supertypes": []
926
- }
927
-
1096
+ "supertypes": [],
1097
+ "reserved": {}
1098
+ }
@@ -15,6 +15,32 @@
15
15
  }
16
16
  }
17
17
  },
18
+ {
19
+ "type": "alias_directive",
20
+ "named": true,
21
+ "fields": {
22
+ "new_name": {
23
+ "multiple": false,
24
+ "required": true,
25
+ "types": [
26
+ {
27
+ "type": "account",
28
+ "named": true
29
+ }
30
+ ]
31
+ },
32
+ "old_name": {
33
+ "multiple": false,
34
+ "required": true,
35
+ "types": [
36
+ {
37
+ "type": "account",
38
+ "named": true
39
+ }
40
+ ]
41
+ }
42
+ }
43
+ },
18
44
  {
19
45
  "type": "amount",
20
46
  "named": true,
@@ -51,6 +77,22 @@
51
77
  }
52
78
  }
53
79
  },
80
+ {
81
+ "type": "apply_account_directive",
82
+ "named": true,
83
+ "fields": {
84
+ "account": {
85
+ "multiple": false,
86
+ "required": true,
87
+ "types": [
88
+ {
89
+ "type": "account",
90
+ "named": true
91
+ }
92
+ ]
93
+ }
94
+ }
95
+ },
54
96
  {
55
97
  "type": "assertion",
56
98
  "named": true,
@@ -141,6 +183,43 @@
141
183
  "named": true,
142
184
  "fields": {}
143
185
  },
186
+ {
187
+ "type": "decimal_mark_directive",
188
+ "named": true,
189
+ "fields": {
190
+ "decimal_mark": {
191
+ "multiple": false,
192
+ "required": true,
193
+ "types": [
194
+ {
195
+ "type": "decimal_mark",
196
+ "named": true
197
+ }
198
+ ]
199
+ }
200
+ }
201
+ },
202
+ {
203
+ "type": "default_commodity_directive",
204
+ "named": true,
205
+ "fields": {
206
+ "default_commodity": {
207
+ "multiple": false,
208
+ "required": true,
209
+ "types": [
210
+ {
211
+ "type": "amount",
212
+ "named": true
213
+ }
214
+ ]
215
+ }
216
+ }
217
+ },
218
+ {
219
+ "type": "default_year_directive",
220
+ "named": true,
221
+ "fields": {}
222
+ },
144
223
  {
145
224
  "type": "include_directive",
146
225
  "named": true,
@@ -177,6 +256,42 @@
177
256
  "named": true,
178
257
  "fields": {}
179
258
  },
259
+ {
260
+ "type": "market_price_directive",
261
+ "named": true,
262
+ "fields": {
263
+ "commodity_1_symbol": {
264
+ "multiple": false,
265
+ "required": true,
266
+ "types": [
267
+ {
268
+ "type": "commodity",
269
+ "named": true
270
+ }
271
+ ]
272
+ },
273
+ "commodity_2_amount": {
274
+ "multiple": false,
275
+ "required": true,
276
+ "types": [
277
+ {
278
+ "type": "amount",
279
+ "named": true
280
+ }
281
+ ]
282
+ },
283
+ "date": {
284
+ "multiple": false,
285
+ "required": true,
286
+ "types": [
287
+ {
288
+ "type": "date",
289
+ "named": true
290
+ }
291
+ ]
292
+ }
293
+ }
294
+ },
180
295
  {
181
296
  "type": "payee_directive",
182
297
  "named": true,
@@ -262,6 +377,7 @@
262
377
  {
263
378
  "type": "source_file",
264
379
  "named": true,
380
+ "root": true,
265
381
  "fields": {},
266
382
  "children": {
267
383
  "multiple": true,
@@ -271,6 +387,14 @@
271
387
  "type": "account_directive",
272
388
  "named": true
273
389
  },
390
+ {
391
+ "type": "alias_directive",
392
+ "named": true
393
+ },
394
+ {
395
+ "type": "apply_account_directive",
396
+ "named": true
397
+ },
274
398
  {
275
399
  "type": "block_comment",
276
400
  "named": true
@@ -279,6 +403,18 @@
279
403
  "type": "commodity_directive",
280
404
  "named": true
281
405
  },
406
+ {
407
+ "type": "decimal_mark_directive",
408
+ "named": true
409
+ },
410
+ {
411
+ "type": "default_commodity_directive",
412
+ "named": true
413
+ },
414
+ {
415
+ "type": "default_year_directive",
416
+ "named": true
417
+ },
282
418
  {
283
419
  "type": "include_directive",
284
420
  "named": true
@@ -291,6 +427,10 @@
291
427
  "type": "line_comment",
292
428
  "named": true
293
429
  },
430
+ {
431
+ "type": "market_price_directive",
432
+ "named": true
433
+ },
294
434
  {
295
435
  "type": "payee_directive",
296
436
  "named": true
@@ -460,6 +600,18 @@
460
600
  "type": "@@",
461
601
  "named": false
462
602
  },
603
+ {
604
+ "type": "D",
605
+ "named": false
606
+ },
607
+ {
608
+ "type": "P",
609
+ "named": false
610
+ },
611
+ {
612
+ "type": "Y",
613
+ "named": false
614
+ },
463
615
  {
464
616
  "type": "account",
465
617
  "named": false
@@ -468,6 +620,14 @@
468
620
  "type": "account",
469
621
  "named": true
470
622
  },
623
+ {
624
+ "type": "alias",
625
+ "named": false
626
+ },
627
+ {
628
+ "type": "apply account",
629
+ "named": false
630
+ },
471
631
  {
472
632
  "type": "comment",
473
633
  "named": false
@@ -476,6 +636,14 @@
476
636
  "type": "commodity",
477
637
  "named": false
478
638
  },
639
+ {
640
+ "type": "decimal-mark",
641
+ "named": false
642
+ },
643
+ {
644
+ "type": "decimal_mark",
645
+ "named": true
646
+ },
479
647
  {
480
648
  "type": "dedent",
481
649
  "named": true