"use strict";

module.exports = function (t) {
  // If we can't remove the expression we'll just replace it with an empty statement.
  function removeOrVoid(path) {
    // If we are working with the expression of an expression statement we want to deal
    // with the expression statement instead.
    if (path.parentPath.isExpressionStatement({
      expression: path.node
    })) {
      path = path.parentPath;
    } // If we are working with a variable declarator and there is only one then
    // we need to look at the parent.


    if (path.isVariableDeclarator() && path.parent.declarations[0] === path.node && path.parent.declarations.length === 1) {
      path = path.parentPath;
    }

    if (!path.inList && path.scope.path.type !== "ForStatement") {
      path.replaceWith(t.emptyStatement());
    } else {
      path.remove();
    }
  }

  return removeOrVoid;
};