function processFooter( node ) {
		var hasRefSeparator = false;
		var coAuthoredBy = false;
		var closesIssue = false;
		var reference = {};
		var hasPRURL = false;

		visit( node, [ 'type', 'separator', 'text' ], processFooterNode );
		if ( hasRefSeparator && RE_DIGITS.test( reference.ref ) ) {
			reference.prefix = '#';
			out.references.push( reference );
		}
		if ( hasPRURL || closesIssue || coAuthoredBy ) {
			out.mentions.push( reference );
		}

		/**
		* Processes a footer node and extracts relevant information.
		*
		* @private
		* @param {Object} node - AST node
		*/
		function processFooterNode( node ) {
			switch ( node.type ) {
			case 'type':
				if ( node.value === 'PR-URL' ) {
					hasPRURL = true;
				} else if ( RE_CLOSES.test( node.value ) ) {
					closesIssue = true;
				} else if ( RE_CO_AUTHORED_BY.test( node.value ) ) {
					coAuthoredBy = true;
				}
				reference.action = node.value;
				break;
			case 'separator':
				if ( node.value.indexOf( '#' ) !== -1 ) {
					hasRefSeparator = true;
				}
				break;
			case 'text':
				if ( contains( node.value, options.issueURL ) ) {
					reference.url = node.value;
					reference.ref = node.value.split( '/' ).pop();
				}
				else if ( contains( node.value, options.prURL ) ) {
					hasPRURL = true;
					reference.url = node.value;
					reference.ref = node.value.split('/').pop();
				}
				if ( !reference.url ) {
					// Case: reference is not an issue or PR URL
					if ( RE_LEADING_HASH.test( node.value ) ) {
						hasRefSeparator = true;
						reference.ref = replace( node.value, RE_LEADING_HASH, '' );
					} else {
						reference.ref = node.value;
					}
					if ( closesIssue ) {
						reference.url = options.issueURL + reference.ref;
					} else if ( hasPRURL ) {
						reference.url = options.prURL + reference.ref;
					}
				}
				break;
			default:
				break;
			}
		}
	}
Processes a footer node and extracts relevant information.

@private
@param {Object} node - AST node