function walker( src, ast ) {
	var opts;
	var out;

	out = [];
	opts = {
		'CallExpression': callExpression
	};
	walk.recursive( ast, null, opts );

	return out;

	/**
	* Callback invoked upon visiting a `CallExpression` AST node.
	*
	* @private
	* @param {Node} node - AST node
	* @param {*} state - start state
	* @param {Callback} clbk - callback to continue walking a sub-node
	*/
	function callExpression( node ) {
		var alias;
		var arg;
		var id;

		if ( isNamespaceAssignment( node ) === false ) {
			return;
		}
		if ( node.arguments.length ) {
			arg = node.arguments[ 1 ];
			if ( arg && arg.type === 'Literal' ) {
				alias = arg.value;
				debug( 'Namespace property: %s', alias );
			}
			arg = node.arguments[ 2 ];
			if (
				arg &&
				arg.type === 'CallExpression' &&
				arg.callee.type === 'Identifier' &&
				arg.callee.name === 'require'
			) {
				id = arg.arguments[ 0 ].value;
				debug( 'Package identifer: %s', id );
			}
			if ( alias && id ) {
				debug( 'Found a namespace assignment.' );
				out.push({
					'id': id,
					'alias': alias
				});
			}
		}
	}
}
Walks an AST in search of namespace assignments.

## Notes

-   We assume that a namespace assignment has the form

    ```javascript
    setReadOnly( namespace, '<name>', require( '<identifier>' ) );
    ```

@private
@param {string} src - source string
@param {Object} ast - AST
@returns {(EmptyArray|ObjectArray)} results