Skip to content

Commit 171539b

Browse files
Merge branch 'main' into isContainedInErrorNode
2 parents b9453d9 + 34a6bf5 commit 171539b

File tree

23 files changed

+763
-567
lines changed

23 files changed

+763
-567
lines changed

.github/workflows/deploy.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,13 @@ jobs:
4343

4444
- name: Publish to Open VSX Registry
4545
id: publishToOpenVSX
46-
uses: HaaLeo/publish-vscode-extension@v1
46+
uses: HaaLeo/publish-vscode-extension@v2
4747
with:
4848
pat: ${{ secrets.OPEN_VSX_TOKEN }}
4949
packagePath: packages/cursorless-vscode/dist
5050

5151
- name: Publish to Visual Studio Marketplace
52-
uses: HaaLeo/publish-vscode-extension@v1
52+
uses: HaaLeo/publish-vscode-extension@v2
5353
with:
5454
pat: ${{ secrets.VS_MARKETPLACE_TOKEN }}
5555
registryUrl: https://marketplace.visualstudio.com

.github/workflows/test.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ jobs:
114114

115115
- name: Test create vsix
116116
id: createVsix
117-
uses: HaaLeo/publish-vscode-extension@v1
117+
uses: HaaLeo/publish-vscode-extension@v2
118118
with:
119119
pat: none
120120
packagePath: packages/cursorless-vscode/dist
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
languageId: plaintext
2+
command:
3+
version: 5
4+
spokenForm: take each
5+
action: {name: setSelection}
6+
targets:
7+
- type: primitive
8+
mark: {type: decoratedSymbol, symbolColor: default, character: e}
9+
usePrePhraseSnapshot: false
10+
initialState:
11+
documentContents: hello world
12+
selections:
13+
- anchor: {line: 0, character: 11}
14+
active: {line: 0, character: 11}
15+
marks:
16+
default.e:
17+
start: {line: 0, character: 0}
18+
end: {line: 0, character: 5}
19+
finalState:
20+
documentContents: hello world
21+
selections:
22+
- anchor: {line: 0, character: 0}
23+
active: {line: 0, character: 5}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
languageId: plaintext
2+
command:
3+
version: 7
4+
spokenForm: take each
5+
action:
6+
name: setSelection
7+
target:
8+
type: primitive
9+
mark: {type: decoratedSymbol, symbolColor: default, character: e}
10+
usePrePhraseSnapshot: false
11+
initialState:
12+
documentContents: hello world
13+
selections:
14+
- anchor: {line: 0, character: 11}
15+
active: {line: 0, character: 11}
16+
marks:
17+
default.e:
18+
start: {line: 0, character: 0}
19+
end: {line: 0, character: 5}
20+
finalState:
21+
documentContents: hello world
22+
selections:
23+
- anchor: {line: 0, character: 0}
24+
active: {line: 0, character: 5}

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
"@types/node": "20.16.0",
3333
"@typescript-eslint/eslint-plugin": "^8.9.0",
3434
"@typescript-eslint/parser": "^8.9.0",
35-
"esbuild": "^0.24.0",
35+
"esbuild": "^0.25.0",
3636
"eslint": "^8.57.1",
3737
"eslint-config-prettier": "^9.1.0",
3838
"eslint-import-resolver-typescript": "3.6.3",

packages/cursorless-engine/src/actions/Actions.ts

Lines changed: 175 additions & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -75,117 +75,182 @@ import { Decrement, Increment } from "./incrementDecrement";
7575
*/
7676
export class Actions implements ActionRecord {
7777
constructor(
78-
private treeSitter: TreeSitter,
79-
private snippets: Snippets,
80-
private rangeUpdater: RangeUpdater,
81-
private modifierStageFactory: ModifierStageFactory,
82-
) {}
78+
treeSitter: TreeSitter,
79+
snippets: Snippets,
80+
rangeUpdater: RangeUpdater,
81+
modifierStageFactory: ModifierStageFactory,
82+
) {
83+
this.addSelection = new AddSelection();
84+
this.addSelectionBefore = new AddSelectionBefore();
85+
this.addSelectionAfter = new AddSelectionAfter();
86+
this.callAsFunction = new Call(this);
87+
this.clearAndSetSelection = new Clear(this);
88+
this.copyToClipboard = new CopyToClipboard(this, rangeUpdater);
89+
this.cutToClipboard = new CutToClipboard(this);
90+
this.decrement = new Decrement(this);
91+
this.deselect = new Deselect();
92+
this.editNew = new EditNew(rangeUpdater, this);
93+
this.editNewLineAfter = new EditNewAfter(this, modifierStageFactory);
94+
this.editNewLineBefore = new EditNewBefore(this, modifierStageFactory);
95+
this.executeCommand = new ExecuteCommand(rangeUpdater);
96+
this.extractVariable = new ExtractVariable(rangeUpdater);
97+
this.findInDocument = new FindInDocument(this);
98+
this.findInWorkspace = new FindInWorkspace(this);
99+
this.flashTargets = new FlashTargets();
100+
this.foldRegion = new Fold(rangeUpdater);
101+
this.followLink = new FollowLink({ openAside: false });
102+
this.followLinkAside = new FollowLink({ openAside: true });
103+
this.generateSnippet = new GenerateSnippet(snippets);
104+
this.getText = new GetText();
105+
this.gitAccept = new GitAccept(rangeUpdater);
106+
this.gitRevert = new GitRevert(rangeUpdater);
107+
this.gitStage = new GitStage(rangeUpdater);
108+
this.gitUnstage = new GitUnstage(rangeUpdater);
109+
this.highlight = new Highlight();
110+
this.increment = new Increment(this);
111+
this.indentLine = new IndentLine(rangeUpdater);
112+
this.insertCopyAfter = new InsertCopyAfter(
113+
rangeUpdater,
114+
modifierStageFactory,
115+
);
116+
this.insertCopyBefore = new InsertCopyBefore(
117+
rangeUpdater,
118+
modifierStageFactory,
119+
);
120+
this.insertEmptyLineAfter = new InsertEmptyLineAfter(
121+
rangeUpdater,
122+
modifierStageFactory,
123+
);
124+
this.insertEmptyLineBefore = new InsertEmptyLineBefore(
125+
rangeUpdater,
126+
modifierStageFactory,
127+
);
128+
this.insertEmptyLinesAround = new InsertEmptyLinesAround(
129+
rangeUpdater,
130+
modifierStageFactory,
131+
);
132+
this.insertSnippet = new InsertSnippet(
133+
rangeUpdater,
134+
snippets,
135+
this,
136+
modifierStageFactory,
137+
);
138+
this.joinLines = new JoinLines(rangeUpdater, modifierStageFactory);
139+
this.breakLine = new BreakLine(rangeUpdater);
140+
this.moveToTarget = new Move(rangeUpdater);
141+
this.outdentLine = new OutdentLine(rangeUpdater);
142+
this.pasteFromClipboard = new PasteFromClipboard(rangeUpdater, this);
143+
this.randomizeTargets = new Random(this);
144+
this.remove = new Remove(rangeUpdater);
145+
this.rename = new Rename(rangeUpdater);
146+
this.replace = new Replace(rangeUpdater);
147+
this.replaceWithTarget = new Bring(rangeUpdater);
148+
this.revealDefinition = new RevealDefinition(rangeUpdater);
149+
this.revealTypeDefinition = new RevealTypeDefinition(rangeUpdater);
150+
this.reverseTargets = new Reverse(this);
151+
this.rewrapWithPairedDelimiter = new Rewrap(
152+
rangeUpdater,
153+
modifierStageFactory,
154+
);
155+
this.scrollToBottom = new ScrollToBottom();
156+
this.scrollToCenter = new ScrollToCenter();
157+
this.scrollToTop = new ScrollToTop();
158+
this.setSelection = new SetSelection();
159+
this.setSelectionAfter = new SetSelectionAfter();
160+
this.setSelectionBefore = new SetSelectionBefore();
161+
this.showDebugHover = new ShowDebugHover(rangeUpdater);
162+
this.showHover = new ShowHover(rangeUpdater);
163+
this.showQuickFix = new ShowQuickFix(rangeUpdater);
164+
this.showReferences = new ShowReferences(rangeUpdater);
165+
this.sortTargets = new Sort(this);
166+
this.swapTargets = new Swap(rangeUpdater);
167+
this.toggleLineBreakpoint = new ToggleBreakpoint(modifierStageFactory);
168+
this.toggleLineComment = new ToggleLineComment(rangeUpdater);
169+
this.unfoldRegion = new Unfold(rangeUpdater);
170+
this.wrapWithPairedDelimiter = new Wrap(rangeUpdater);
171+
this.wrapWithSnippet = new WrapWithSnippet(
172+
rangeUpdater,
173+
snippets,
174+
modifierStageFactory,
175+
);
83176

84-
addSelection = new AddSelection();
85-
addSelectionBefore = new AddSelectionBefore();
86-
addSelectionAfter = new AddSelectionAfter();
87-
callAsFunction = new Call(this);
88-
clearAndSetSelection = new Clear(this);
89-
copyToClipboard = new CopyToClipboard(this, this.rangeUpdater);
90-
cutToClipboard = new CutToClipboard(this);
91-
decrement = new Decrement(this);
92-
deselect = new Deselect();
93-
editNew = new EditNew(this.rangeUpdater, this);
94-
editNewLineAfter: EditNewAfter = new EditNewAfter(
95-
this,
96-
this.modifierStageFactory,
97-
);
98-
editNewLineBefore: EditNewBefore = new EditNewBefore(
99-
this,
100-
this.modifierStageFactory,
101-
);
102-
executeCommand = new ExecuteCommand(this.rangeUpdater);
103-
extractVariable = new ExtractVariable(this.rangeUpdater);
104-
findInDocument = new FindInDocument(this);
105-
findInWorkspace = new FindInWorkspace(this);
106-
flashTargets = new FlashTargets();
107-
foldRegion = new Fold(this.rangeUpdater);
108-
followLink = new FollowLink({ openAside: false });
109-
followLinkAside = new FollowLink({ openAside: true });
110-
generateSnippet = new GenerateSnippet(this.snippets);
111-
getText = new GetText();
112-
gitAccept = new GitAccept(this.rangeUpdater);
113-
gitRevert = new GitRevert(this.rangeUpdater);
114-
gitStage = new GitStage(this.rangeUpdater);
115-
gitUnstage = new GitUnstage(this.rangeUpdater);
116-
highlight = new Highlight();
117-
increment = new Increment(this);
118-
indentLine = new IndentLine(this.rangeUpdater);
119-
insertCopyAfter = new InsertCopyAfter(
120-
this.rangeUpdater,
121-
this.modifierStageFactory,
122-
);
123-
insertCopyBefore = new InsertCopyBefore(
124-
this.rangeUpdater,
125-
this.modifierStageFactory,
126-
);
127-
insertEmptyLineAfter = new InsertEmptyLineAfter(
128-
this.rangeUpdater,
129-
this.modifierStageFactory,
130-
);
131-
insertEmptyLineBefore = new InsertEmptyLineBefore(
132-
this.rangeUpdater,
133-
this.modifierStageFactory,
134-
);
135-
insertEmptyLinesAround = new InsertEmptyLinesAround(
136-
this.rangeUpdater,
137-
this.modifierStageFactory,
138-
);
139-
insertSnippet = new InsertSnippet(
140-
this.rangeUpdater,
141-
this.snippets,
142-
this,
143-
this.modifierStageFactory,
144-
);
145-
joinLines = new JoinLines(this.rangeUpdater, this.modifierStageFactory);
146-
breakLine = new BreakLine(this.rangeUpdater);
147-
moveToTarget = new Move(this.rangeUpdater);
148-
outdentLine = new OutdentLine(this.rangeUpdater);
149-
pasteFromClipboard = new PasteFromClipboard(this.rangeUpdater, this);
150-
randomizeTargets = new Random(this);
151-
remove = new Remove(this.rangeUpdater);
152-
rename = new Rename(this.rangeUpdater);
153-
replace = new Replace(this.rangeUpdater);
154-
replaceWithTarget = new Bring(this.rangeUpdater);
155-
revealDefinition = new RevealDefinition(this.rangeUpdater);
156-
revealTypeDefinition = new RevealTypeDefinition(this.rangeUpdater);
157-
reverseTargets = new Reverse(this);
158-
rewrapWithPairedDelimiter = new Rewrap(
159-
this.rangeUpdater,
160-
this.modifierStageFactory,
161-
);
162-
scrollToBottom = new ScrollToBottom();
163-
scrollToCenter = new ScrollToCenter();
164-
scrollToTop = new ScrollToTop();
165-
setSelection = new SetSelection();
166-
setSelectionAfter = new SetSelectionAfter();
167-
setSelectionBefore = new SetSelectionBefore();
168-
showDebugHover = new ShowDebugHover(this.rangeUpdater);
169-
showHover = new ShowHover(this.rangeUpdater);
170-
showQuickFix = new ShowQuickFix(this.rangeUpdater);
171-
showReferences = new ShowReferences(this.rangeUpdater);
172-
sortTargets = new Sort(this);
173-
swapTargets = new Swap(this.rangeUpdater);
174-
toggleLineBreakpoint = new ToggleBreakpoint(this.modifierStageFactory);
175-
toggleLineComment = new ToggleLineComment(this.rangeUpdater);
176-
unfoldRegion = new Unfold(this.rangeUpdater);
177-
wrapWithPairedDelimiter = new Wrap(this.rangeUpdater);
178-
wrapWithSnippet = new WrapWithSnippet(
179-
this.rangeUpdater,
180-
this.snippets,
181-
this.modifierStageFactory,
182-
);
177+
this["experimental.setInstanceReference"] = new SetSpecialTarget(
178+
"instanceReference",
179+
);
183180

184-
["experimental.setInstanceReference"] = new SetSpecialTarget(
185-
"instanceReference",
186-
);
181+
this["private.showParseTree"] = new ShowParseTree(treeSitter);
182+
this["private.getTargets"] = new GetTargets();
183+
this["private.setKeyboardTarget"] = new SetSpecialTarget("keyboard");
184+
}
187185

188-
["private.showParseTree"] = new ShowParseTree(this.treeSitter);
189-
["private.getTargets"] = new GetTargets();
190-
["private.setKeyboardTarget"] = new SetSpecialTarget("keyboard");
186+
addSelection;
187+
addSelectionBefore;
188+
addSelectionAfter;
189+
callAsFunction;
190+
clearAndSetSelection;
191+
copyToClipboard;
192+
cutToClipboard;
193+
decrement;
194+
deselect;
195+
editNew;
196+
editNewLineAfter: EditNewAfter;
197+
editNewLineBefore: EditNewBefore;
198+
executeCommand;
199+
extractVariable;
200+
findInDocument;
201+
findInWorkspace;
202+
flashTargets;
203+
foldRegion;
204+
followLink;
205+
followLinkAside;
206+
generateSnippet;
207+
getText;
208+
gitAccept;
209+
gitRevert;
210+
gitStage;
211+
gitUnstage;
212+
highlight;
213+
increment;
214+
indentLine;
215+
insertCopyAfter;
216+
insertCopyBefore;
217+
insertEmptyLineAfter;
218+
insertEmptyLineBefore;
219+
insertEmptyLinesAround;
220+
insertSnippet;
221+
joinLines;
222+
breakLine;
223+
moveToTarget;
224+
outdentLine;
225+
pasteFromClipboard;
226+
randomizeTargets;
227+
remove;
228+
rename;
229+
replace;
230+
replaceWithTarget;
231+
revealDefinition;
232+
revealTypeDefinition;
233+
reverseTargets;
234+
rewrapWithPairedDelimiter;
235+
scrollToBottom;
236+
scrollToCenter;
237+
scrollToTop;
238+
setSelection;
239+
setSelectionAfter;
240+
setSelectionBefore;
241+
showDebugHover;
242+
showHover;
243+
showQuickFix;
244+
showReferences;
245+
sortTargets;
246+
swapTargets;
247+
toggleLineBreakpoint;
248+
toggleLineComment;
249+
unfoldRegion;
250+
wrapWithPairedDelimiter;
251+
wrapWithSnippet;
252+
["experimental.setInstanceReference"];
253+
["private.showParseTree"];
254+
["private.getTargets"];
255+
["private.setKeyboardTarget"];
191256
}

packages/cursorless-engine/src/core/getPreferredSnippet.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,22 @@ export function getPreferredSnippet(
3737
const preferredSnippet = filteredSnippets[0];
3838

3939
if (preferredSnippet == null) {
40-
throw new Error("No snippet available for the current language");
40+
const languages = getUniqueLanguagesString(snippetDescription.snippets);
41+
throw new Error(
42+
`No snippet available for language '${languageId}'. Available languages: ${languages}`,
43+
);
4144
}
4245

4346
return preferredSnippet;
4447
}
4548

49+
function getUniqueLanguagesString(snippets: CustomInsertSnippetArg[]): string {
50+
const languages = new Set(
51+
snippets.flatMap((snippet) => snippet.languages ?? []),
52+
);
53+
return Array.from(languages).sort().join(", ");
54+
}
55+
4656
/**
4757
* Filter snippet definitions by language.
4858
* @param snippetDescriptions The snippets to filter

0 commit comments

Comments
 (0)