diff --git a/data/fixtures/recorded/modifiers/interior/changeHead.yml b/data/fixtures/recorded/modifiers/interior/changeHead.yml
new file mode 100644
index 0000000000..0fa8268d83
--- /dev/null
+++ b/data/fixtures/recorded/modifiers/interior/changeHead.yml
@@ -0,0 +1,22 @@
+languageId: typescriptreact
+command:
+ version: 7
+ spokenForm: change head
+ action:
+ name: clearAndSetSelection
+ target:
+ type: primitive
+ modifiers:
+ - {type: extendThroughStartOf}
+ usePrePhraseSnapshot: false
+initialState:
+ documentContents:
abcd
+ selections:
+ - anchor: {line: 0, character: 7}
+ active: {line: 0, character: 7}
+ marks: {}
+finalState:
+ documentContents: cd
+ selections:
+ - anchor: {line: 0, character: 5}
+ active: {line: 0, character: 5}
diff --git a/data/fixtures/recorded/modifiers/interior/changeTail.yml b/data/fixtures/recorded/modifiers/interior/changeTail.yml
new file mode 100644
index 0000000000..6dda13f51d
--- /dev/null
+++ b/data/fixtures/recorded/modifiers/interior/changeTail.yml
@@ -0,0 +1,22 @@
+languageId: typescriptreact
+command:
+ version: 7
+ spokenForm: change tail
+ action:
+ name: clearAndSetSelection
+ target:
+ type: primitive
+ modifiers:
+ - {type: extendThroughEndOf}
+ usePrePhraseSnapshot: false
+initialState:
+ documentContents: abcd
+ selections:
+ - anchor: {line: 0, character: 7}
+ active: {line: 0, character: 7}
+ marks: {}
+finalState:
+ documentContents: ab
+ selections:
+ - anchor: {line: 0, character: 7}
+ active: {line: 0, character: 7}
diff --git a/packages/cursorless-engine/src/processTargets/modifiers/HeadTailStage.ts b/packages/cursorless-engine/src/processTargets/modifiers/HeadTailStage.ts
index 3ee489bada..641dc43b71 100644
--- a/packages/cursorless-engine/src/processTargets/modifiers/HeadTailStage.ts
+++ b/packages/cursorless-engine/src/processTargets/modifiers/HeadTailStage.ts
@@ -74,11 +74,11 @@ class BoundedLineStage implements ModifierStage {
run(target: Target, options: ModifierStateOptions): Target[] {
const line = this.getContainingLine(target, options);
- const pairInterior = this.getContainingPairInterior(target, options);
+ const interior = this.getContainingInterior(target, options);
const intersection =
- pairInterior != null
- ? line.contentRange.intersection(pairInterior.contentRange)
+ interior != null
+ ? line.contentRange.intersection(interior.contentRange)
: null;
if (intersection == null || intersection.isEmpty) {
@@ -94,15 +94,14 @@ class BoundedLineStage implements ModifierStage {
];
}
- private getContainingPairInterior(
+ private getContainingInterior(
target: Target,
options: ModifierStateOptions,
): Target | undefined {
try {
return this.getContaining(target, options, {
- type: "surroundingPairInterior",
- delimiter: "any",
- })[0];
+ type: "interior",
+ });
} catch (error) {
if (error instanceof NoContainingScopeError) {
return undefined;
@@ -117,16 +116,16 @@ class BoundedLineStage implements ModifierStage {
): Target {
return this.getContaining(target, options, {
type: "line",
- })[0];
+ });
}
private getContaining(
target: Target,
options: ModifierStateOptions,
scopeType: ScopeType,
- ): Target[] {
+ ): Target {
return this.modifierStageFactory
.create({ type: "containingScope", scopeType })
- .run(target, options);
+ .run(target, options)[0];
}
}