export default function isReference ( node, parent ) {
	if ( node.type === 'MemberExpression' ) {
		return !node.computed && isReference( node.object, node );
	}

	if ( node.type === 'Identifier' ) {
		if ( !parent ) return true;

		// TODO is this right?
		if ( parent.type === 'MemberExpression' ) return parent.computed || node === parent.object;

		// disregard the `bar` in { bar: foo }
		if ( parent.type === 'Property' && node !== parent.value ) return false;

		// disregard the `bar` in `class Foo { bar () {...} }`
		if ( parent.type === 'MethodDefinition' ) return false;

		// disregard the `bar` in `export { foo as bar }`
		if ( parent.type === 'ExportSpecifier' && node !== parent.local ) return;

		return true;
	}
}

@@ -193,16 +193,212 @@
 er' ) %7B%0A
+%09%09// the only time we could have an identifier node without a parent is%0A%09%09// if it's the entire body of a function without a block statement %E2%80%93%0A%09%09// i.e. an arrow function expression like %60a =%3E a%60%0A
 %09%09if ( !

add comment re arrow function expression special case