@algosail/parser 0.0.3 → 0.0.5

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/index.js CHANGED
@@ -1,11 +1,16 @@
1
+ import { createRequire } from 'module'
1
2
  import { getSailTokenizer } from './lib/sailTokenizer.js'
2
3
  import { getJsTokenizer } from './lib/jsTokenizer.js'
3
4
  import { buildSymbolTable } from './lib/symbolTable.js'
4
5
  import { parseJsDoc } from './lib/jsDoc.js'
5
6
 
7
+ const require = createRequire(import.meta.url)
8
+
6
9
  export async function createParser() {
7
- const sailTokenizer = await getSailTokenizer()
8
- const jsTokenizer = await getJsTokenizer()
10
+ const sailWasmPath = require.resolve('@algosail/tree-sitter/tree-sitter-sail.wasm')
11
+ const jsWasmPath = require.resolve('tree-sitter-javascript/tree-sitter-javascript.wasm')
12
+ const sailTokenizer = await getSailTokenizer(sailWasmPath)
13
+ const jsTokenizer = await getJsTokenizer(jsWasmPath)
9
14
  const cache = new Map()
10
15
 
11
16
  const parser = {
@@ -1,11 +1,9 @@
1
1
  import { Parser, Language } from 'web-tree-sitter'
2
2
 
3
- export async function getJsTokenizer() {
3
+ export async function getJsTokenizer(wasmPath) {
4
4
  await Parser.init()
5
5
  const tokenizer = new Parser()
6
- const language = await Language.load(
7
- 'node_modules/tree-sitter-javascript/tree-sitter-javascript.wasm',
8
- )
6
+ const language = await Language.load(wasmPath)
9
7
  tokenizer.setLanguage(language)
10
8
  return { tokenizer, language }
11
9
  }
@@ -1,9 +1,9 @@
1
1
  import { Parser, Language } from 'web-tree-sitter'
2
2
 
3
- export async function getSailTokenizer() {
3
+ export async function getSailTokenizer(wasmPath) {
4
4
  await Parser.init()
5
5
  const tokenizer = new Parser()
6
- const language = await Language.load('node_modules/@algosail/tree-sitter/tree-sitter-sail.wasm')
6
+ const language = await Language.load(wasmPath)
7
7
  tokenizer.setLanguage(language)
8
8
  return { tokenizer, language }
9
9
  }
package/lib/word.js CHANGED
@@ -36,9 +36,12 @@ function parseWord(node) {
36
36
 
37
37
  return {
38
38
  name,
39
+ sig: field(node, 'sig')?.text,
39
40
  doc: comment(field(node, 'doc')),
40
41
  signature,
41
42
  body,
43
+ startPosition: node.startPosition,
44
+ endPosition: node.endPosition,
42
45
  }
43
46
  }
44
47
 
@@ -81,61 +84,135 @@ function step(node) {
81
84
 
82
85
  function quotation(node) {
83
86
  const body = children(node).map(step).filter(Boolean)
84
- return { type: 'quotation', body }
87
+ return {
88
+ type: 'quotation',
89
+ body,
90
+ startPosition: node.startPosition,
91
+ endPosition: node.endPosition,
92
+ }
85
93
  }
86
94
 
87
95
  function builtinWord(node) {
88
- return { type: 'builtin_word', word: node.text }
96
+ return {
97
+ type: 'builtin_word',
98
+ word: node.text,
99
+ startPosition: node.startPosition,
100
+ endPosition: node.endPosition,
101
+ }
89
102
  }
90
103
 
91
104
  function word(node) {
92
- return { type: 'word', word: wordRef(node) }
105
+ return {
106
+ type: 'word',
107
+ word: wordRef(node),
108
+ startPosition: node.startPosition,
109
+ endPosition: node.endPosition,
110
+ }
93
111
  }
94
112
 
95
113
  function moduleWord(node) {
96
- return { type: 'word', ...(moduleWordRef(node) || {}) }
114
+ return {
115
+ type: 'word',
116
+ ...(moduleWordRef(node) || {}),
117
+ startPosition: node.startPosition,
118
+ endPosition: node.endPosition,
119
+ }
97
120
  }
98
121
 
99
122
  function tagConstructor(node) {
100
- return { type: 'tag', tag: tagRef(node) }
123
+ return {
124
+ type: 'tag',
125
+ tag: tagRef(node),
126
+ startPosition: node.startPosition,
127
+ endPosition: node.endPosition,
128
+ }
101
129
  }
102
130
 
103
131
  function moduleTagConstructor(node) {
104
- return { type: 'tag', ...(moduleTagRef(node) || {}) }
132
+ return {
133
+ type: 'tag',
134
+ ...(moduleTagRef(node) || {}),
135
+ startPosition: node.startPosition,
136
+ endPosition: node.endPosition,
137
+ }
105
138
  }
106
139
 
107
140
  function patternTag(node) {
108
- return { type: 'pattern_tag', tag: tagPattern(node) }
141
+ return {
142
+ type: 'pattern_tag',
143
+ tag: tagPattern(node),
144
+ startPosition: node.startPosition,
145
+ endPosition: node.endPosition,
146
+ }
109
147
  }
110
148
 
111
149
  function patternModuleTag(node) {
112
- return { type: 'pattern_tag', ...(moduleTagPattern(node) || {}) }
150
+ return {
151
+ type: 'pattern_tag',
152
+ ...(moduleTagPattern(node) || {}),
153
+ startPosition: node.startPosition,
154
+ endPosition: node.endPosition,
155
+ }
113
156
  }
114
157
 
115
- function patternDefault(_node) {
116
- return { type: 'pattern_default' }
158
+ function patternDefault(node) {
159
+ return {
160
+ type: 'pattern_default',
161
+ startPosition: node.startPosition,
162
+ endPosition: node.endPosition,
163
+ }
117
164
  }
118
165
 
119
166
  function fieldLens(node) {
120
- return { type: 'field_lens', field: fieldRef(node) }
167
+ return {
168
+ type: 'field_lens',
169
+ field: fieldRef(node),
170
+ startPosition: node.startPosition,
171
+ endPosition: node.endPosition,
172
+ }
121
173
  }
122
174
 
123
175
  function moduleFieldLens(node) {
124
- return { type: 'field_lens', ...(moduleFieldRef(node) || {}) }
176
+ return {
177
+ type: 'field_lens',
178
+ ...(moduleFieldRef(node) || {}),
179
+ startPosition: node.startPosition,
180
+ endPosition: node.endPosition,
181
+ }
125
182
  }
126
183
 
127
184
  function writeSlot(node) {
128
- return { type: 'slot_write', value: slotWrite(node) }
185
+ return {
186
+ type: 'slot_write',
187
+ value: slotWrite(node),
188
+ startPosition: node.startPosition,
189
+ endPosition: node.endPosition,
190
+ }
129
191
  }
130
192
 
131
193
  function readSlot(node) {
132
- return { type: 'slot_read', value: slotRead(node) }
194
+ return {
195
+ type: 'slot_read',
196
+ value: slotRead(node),
197
+ startPosition: node.startPosition,
198
+ endPosition: node.endPosition,
199
+ }
133
200
  }
134
201
 
135
202
  function rawFromString(node) {
136
- return { type: 'raw', value: rawString(node) }
203
+ return {
204
+ type: 'raw',
205
+ value: rawString(node),
206
+ startPosition: node.startPosition,
207
+ endPosition: node.endPosition,
208
+ }
137
209
  }
138
210
 
139
211
  function raw(node) {
140
- return { type: 'raw', value: rawValue(node) }
212
+ return {
213
+ type: 'raw',
214
+ value: rawValue(node),
215
+ startPosition: node.startPosition,
216
+ endPosition: node.endPosition,
217
+ }
141
218
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@algosail/parser",
3
- "version": "0.0.3",
3
+ "version": "0.0.5",
4
4
  "description": "Parser for Sail language.",
5
5
  "license": "MIT",
6
6
  "author": "algosail",