function report(property, side, whitespace, expected, mode) {
			const diff = whitespace.length - expected;

			if (
				((diff && mode === "strict") ||
					(diff < 0 && mode === "minimum") ||
					(diff > 0 && !expected && mode === "minimum")) &&
				!(expected && containsLineTerminator(whitespace))
			) {
				const nextColon = getNextColon(property.key),
					tokenBeforeColon = sourceCode.getTokenBefore(nextColon, {
						includeComments: true,
					}),
					tokenAfterColon = sourceCode.getTokenAfter(nextColon, {
						includeComments: true,
					}),
					isKeySide = side === "key",
					isExtra = diff > 0,
					diffAbs = Math.abs(diff),
					spaces = Array(diffAbs + 1).join(" ");

				const locStart = isKeySide
					? tokenBeforeColon.loc.end
					: nextColon.loc.start;
				const locEnd = isKeySide
					? nextColon.loc.start
					: tokenAfterColon.loc.start;
				const missingLoc = isKeySide
					? tokenBeforeColon.loc
					: tokenAfterColon.loc;
				const loc = isExtra
					? { start: locStart, end: locEnd }
					: missingLoc;

				let fix;

				if (isExtra) {
					let range;

					// Remove whitespace
					if (isKeySide) {
						range = [
							tokenBeforeColon.range[1],
							tokenBeforeColon.range[1] + diffAbs,
						];
					} else {
						range = [
							tokenAfterColon.range[0] - diffAbs,
							tokenAfterColon.range[0],
						];
					}
					fix = function (fixer) {
						return fixer.removeRange(range);
					};
				} else {
					// Add whitespace
					if (isKeySide) {
						fix = function (fixer) {
							return fixer.insertTextAfter(
								tokenBeforeColon,
								spaces,
							);
						};
					} else {
						fix = function (fixer) {
							return fixer.insertTextBefore(
								tokenAfterColon,
								spaces,
							);
						};
					}
				}

				let messageId;

				if (isExtra) {
					messageId = side === "key" ? "extraKey" : "extraValue";
				} else {
					messageId = side === "key" ? "missingKey" : "missingValue";
				}

				context.report({
					node: property[side],
					loc,
					messageId,
					data: {
						computed: property.computed ? "computed " : "",
						key: getKey(property),
					},
					fix,
				});
			}
		}
Reports an appropriately-formatted error if spacing is incorrect on one
side of the colon.
@param {ASTNode} property Key-value pair in an object literal.
@param {string} side Side being verified - either "key" or "value".
@param {string} whitespace Actual whitespace string.
@param {number} expected Expected whitespace length.
@param {string} mode Value of the mode as "strict" or "minimum"
@returns {void}