cursorless icon indicating copy to clipboard operation
cursorless copied to clipboard

Filter instances to only include matches that have same scope type as input

Open pokey opened this issue 2 years ago • 6 comments

We already do this when we detect that the input for "instance" is a token or word, but we should do it for other scopes. We should also construct a target of the right scope type. For example:

const aaa = bbb(ccc, ddd);
const eee = ccc + ddd(ccc, fff);

In this case, "chuck two instances arg cap" should give:

const aaa = bbb(ddd);
const eee = ccc + ddd(fff);

Note how:

  • It skips the ccc in = ccc + because that is not an argument
  • It cleans up commas on both ccc args, because it constructs args rather than untyped targets

I do wonder if this behaviour would be surprising? Would you see that ccc in const ccc as an instance of the same thing?

Related:

  • [ ] We should probably tackle https://github.com/cursorless-dev/cursorless/issues/1949 while we're here

Approach

  • [ ] Add a scopeType field to Target
  • [ ] Try to expand to that scopeType when we find a match, just as we do for token and word targets in instance today
  • [ ] If we can expand to that scope type and it's equal to the range, return the target we expanded to, as that has the rich info

pokey avatar Nov 28 '23 18:11 pokey

Another potential problem here: this behaviour will likely be quite surprising with "name". If I say "clear every instance name" as a poor-man's rename, it wouldn't work, because the other instances won't be names 🤔

I am starting to get the feeling that "name", "first token", etc should downgrade to "token" for inference / instance, as they are most often the problem children for this kinda thing. They're often just used as a convenient way to target a token, rather than a semantically rich scope. Idk

Cc/ @josharian

pokey avatar Nov 30 '23 14:11 pokey

I think the best way to answer that question is to play around with it a bit.

josharian avatar Nov 30 '23 16:11 josharian

Which question?

pokey avatar Nov 30 '23 17:11 pokey

Whether some scopes should be downgraded to token.

josharian avatar Nov 30 '23 18:11 josharian

Right yeah I think that makes sense. On the first question of whether requiring "name" to be "name" for instance, I'm quite confident that would bite me

pokey avatar Nov 30 '23 18:11 pokey

Update from meet-up:

  • Let's go for the approach described in this issue
  • The "every name" thing can be solved by saying "every token name", whereas the reverse can't be recovered

pokey avatar Jan 07 '24 19:01 pokey