diff --git a/packages/cursorless-engine/src/processTargets/ModifierStageFactoryImpl.ts b/packages/cursorless-engine/src/processTargets/ModifierStageFactoryImpl.ts index fb27ebdd17..20a0294d2a 100644 --- a/packages/cursorless-engine/src/processTargets/ModifierStageFactoryImpl.ts +++ b/packages/cursorless-engine/src/processTargets/ModifierStageFactoryImpl.ts @@ -4,6 +4,7 @@ import { Modifier, SurroundingPairModifier, } from "@cursorless/common"; +import { StoredTargetMap } from ".."; import { LanguageDefinitions } from "../languages/LanguageDefinitions"; import { ModifierStageFactory } from "./ModifierStageFactory"; import { ModifierStage } from "./PipelineStages.types"; @@ -35,8 +36,6 @@ import ContainingSyntaxScopeStage, { SimpleContainingScopeModifier, SimpleEveryScopeModifier, } from "./modifiers/scopeTypeStages/ContainingSyntaxScopeStage"; -import NotebookCellStage from "./modifiers/scopeTypeStages/NotebookCellStage"; -import { StoredTargetMap } from ".."; export class ModifierStageFactoryImpl implements ModifierStageFactory { constructor( @@ -123,8 +122,6 @@ export class ModifierStageFactoryImpl implements ModifierStageFactory { modifier: ContainingScopeModifier | EveryScopeModifier, ): ModifierStage { switch (modifier.scopeType.type) { - case "notebookCell": - return new NotebookCellStage(modifier); case "boundedNonWhitespaceSequence": return new BoundedNonWhitespaceSequenceStage( this.languageDefinitions, diff --git a/packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/NotebookCellScopeHandler.ts b/packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/NotebookCellScopeHandler.ts new file mode 100644 index 0000000000..b073585da5 --- /dev/null +++ b/packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/NotebookCellScopeHandler.ts @@ -0,0 +1,44 @@ +import type { + Direction, + Position, + ScopeType, + TextEditor, +} from "@cursorless/common"; +import { NotebookCellTarget } from "../../targets"; +import { TargetScope } from "./scope.types"; +import BaseScopeHandler from "./BaseScopeHandler"; +import { ScopeIteratorRequirements } from "./scopeHandler.types"; + +export default class NotebookCellScopeHandler extends BaseScopeHandler { + public readonly scopeType = { type: "notebookCell" } as const; + protected isHierarchical = false; + + constructor(_scopeType: ScopeType, _languageId: string) { + super(); + } + + get iterationScopeType(): ScopeType { + throw new Error(`Every ${this.scopeType.type} not yet implemented`); + } + + protected *generateScopeCandidates( + editor: TextEditor, + _position: Position, + _direction: Direction, + _hints: ScopeIteratorRequirements, + ): Iterable { + const contentRange = editor.document.range; + + yield { + editor, + domain: contentRange, + getTargets: (isReversed) => [ + new NotebookCellTarget({ + editor, + isReversed, + contentRange: contentRange, + }), + ], + }; + } +} diff --git a/packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/ScopeHandlerFactoryImpl.ts b/packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/ScopeHandlerFactoryImpl.ts index 3efd7f8770..4c5deb47d0 100644 --- a/packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/ScopeHandlerFactoryImpl.ts +++ b/packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/ScopeHandlerFactoryImpl.ts @@ -6,6 +6,7 @@ import { IdentifierScopeHandler, LineScopeHandler, NonWhitespaceSequenceScopeHandler, + NotebookCellScopeHandler, OneOfScopeHandler, ParagraphScopeHandler, ScopeHandlerFactory, @@ -62,6 +63,8 @@ export class ScopeHandlerFactoryImpl implements ScopeHandlerFactory { return new DocumentScopeHandler(scopeType, languageId); case "oneOf": return OneOfScopeHandler.create(this, scopeType, languageId); + case "notebookCell": + return new NotebookCellScopeHandler(scopeType, languageId); case "nonWhitespaceSequence": return new NonWhitespaceSequenceScopeHandler( this, diff --git a/packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/index.ts b/packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/index.ts index e159150013..30d4280816 100644 --- a/packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/index.ts +++ b/packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/index.ts @@ -17,6 +17,7 @@ export * from "./OneOfScopeHandler"; export { default as OneOfScopeHandler } from "./OneOfScopeHandler"; export * from "./ParagraphScopeHandler"; export { default as ParagraphScopeHandler } from "./ParagraphScopeHandler"; +export { default as NotebookCellScopeHandler } from "./NotebookCellScopeHandler"; export * from "./SentenceScopeHandler/SentenceScopeHandler"; export { default as SentenceScopeHandler } from "./SentenceScopeHandler/SentenceScopeHandler"; export * from "./RegexScopeHandler"; diff --git a/packages/cursorless-engine/src/processTargets/modifiers/scopeTypeStages/NotebookCellStage.ts b/packages/cursorless-engine/src/processTargets/modifiers/scopeTypeStages/NotebookCellStage.ts deleted file mode 100644 index 433a645536..0000000000 --- a/packages/cursorless-engine/src/processTargets/modifiers/scopeTypeStages/NotebookCellStage.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type { Target } from "../../../typings/target.types"; -import type { - ContainingScopeModifier, - EveryScopeModifier, -} from "@cursorless/common"; -import type { ModifierStage } from "../../PipelineStages.types"; -import { NotebookCellTarget } from "../../targets"; - -export default class implements ModifierStage { - constructor(private modifier: ContainingScopeModifier | EveryScopeModifier) {} - - run(target: Target): NotebookCellTarget[] { - if (this.modifier.type === "everyScope") { - throw new Error(`Every ${this.modifier.type} not yet implemented`); - } - - return [ - new NotebookCellTarget({ - editor: target.editor, - isReversed: target.isReversed, - contentRange: target.contentRange, - }), - ]; - } -}