Skip to content

Commit ef56dae

Browse files
committed
more tweaks
1 parent bec12b2 commit ef56dae

File tree

5 files changed

+77
-116
lines changed

5 files changed

+77
-116
lines changed

packages/cursorless-engine/src/generateSpokenForm/destinationToSpokenForm.ts

Lines changed: 0 additions & 43 deletions
This file was deleted.

packages/cursorless-engine/src/generateSpokenForm/generateSpokenForm.ts

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import {
22
ActionDescriptor,
33
CommandComplete,
4+
DestinationDescriptor,
5+
InsertionMode,
46
PartialTargetDescriptor,
57
} from "@cursorless/common";
68
import { RecursiveArray, flattenDeep } from "lodash";
@@ -12,7 +14,6 @@ import {
1214
insertionSnippetToSpokenForm,
1315
wrapperSnippetToSpokenForm,
1416
} from "./defaultSpokenForms/snippets";
15-
import { destinationToSpokenForm } from "./destinationToSpokenForm";
1617
import { getRangeConnective } from "./getRangeConnective";
1718
import { primitiveTargetToSpokenForm } from "./primitiveTargetToSpokenForm";
1819

@@ -130,7 +131,7 @@ function generateSpokenFormComponents(
130131
}
131132
}
132133

133-
export function targetToSpokenForm(
134+
function targetToSpokenForm(
134135
target: PartialTargetDescriptor,
135136
): RecursiveArray<string> {
136137
switch (target.type) {
@@ -163,3 +164,40 @@ export function targetToSpokenForm(
163164
return [];
164165
}
165166
}
167+
168+
function destinationToSpokenForm(
169+
destination: DestinationDescriptor,
170+
): RecursiveArray<string> {
171+
switch (destination.type) {
172+
case "list":
173+
if (destination.destinations.length < 2) {
174+
throw new NoSpokenFormError("List destination with < 2 elements");
175+
}
176+
177+
return destination.destinations.map((destination, i) =>
178+
i === 0
179+
? destinationToSpokenForm(destination)
180+
: [connectives.listConnective, destinationToSpokenForm(destination)],
181+
);
182+
183+
case "primitive":
184+
return [
185+
insertionModeToSpokenForm(destination.insertionMode),
186+
targetToSpokenForm(destination.target),
187+
];
188+
189+
case "implicit":
190+
return [];
191+
}
192+
}
193+
194+
function insertionModeToSpokenForm(insertionMode: InsertionMode): string {
195+
switch (insertionMode) {
196+
case "to":
197+
return connectives.sourceDestinationConnective;
198+
case "before":
199+
return connectives.before;
200+
case "after":
201+
return connectives.after;
202+
}
203+
}

packages/cursorless-engine/src/generateSpokenForm/getRangeConnective.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,10 @@ import { PartialRangeType } from "@cursorless/common";
22
import { NoSpokenFormError } from "./NoSpokenFormError";
33
import { connectives } from "./defaultSpokenForms/connectives";
44

5-
65
export function getRangeConnective(
76
excludeAnchor: boolean,
87
excludeActive: boolean,
9-
type?: PartialRangeType
8+
type?: PartialRangeType,
109
): string {
1110
const prefix = type === "vertical" ? `${connectives.verticalRange} ` : "";
1211
if (excludeAnchor && excludeActive) {

packages/cursorless-engine/src/generateSpokenForm/primitiveTargetToSpokenForm.ts

Lines changed: 36 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ import {
22
LineNumberMark,
33
Modifier,
44
PartialMark,
5-
PartialPrimitiveTargetDescriptor, RelativeScopeModifier,
6-
ScopeType
5+
PartialPrimitiveTargetDescriptor,
6+
RelativeScopeModifier,
7+
ScopeType,
78
} from "@cursorless/common";
89
import { RecursiveArray } from "lodash";
910
import { NoSpokenFormError } from "./NoSpokenFormError";
@@ -13,24 +14,24 @@ import {
1314
hatColorToSpokenForm,
1415
hatShapeToSpokenForm,
1516
lineDirections,
16-
marks
17+
marks,
1718
} from "./defaultSpokenForms/marks";
1819
import {
1920
modifiers,
2021
modifiersExtra,
2122
scopeSpokenForms,
2223
surroundingPairForceDirections,
23-
surroundingPairNameToSpokenForm
24+
surroundingPairNameToSpokenForm,
2425
} from "./defaultSpokenForms/modifiers";
2526
import {
2627
numberToSpokenForm,
27-
ordinalToSpokenForm
28+
ordinalToSpokenForm,
2829
} from "./defaultSpokenForms/numbers";
2930
import { getRangeConnective } from "./getRangeConnective";
3031

31-
3232
export function primitiveTargetToSpokenForm(
33-
target: PartialPrimitiveTargetDescriptor): RecursiveArray<string> {
33+
target: PartialPrimitiveTargetDescriptor,
34+
): RecursiveArray<string> {
3435
const components: RecursiveArray<string> = [];
3536
if (target.modifiers != null) {
3637
components.push(target.modifiers.map(modifierToSpokenForm));
@@ -96,23 +97,26 @@ function modifierToSpokenForm(modifier: Modifier): RecursiveArray<string> {
9697
}
9798

9899
throw new NoSpokenFormError(
99-
`'${modifier.type}' with count > 1 and offset away from start / end`
100+
`'${modifier.type}' with count > 1 and offset away from start / end`,
100101
);
101102
}
102103

103104
case "range": {
104-
if (modifier.anchor.type === "ordinalScope" &&
105+
if (
106+
modifier.anchor.type === "ordinalScope" &&
105107
modifier.active.type === "ordinalScope" &&
106108
modifier.anchor.length === 1 &&
107109
modifier.active.length === 1 &&
108-
modifier.anchor.scopeType.type === modifier.active.scopeType.type) {
109-
const anchor = modifier.anchor.start === -1
110-
? modifiersExtra.last
111-
: ordinalToSpokenForm(modifier.anchor.start + 1);
110+
modifier.anchor.scopeType.type === modifier.active.scopeType.type
111+
) {
112+
const anchor =
113+
modifier.anchor.start === -1
114+
? modifiersExtra.last
115+
: ordinalToSpokenForm(modifier.anchor.start + 1);
112116
const active = modifierToSpokenForm(modifier.active);
113117
const connective = getRangeConnective(
114118
modifier.excludeAnchor,
115-
modifier.excludeActive
119+
modifier.excludeActive,
116120
);
117121
return [anchor, connective, active];
118122
}
@@ -128,14 +132,15 @@ function modifierToSpokenForm(modifier: Modifier): RecursiveArray<string> {
128132
}
129133

130134
function relativeScopeInclusiveToSpokenForm(
131-
modifier: RelativeScopeModifier
135+
modifier: RelativeScopeModifier,
132136
): RecursiveArray<string> {
133137
const scope = scopeTypeToSpokenForm(modifier.scopeType);
134138

135139
if (modifier.length === 1) {
136-
const direction = modifier.direction === "forward"
137-
? connectives.forward
138-
: connectives.backward;
140+
const direction =
141+
modifier.direction === "forward"
142+
? connectives.forward
143+
: connectives.backward;
139144

140145
// token forward/backward
141146
return [scope, direction];
@@ -155,10 +160,11 @@ function relativeScopeInclusiveToSpokenForm(
155160
}
156161

157162
function relativeScopeExclusiveToSpokenForm(
158-
modifier: RelativeScopeModifier
163+
modifier: RelativeScopeModifier,
159164
): RecursiveArray<string> {
160165
const scope = scopeTypeToSpokenForm(modifier.scopeType);
161-
const direction = modifier.direction === "forward" ? connectives.next : connectives.previous;
166+
const direction =
167+
modifier.direction === "forward" ? connectives.next : connectives.previous;
162168

163169
if (modifier.offset === 1) {
164170
const number = numberToSpokenForm(modifier.length);
@@ -181,7 +187,7 @@ function relativeScopeExclusiveToSpokenForm(
181187
}
182188

183189
throw new NoSpokenFormError(
184-
`${modifier.type} modifier with offset > 1 and length > 1`
190+
`${modifier.type} modifier with offset > 1 and length > 1`,
185191
);
186192
}
187193

@@ -195,9 +201,10 @@ function scopeTypeToSpokenForm(scopeType: ScopeType): string {
195201
case "surroundingPair": {
196202
const pair = surroundingPairNameToSpokenForm(scopeType.delimiter);
197203
if (scopeType.forceDirection != null) {
198-
const direction = scopeType.forceDirection === "left"
199-
? surroundingPairForceDirections.left
200-
: surroundingPairForceDirections.right;
204+
const direction =
205+
scopeType.forceDirection === "left"
206+
? surroundingPairForceDirections.left
207+
: surroundingPairForceDirections.right;
201208
return `${direction} ${pair}`;
202209
}
203210
return pair;
@@ -228,14 +235,16 @@ function markToSpokenForm(mark: PartialMark): RecursiveArray<string> {
228235
}
229236

230237
case "range": {
231-
if (mark.anchor.type === "lineNumber" &&
232-
mark.active.type === "lineNumber") {
238+
if (
239+
mark.anchor.type === "lineNumber" &&
240+
mark.active.type === "lineNumber"
241+
) {
233242
const [typeAnchor, numberAnchor] = lineNumberToParts(mark.anchor);
234243
const [typeActive, numberActive] = lineNumberToParts(mark.active);
235244
if (typeAnchor === typeActive) {
236245
const connective = getRangeConnective(
237246
mark.excludeAnchor,
238-
mark.excludeActive
247+
mark.excludeActive,
239248
);
240249
// Row five past seven
241250
return [typeAnchor, numberAnchor, connective, numberActive];

packages/cursorless-engine/src/generateSpokenForm/targetToSpokenForm.ts

Lines changed: 0 additions & 42 deletions
This file was deleted.

0 commit comments

Comments
 (0)