tree-sitter-beancount 2.3.3 → 2.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +334 -4
- package/binding.gyp +17 -7
- package/bindings/node/binding.cc +14 -22
- package/bindings/node/index.d.ts +28 -0
- package/bindings/node/index.js +3 -15
- package/grammar.js +38 -125
- package/package.json +35 -5
- package/prebuilds/darwin-arm64/tree-sitter-beancount.node +0 -0
- package/prebuilds/darwin-x64/tree-sitter-beancount.node +0 -0
- package/prebuilds/linux-arm64/tree-sitter-beancount.node +0 -0
- package/prebuilds/linux-x64/tree-sitter-beancount.node +0 -0
- package/prebuilds/win32-arm64/tree-sitter-beancount.node +0 -0
- package/prebuilds/win32-x64/tree-sitter-beancount.node +0 -0
- package/src/grammar.json +149 -560
- package/src/node-types.json +10 -11
- package/src/parser.c +7615 -9089
- package/src/scanner.c +345 -67
- package/src/tree_sitter/alloc.h +54 -0
- package/src/tree_sitter/array.h +291 -0
- package/src/tree_sitter/parser.h +68 -12
- package/.clang-format +0 -20
- package/.envrc +0 -1
- package/.gitattributes +0 -6
- package/.github/dependabot.yml +0 -26
- package/.github/workflows/cicd.yml +0 -30
- package/.github/workflows/release.yml +0 -72
- package/CHANGELOG.md +0 -80
- package/Cargo.lock +0 -71
- package/Cargo.toml +0 -26
- package/Package.swift +0 -20
- package/bindings/rust/build.rs +0 -39
- package/bindings/rust/lib.rs +0 -52
- package/flake.lock +0 -141
- package/flake.nix +0 -120
- package/test/corpus/arithmetic.txt +0 -373
- package/test/corpus/comment.txt +0 -992
- package/test/corpus/currencies.txt +0 -66
- package/test/corpus/entry_types.txt +0 -389
- package/test/corpus/markdown_orgmode.txt +0 -60
- package/test/corpus/metadata.txt +0 -414
- package/test/corpus/multi_line.txt +0 -27
- package/test/corpus/orgmode_sections.txt +0 -53
- package/test/corpus/parse_lots.txt +0 -417
- package/test/corpus/parser_include.txt +0 -23
- package/test/corpus/parser_links.txt +0 -32
- package/test/corpus/parser_options.txt +0 -39
- package/test/corpus/parser_plugin.txt +0 -35
- package/test/corpus/push_pop_meta.txt +0 -34
- package/test/corpus/push_pop_tag.txt +0 -23
- package/test/corpus/transaction.txt +0 -224
- package/test/corpus/ugly_bugs.txt +0 -91
package/README.md
CHANGED
|
@@ -1,6 +1,336 @@
|
|
|
1
1
|
# tree-sitter-beancount
|
|
2
|
-
a [tree-sitter](https://github.com/tree-sitter/tree-sitter) parser for the [beancount](https://github.com/beancount/beancount) syntax
|
|
3
2
|
|
|
4
|
-
|
|
5
|
-
[
|
|
6
|
-
[tree-sitter](https://tree-sitter
|
|
3
|
+
[](https://github.com/polarmutex/tree-sitter-beancount/actions/workflows/ci.yml)
|
|
4
|
+
[](https://www.npmjs.com/package/tree-sitter-beancount)
|
|
5
|
+
[](https://crates.io/crates/tree-sitter-beancount)
|
|
6
|
+
[](https://discord.gg/w7nTvsVJhm)
|
|
7
|
+
|
|
8
|
+
A [Tree-sitter](https://github.com/tree-sitter/tree-sitter) parser for the [Beancount](https://github.com/beancount/beancount) double-entry accounting language.
|
|
9
|
+
|
|
10
|
+
## Table of Contents
|
|
11
|
+
|
|
12
|
+
- [Features](#features)
|
|
13
|
+
- [Installation](#installation)
|
|
14
|
+
- [Node.js](#nodejs)
|
|
15
|
+
- [Rust](#rust)
|
|
16
|
+
- [Python](#python)
|
|
17
|
+
- [Usage](#usage)
|
|
18
|
+
- [Node.js](#nodejs-usage)
|
|
19
|
+
- [Rust](#rust-usage)
|
|
20
|
+
- [Python](#python-usage)
|
|
21
|
+
- [Editor Integration](#editor-integration)
|
|
22
|
+
- [Neovim](#neovim)
|
|
23
|
+
- [Emacs](#emacs)
|
|
24
|
+
- [VS Code](#vs-code)
|
|
25
|
+
- [Supported Syntax](#supported-syntax)
|
|
26
|
+
- [Examples](#examples)
|
|
27
|
+
- [Development](#development)
|
|
28
|
+
- [Setup](#setup)
|
|
29
|
+
- [Building](#building)
|
|
30
|
+
- [Testing](#testing)
|
|
31
|
+
- [Performance](#performance)
|
|
32
|
+
- [Contributing](#contributing)
|
|
33
|
+
- [License](#license)
|
|
34
|
+
- [References](#references)
|
|
35
|
+
|
|
36
|
+
## Features
|
|
37
|
+
|
|
38
|
+
- ✅ **Complete Beancount syntax support** - Parse all Beancount directives and constructs
|
|
39
|
+
- ✅ **Unicode support** - Full support for international characters including Chinese characters in account names
|
|
40
|
+
- ✅ **Org-mode & Markdown integration** - Parse Beancount embedded in Org-mode and Markdown documents
|
|
41
|
+
- ✅ **High performance** - Optimized grammar with excellent parse speeds (8000+ bytes/ms average)
|
|
42
|
+
- ✅ **Multiple language bindings** - Node.js, Rust, and Python support
|
|
43
|
+
- ✅ **Editor integration ready** - Works with Neovim, Emacs, VS Code, and other editors
|
|
44
|
+
- ✅ **Comprehensive testing** - 122+ test cases covering all syntax features
|
|
45
|
+
|
|
46
|
+
## Installation
|
|
47
|
+
|
|
48
|
+
### Node.js
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
npm install tree-sitter tree-sitter-beancount
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Rust
|
|
55
|
+
|
|
56
|
+
Add to your `Cargo.toml`:
|
|
57
|
+
|
|
58
|
+
```toml
|
|
59
|
+
[dependencies]
|
|
60
|
+
tree-sitter = "~0.24.7"
|
|
61
|
+
tree-sitter-beancount = "2.3.3"
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Python
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
pip install tree-sitter tree-sitter-beancount
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Usage
|
|
71
|
+
|
|
72
|
+
### Node.js Usage
|
|
73
|
+
|
|
74
|
+
```javascript
|
|
75
|
+
const Parser = require('tree-sitter');
|
|
76
|
+
const Beancount = require('tree-sitter-beancount');
|
|
77
|
+
|
|
78
|
+
const parser = new Parser();
|
|
79
|
+
parser.setLanguage(Beancount);
|
|
80
|
+
|
|
81
|
+
const sourceCode = `
|
|
82
|
+
2023-01-01 * "Opening Balance"
|
|
83
|
+
Assets:Checking:Bank1 1000.00 USD
|
|
84
|
+
Equity:Opening-Balances
|
|
85
|
+
|
|
86
|
+
2023-01-02 * "Coffee" #food
|
|
87
|
+
Expenses:Food:Coffee 4.50 USD
|
|
88
|
+
Assets:Checking:Bank1 -4.50 USD
|
|
89
|
+
`;
|
|
90
|
+
|
|
91
|
+
const tree = parser.parse(sourceCode);
|
|
92
|
+
console.log(tree.rootNode.toString());
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Rust Usage
|
|
96
|
+
|
|
97
|
+
```rust
|
|
98
|
+
use tree_sitter::{Parser, Language};
|
|
99
|
+
|
|
100
|
+
extern "C" { fn tree_sitter_beancount() -> Language; }
|
|
101
|
+
|
|
102
|
+
fn main() {
|
|
103
|
+
let mut parser = Parser::new();
|
|
104
|
+
let language = unsafe { tree_sitter_beancount() };
|
|
105
|
+
parser.set_language(language).expect("Error loading Beancount grammar");
|
|
106
|
+
|
|
107
|
+
let source_code = r#"
|
|
108
|
+
2023-01-01 open Assets:Checking:Bank1 USD
|
|
109
|
+
2023-01-01 * "Salary"
|
|
110
|
+
Income:Salary -5000.00 USD
|
|
111
|
+
Assets:Checking:Bank1 5000.00 USD
|
|
112
|
+
"#;
|
|
113
|
+
|
|
114
|
+
let tree = parser.parse(source_code, None).unwrap();
|
|
115
|
+
println!("{}", tree.root_node().to_sexp());
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### Python Usage
|
|
120
|
+
|
|
121
|
+
```python
|
|
122
|
+
import tree_sitter_beancount as tsbeancount
|
|
123
|
+
from tree_sitter import Language, Parser
|
|
124
|
+
|
|
125
|
+
BEANCOUNT_LANGUAGE = Language(tsbeancount.language(), "beancount")
|
|
126
|
+
parser = Parser()
|
|
127
|
+
parser.set_language(BEANCOUNT_LANGUAGE)
|
|
128
|
+
|
|
129
|
+
source_code = b'''
|
|
130
|
+
2023-01-01 open Assets:Checking:Bank1 USD
|
|
131
|
+
2023-01-01 balance Assets:Checking:Bank1 0.00 USD
|
|
132
|
+
|
|
133
|
+
2023-01-15 * "Paycheck"
|
|
134
|
+
Income:Salary -3000.00 USD
|
|
135
|
+
Assets:Checking:Bank1 3000.00 USD
|
|
136
|
+
'''
|
|
137
|
+
|
|
138
|
+
tree = parser.parse(source_code)
|
|
139
|
+
print(tree.root_node.sexp())
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
## Editor Integration
|
|
143
|
+
|
|
144
|
+
### Neovim
|
|
145
|
+
|
|
146
|
+
With [nvim-treesitter](https://github.com/nvim-treesitter/nvim-treesitter):
|
|
147
|
+
|
|
148
|
+
```lua
|
|
149
|
+
require'nvim-treesitter.configs'.setup {
|
|
150
|
+
ensure_installed = { "beancount" },
|
|
151
|
+
highlight = { enable = true },
|
|
152
|
+
incremental_selection = { enable = true },
|
|
153
|
+
indent = { enable = true },
|
|
154
|
+
}
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### Emacs
|
|
158
|
+
|
|
159
|
+
With [tree-sitter-langs](https://github.com/emacs-tree-sitter/tree-sitter-langs):
|
|
160
|
+
|
|
161
|
+
```elisp
|
|
162
|
+
(use-package tree-sitter-langs
|
|
163
|
+
:config
|
|
164
|
+
(tree-sitter-require 'beancount))
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### VS Code
|
|
168
|
+
|
|
169
|
+
Install the [Beancount extension](https://marketplace.visualstudio.com/items?itemName=Lencerf.beancount) which uses this parser for syntax highlighting.
|
|
170
|
+
|
|
171
|
+
## Supported Syntax
|
|
172
|
+
|
|
173
|
+
This parser supports the complete Beancount syntax including:
|
|
174
|
+
|
|
175
|
+
### Core Directives
|
|
176
|
+
- ✅ **Transactions** - `2023-01-01 * "Description"`
|
|
177
|
+
- ✅ **Account declarations** - `open`, `close`
|
|
178
|
+
- ✅ **Balance assertions** - `balance`
|
|
179
|
+
- ✅ **Price declarations** - `price`
|
|
180
|
+
- ✅ **Events** - `event`
|
|
181
|
+
- ✅ **Notes** - `note`
|
|
182
|
+
- ✅ **Documents** - `document`
|
|
183
|
+
- ✅ **Custom directives** - `custom`
|
|
184
|
+
|
|
185
|
+
### Advanced Features
|
|
186
|
+
- ✅ **Postings with costs** - `{100.00 USD}`, `{{100.00 USD}}`
|
|
187
|
+
- ✅ **Price annotations** - `@ 1.25 EUR`, `@@ 125.00 EUR`
|
|
188
|
+
- ✅ **Arithmetic expressions** - `100 + 50 * 2`
|
|
189
|
+
- ✅ **Tags and links** - `#tag`, `^link`
|
|
190
|
+
- ✅ **Metadata** - `key: value` pairs
|
|
191
|
+
- ✅ **Comments** - `;comment`
|
|
192
|
+
- ✅ **Options and plugins** - `option`, `plugin`
|
|
193
|
+
- ✅ **Include statements** - `include`
|
|
194
|
+
|
|
195
|
+
### International Support
|
|
196
|
+
- ✅ **Unicode account names** - `Assets:银行:储蓄账户`
|
|
197
|
+
- ✅ **International currencies** - Support for all currency codes
|
|
198
|
+
- ✅ **Unicode in strings and comments**
|
|
199
|
+
|
|
200
|
+
### Document Formats
|
|
201
|
+
- ✅ **Org-mode sections** - `* Heading`, `** Subheading`
|
|
202
|
+
- ✅ **Markdown headers** - `# Title`, `## Subtitle`
|
|
203
|
+
- ✅ **Mixed content** - Beancount within documentation
|
|
204
|
+
|
|
205
|
+
## Examples
|
|
206
|
+
|
|
207
|
+
### Basic Transaction
|
|
208
|
+
```beancount
|
|
209
|
+
2023-01-15 * "Coffee Shop" "Morning coffee"
|
|
210
|
+
Expenses:Food:Coffee 4.50 USD
|
|
211
|
+
Assets:Checking:Bank1 -4.50 USD
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### International Example with Chinese Characters
|
|
215
|
+
```beancount
|
|
216
|
+
2023-01-01 open Assets:银行:工商银行 CNY
|
|
217
|
+
|
|
218
|
+
2023-01-15 * "工资" #salary
|
|
219
|
+
Income:工资收入 -8000.00 CNY
|
|
220
|
+
Assets:银行:工商银行 8000.00 CNY
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
### Complex Transaction with Costs and Prices
|
|
224
|
+
```beancount
|
|
225
|
+
2023-01-20 * "Stock Purchase"
|
|
226
|
+
Assets:Investments:AAPL 10 AAPL {150.00 USD} @ 151.00 USD
|
|
227
|
+
Assets:Checking:Bank1 -1510.00 USD
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
### Org-mode Integration
|
|
231
|
+
```org
|
|
232
|
+
* Personal Finance
|
|
233
|
+
|
|
234
|
+
** Income
|
|
235
|
+
|
|
236
|
+
2023-01-01 * "Salary"
|
|
237
|
+
Income:Salary -5000.00 USD
|
|
238
|
+
Assets:Checking 5000.00 USD
|
|
239
|
+
|
|
240
|
+
** Expenses
|
|
241
|
+
|
|
242
|
+
2023-01-02 * "Groceries"
|
|
243
|
+
Expenses:Food:Groceries 50.00 USD
|
|
244
|
+
Assets:Checking -50.00 USD
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
## Development
|
|
248
|
+
|
|
249
|
+
### Setup
|
|
250
|
+
|
|
251
|
+
1. Clone the repository:
|
|
252
|
+
```bash
|
|
253
|
+
git clone https://github.com/polarmutex/tree-sitter-beancount.git
|
|
254
|
+
cd tree-sitter-beancount
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
2. Install dependencies:
|
|
258
|
+
```bash
|
|
259
|
+
npm install
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
3. Install Tree-sitter CLI:
|
|
263
|
+
```bash
|
|
264
|
+
npm install -g tree-sitter-cli
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
### Building
|
|
268
|
+
|
|
269
|
+
Generate the parser:
|
|
270
|
+
```bash
|
|
271
|
+
tree-sitter generate
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
### Testing
|
|
275
|
+
|
|
276
|
+
Run the test suite:
|
|
277
|
+
```bash
|
|
278
|
+
tree-sitter test
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
Run specific tests:
|
|
282
|
+
```bash
|
|
283
|
+
tree-sitter test --file-name chinese_characters.txt
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
Debug parsing:
|
|
287
|
+
```bash
|
|
288
|
+
tree-sitter parse examples/sample.beancount
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
## Performance
|
|
292
|
+
|
|
293
|
+
This parser is optimized for high performance:
|
|
294
|
+
|
|
295
|
+
- **Average speed**: 8,755 bytes/ms
|
|
296
|
+
- **Test coverage**: 122 test cases, 100% pass rate
|
|
297
|
+
- **Parse tree efficiency**: Optimized grammar rules minimize backtracking
|
|
298
|
+
- **Memory usage**: Efficient for large files (1000+ transactions)
|
|
299
|
+
|
|
300
|
+
Performance has been significantly improved through:
|
|
301
|
+
- Removal of unnecessary UTF-8 encoding rules
|
|
302
|
+
- Optimized regex patterns
|
|
303
|
+
- Simplified posting rules
|
|
304
|
+
- Strategic tokenization
|
|
305
|
+
|
|
306
|
+
## Contributing
|
|
307
|
+
|
|
308
|
+
Contributions are welcome! Please:
|
|
309
|
+
|
|
310
|
+
1. Fork the repository
|
|
311
|
+
2. Create a feature branch: `git checkout -b feature-name`
|
|
312
|
+
3. Add tests for any new functionality
|
|
313
|
+
4. Ensure all tests pass: `tree-sitter test`
|
|
314
|
+
5. Submit a pull request
|
|
315
|
+
|
|
316
|
+
### Reporting Issues
|
|
317
|
+
|
|
318
|
+
Please report bugs and feature requests on [GitHub Issues](https://github.com/polarmutex/tree-sitter-beancount/issues).
|
|
319
|
+
|
|
320
|
+
### Development Guidelines
|
|
321
|
+
|
|
322
|
+
- Follow the existing code style
|
|
323
|
+
- Add test cases for new syntax support
|
|
324
|
+
- Update documentation for new features
|
|
325
|
+
- Ensure grammar changes don't break existing functionality
|
|
326
|
+
|
|
327
|
+
## License
|
|
328
|
+
|
|
329
|
+
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
330
|
+
|
|
331
|
+
## References
|
|
332
|
+
|
|
333
|
+
- [Beancount Documentation](https://beancount.github.io/docs/)
|
|
334
|
+
- [Beancount Language Syntax](https://beancount.github.io/docs/beancount_language_syntax.html)
|
|
335
|
+
- [Tree-sitter Documentation](https://tree-sitter.github.io/)
|
|
336
|
+
- [Tree-sitter Grammar Development](https://tree-sitter.github.io/tree-sitter/creating-parsers)
|
package/binding.gyp
CHANGED
|
@@ -2,19 +2,29 @@
|
|
|
2
2
|
"targets": [
|
|
3
3
|
{
|
|
4
4
|
"target_name": "tree_sitter_beancount_binding",
|
|
5
|
+
"dependencies": [
|
|
6
|
+
"<!(node -p \"require('node-addon-api').targets\"):node_addon_api_except",
|
|
7
|
+
],
|
|
5
8
|
"include_dirs": [
|
|
6
|
-
"
|
|
7
|
-
"src"
|
|
9
|
+
"src",
|
|
8
10
|
],
|
|
9
11
|
"sources": [
|
|
10
12
|
"bindings/node/binding.cc",
|
|
11
|
-
# If your language uses an external scanner, add it here.
|
|
12
13
|
"src/parser.c",
|
|
13
|
-
|
|
14
|
+
"src/scanner.c",
|
|
15
|
+
],
|
|
16
|
+
"conditions": [
|
|
17
|
+
["OS!='win'", {
|
|
18
|
+
"cflags_c": [
|
|
19
|
+
"-std=c11",
|
|
20
|
+
],
|
|
21
|
+
}, { # OS == "win"
|
|
22
|
+
"cflags_c": [
|
|
23
|
+
"/std:c11",
|
|
24
|
+
"/utf-8",
|
|
25
|
+
],
|
|
26
|
+
}],
|
|
14
27
|
],
|
|
15
|
-
"cflags_c": [
|
|
16
|
-
"-std=c99",
|
|
17
|
-
]
|
|
18
28
|
}
|
|
19
29
|
]
|
|
20
30
|
}
|
package/bindings/node/binding.cc
CHANGED
|
@@ -1,28 +1,20 @@
|
|
|
1
|
-
#include
|
|
2
|
-
#include <node.h>
|
|
3
|
-
#include "nan.h"
|
|
1
|
+
#include <napi.h>
|
|
4
2
|
|
|
5
|
-
|
|
3
|
+
typedef struct TSLanguage TSLanguage;
|
|
6
4
|
|
|
7
|
-
extern "C" TSLanguage *
|
|
5
|
+
extern "C" TSLanguage *tree_sitter_beancount();
|
|
8
6
|
|
|
9
|
-
|
|
7
|
+
// "tree-sitter", "language" hashed with BLAKE2
|
|
8
|
+
const napi_type_tag LANGUAGE_TYPE_TAG = {
|
|
9
|
+
0x8AF2E5212AD58ABF, 0xD5006CAD83ABBA16
|
|
10
|
+
};
|
|
10
11
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
Local<Function> constructor = Nan::GetFunction(tpl).ToLocalChecked();
|
|
19
|
-
Local<Object> instance = constructor->NewInstance(Nan::GetCurrentContext()).ToLocalChecked();
|
|
20
|
-
Nan::SetInternalFieldPointer(instance, 0, tree_sitter_beancount());
|
|
21
|
-
|
|
22
|
-
Nan::Set(instance, Nan::New("name").ToLocalChecked(), Nan::New("beancount").ToLocalChecked());
|
|
23
|
-
Nan::Set(module, Nan::New("exports").ToLocalChecked(), instance);
|
|
12
|
+
Napi::Object Init(Napi::Env env, Napi::Object exports) {
|
|
13
|
+
exports["name"] = Napi::String::New(env, "beancount");
|
|
14
|
+
auto language = Napi::External<TSLanguage>::New(env, tree_sitter_beancount());
|
|
15
|
+
language.TypeTag(&LANGUAGE_TYPE_TAG);
|
|
16
|
+
exports["language"] = language;
|
|
17
|
+
return exports;
|
|
24
18
|
}
|
|
25
19
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
} // namespace
|
|
20
|
+
NODE_API_MODULE(tree_sitter_beancount_binding, Init)
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
type BaseNode = {
|
|
2
|
+
type: string;
|
|
3
|
+
named: boolean;
|
|
4
|
+
};
|
|
5
|
+
|
|
6
|
+
type ChildNode = {
|
|
7
|
+
multiple: boolean;
|
|
8
|
+
required: boolean;
|
|
9
|
+
types: BaseNode[];
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
type NodeInfo =
|
|
13
|
+
| (BaseNode & {
|
|
14
|
+
subtypes: BaseNode[];
|
|
15
|
+
})
|
|
16
|
+
| (BaseNode & {
|
|
17
|
+
fields: { [name: string]: ChildNode };
|
|
18
|
+
children: ChildNode[];
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
type Language = {
|
|
22
|
+
name: string;
|
|
23
|
+
language: unknown;
|
|
24
|
+
nodeTypeInfo: NodeInfo[];
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
declare const language: Language;
|
|
28
|
+
export = language;
|
package/bindings/node/index.js
CHANGED
|
@@ -1,18 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
if (error1.code !== 'MODULE_NOT_FOUND') {
|
|
5
|
-
throw error1;
|
|
6
|
-
}
|
|
7
|
-
try {
|
|
8
|
-
module.exports = require("../../build/Debug/tree_sitter_beancount_binding");
|
|
9
|
-
} catch (error2) {
|
|
10
|
-
if (error2.code !== 'MODULE_NOT_FOUND') {
|
|
11
|
-
throw error2;
|
|
12
|
-
}
|
|
13
|
-
throw error1
|
|
14
|
-
}
|
|
15
|
-
}
|
|
1
|
+
const root = require("path").join(__dirname, "..", "..");
|
|
2
|
+
|
|
3
|
+
module.exports = require("node-gyp-build")(root);
|
|
16
4
|
|
|
17
5
|
try {
|
|
18
6
|
module.exports.nodeTypeInfo = require("../../src/node-types.json");
|