|
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