function extractRelevantChild(node) {
		const childNodes = visitorKeys[node.type].flatMap(key =>
			Array.isArray(node[key]) ? node[key] : [node[key]],
		);

		for (const childNode of childNodes) {
			if (!childNode) {
				continue;
			}

			if (isMaybeExpression(childNode)) {
				if (reproducesBadCase(recast.print(childNode).code)) {
					return extractRelevantChild(childNode);
				}
			} else if (isStatement(childNode)) {
				if (reproducesBadCase(recast.print(childNode).code)) {
					return extractRelevantChild(childNode);
				}
			} else {
				const childResult = extractRelevantChild(childNode);

				if (reproducesBadCase(recast.print(childResult).code)) {
					return childResult;
				}
			}
		}
		return node;
	}
Recursively tries to extract a descendant node from the AST that is "bad" on its own
@param {ASTNode} node A node which produces "bad" source code
@returns {ASTNode} A descendent of `node` which is also bad