function getUnsubstitutedMessagePlaceholders(message, raw, data = {}) {
	const unsubstituted = getMessagePlaceholders(message);

	if (unsubstituted.length === 0) {
		return [];
	}

	// Remove false positives by only counting placeholders in the raw message, which were not provided in the data matcher or added with a data property
	const known = getMessagePlaceholders(raw);
	const provided = Object.keys(data);

	return unsubstituted.filter(
		name => known.includes(name) && !provided.includes(name),
	);
}
Returns the placeholders in the reported messages but
only includes the placeholders available in the raw message and not in the provided data.
@param {string} message The reported message
@param {string} raw The raw message specified in the rule meta.messages
@param {undefined|Record<unknown, unknown>} data The passed
@returns {string[]} Missing placeholder names