code: function inShadow(key) {
    var path = this;
    do {
      if (path.isFunction()) {
        var shadow = path.node.shadow;
        if (shadow) {
          // this is because sometimes we may have a `shadow` value of:
          //
          //   { this: false }
          //
          // we need to catch this case if `inShadow` has been passed a `key`
          if (!key || shadow[key] !== false) {
            return path;
          }
        } else if (path.isArrowFunctionExpression()) {
          return path;
        }
  
        // normal function, we've found our function context
        return null;
      }
    } while (path = path.parentPath);
    return null;
  }
docs: Check if we're inside a shadowed function.