-
-
Notifications
You must be signed in to change notification settings - Fork 85
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
Support inline snippets; add Talon snippet api #1329
Conversation
a8982b1
to
326fca1
Compare
1e1090f
to
d26d5ae
Compare
326fca1
to
9e1f8b4
Compare
61bb092
to
768bec2
Compare
8d40782
to
74ca863
Compare
eb35e6d
to
ac640e1
Compare
8c63db1
to
e9f164d
Compare
8bf2471
to
84df8d3
Compare
packages/cursorless-vscode-e2e/src/suite/fixtures/recorded/actions/snippets/customWrapLine2.yml
Show resolved
Hide resolved
84df8d3
to
064d992
Compare
064d992
to
8483c4f
Compare
8483c4f
to
37ca842
Compare
37ca842
to
b07458b
Compare
@@ -1,6 +1,6 @@ | |||
languageId: plaintext | |||
command: | |||
version: 4 | |||
version: 5 |
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.
A bit annoying we'll have to bump this one every time we increment command version number, but I think it's not unreasonable: we probably do want to be ensuring that the test case recorder is recording tests using the latest command version
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.
Maybe we should have a test to make sure that this test actually contains the latest version?
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.
The test case recorder test fails on this one if you don't bump. Are you saying we should add another test?
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.
Shouldn't this line always be the last person then?
version: 4, |
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.
I believe the command that gets captured by recorder is after we do normalisation / upgrade at the start of running the command. So even if we pass 4 there, the command that gets captured has version 5
As to whether that's the right thing to do, I could go either way. I think slightly better to capture normalised version. If we want to be able to record legacy command, we could add a flag to test case recorder to enable that
Tempted to switch |
But isn't that more or less the same thing? In one instance you send a custom snippet in the other case you define a custom snippet. |
The confusing thing is that if you want to use one of the custom snippets you've defined, you don't use custom snippet arg, you use named snippet |
|
- Fixes #1324 - Fixes #1325 Note that I created a Talon-side insertion api that supports the full set of options, including substitutions, targets, and scopes, but decided to leave it out for now because I'm not sure exactly how it should look and we don't need it for the mathfly support we're planning to use it for. In particular, we should probably figure out #803 before we implement the more complex api because snippets really want a destination, not a target. I did use the complex Talon-side api to record some tests of the extension api, though Here is the complex Talon snippet insertion api in case useful at some point <details><summary>Complex talon api</summary> ```diff From e39e03e3a06a6db4f1edb245a5225037d0ea08d3 Mon Sep 17 00:00:00 2001 From: Pokey Rule <[email protected]> Date: Fri, 24 Mar 2023 14:22:40 +0000 Subject: [PATCH] Complex insert snippet Talon api --- cursorless-talon/src/snippets.py | 35 ++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/cursorless-talon/src/snippets.py b/cursorless-talon/src/snippets.py index a9f100f58..409512011 100644 --- a/cursorless-talon/src/snippets.py +++ b/cursorless-talon/src/snippets.py @@ -91,15 +91,34 @@ class Actions: }, ) - def cursorless_insert_snippet(body: str): + def cursorless_insert_snippet( + body: str, + target: Optional[dict] = None, + scope: Optional[str] = None, + snippet_variable: Optional[str] = None, + text: Optional[str] = None, + ): """Inserts a custom snippet""" - actions.user.cursorless_implicit_target_command( - "insertSnippet", - { - "type": "custom", - "body": body, - }, - ) + snippet_arg: dict[str, Any] = { + "type": "custom", + "body": body, + } + if scope: + snippet_arg["scopeType"] = {"type": scope} + if snippet_variable: + snippet_arg["substitutions"] = {snippet_variable: text} + + if target: + actions.user.cursorless_single_target_command_with_arg_list( + "insertSnippet", + target, + [snippet_arg], + ) + else: + actions.user.cursorless_implicit_target_command( + "insertSnippet", + snippet_arg, + ) def cursorless_wrap_with_snippet_by_name( name: str, variable_name: str, target: dict -- 2.39.2 ``` </details> ## Checklist - [x] I have added [tests](https://www.cursorless.org/docs/contributing/test-case-recorder/) - [x] I have updated the [docs](https://github.com/cursorless-dev/cursorless/tree/main/docs) and [cheatsheet](https://github.com/cursorless-dev/cursorless/tree/main/cursorless-talon/src/cheatsheet) - [x] I have not broken the cheatsheet
- Fixes cursorless-dev#1324 - Fixes cursorless-dev#1325 Note that I created a Talon-side insertion api that supports the full set of options, including substitutions, targets, and scopes, but decided to leave it out for now because I'm not sure exactly how it should look and we don't need it for the mathfly support we're planning to use it for. In particular, we should probably figure out cursorless-dev#803 before we implement the more complex api because snippets really want a destination, not a target. I did use the complex Talon-side api to record some tests of the extension api, though Here is the complex Talon snippet insertion api in case useful at some point <details><summary>Complex talon api</summary> ```diff From e39e03e3a06a6db4f1edb245a5225037d0ea08d3 Mon Sep 17 00:00:00 2001 From: Pokey Rule <[email protected]> Date: Fri, 24 Mar 2023 14:22:40 +0000 Subject: [PATCH] Complex insert snippet Talon api --- cursorless-talon/src/snippets.py | 35 ++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/cursorless-talon/src/snippets.py b/cursorless-talon/src/snippets.py index a9f100f58..409512011 100644 --- a/cursorless-talon/src/snippets.py +++ b/cursorless-talon/src/snippets.py @@ -91,15 +91,34 @@ class Actions: }, ) - def cursorless_insert_snippet(body: str): + def cursorless_insert_snippet( + body: str, + target: Optional[dict] = None, + scope: Optional[str] = None, + snippet_variable: Optional[str] = None, + text: Optional[str] = None, + ): """Inserts a custom snippet""" - actions.user.cursorless_implicit_target_command( - "insertSnippet", - { - "type": "custom", - "body": body, - }, - ) + snippet_arg: dict[str, Any] = { + "type": "custom", + "body": body, + } + if scope: + snippet_arg["scopeType"] = {"type": scope} + if snippet_variable: + snippet_arg["substitutions"] = {snippet_variable: text} + + if target: + actions.user.cursorless_single_target_command_with_arg_list( + "insertSnippet", + target, + [snippet_arg], + ) + else: + actions.user.cursorless_implicit_target_command( + "insertSnippet", + snippet_arg, + ) def cursorless_wrap_with_snippet_by_name( name: str, variable_name: str, target: dict -- 2.39.2 ``` </details> ## Checklist - [x] I have added [tests](https://www.cursorless.org/docs/contributing/test-case-recorder/) - [x] I have updated the [docs](https://github.com/cursorless-dev/cursorless/tree/main/docs) and [cheatsheet](https://github.com/cursorless-dev/cursorless/tree/main/cursorless-talon/src/cheatsheet) - [x] I have not broken the cheatsheet
Note that I created a Talon-side insertion api that supports the full set of options, including substitutions, targets, and scopes, but decided to leave it out for now because I'm not sure exactly how it should look and we don't need it for the mathfly support we're planning to use it for. In particular, we should probably figure out #803 before we implement the more complex api because snippets really want a destination, not a target. I did use the complex Talon-side api to record some tests of the extension api, though
Here is the complex Talon snippet insertion api in case useful at some point
Complex talon api
Checklist