|
1 | 1 | import {parse} from 'espree';
|
2 |
| -import {generate, attachComments} from 'escodegen'; |
3 | 2 | import estraverse from 'estraverse';
|
4 | 3 | import {analyze} from 'eslint-scope';
|
| 4 | +import {logger} from './utils/logger.js'; |
| 5 | +import {generate, attachComments} from 'escodegen'; |
5 | 6 |
|
6 | 7 | const ecmaVersion = 'latest';
|
7 | 8 | const sourceType = 'module';
|
@@ -74,12 +75,15 @@ function createSrcClosure(src) {
|
74 | 75 | */
|
75 | 76 | function generateFlatAST(inputCode, opts = {}) {
|
76 | 77 | opts = { ...generateFlatASTDefaultOptions, ...opts };
|
| 78 | + let tree = []; |
77 | 79 | const rootNode = generateRootNode(inputCode, opts);
|
78 |
| - const tree = extractNodesFromRoot(rootNode, opts); |
79 |
| - if (opts.detailed) { |
80 |
| - const scopes = getAllScopes(rootNode); |
81 |
| - for (let i = 0; i < tree.length; i++) injectScopeToNode(tree[i], scopes); |
82 |
| - tree[0].allScopes = scopes; |
| 80 | + if (rootNode) { |
| 81 | + tree = extractNodesFromRoot(rootNode, opts); |
| 82 | + if (opts.detailed) { |
| 83 | + const scopes = getAllScopes(rootNode); |
| 84 | + for (let i = 0; i < tree.length; i++) injectScopeToNode(tree[i], scopes); |
| 85 | + tree[0].allScopes = scopes; |
| 86 | + } |
83 | 87 | }
|
84 | 88 | return tree;
|
85 | 89 | }
|
@@ -115,6 +119,7 @@ function generateRootNode(inputCode, opts = {}) {
|
115 | 119 | if (opts.includeSrc) rootNode.srcClosure = createSrcClosure(inputCode);
|
116 | 120 | } catch (e) {
|
117 | 121 | if (opts.alernateSourceTypeOnFailure && e.message.includes('in strict mode')) rootNode = parseCode(inputCode, {...parseOpts, sourceType: 'script'});
|
| 122 | + else logger.debug(e); |
118 | 123 | }
|
119 | 124 | return rootNode;
|
120 | 125 | }
|
@@ -279,15 +284,17 @@ function matchScopeToNode(node, allScopes) {
|
279 | 284 | */
|
280 | 285 | async function generateFlatASTAsync(inputCode, opts = {}) {
|
281 | 286 | opts = { ...generateFlatASTDefaultOptions, ...opts };
|
282 |
| - const rootNode = generateRootNode(inputCode, opts); |
283 |
| - const tree = extractNodesFromRoot(rootNode, opts); |
| 287 | + let tree = []; |
284 | 288 | const promises = [];
|
285 |
| - if (opts.detailed) { |
286 |
| - const scopes = getAllScopes(rootNode); |
287 |
| - for (let i = 0; i < tree.length; i++) { |
288 |
| - promises.push(injectScopeToNodeAsync(tree[i], scopes)); |
| 289 | + const rootNode = generateRootNode(inputCode, opts); |
| 290 | + if (rootNode) { |
| 291 | + tree = extractNodesFromRoot(rootNode, opts); |
| 292 | + if (opts.detailed) { |
| 293 | + const scopes = getAllScopes(rootNode); |
| 294 | + for (let i = 0; i < tree.length; i++) { |
| 295 | + promises.push(injectScopeToNodeAsync(tree[i], scopes)); |
| 296 | + } |
289 | 297 | }
|
290 |
| - |
291 | 298 | }
|
292 | 299 | return Promise.all(promises).then(() => tree);
|
293 | 300 | }
|
|
0 commit comments