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

	/**
	* Reports the error message.
	*
	* @private
	* @param {ASTNode} node - node to examine
	* @param {string} msg - error message
	*/
	function report( node, msg ) {
		context.report({
			'node': node,
			'message': msg
		});
	}

	/**
	* Checks whether return annotations in example code follow marker style conventions.
	*
	* @private
	* @param {ASTNode} node - node to examine
	*/
	function validate( node ) {
		var exampleAST;
		var comments;
		var jsdoc;
		var descr;
		var tags;
		var ast;
		var msg;
		var tag;
		var i;
		var j;

		jsdoc = findJSDoc( source, node );
		if ( isObject( jsdoc ) ) {
			ast = parseJSDoc( jsdoc.value, DOPTS );
			tags = ast.tags;
			for ( i = 0; i < tags.length; i++ ) {
				tag = tags[ i ];
				comments = [];
				descr = tag.description;

				// Handle special case where example code contains JSDoc comments with escaped ending:
				descr = replace( descr, '\\/', '/' );

				// Replace trailing comments to ensure that they are not mistakenly regarded as return annotations:
				descr = replace( descr, RE_TRAILING_COMMENT, ';\n' );

				try {
					exampleAST = parseJS( descr, {
						'onComment': comments,
						'locations': true,
						'ecmaVersion': 'latest'
					});
					for ( j = 0; j < comments.length; j++ ) {
						msg = checkComment( comments[ j ], exampleAST );
						if ( msg ) {
							report( node, msg );
						}
					}
				} catch ( err ) {
					report( node, 'Error while parsing code: '+err.message );
				}
			}
		}
	}

	return {
		'FunctionExpression:exit': validate,
		'FunctionDeclaration:exit': validate,
		'VariableDeclaration:exit': validate,
		'ExpressionStatement:exit': validate
	};
}
Rule for validating that property names in return annotations inside of example code are quoted using single quotes.

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