瀏覽代碼

Optimised `convertCodeToStructure` method

sanex3339 7 年之前
父節點
當前提交
1820055616
共有 3 個文件被更改,包括 14 次插入19 次删除
  1. 0 0
      dist/index.js
  2. 13 18
      src/node/NodeUtils.ts
  3. 1 1
      test/unit-tests/node/node-utils/NodeUtils.spec.ts

文件差異過大導致無法顯示
+ 0 - 0
dist/index.js


+ 13 - 18
src/node/NodeUtils.ts

@@ -13,22 +13,18 @@ import { NodeMetadata } from './NodeMetadata';
 
 export class NodeUtils {
     /**
-     * @param {T} astTree
+     * @param {T} node
      * @returns {T}
      */
-    public static addXVerbatimPropertyToLiterals <T extends ESTree.Node = ESTree.Node> (astTree: T): T {
-        estraverse.replace(astTree, {
-            leave: (node: ESTree.Node) => {
-                if (NodeGuards.isLiteralNode(node)) {
-                    node['x-verbatim-property'] = {
-                        content: node.raw,
-                        precedence: escodegen.Precedence.Primary
-                    };
-                }
-            }
-        });
+    public static addXVerbatimPropertyToLiteralNode <T extends ESTree.Node = ESTree.Node> (node: T): T {
+        if (NodeGuards.isLiteralNode(node)) {
+            node['x-verbatim-property'] = {
+                content: node.raw,
+                precedence: escodegen.Precedence.Primary
+            };
+        }
 
-        return astTree;
+        return node;
     }
 
     /**
@@ -44,13 +40,12 @@ export class NodeUtils {
      * @returns {Statement[]}
      */
     public static convertCodeToStructure (code: string): ESTree.Statement[] {
-        let structure: ESTree.Program = espree.parse(code, { sourceType: 'script' });
-
-        structure = NodeUtils.addXVerbatimPropertyToLiterals(structure);
-        structure = NodeUtils.parentize(structure);
+        const structure: ESTree.Program = espree.parse(code, { sourceType: 'script' });
 
         estraverse.replace(structure, {
-            enter: (node: ESTree.Node): ESTree.Node => {
+            enter: (node: ESTree.Node, parentNode: ESTree.Node | null): ESTree.Node => {
+                NodeUtils.parentizeNode(node, parentNode);
+                NodeUtils.addXVerbatimPropertyToLiteralNode(node);
                 NodeMetadata.set(node, { ignoredNode: false });
 
                 return node;

+ 1 - 1
test/unit-tests/node/node-utils/NodeUtils.spec.ts

@@ -20,7 +20,7 @@ describe('NodeUtils', () => {
 
             expectedLiteralNode = NodeFactory.literalNode('value');
 
-            NodeUtils.addXVerbatimPropertyToLiterals(literalNode);
+            NodeUtils.addXVerbatimPropertyToLiteralNode(literalNode);
         });
 
         it('should add `x-verbatim-property` to `Literal` node', () => {

部分文件因文件數量過多而無法顯示