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;
};
