123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- 'use strict';
- var estraverse = require('estraverse');
- var Syntax = estraverse.Syntax;
- /**
- * Change `assert` to `power-assert` destructively.
- *
- * @param {Object} ast
- * @return {Object}
- */
- function empowerAssert(ast) {
- estraverse.traverse(ast, {
- enter: enter
- });
- return ast;
- }
- /**
- * @param {Object} node
- * @param {Object} parent
- */
- function enter(node, parent) {
- if (node.type === Syntax.AssignmentExpression) {
- if (node.operator !== '=') {
- return;
- }
- if (!isIdentifier(node.left, 'assert')) {
- return;
- }
- if (replaceAssertIfMatch(node.right)) {
- return;
- }
- }
- if (node.type === Syntax.VariableDeclarator) {
- if (!isIdentifier(node.id, 'assert')) {
- return;
- }
- if (replaceAssertIfMatch(node.init)) {
- return;
- }
- }
- if (node.type === Syntax.ImportDeclaration) {
- var source = node.source;
- if (!source || source.type !== Syntax.Literal || source.value !== 'assert') {
- return;
- }
- changeAssertToPowerAssert(source);
- }
- }
- /**
- * @param {Object} node
- * @return {boolean} true if `assert` is replaced to `power-assert`.
- */
- function replaceAssertIfMatch(node) {
- var target;
- if (node === null) {
- return false;
- } else if (node.type === Syntax.CallExpression) {
- target = node;
- } else if (node.type === Syntax.MemberExpression) {
- target = node.object;
- } else {
- return false;
- }
- if (isRequireAssert(target)) {
- changeAssertToPowerAssert(target.arguments[0]);
- return true;
- }
- return false;
- }
- /**
- * @param {Object} node A Literal node.
- */
- function changeAssertToPowerAssert(node) {
- node.value = 'power-assert';
- }
- /**
- * @param {Object} node A CallExpression node.
- * @return {boolean} true if the node is `require('assert')`.
- */
- function isRequireAssert(node) {
- if (!node || node.type !== Syntax.CallExpression) {
- return false;
- }
- if (!isIdentifier(node.callee, 'require')) {
- return false;
- }
- var arg = node.arguments[0];
- if (!arg || arg.type !== Syntax.Literal || arg.value !== 'assert') {
- return false;
- }
- return true;
- }
- /**
- * @param {Object} node
- * @param {string} name
- * @return {boolean}
- */
- function isIdentifier(node, name) {
- return node &&
- node.type === Syntax.Identifier &&
- node.name === name;
- }
- module.exports = empowerAssert;
- empowerAssert.enter = enter;
|