code: function isHeadOfExpressionStatement(node) {
  			var parent = node.parent;
  
  			while (parent) {
  				switch (parent.type) {
  					case "SequenceExpression":
  						if (parent.expressions[0] !== node || isParenthesised(node)) {
  							return false;
  						}
  						break;
  
  					case "UnaryExpression":
  					case "UpdateExpression":
  						if (parent.prefix || isParenthesised(node)) {
  							return false;
  						}
  						break;
  
  					case "BinaryExpression":
  					case "LogicalExpression":
  						if (parent.left !== node || isParenthesised(node)) {
  							return false;
  						}
  						break;
  
  					case "ConditionalExpression":
  						if (parent.test !== node || isParenthesised(node)) {
  							return false;
  						}
  						break;
  
  					case "CallExpression":
  						if (parent.callee !== node || isParenthesised(node)) {
  							return false;
  						}
  						break;
  
  					case "MemberExpression":
  						if (parent.object !== node || isParenthesised(node)) {
  							return false;
  						}
  						break;
  
  					case "ExpressionStatement":
  						return true;
  
  					default:
  						return false;
  				}
  
  				node = parent;
  				parent = parent.parent;
  			}
  
  			/* istanbul ignore next */
  			throw new Error("unreachable");
  		}
docs: Checks whether or not a given node is located at the head of ExpressionStatement.
  @param {ASTNode} node - A node to check.
  @returns {boolean} `true` if the node is located at the head of ExpressionStatement.