function create( context ) {
	/**
	* Reports the error message.
	*
	* @private
	* @param {ASTNode} node - node to report
	* @param {string} message - error message
	* @param {Array} range - array containing start and end indices for the fix
	*/
	function report( node, message, range ) {
		context.report({
			'node': node,
			'message': message,
			'fix': fix
		});

		/**
		* Fixes the error by replacing the text in the specified range.
		*
		* @private
		* @param {Object} fixer - object for fixing the error
		* @returns {Object} fixer object
		*/
		function fix( fixer ) {
			return fixer.replaceTextRange( range, ' ' );
		}
	}

	/**
	* Checks whether require path has correct spacing.
	*
	* @private
	* @param {ASTNode} node - node to examine
	*/
	function validate( node ) {
		var tokens;
		var source;
		var close;
		var open;
		var arg;

		if ( node.callee.name === 'require' ) {
			source = context.getSourceCode();
			tokens = source.getTokens( node );
			open = tokens[ 1 ];
			close = tokens[ tokens.length - 1 ];
			arg = node.arguments[ 0 ];

			// Check space after opening parenthesis:
			if ( source.getText().slice( open.range[1], arg.range[0] ) !== ' ' ) {
				report( node, 'There should be exactly one space after the opening parenthesis in require calls.', [ open.range[1], arg.range[0] ] );
			}

			// Check space before closing parenthesis:
			if ( source.getText().slice( arg.range[1], close.range[0] ) !== ' ' ) {
				report( node, 'There should be exactly one space before the closing parenthesis in require calls.', [ arg.range[1], close.range[0] ] );
			}
		}
	}

	return {
		'CallExpression': validate
	};
}
Rule for enforcing spaces in `require()` statements.

@param {Object} context - ESLint context
@returns {Object} validators