diff --git a/.gitignore b/.gitignore index 239ecff..22fbdbe 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ node_modules yarn.lock +package-lock.json diff --git a/homework/1/rename.js b/homework/1/rename.js index 0bbd947..88020d8 100644 --- a/homework/1/rename.js +++ b/homework/1/rename.js @@ -3,23 +3,41 @@ const astring = require('astring'); const traverse = require('../../common/traverse'); function transform(root, originName, targetName) { - // 遍历所有节点 - return traverse((node, ctx, next) => { + // 遍历所有节点 + return traverse((node, ctx, next) => { - // TODO: 作业代码写在这里 - if (node.type === 'xxx') { - } + // TODO: 作业代码写在这里 + if (node.type === 'FunctionDeclaration' || node.type === 'VariableDeclarator') { + if (node.id.name === originName) { + node.id.name = targetName + } + } - // 继续往下遍历 - return next(node, ctx) - })(root); + if (node.type === 'MemberExpression' && node.computed) { + if (node.object.object.object.name === originName) { + node.object.object.object.name = targetName + } + } + + if (node.type === 'BinaryExpression') { + if (node.left.name === originName) { + node.left.name = targetName + } + if (node.right.name === originName) { + node.right.name = targetName + } + } + + // 继续往下遍历 + return next(node, ctx) + })(root); } function rename(code, originName, targetName) { - const ast = acorn.parse(code, { - ecmaVersion: 5, - }) - return astring.generate(transform(ast, originName, targetName)) + const ast = acorn.parse(code, { + ecmaVersion: 5, + }) + return astring.generate(transform(ast, originName, targetName)) } module.exports = rename \ No newline at end of file