function main( context ) {
	var source = context.getSourceCode();

	/**
	* Reports the error message.
	*
	* @private
	* @param {Object} node - node to report
	*/
	function report( node ) {
		context.report({
			'node': node,
			'message': 'Missing empty line between require statement and code in JSDoc example'
		});
	}

	/**
	* Processes an example tag description.
	*
	* @private
	* @param {string} description - example description
	* @param {Object} node - node to report
	*/
	function processExample( description, node ) {
		var nextLine;
		var lines;
		var i;

		lines = description.split( reEOL.REGEXP );
		for ( i = 0; i < lines.length; i++ ) {
			if ( hasRequire( lines[ i ] ) ) {
				if ( i + 1 >= lines.length ) {
					break;
				}
				nextLine = lines[ i+1 ];
				if ( isEmpty( nextLine ) ) {
					continue;
				}

				// If next line is neither empty nor another require, report the error:
				if ( !hasRequire( nextLine ) ) {
					report( node );
					return;
				}
			}
		}
	}

	/**
	* Checks if a JSDoc comment contains examples with `require` statements which are not followed by empty lines.
	*
	* @private
	* @param {Object} node - node to examine
	*/
	function validate( node ) {
		var jsdoc;
		var tags;
		var tag;
		var ast;
		var j;

		jsdoc = findJSDoc( source, node );
		if ( isObject( jsdoc ) ) {
			ast = parseJSDoc( jsdoc.value, DOPTS );
			tags = ast.tags;
			if ( isEmptyArray( tags ) ) {
				return;
			}
			for ( j = 0; j < tags.length; j++ ) {
				tag = tags[ j ];
				if ( tag.title === 'example' && tag.description ) {
					processExample( tag.description, node );
				}
			}
		}
	}

	return {
		'FunctionDeclaration': validate,
		'VariableDeclaration': validate,
		'ExpressionStatement': validate
	};
}
Rule to enforce empty lines between `require` statements and code in JSDoc examples.

@param {Object} context - ESLint context
@returns {Object} rule object