function checkComment( comment, ast, offset ) {
		var matches;
		var node;
		var prev;
		var type;

		matches = comment.value.match( RE_ANNOTATION );
		if ( matches ) {
			offset += 1 + comment.loc.start.column;
			prev = walk.findNodeAt( ast, null, comment.start-offset );
			type = matches[ 1 ];
			if ( !prev ) {
				// Handle case when comment refers to node on the same line:
				if ( walk.findNodeAt( ast, null, comment.start-1 ) ) {
					return null;
				}
				return 'Encountered an orphaned return annotation without a preceding node';
			}
			node = prev.node;
			switch ( type ) {
			case 'returns':
				if (
					node.type !== 'VariableDeclaration' &&
					( node.type !== 'ExpressionStatement' || node.expression.type !== 'AssignmentExpression' )
				) {
					return 'Only include `// returns` after variable declarations or assignment expressions (use `=>` after `console.log`)';
				}
				break;
			case '=>':
				if (
					node.type === 'VariableDeclaration' ||
					( node.type === 'ExpressionStatement' && node.expression === 'AssignmentExpression' )
				) {
					return 'Use `// returns` after variable declarations or assignment expressions instead of `=>`';
				}
				break;
			default:
				break;
			}
		}
		return null;
	}
Checks whether a comment is a return annotation and, if so, whether it follows marker style conventions.

@private
@param {string} comment - comment to examine
@param {ASTNode} ast - node to examine
@param {integer} offset - non-zero if previous line ends with a comment
@returns {(string|null)} error message or null