function visitMethod(traverse, node, path, state) {
  path.unshift(node);
  traverse(node.key, path, state);

  path.unshift(node.value);
  traverse(node.value.params, path, state);
  node.value.rest && traverse(node.value.rest, path, state);
  node.value.returnType && traverse(node.value.returnType, path, state);
  traverse(node.value.body, path, state);

  path.shift();

  path.shift();
  return false;
}
Methods cause trouble, since esprima parses them as a key/value pair, where
the location of the value starts at the method body. For example
{ bar(x:number,...y:Array<number>):number {} }
is parsed as
{ bar: function(x: number, ...y:Array<number>): number {} }
except that the location of the FunctionExpression value is 40-something,
which is the location of the function body. This means that by the time we
visit the params, rest param, and return type organically, we've already
catchup()'d passed them.