-
-
Notifications
You must be signed in to change notification settings - Fork 81
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Initial next gen scope support for shellscript #2058
base: main
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Once again fantastic work. Left a few minor comments
packages/cursorless-vscode-e2e/src/suite/fixtures/recorded/languages/shellscript/changeArg4.yml
Outdated
Show resolved
Hide resolved
packages/cursorless-vscode-e2e/src/suite/fixtures/recorded/languages/shellscript/changeCall.yml
Outdated
Show resolved
Hide resolved
packages/cursorless-vscode-e2e/src/suite/fixtures/recorded/languages/shellscript/chuckItem.yml
Outdated
Show resolved
Hide resolved
...ges/cursorless-vscode-e2e/src/suite/fixtures/recorded/languages/shellscript/changeBranch.yml
Outdated
Show resolved
Hide resolved
queries/shellscript.scm
Outdated
|
||
;;!! var="foo" | ||
;;! ^^^^^ | ||
(string) @string @textFragment @argumentOrParameter.iteration |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
curious why this is iteration scope for "arg"? A test for that would be good
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a discussion that some of you had in another issue which I forget off hand, where iirc the consensus was that ${} expansions inside of strings were going to be referred to be as arg scopes. So I've been testing that on the shell script stuff and it seems to work pretty nicely. I can't remember offhand if I added it to nix as well, which uses similar expansions.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ohh right yeah if interpolations are args, then string should be iteration scope. Feels a bit surprising to get trapped in a string for "every arg" tho. cc/ @AndreasArvidsson
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah I'm a bit hesitant to make strings the iteration scope for arguments.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
So there are at least 3 options I guess?
- Only add an iteration scope if the string actually has an interpolation inside, so it's less surprising
- Keep interpolation as args, but just don't have an iterarion scope for the container strings (I feel like being able to target every interpolation in a string could be nice though?)
- Create a new scope and don't use args
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- is an interesting possibility. We don't usually restrict depending on whether the scope actually appears, but I could see an argument here
Re 2), you don't actually need to have an iteration scope to target every interpolation in a string. You'd just say "every arg string"
. Iteration scope is only used when there's no explicit range given for iteration. That being said, in #2128 (comment), we've started leaning towards requiring iteration scope between layers of any nested scope, so that would argue for having an iteration scope here cc/ @AndreasArvidsson
- is an interesting idea, and certainly I could see this being a fine-grained scope that gets rolled up into arg, tho we don't really support that yet
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For now I just removed the iteration scope, but keep the interpolations as args. I'll mark this unresolved in case there is some other type of iteration scope I should add in light of 2).
Oh also fwiw the infrastructure to formalize those test facets is now in place. Feel free to try it out!
|
307d7ea
to
f235bda
Compare
All issues from initial review pass are fixed. I have support for a few node types that are dependent on an updated tree-sitter-bash (vscode-parse-tree PR #77). I've also fixed lots of other quirks and edge cases I ran into. I added the initial scope facet files, but running the |
I switched to tip of bash branch, and noticed some tests breaking. I'm not sure if that was the cause, but I fixed them. Along the way I cleaned up a bit and added / updated facet tests. The auto facet update worked fine for me fwiw See my fixes; haven't looked at all the code, but possible some of the techniques there apply elsewhere? But if not limk and I'll continue reviewing |
How do I actually run this for a subset? There is very little documentation for the regular expressions, and the example folders don't seem to actually exist. |
See https://www.cursorless.org/docs/contributing/#running-a-subset-of-tests Thought the regex was documented somewhere. It’s just the one supported by mocha cli. A PR to add a link to that to those docs would be much appreciated (pasted from slack form posterity)
Sorry, not sure I follow. Which example folders? |
My problem was the regex. I realized after I ran the non subset and it worked. My regex was set to languages/shellscript because that's what I had been doing for the test cases (not sure why I prefixed languages/ in the first place), and of course scope doesn't have the languages/ subdir. Fwiw, one error I get when running tests (though doesn't impact the scopes updating):
Not sure if this is another issue with TMPDIR style stuff or what. Didn't get time to dig into it yet. |
Is your cursorless talon up to date? |
lmk if you want me to review the code or if you wanted to do another pass first |
I'll take a look at it tomorrow to see if I spot any candidates for using removal, and also add the fixtures I've been working on. |
d21b706
to
59a9341
Compare
Trying to update this in light of the conflict from getLanguageScopeSupport being deleted, and seeing new pre-commit errors I've not run into before:
Will look into it, but just throwing it out here in case you happen to know what to do. |
The tailwind bug is from commit de37ebf. This adds an external pnpm package dependency that pre-commit itself won't install, so pre-commit install is no longer enough. Nixos doesn't have a prettier-plugin-tailwindcss npm package, so atm I have to manually pnpm install -w -D prettier-plugin-tailwindcss, which then changes the pnpm-lock.yaml file lol. :/ I will create a nix package for prettier-plugin-tailwindcss and get it upstreamed, but in the meantime I'll have to use a bit of a hack to get that to work I guess (will just install the package in the dev shell and then git restore the lock file..) The second bug seems to be related to me recently changing the flake.nix file to use corepack per auscompgeek suggestion. Reverting it back to using hardcoded nodejs 18 makes it go away, so I will revert that latest commit in I guess, as using pre-commit wasn't something I had tested. |
Looks like a bunch of tests are breaking related to @dummy and other things which I vaguely recall fixing a long time ago, so not sure what's up, but will investigate. |
What
Adds support for some next gen scopes to
shellscript
programming language.This is something I did recently while working on some bash scripts, but haven't had time to finish it off yet.
Checklist
"change"
/"clear"
instead of"take"
for selection tests to make recorded tests easier to read"chuck"
instead of"change"
to test removal behaviour when it's interesting, especially:"chuck arg"
with single argument in list"chuck arg"
with multiple arguments in list"chuck item"
with single argument in list"chuck item"
with multiple arguments in list@textFragment
captures. Usually you want to put these on comment and string nodes. This enables"take round"
to work within comments and strings."change round"
inside a string, eg"hello (there)"
"type"
both for type annotations (egfoo: string
) and declarations (eginterface Foo {}
) (and added tests for this behaviour 😊)"item"
both for map pairs and list entries (with tests of course)Scope Support
Legend: ✓ Supported, ✗ Not supported, _ Not applicable
list
@list
inside list
@list.interior
map
@map
inside map
@map.interior
key
@collectionKey
funk
@namedFunction
inside funk
@namedFunction.interior
funk name
@functionName
lambda
@anonymousFunction
inside lambda
@anonymousFunction.interior
name
@name
value
@value
value
@value
value
@value
state
@statement
if state
@ifStatement
condition
@condition
condition
@condition
condition
@condition
condition
@condition
condition
@condition
condition
@condition
branch
@branch
inside branch
@branch.interior
comment
@comment
comment
@comment
inside comment
@comment.interior
string
@string
string
@string
@textFragment
call
@functionCall
callee
@functionCallee
arg
@argumentOrParameter
arg
@argumentOrParameter
arg
@argumentOrParameter
class
@class
inside class
@class.interior
class name
@className
type
@type
regex
@regex