zoukankan      html  css  js  c++  java
  • [AST Babel] Create a simple babel plugin

    For example, we have the source code:

    getVersison('3.4.5')
    
    function getVersion(versionString) {
        const versionRegex = /(d).(d).(d+)/
        const [, major, minor, patch] = versionRegex.exec(versionString)
        return {major, minor, patch}
    }

    We want to transform it into:

    const _versionRegex = /(d).(d).(d+)/;
    getVersison('3.4.5')
    
    function getVersion(versionString) {
        const [, major, minor, patch] = _versionRegex.exec(versionString)
        return {major, minor, patch}
    }

    Babel plugin:

    export default function (babel) {
      const { types: t } = babel;
      
      return {
        name: "ast-transform", // not required
        visitor: {
          RegExpLiteral(path) {
            const name = path.parent.id.name; //versionRege
            const newIdentifier = path.scope.generateUidIdentifier(name) // _versionRegex
            const variableDeclaration = t.variableDeclaration('const', [
                t.variableDeclarator(newIdentifier, path.node)
            ]) // const _versionRegex = /(d).(d).(d+)/;
            
            console.log(variableDeclaration)
            
            
            /*
            - const [, major, minor, patch] = versionRegex.exec(versionString)
            + const [, major, minor, patch] = _versionRegex.exec(versionString)
            */
            path.scope.rename(name, newIdentifier.name)
            
            const program = path.findParent(
             t.isProgram
            )
            
            console.log(program.node.body)
            
            program.node.body.unshift(variableDeclaration) // + const _versionRegex = /(d).(d).(d+)/;
            
            path.parentPath.remove() // - const versionRegex = /(d).(d).(d+)/
          }
        }
      };
    }
  • 相关阅读:
    001_jdk配置
    mysql(5.7)安装教程
    mysql(5.6)安装教程
    外网发布
    蓝桥 历届试题 分考场
    蓝桥 历届试题 合根植物
    Codeforces Round #650 (Div. 3) D : Task On The Board
    HDU 3336 Count the string
    leetcode [238. 除自身以外数组的乘积]
    leetcode [837. 新21点]
  • 原文地址:https://www.cnblogs.com/Answer1215/p/12332952.html
Copyright © 2011-2022 走看看