[Javascript AST] 1. Continue: Write a simple Babel plugin

來源:互聯網
上載者:User

標籤:turn   find   pre   res   logs   variable   idt   code   src   

We want to write a Babel Plugin, which move ‘const versionRegex = /(/d+)\.(/d+)\.(/d+)/gi‘ out of function scope and put it into global scope.

Code:

function getVersion(versionString) { const versionRegex = /(\d+)\.(\d+)\.(\d+)/gi var x = /foo/.text(‘thing‘) const [, major, minor, patch] = versionRegex.exec(versionString) return {major, minor, patch}}

 

AST:

export default function (babel) {  const { types: t } = babel;    return {    name: "ast-transform", // not required    visitor: {      RegExpLiteral(path) {        // We only want to locate         // const versionRegex = /(\d+)\.(\d+)\.(\d+)/gi        // NOT        // var x = /foo/.text(‘thing‘)        // for versionRegex, because it is a VariableDeclarator, it has init prop        // for /foo/, it is under MemeberExpression‘s object prop        if(path.parentKey !== ‘init‘) {          return;        }                 // Now we locate const versionRegex = /(\d+)\.(\d+)\.(\d+)/gi        // we want to generate a unqi id for id        const program = path.find(parent => parent.isProgram())        const variableDeclarator = path.find(parent => parent.isVariableDeclarator())        const variableDeclaration = path.find(parent => parent.isVariableDeclaration())        const {            node: {                id: {name: originalName}            }        } = variableDeclarator        const newName = program.scope.generateUidIdentifier(originalName)        console.log(variableDeclaration)        // rename the versionRegex        path.scope.rename(newName.name, originalName)                // move the regex out of function scope        // create new versionRegex variable out of function scope        // and assign the value to it        const newVariableDeclaration = t.variableDeclaration(variableDeclaration.node.kind, [            t.variableDeclarator(newName, path.node)        ])        program.node.body.unshift(newVariableDeclaration)        // last remove the old one        variableDeclarator.remove()              }    }  };}

 

 

 

[Javascript AST] 1. Continue: Write a simple Babel plugin

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.