function hasErrorHandler(node) {
			let ancestor = node;

			while (
				!astUtils.isFunction(ancestor) &&
				ancestor.type !== "Program"
			) {
				if (
					ancestor.parent.type === "TryStatement" &&
					(ancestor === ancestor.parent.block ||
						(ancestor === ancestor.parent.handler &&
							ancestor.parent.finalizer))
				) {
					return true;
				}
				ancestor = ancestor.parent;
			}
			return false;
		}
Determines whether a thrown error from this node will be caught/handled within this function rather than immediately halting
this function. For example, a statement in a `try` block will always have an error handler. A statement in
a `catch` block will only have an error handler if there is also a `finally` block.
@param {ASTNode} node A node representing a location where an could be thrown
@returns {boolean} `true` if a thrown error will be caught/handled in this function