Skip to content

Commit 3c0e01f

Browse files
authored
Fix "item" fallback for next-gen scope handlers (#1763)
## Checklist - [ ] I have added [tests](https://www.cursorless.org/docs/contributing/test-case-recorder/) - [ ] I have updated the [docs](https://github.com/cursorless-dev/cursorless/tree/main/docs) and [cheatsheet](https://github.com/cursorless-dev/cursorless/tree/main/cursorless-talon/src/cheatsheet) - [ ] I have not broken the cheatsheet
1 parent 8bfe58a commit 3c0e01f

File tree

5 files changed

+23
-7
lines changed

5 files changed

+23
-7
lines changed

packages/cursorless-engine/src/processTargets/ModifierStageFactoryImpl.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,11 @@ import RelativeScopeStage from "./modifiers/RelativeScopeStage";
3232
import SurroundingPairStage from "./modifiers/SurroundingPairStage";
3333
import { ScopeHandlerFactory } from "./modifiers/scopeHandlers/ScopeHandlerFactory";
3434
import BoundedNonWhitespaceSequenceStage from "./modifiers/scopeTypeStages/BoundedNonWhitespaceStage";
35-
import ContainingSyntaxScopeStage, {
35+
import {
36+
LegacyContainingSyntaxScopeStage,
3637
SimpleContainingScopeModifier,
3738
SimpleEveryScopeModifier,
38-
} from "./modifiers/scopeTypeStages/ContainingSyntaxScopeStage";
39+
} from "./modifiers/scopeTypeStages/LegacyContainingSyntaxScopeStage";
3940
import NotebookCellStage from "./modifiers/scopeTypeStages/NotebookCellStage";
4041

4142
export class ModifierStageFactoryImpl implements ModifierStageFactory {
@@ -142,7 +143,7 @@ export class ModifierStageFactoryImpl implements ModifierStageFactory {
142143
);
143144
default:
144145
// Default to containing syntax scope using tree sitter
145-
return new ContainingSyntaxScopeStage(
146+
return new LegacyContainingSyntaxScopeStage(
146147
this.languageDefinitions,
147148
modifier as SimpleContainingScopeModifier | SimpleEveryScopeModifier,
148149
);

packages/cursorless-engine/src/processTargets/modifiers/ContainingScopeStage.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,13 @@ export class ContainingScopeStage implements ModifierStage {
5454
);
5555

5656
if (containingScope == null) {
57+
if (scopeType.type === "collectionItem") {
58+
// For `collectionItem`, fall back to generic implementation
59+
return this.modifierStageFactory
60+
.getLegacyScopeStage(this.modifier)
61+
.run(target);
62+
}
63+
5764
throw new NoContainingScopeError(this.modifier.scopeType.type);
5865
}
5966

packages/cursorless-engine/src/processTargets/modifiers/EveryScopeStage.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,13 @@ export class EveryScopeStage implements ModifierStage {
8383
}
8484

8585
if (scopes.length === 0) {
86+
if (scopeType.type === "collectionItem") {
87+
// For `collectionItem`, fall back to generic implementation
88+
return this.modifierStageFactory
89+
.getLegacyScopeStage(this.modifier)
90+
.run(target);
91+
}
92+
8693
throw new NoContainingScopeError(scopeType.type);
8794
}
8895

packages/cursorless-engine/src/processTargets/modifiers/ItemStage/ItemStage.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,10 @@ import { getInsertionDelimiter } from "../../../util/nodeSelectors";
1212
import { getRangeLength } from "../../../util/rangeUtils";
1313
import { ModifierStage } from "../../PipelineStages.types";
1414
import { ScopeTypeTarget } from "../../targets";
15-
import ContainingSyntaxScopeStage, {
15+
import {
16+
LegacyContainingSyntaxScopeStage,
1617
SimpleContainingScopeModifier,
17-
} from "../scopeTypeStages/ContainingSyntaxScopeStage";
18+
} from "../scopeTypeStages/LegacyContainingSyntaxScopeStage";
1819
import { getIterationScope } from "./getIterationScope";
1920
import { tokenizeRange } from "./tokenizeRange";
2021

@@ -27,7 +28,7 @@ export default class ItemStage implements ModifierStage {
2728
run(target: Target): Target[] {
2829
// First try the language specific implementation of item
2930
try {
30-
return new ContainingSyntaxScopeStage(
31+
return new LegacyContainingSyntaxScopeStage(
3132
this.languageDefinitions,
3233
this.modifier as SimpleContainingScopeModifier,
3334
).run(target);

packages/cursorless-engine/src/processTargets/modifiers/scopeTypeStages/ContainingSyntaxScopeStage.ts renamed to packages/cursorless-engine/src/processTargets/modifiers/scopeTypeStages/LegacyContainingSyntaxScopeStage.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ export interface SimpleEveryScopeModifier extends EveryScopeModifier {
2525
scopeType: SimpleScopeType;
2626
}
2727

28-
export default class implements ModifierStage {
28+
export class LegacyContainingSyntaxScopeStage implements ModifierStage {
2929
constructor(
3030
private languageDefinitions: LanguageDefinitions,
3131
private modifier: SimpleContainingScopeModifier | SimpleEveryScopeModifier,

0 commit comments

Comments
 (0)