grasp icon indicating copy to clipboard operation
grasp copied to clipboard

How do I match two calls to the same function in the same block?

Open danielrozenberg opened this issue 7 years ago • 0 comments

I'm trying to match any body block that has two calls to the same (explicitly named) function, e.g. it should match this block:

it('should match this sub-block', () => {
  // do Javascript things
  thisFunctionShouldOnlyBeCalledOnce(123);
  // do JavaScript things
  thisFunctionShouldOnlyBeCalledOnce(456);
  // do JavaScript things
});

And it should not match this block:

it('should match this sub-block', () => {
  // do Javascript things
  thisFunctionShouldOnlyBeCalledOnce(123);
  // do JavaScript things
});

I tried a bunch of things, the "closest" I got were:

  • grasp --squery 'call[callee=#it].arguments:nth(1).body! call[callee=#funcName] ~ call[callee=#funcName]'
  • grasp --equery 'funcName(__); _$; funcName(__);

But to no avail. Is this something that can be done with grasp?

danielrozenberg avatar Jun 08 '18 19:06 danielrozenberg