diff --git a/packages/cursorless-engine/src/processTargets/ModifierStageFactoryImpl.ts b/packages/cursorless-engine/src/processTargets/ModifierStageFactoryImpl.ts index a656688473..d3f9d73ef3 100644 --- a/packages/cursorless-engine/src/processTargets/ModifierStageFactoryImpl.ts +++ b/packages/cursorless-engine/src/processTargets/ModifierStageFactoryImpl.ts @@ -32,10 +32,11 @@ import RelativeScopeStage from "./modifiers/RelativeScopeStage"; import SurroundingPairStage from "./modifiers/SurroundingPairStage"; import { ScopeHandlerFactory } from "./modifiers/scopeHandlers/ScopeHandlerFactory"; import BoundedNonWhitespaceSequenceStage from "./modifiers/scopeTypeStages/BoundedNonWhitespaceStage"; -import ContainingSyntaxScopeStage, { +import { + LegacyContainingSyntaxScopeStage, SimpleContainingScopeModifier, SimpleEveryScopeModifier, -} from "./modifiers/scopeTypeStages/ContainingSyntaxScopeStage"; +} from "./modifiers/scopeTypeStages/LegacyContainingSyntaxScopeStage"; import NotebookCellStage from "./modifiers/scopeTypeStages/NotebookCellStage"; export class ModifierStageFactoryImpl implements ModifierStageFactory { @@ -142,7 +143,7 @@ export class ModifierStageFactoryImpl implements ModifierStageFactory { ); default: // Default to containing syntax scope using tree sitter - return new ContainingSyntaxScopeStage( + return new LegacyContainingSyntaxScopeStage( this.languageDefinitions, modifier as SimpleContainingScopeModifier | SimpleEveryScopeModifier, ); diff --git a/packages/cursorless-engine/src/processTargets/modifiers/ContainingScopeStage.ts b/packages/cursorless-engine/src/processTargets/modifiers/ContainingScopeStage.ts index 8903f4b525..270008cc3c 100644 --- a/packages/cursorless-engine/src/processTargets/modifiers/ContainingScopeStage.ts +++ b/packages/cursorless-engine/src/processTargets/modifiers/ContainingScopeStage.ts @@ -54,6 +54,13 @@ export class ContainingScopeStage implements ModifierStage { ); if (containingScope == null) { + if (scopeType.type === "collectionItem") { + // For `collectionItem`, fall back to generic implementation + return this.modifierStageFactory + .getLegacyScopeStage(this.modifier) + .run(target); + } + throw new NoContainingScopeError(this.modifier.scopeType.type); } diff --git a/packages/cursorless-engine/src/processTargets/modifiers/EveryScopeStage.ts b/packages/cursorless-engine/src/processTargets/modifiers/EveryScopeStage.ts index 33424fa031..cb4c77d9f8 100644 --- a/packages/cursorless-engine/src/processTargets/modifiers/EveryScopeStage.ts +++ b/packages/cursorless-engine/src/processTargets/modifiers/EveryScopeStage.ts @@ -83,6 +83,13 @@ export class EveryScopeStage implements ModifierStage { } if (scopes.length === 0) { + if (scopeType.type === "collectionItem") { + // For `collectionItem`, fall back to generic implementation + return this.modifierStageFactory + .getLegacyScopeStage(this.modifier) + .run(target); + } + throw new NoContainingScopeError(scopeType.type); } diff --git a/packages/cursorless-engine/src/processTargets/modifiers/ItemStage/ItemStage.ts b/packages/cursorless-engine/src/processTargets/modifiers/ItemStage/ItemStage.ts index de47d2064f..0efb3d4538 100644 --- a/packages/cursorless-engine/src/processTargets/modifiers/ItemStage/ItemStage.ts +++ b/packages/cursorless-engine/src/processTargets/modifiers/ItemStage/ItemStage.ts @@ -12,9 +12,10 @@ import { getInsertionDelimiter } from "../../../util/nodeSelectors"; import { getRangeLength } from "../../../util/rangeUtils"; import { ModifierStage } from "../../PipelineStages.types"; import { ScopeTypeTarget } from "../../targets"; -import ContainingSyntaxScopeStage, { +import { + LegacyContainingSyntaxScopeStage, SimpleContainingScopeModifier, -} from "../scopeTypeStages/ContainingSyntaxScopeStage"; +} from "../scopeTypeStages/LegacyContainingSyntaxScopeStage"; import { getIterationScope } from "./getIterationScope"; import { tokenizeRange } from "./tokenizeRange"; @@ -27,7 +28,7 @@ export default class ItemStage implements ModifierStage { run(target: Target): Target[] { // First try the language specific implementation of item try { - return new ContainingSyntaxScopeStage( + return new LegacyContainingSyntaxScopeStage( this.languageDefinitions, this.modifier as SimpleContainingScopeModifier, ).run(target); diff --git a/packages/cursorless-engine/src/processTargets/modifiers/scopeTypeStages/ContainingSyntaxScopeStage.ts b/packages/cursorless-engine/src/processTargets/modifiers/scopeTypeStages/LegacyContainingSyntaxScopeStage.ts similarity index 97% rename from packages/cursorless-engine/src/processTargets/modifiers/scopeTypeStages/ContainingSyntaxScopeStage.ts rename to packages/cursorless-engine/src/processTargets/modifiers/scopeTypeStages/LegacyContainingSyntaxScopeStage.ts index 66b09c0028..baed206ed3 100644 --- a/packages/cursorless-engine/src/processTargets/modifiers/scopeTypeStages/ContainingSyntaxScopeStage.ts +++ b/packages/cursorless-engine/src/processTargets/modifiers/scopeTypeStages/LegacyContainingSyntaxScopeStage.ts @@ -25,7 +25,7 @@ export interface SimpleEveryScopeModifier extends EveryScopeModifier { scopeType: SimpleScopeType; } -export default class implements ModifierStage { +export class LegacyContainingSyntaxScopeStage implements ModifierStage { constructor( private languageDefinitions: LanguageDefinitions, private modifier: SimpleContainingScopeModifier | SimpleEveryScopeModifier,