From 029de90f8d30a98cbf5b9848e4a457770a01eb69 Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Thu, 14 Aug 2025 04:00:17 +0200 Subject: [PATCH 1/2] head/tail are bounded by all interiors not just pair --- .../modifiers/interior/changeHead.yml | 22 +++++++++++++++++++ .../modifiers/interior/changeTail.yml | 22 +++++++++++++++++++ .../processTargets/modifiers/HeadTailStage.ts | 19 ++++++++-------- 3 files changed, 53 insertions(+), 10 deletions(-) create mode 100644 data/fixtures/recorded/modifiers/interior/changeHead.yml create mode 100644 data/fixtures/recorded/modifiers/interior/changeTail.yml diff --git a/data/fixtures/recorded/modifiers/interior/changeHead.yml b/data/fixtures/recorded/modifiers/interior/changeHead.yml new file mode 100644 index 0000000000..725ffe7641 --- /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:
a b c
+ selections: + - anchor: {line: 0, character: 8} + active: {line: 0, character: 8} + marks: {} +finalState: + documentContents:
c
+ 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..77b706a803 --- /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:
a b c
+ selections: + - anchor: {line: 0, character: 7} + active: {line: 0, character: 7} + marks: {} +finalState: + documentContents:
a
+ 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]; } } From 9c77753fd7f1712c56a491ab4ce4188a06cd7ba0 Mon Sep 17 00:00:00 2001 From: Andreas Arvidsson Date: Thu, 14 Aug 2025 04:04:50 +0200 Subject: [PATCH 2/2] Update tests --- data/fixtures/recorded/modifiers/interior/changeHead.yml | 8 ++++---- data/fixtures/recorded/modifiers/interior/changeTail.yml | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/data/fixtures/recorded/modifiers/interior/changeHead.yml b/data/fixtures/recorded/modifiers/interior/changeHead.yml index 725ffe7641..0fa8268d83 100644 --- a/data/fixtures/recorded/modifiers/interior/changeHead.yml +++ b/data/fixtures/recorded/modifiers/interior/changeHead.yml @@ -10,13 +10,13 @@ command: - {type: extendThroughStartOf} usePrePhraseSnapshot: false initialState: - documentContents:
a b c
+ documentContents:
abcd
selections: - - anchor: {line: 0, character: 8} - active: {line: 0, character: 8} + - anchor: {line: 0, character: 7} + active: {line: 0, character: 7} marks: {} finalState: - documentContents:
c
+ 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 index 77b706a803..6dda13f51d 100644 --- a/data/fixtures/recorded/modifiers/interior/changeTail.yml +++ b/data/fixtures/recorded/modifiers/interior/changeTail.yml @@ -10,13 +10,13 @@ command: - {type: extendThroughEndOf} usePrePhraseSnapshot: false initialState: - documentContents:
a b c
+ documentContents:
abcd
selections: - anchor: {line: 0, character: 7} active: {line: 0, character: 7} marks: {} finalState: - documentContents:
a
+ documentContents:
ab
selections: - anchor: {line: 0, character: 7} active: {line: 0, character: 7}