function renderMessages(messages, parentIndex, rulesMeta) {
	/**
	 * Get HTML (table row) describing a message.
	 * @param {Object} message Message.
	 * @returns {string} HTML (table row) describing a message.
	 */
	return messages
		.map(message => {
			const lineNumber = message.line || 0;
			const columnNumber = message.column || 0;
			let ruleUrl;

			if (rulesMeta) {
				const meta = rulesMeta[message.ruleId];

				if (meta && meta.docs && meta.docs.url) {
					ruleUrl = meta.docs.url;
				}
			}

			return messageTemplate({
				parentIndex,
				lineNumber,
				columnNumber,
				severityNumber: message.severity,
				severityName: message.severity === 1 ? "Warning" : "Error",
				message: message.message,
				ruleId: message.ruleId,
				ruleUrl,
			});
		})
		.join("\n");
}
Get HTML (table rows) describing the messages.
@param {Array} messages Messages.
@param {number} parentIndex Index of the parent HTML row.
@param {Object} rulesMeta Dictionary containing metadata for each rule executed by the analysis.
@returns {string} HTML (table rows) describing the messages.