Skip to content

Commit e4fe5b8

Browse files
Migrate snippets support to community snippets, support multiple snippets (#2804)
#2353 The Cursorless side of talonhub/community#1718 Will allow Cursorless to fetch multiple snippets from community and decide which one to use. ## Release notes Cursorless can now get multiple snippets from community. One for each language. Cursorless can then pick the correct snippet for the document language regardless of which document is focused at the moment. --------- Co-authored-by: Phillip Cohen <[email protected]>
1 parent 8543660 commit e4fe5b8

File tree

138 files changed

+1216
-3274
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

138 files changed

+1216
-3274
lines changed

cursorless-talon-dev/src/cursorless_test.talon

-4
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,8 @@ test api insert snippet:
2525
user.cursorless_insert_snippet("Hello, $foo! My name is $bar!")
2626
test api insert snippet <user.cursorless_destination> :
2727
user.cursorless_insert_snippet("Hello, $foo! My name is $bar!", cursorless_destination, "statement")
28-
test api insert snippet by name:
29-
user.cursorless_insert_snippet_by_name("functionDeclaration")
3028
test api wrap with snippet <user.cursorless_target>:
3129
user.cursorless_wrap_with_snippet("Hello, $foo! My name is $bar!", cursorless_target, "foo", "statement")
32-
test api wrap with snippet by name <user.cursorless_target>:
33-
user.cursorless_wrap_with_snippet_by_name("functionDeclaration", "body", cursorless_target)
3430
test api extract decorated marks <user.cursorless_target>:
3531
user.private_cursorless_test_extract_decorated_marks(cursorless_target)
3632
test api alternate highlight nothing:

cursorless-talon-dev/src/spoken_form_test.py

-16
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,6 @@
3939

4040
mockedGetValue = ""
4141

42-
community_snippets_tag_name = "user.cursorless_use_community_snippets"
43-
4442

4543
@ctx.action_class("user")
4644
class UserActions:
@@ -99,20 +97,6 @@ def private_cursorless_spoken_form_test_mode(enable: bool): # pyright: ignore [
9997
"Cursorless spoken form tests are done. Talon microphone is re-enabled."
10098
)
10199

102-
def private_cursorless_use_community_snippets(enable: bool): # pyright: ignore [reportGeneralTypeIssues]
103-
"""Enable/disable cursorless community snippets in test mode"""
104-
if enable:
105-
tags = set(ctx.tags)
106-
tags.add(community_snippets_tag_name)
107-
ctx.tags = list(tags)
108-
else:
109-
tags = set(ctx.tags)
110-
tags.remove(community_snippets_tag_name)
111-
ctx.tags = list(tags)
112-
# Note: Test harness hangs if we don't print anything because it's
113-
# waiting for stdout
114-
print(f"Set community snippet enablement to {enable}")
115-
116100
def private_cursorless_spoken_form_test(
117101
phrase: str, # pyright: ignore [reportGeneralTypeIssues]
118102
mockedGetValue_: Optional[str],

cursorless-talon/src/actions/generate_snippet.py

+1-17
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,12 @@
11
import glob
22
from pathlib import Path
33

4-
from talon import Context, Module, actions, registry, settings
4+
from talon import Module, actions, registry, settings
55

66
from ..targets.target_types import CursorlessExplicitTarget
77

88
mod = Module()
99

10-
ctx = Context()
11-
ctx.matches = r"""
12-
tag: user.cursorless_use_community_snippets
13-
"""
14-
1510

1611
@mod.action_class
1712
class Actions:
@@ -33,17 +28,6 @@ def private_cursorless_migrate_snippets():
3328

3429
def private_cursorless_generate_snippet_action(target: CursorlessExplicitTarget): # pyright: ignore [reportGeneralTypeIssues]
3530
"""Generate a snippet from the given target"""
36-
actions.user.private_cursorless_command_no_wait(
37-
{
38-
"name": "generateSnippet",
39-
"target": target,
40-
}
41-
)
42-
43-
44-
@ctx.action_class("user")
45-
class UserActions:
46-
def private_cursorless_generate_snippet_action(target: CursorlessExplicitTarget): # pyright: ignore [reportGeneralTypeIssues]
4731
actions.user.private_cursorless_command_no_wait(
4832
{
4933
"name": "generateSnippet",

cursorless-talon/src/check_community_repo.py

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
required_actions = [
1111
"user.homophones_get",
12+
"user.insert_snippet_by_name",
1213
"user.reformat_text",
1314
]
1415

cursorless-talon/src/snippet_cursorless.talon

-14
This file was deleted.

cursorless-talon/src/snippet_types.py

+77
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
from dataclasses import dataclass
2+
3+
from .targets.target_types import CursorlessDestination, CursorlessTarget
4+
5+
6+
@dataclass
7+
class ScopeType:
8+
type: str
9+
10+
11+
# Insertion snippets
12+
13+
14+
@dataclass
15+
class CustomInsertionSnippet:
16+
type = "custom"
17+
body: str
18+
scopeTypes: list[ScopeType] | None
19+
languages: list[str] | None
20+
substitutions: dict[str, str] | None
21+
22+
23+
@dataclass
24+
class ListInsertionSnippet:
25+
type = "list"
26+
substitutions: dict[str, str] | None
27+
snippets: list[CustomInsertionSnippet]
28+
29+
30+
@dataclass
31+
class InsertSnippetAction:
32+
name = "insertSnippet"
33+
snippetDescription: CustomInsertionSnippet | ListInsertionSnippet
34+
destination: CursorlessDestination
35+
36+
37+
# Wrapper snippets
38+
39+
40+
@dataclass
41+
class CustomWrapperSnippet:
42+
type = "custom"
43+
body: str
44+
variableName: str | None
45+
scopeType: ScopeType | None
46+
languages: list[str] | None
47+
48+
49+
@dataclass
50+
class ListWrapperSnippet:
51+
type = "list"
52+
snippets: list[CustomWrapperSnippet]
53+
54+
55+
@dataclass
56+
class WrapperSnippetAction:
57+
name = "wrapWithSnippet"
58+
snippetDescription: CustomWrapperSnippet | ListWrapperSnippet
59+
target: CursorlessTarget
60+
61+
62+
# Community types
63+
64+
65+
@dataclass
66+
class CommunityInsertionSnippet:
67+
body: str
68+
languages: list[str] | None = None
69+
scopes: list[str] | None = None
70+
71+
72+
@dataclass
73+
class CommunityWrapperSnippet:
74+
body: str
75+
variable_name: str
76+
languages: list[str] | None
77+
scope: str | None

0 commit comments

Comments
 (0)