function getKind(node) {
	const parent = node.parent;
	let kind;

	if (node.type === "ArrowFunctionExpression") {
		return "arrowFunctions";
	}

	// Detects main kind.
	if (parent.type === "Property") {
		if (parent.kind === "get") {
			return "getters";
		}
		if (parent.kind === "set") {
			return "setters";
		}
		kind = parent.method ? "methods" : "functions";
	} else if (parent.type === "MethodDefinition") {
		if (parent.kind === "get") {
			return "getters";
		}
		if (parent.kind === "set") {
			return "setters";
		}
		if (parent.kind === "constructor") {
			return "constructors";
		}
		kind = "methods";
	} else {
		kind = "functions";
	}

	// Detects prefix.
	let prefix;

	if (node.generator) {
		prefix = "generator";
	} else if (node.async) {
		prefix = "async";
	} else {
		return kind;
	}
	return prefix + kind[0].toUpperCase() + kind.slice(1);
}
Gets the kind of a given function node.
@param {ASTNode} node A function node to get. This is one of
     an ArrowFunctionExpression, a FunctionDeclaration, or a
     FunctionExpression.
@returns {string} The kind of the function. This is one of "functions",
     "arrowFunctions", "generatorFunctions", "asyncFunctions", "methods",
     "generatorMethods", "asyncMethods", "getters", "setters", and
     "constructors".