diff --git a/packages/common/src/util/toPlainObject.ts b/packages/common/src/util/toPlainObject.ts index 86ac47b549..2b3b6598e6 100644 --- a/packages/common/src/util/toPlainObject.ts +++ b/packages/common/src/util/toPlainObject.ts @@ -1,5 +1,10 @@ -import type { CharacterRange, GeneralizedRange, LineRange } from ".."; -import { FlashStyle, isLineRange } from ".."; +import type { + CharacterRange, + GeneralizedRange, + LineRange, +} from "../types/GeneralizedRange"; +import { isLineRange } from "../types/GeneralizedRange"; +import { FlashStyle } from "../ide/types/FlashDescriptor"; import { Token } from "../types/Token"; import { Selection } from "../types/Selection"; diff --git a/packages/cursorless-engine/src/actions/Actions.ts b/packages/cursorless-engine/src/actions/Actions.ts index c338a82d6e..aef630945e 100644 --- a/packages/cursorless-engine/src/actions/Actions.ts +++ b/packages/cursorless-engine/src/actions/Actions.ts @@ -1,4 +1,4 @@ -import { TreeSitter } from ".."; +import { TreeSitter } from "../typings/TreeSitter"; import { Snippets } from "../core/Snippets"; import { RangeUpdater } from "../core/updateSelections/RangeUpdater"; import { ModifierStageFactory } from "../processTargets/ModifierStageFactory"; diff --git a/packages/cursorless-engine/src/actions/ShowParseTree.ts b/packages/cursorless-engine/src/actions/ShowParseTree.ts index 0c7db86232..f535f05121 100644 --- a/packages/cursorless-engine/src/actions/ShowParseTree.ts +++ b/packages/cursorless-engine/src/actions/ShowParseTree.ts @@ -1,7 +1,7 @@ import { FlashStyle, Range, TextDocument } from "@cursorless/common"; import * as path from "node:path"; import type { Tree, TreeCursor } from "web-tree-sitter"; -import type { TreeSitter } from ".."; +import type { TreeSitter } from "../typings/TreeSitter"; import { ide } from "../singletons/ide.singleton"; import type { Target } from "../typings/target.types"; import { flashTargets } from "../util/targetUtils"; diff --git a/packages/cursorless-engine/src/cursorlessEngine.ts b/packages/cursorless-engine/src/cursorlessEngine.ts index c7b22ecd43..cee5a2aa85 100644 --- a/packages/cursorless-engine/src/cursorlessEngine.ts +++ b/packages/cursorless-engine/src/cursorlessEngine.ts @@ -6,7 +6,8 @@ import { IDE, ScopeProvider, } from "@cursorless/common"; -import { StoredTargetMap, TreeSitter } from "."; +import { StoredTargetMap } from "./core/StoredTargets"; +import { TreeSitter } from "./typings/TreeSitter"; import { CommandRunnerDecorator, CursorlessEngine, diff --git a/packages/cursorless-engine/src/generateSpokenForm/CustomSpokenFormGeneratorImpl.ts b/packages/cursorless-engine/src/generateSpokenForm/CustomSpokenFormGeneratorImpl.ts index bfb146a87b..481a69818d 100644 --- a/packages/cursorless-engine/src/generateSpokenForm/CustomSpokenFormGeneratorImpl.ts +++ b/packages/cursorless-engine/src/generateSpokenForm/CustomSpokenFormGeneratorImpl.ts @@ -4,8 +4,8 @@ import { Listener, ScopeType, } from "@cursorless/common"; -import { SpokenFormGenerator } from "."; -import { CustomSpokenFormGenerator } from ".."; +import { SpokenFormGenerator } from "./generateSpokenForm"; +import { CustomSpokenFormGenerator } from "../api/CursorlessEngineApi"; import { CustomSpokenForms } from "../spokenForms/CustomSpokenForms"; import { TalonSpokenForms } from "../scopeProviders/TalonSpokenForms"; diff --git a/packages/cursorless-engine/src/languages/LanguageDefinitions.ts b/packages/cursorless-engine/src/languages/LanguageDefinitions.ts index 4632f3473c..51f8781e2f 100644 --- a/packages/cursorless-engine/src/languages/LanguageDefinitions.ts +++ b/packages/cursorless-engine/src/languages/LanguageDefinitions.ts @@ -8,7 +8,7 @@ import { } from "@cursorless/common"; import { join } from "path"; import { SyntaxNode } from "web-tree-sitter"; -import { TreeSitter } from ".."; +import { TreeSitter } from "../typings/TreeSitter"; import { ide } from "../singletons/ide.singleton"; import { LanguageDefinition } from "./LanguageDefinition"; diff --git a/packages/cursorless-engine/src/processTargets/ModifierStageFactoryImpl.ts b/packages/cursorless-engine/src/processTargets/ModifierStageFactoryImpl.ts index f3a6dfad3d..7f8c7ae2f5 100644 --- a/packages/cursorless-engine/src/processTargets/ModifierStageFactoryImpl.ts +++ b/packages/cursorless-engine/src/processTargets/ModifierStageFactoryImpl.ts @@ -4,7 +4,7 @@ import { Modifier, SurroundingPairModifier, } from "@cursorless/common"; -import { StoredTargetMap } from ".."; +import { StoredTargetMap } from "../core/StoredTargets"; import { LanguageDefinitions } from "../languages/LanguageDefinitions"; import { ModifierStageFactory } from "./ModifierStageFactory"; import { ModifierStage } from "./PipelineStages.types"; diff --git a/packages/cursorless-engine/src/processTargets/createContinuousRangeTarget.ts b/packages/cursorless-engine/src/processTargets/createContinuousRangeTarget.ts index d6b08a9acd..70dd63bbf7 100644 --- a/packages/cursorless-engine/src/processTargets/createContinuousRangeTarget.ts +++ b/packages/cursorless-engine/src/processTargets/createContinuousRangeTarget.ts @@ -3,7 +3,7 @@ import { isSameType } from "../util/typeUtils"; import { createContinuousLineRange, createContinuousRange, -} from "./targetUtil/createContinuousRange"; +} from "./targets/util/createContinuousRange"; import { LineTarget, UntypedTarget } from "./targets"; /** diff --git a/packages/cursorless-engine/src/processTargets/marks/TargetMarkStage.ts b/packages/cursorless-engine/src/processTargets/marks/TargetMarkStage.ts index f9190b518d..7a96b64746 100644 --- a/packages/cursorless-engine/src/processTargets/marks/TargetMarkStage.ts +++ b/packages/cursorless-engine/src/processTargets/marks/TargetMarkStage.ts @@ -1,4 +1,4 @@ -import { TargetPipelineRunner } from ".."; +import { TargetPipelineRunner } from "../TargetPipelineRunner"; import { TargetMark } from "../../typings/TargetDescriptor"; import { Target } from "../../typings/target.types"; import { MarkStage } from "../PipelineStages.types"; diff --git a/packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/CharacterScopeHandler.ts b/packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/CharacterScopeHandler.ts index c864357cc8..96d2b52627 100644 --- a/packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/CharacterScopeHandler.ts +++ b/packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/CharacterScopeHandler.ts @@ -1,6 +1,6 @@ import { Direction, ScopeType } from "@cursorless/common"; import { imap } from "itertools"; -import { NestedScopeHandler } from "."; +import { NestedScopeHandler } from "./NestedScopeHandler"; import { getMatcher } from "../../../tokenizer"; import { generateMatchesInRange } from "../../../util/getMatchesInRange"; import { PlainTarget } from "../../targets"; diff --git a/packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/IdentifierScopeHandler.ts b/packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/IdentifierScopeHandler.ts index dad5698168..08c8967bb6 100644 --- a/packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/IdentifierScopeHandler.ts +++ b/packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/IdentifierScopeHandler.ts @@ -1,5 +1,5 @@ import { imap } from "itertools"; -import { NestedScopeHandler } from "."; +import { NestedScopeHandler } from "./NestedScopeHandler"; import { getMatcher } from "../../../tokenizer"; import { Direction } from "@cursorless/common"; import { generateMatchesInRange } from "../../../util/getMatchesInRange"; diff --git a/packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/RegexScopeHandler.ts b/packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/RegexScopeHandler.ts index 209ede051c..6b17995529 100644 --- a/packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/RegexScopeHandler.ts +++ b/packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/RegexScopeHandler.ts @@ -1,6 +1,7 @@ import { CustomRegexScopeType, Direction, ScopeType } from "@cursorless/common"; import { imap } from "itertools"; -import { NestedScopeHandler, ScopeHandlerFactory } from "."; +import { NestedScopeHandler } from "./NestedScopeHandler"; +import { ScopeHandlerFactory } from "./ScopeHandlerFactory"; import { generateMatchesInRange } from "../../../util/getMatchesInRange"; import { TokenTarget } from "../../targets"; import { TargetScope } from "./scope.types"; diff --git a/packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/ScopeHandlerFactoryImpl.ts b/packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/ScopeHandlerFactoryImpl.ts index 3efd7f8770..b9a87fd865 100644 --- a/packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/ScopeHandlerFactoryImpl.ts +++ b/packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/ScopeHandlerFactoryImpl.ts @@ -1,19 +1,17 @@ import type { ScopeType } from "@cursorless/common"; -import { - CharacterScopeHandler, - CustomRegexScopeHandler, - DocumentScopeHandler, - IdentifierScopeHandler, - LineScopeHandler, - NonWhitespaceSequenceScopeHandler, - OneOfScopeHandler, - ParagraphScopeHandler, - ScopeHandlerFactory, - SentenceScopeHandler, - TokenScopeHandler, - UrlScopeHandler, - WordScopeHandler, -} from "."; +import { CharacterScopeHandler } from "./CharacterScopeHandler"; +import { CustomRegexScopeHandler } from "./RegexScopeHandler"; +import { DocumentScopeHandler } from "./DocumentScopeHandler"; +import { IdentifierScopeHandler } from "./IdentifierScopeHandler"; +import { LineScopeHandler } from "./LineScopeHandler"; +import { NonWhitespaceSequenceScopeHandler } from "./RegexScopeHandler"; +import { OneOfScopeHandler } from "./OneOfScopeHandler"; +import { ParagraphScopeHandler } from "./ParagraphScopeHandler"; +import { ScopeHandlerFactory } from "./ScopeHandlerFactory"; +import { SentenceScopeHandler } from "./SentenceScopeHandler/SentenceScopeHandler"; +import { TokenScopeHandler } from "./TokenScopeHandler"; +import { UrlScopeHandler } from "./RegexScopeHandler"; +import { WordScopeHandler } from "./WordScopeHandler/WordScopeHandler"; import { LanguageDefinitions } from "../../../languages/LanguageDefinitions"; import type { CustomScopeType, ScopeHandler } from "./scopeHandler.types"; diff --git a/packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/SentenceScopeHandler/SentenceScopeHandler.ts b/packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/SentenceScopeHandler/SentenceScopeHandler.ts index b9b3cb770b..e4ba5ae2b8 100644 --- a/packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/SentenceScopeHandler/SentenceScopeHandler.ts +++ b/packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/SentenceScopeHandler/SentenceScopeHandler.ts @@ -1,6 +1,6 @@ import { Direction, Range } from "@cursorless/common"; import { imap } from "itertools"; -import { NestedScopeHandler } from ".."; +import { NestedScopeHandler } from "../NestedScopeHandler"; import { TokenTarget } from "../../../targets"; import type { TargetScope } from "../scope.types"; import { SentenceSegmenter } from "./SentenceSegmenter"; diff --git a/packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/TokenScopeHandler.ts b/packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/TokenScopeHandler.ts index 9b49df4c2b..12b4893816 100644 --- a/packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/TokenScopeHandler.ts +++ b/packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/TokenScopeHandler.ts @@ -1,6 +1,6 @@ import { Direction } from "@cursorless/common"; import { imap } from "itertools"; -import { NestedScopeHandler } from "."; +import { NestedScopeHandler } from "./NestedScopeHandler"; import { getMatcher } from "../../../tokenizer"; import { generateMatchesInRange } from "../../../util/getMatchesInRange"; import { TokenTarget } from "../../targets"; diff --git a/packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/WordScopeHandler/WordScopeHandler.ts b/packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/WordScopeHandler/WordScopeHandler.ts index b9fd509158..9e4c25b946 100644 --- a/packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/WordScopeHandler/WordScopeHandler.ts +++ b/packages/cursorless-engine/src/processTargets/modifiers/scopeHandlers/WordScopeHandler/WordScopeHandler.ts @@ -1,5 +1,5 @@ import { Range, TextEditor } from "@cursorless/common"; -import { NestedScopeHandler } from ".."; +import { NestedScopeHandler } from "../NestedScopeHandler"; import { WordTokenizer } from "./WordTokenizer"; import { Direction } from "@cursorless/common"; import { SubTokenWordTarget } from "../../../targets"; diff --git a/packages/cursorless-engine/src/processTargets/targets/BaseTarget.ts b/packages/cursorless-engine/src/processTargets/targets/BaseTarget.ts index 20307fbbfe..53cb2c8cd6 100644 --- a/packages/cursorless-engine/src/processTargets/targets/BaseTarget.ts +++ b/packages/cursorless-engine/src/processTargets/targets/BaseTarget.ts @@ -14,7 +14,7 @@ import { isEqual } from "lodash"; import type { EditWithRangeUpdater } from "../../typings/Types"; import type { Destination, Target } from "../../typings/target.types"; import { DestinationImpl } from "./DestinationImpl"; -import { createContinuousRange } from "../targetUtil/createContinuousRange"; +import { createContinuousRange } from "./util/createContinuousRange"; /** Parameters supported by all target classes */ export interface MinimumTargetParameters { diff --git a/packages/cursorless-engine/src/processTargets/targets/DocumentTarget.ts b/packages/cursorless-engine/src/processTargets/targets/DocumentTarget.ts index ce73bb4480..ae933bbea2 100644 --- a/packages/cursorless-engine/src/processTargets/targets/DocumentTarget.ts +++ b/packages/cursorless-engine/src/processTargets/targets/DocumentTarget.ts @@ -1,6 +1,7 @@ import { Range } from "@cursorless/common"; import { shrinkRangeToFitContent } from "../../util/selectionUtils"; -import { BaseTarget, CommonTargetParameters, PlainTarget } from "./"; +import { BaseTarget, CommonTargetParameters } from "./BaseTarget"; +import { PlainTarget } from "./PlainTarget"; export class DocumentTarget extends BaseTarget { type = "DocumentTarget"; diff --git a/packages/cursorless-engine/src/processTargets/targets/ImplicitTarget.ts b/packages/cursorless-engine/src/processTargets/targets/ImplicitTarget.ts index 21c00526ac..103fa29e23 100644 --- a/packages/cursorless-engine/src/processTargets/targets/ImplicitTarget.ts +++ b/packages/cursorless-engine/src/processTargets/targets/ImplicitTarget.ts @@ -1,4 +1,4 @@ -import { BaseTarget, CommonTargetParameters } from "."; +import { BaseTarget, CommonTargetParameters } from "./BaseTarget"; /** * A target that was not explicitly spoken by the user. For example: diff --git a/packages/cursorless-engine/src/processTargets/targets/InteriorTarget.ts b/packages/cursorless-engine/src/processTargets/targets/InteriorTarget.ts index f220a81276..68d2755921 100644 --- a/packages/cursorless-engine/src/processTargets/targets/InteriorTarget.ts +++ b/packages/cursorless-engine/src/processTargets/targets/InteriorTarget.ts @@ -1,7 +1,7 @@ import { Range } from "@cursorless/common"; -import { BaseTarget, MinimumTargetParameters } from "."; +import { BaseTarget, MinimumTargetParameters } from "./BaseTarget"; import { shrinkRangeToFitContent } from "../../util/selectionUtils"; -import { createContinuousRangeFromRanges } from "../targetUtil/createContinuousRange"; +import { createContinuousRangeFromRanges } from "./util/createContinuousRange"; export interface InteriorTargetParameters extends MinimumTargetParameters { readonly fullInteriorRange: Range; diff --git a/packages/cursorless-engine/src/processTargets/targets/LineTarget.ts b/packages/cursorless-engine/src/processTargets/targets/LineTarget.ts index 862868dfa6..ab5c798a72 100644 --- a/packages/cursorless-engine/src/processTargets/targets/LineTarget.ts +++ b/packages/cursorless-engine/src/processTargets/targets/LineTarget.ts @@ -1,8 +1,9 @@ import { Position, Range, TextEditor } from "@cursorless/common"; -import { BaseTarget, CommonTargetParameters } from "."; +import { BaseTarget, CommonTargetParameters } from "./BaseTarget"; import { expandToFullLine } from "../../util/rangeUtils"; -import { tryConstructPlainTarget } from "../../util/tryConstructTarget"; -import { createContinuousLineRange } from "../targetUtil/createContinuousRange"; +import { tryConstructPlainTarget } from "./PlainTarget"; +import { createContinuousLineRange } from "./util/createContinuousRange"; +import { tryConstructTarget } from "../../util/tryConstructTarget"; export class LineTarget extends BaseTarget { type = "LineTarget"; @@ -70,3 +71,21 @@ function getTrailingDelimiterRange(editor: TextEditor, range: Range) { ? new Range(range.end, new Position(end.line + 1, 0)) : undefined; } + +/** + * Constructs a {@link LineTarget} from the given range, or returns undefined + * if the range is undefined + * @param editor The editor containing the range + * @param range The range to convert into a target + * @param isReversed Whether the rain should be backward + * @returns A new {@link LineTarget} constructed from the given range, or null + * if the range is undefined + */ + +export function constructLineTarget( + editor: TextEditor, + range: Range | undefined, + isReversed: boolean, +): LineTarget | undefined { + return tryConstructTarget(LineTarget, editor, range, isReversed); +} diff --git a/packages/cursorless-engine/src/processTargets/targets/NotebookCellTarget.ts b/packages/cursorless-engine/src/processTargets/targets/NotebookCellTarget.ts index 0f1790bee5..ffdae50712 100644 --- a/packages/cursorless-engine/src/processTargets/targets/NotebookCellTarget.ts +++ b/packages/cursorless-engine/src/processTargets/targets/NotebookCellTarget.ts @@ -1,5 +1,5 @@ import { InsertionMode } from "@cursorless/common"; -import { BaseTarget, CommonTargetParameters } from "."; +import { BaseTarget, CommonTargetParameters } from "./BaseTarget"; import { Destination } from "../../typings/target.types"; import { NotebookCellDestination } from "./NotebookCellDestination"; diff --git a/packages/cursorless-engine/src/processTargets/targets/ParagraphTarget.ts b/packages/cursorless-engine/src/processTargets/targets/ParagraphTarget.ts index d6cd18f25b..09e02adda7 100644 --- a/packages/cursorless-engine/src/processTargets/targets/ParagraphTarget.ts +++ b/packages/cursorless-engine/src/processTargets/targets/ParagraphTarget.ts @@ -5,10 +5,11 @@ import { TextEditor, TextLine, } from "@cursorless/common"; -import { BaseTarget, CommonTargetParameters, LineTarget } from "."; +import { BaseTarget, CommonTargetParameters } from "./BaseTarget"; +import { LineTarget } from "./LineTarget"; import { expandToFullLine } from "../../util/rangeUtils"; -import { constructLineTarget } from "../../util/tryConstructTarget"; -import { createContinuousLineRange } from "../targetUtil/createContinuousRange"; +import { constructLineTarget } from "./LineTarget"; +import { createContinuousLineRange } from "./util/createContinuousRange"; export class ParagraphTarget extends BaseTarget { type = "ParagraphTarget"; diff --git a/packages/cursorless-engine/src/processTargets/targets/PlainTarget.ts b/packages/cursorless-engine/src/processTargets/targets/PlainTarget.ts index 8df13b5cc3..65bd31fe59 100644 --- a/packages/cursorless-engine/src/processTargets/targets/PlainTarget.ts +++ b/packages/cursorless-engine/src/processTargets/targets/PlainTarget.ts @@ -1,4 +1,6 @@ -import { BaseTarget, CommonTargetParameters } from "."; +import { tryConstructTarget } from "../../util/tryConstructTarget"; +import { TextEditor, Range } from "@cursorless/common"; +import { BaseTarget, CommonTargetParameters } from "./BaseTarget"; interface PlainTargetParameters extends CommonTargetParameters { readonly isToken?: boolean; @@ -32,3 +34,20 @@ export class PlainTarget extends BaseTarget { }; } } + +/** + * Constructs a {@link PlainTarget} from the given range, or returns undefined + * if the range is undefined + * @param editor The editor containing the range + * @param range The range to convert into a target + * @param isReversed Whether the rain should be backward + * @returns A new {@link PlainTarget} constructed from the given range, or null + * if the range is undefined + */ +export function tryConstructPlainTarget( + editor: TextEditor, + range: Range | undefined, + isReversed: boolean, +): PlainTarget | undefined { + return tryConstructTarget(PlainTarget, editor, range, isReversed); +} diff --git a/packages/cursorless-engine/src/processTargets/targets/RawSelectionTarget.ts b/packages/cursorless-engine/src/processTargets/targets/RawSelectionTarget.ts index 9270f431a5..cfd7c495ae 100644 --- a/packages/cursorless-engine/src/processTargets/targets/RawSelectionTarget.ts +++ b/packages/cursorless-engine/src/processTargets/targets/RawSelectionTarget.ts @@ -1,4 +1,4 @@ -import { BaseTarget, CommonTargetParameters } from "."; +import { BaseTarget, CommonTargetParameters } from "./BaseTarget"; /** * A target that has no leading or trailing delimiters so it's removal range diff --git a/packages/cursorless-engine/src/processTargets/targets/ScopeTypeTarget.ts b/packages/cursorless-engine/src/processTargets/targets/ScopeTypeTarget.ts index 1a724e2377..02bf7814f4 100644 --- a/packages/cursorless-engine/src/processTargets/targets/ScopeTypeTarget.ts +++ b/packages/cursorless-engine/src/processTargets/targets/ScopeTypeTarget.ts @@ -1,21 +1,18 @@ import { Range, SimpleScopeTypeType } from "@cursorless/common"; -import { - BaseTarget, - CommonTargetParameters, - InteriorTarget, - PlainTarget, -} from "."; +import { BaseTarget, CommonTargetParameters } from "./BaseTarget"; +import { InteriorTarget } from "./InteriorTarget"; +import { PlainTarget } from "./PlainTarget"; import { Target } from "../../typings/target.types"; import { createContinuousRange, createContinuousRangeFromRanges, -} from "../targetUtil/createContinuousRange"; -import { getDelimitedSequenceRemovalRange } from "../targetUtil/insertionRemovalBehaviors/DelimitedSequenceInsertionRemovalBehavior"; +} from "./util/createContinuousRange"; +import { getDelimitedSequenceRemovalRange } from "./util/insertionRemovalBehaviors/DelimitedSequenceInsertionRemovalBehavior"; import { getTokenLeadingDelimiterTarget, getTokenRemovalRange, getTokenTrailingDelimiterTarget, -} from "../targetUtil/insertionRemovalBehaviors/TokenInsertionRemovalBehavior"; +} from "./util/insertionRemovalBehaviors/TokenInsertionRemovalBehavior"; export interface ScopeTypeTargetParameters extends CommonTargetParameters { readonly scopeTypeType: SimpleScopeTypeType; diff --git a/packages/cursorless-engine/src/processTargets/targets/SubTokenWordTarget.ts b/packages/cursorless-engine/src/processTargets/targets/SubTokenWordTarget.ts index 9659edc11a..5931758f2d 100644 --- a/packages/cursorless-engine/src/processTargets/targets/SubTokenWordTarget.ts +++ b/packages/cursorless-engine/src/processTargets/targets/SubTokenWordTarget.ts @@ -1,8 +1,8 @@ import { Range } from "@cursorless/common"; -import { BaseTarget, CommonTargetParameters } from "."; -import { tryConstructPlainTarget } from "../../util/tryConstructTarget"; -import { createContinuousRange } from "../targetUtil/createContinuousRange"; -import { getDelimitedSequenceRemovalRange } from "../targetUtil/insertionRemovalBehaviors/DelimitedSequenceInsertionRemovalBehavior"; +import { BaseTarget, CommonTargetParameters } from "./BaseTarget"; +import { tryConstructPlainTarget } from "./PlainTarget"; +import { createContinuousRange } from "./util/createContinuousRange"; +import { getDelimitedSequenceRemovalRange } from "./util/insertionRemovalBehaviors/DelimitedSequenceInsertionRemovalBehavior"; export interface SubTokenTargetParameters extends CommonTargetParameters { readonly insertionDelimiter: string; diff --git a/packages/cursorless-engine/src/processTargets/targets/SurroundingPairTarget.ts b/packages/cursorless-engine/src/processTargets/targets/SurroundingPairTarget.ts index ba78eefc25..ea58749919 100644 --- a/packages/cursorless-engine/src/processTargets/targets/SurroundingPairTarget.ts +++ b/packages/cursorless-engine/src/processTargets/targets/SurroundingPairTarget.ts @@ -1,16 +1,13 @@ import { Range } from "@cursorless/common"; -import { - BaseTarget, - CommonTargetParameters, - InteriorTarget, - TokenTarget, -} from "."; +import { BaseTarget, CommonTargetParameters } from "./BaseTarget"; +import { InteriorTarget } from "./InteriorTarget"; +import { TokenTarget } from "./TokenTarget"; import { Target } from "../../typings/target.types"; import { getTokenLeadingDelimiterTarget, getTokenRemovalRange, getTokenTrailingDelimiterTarget, -} from "../targetUtil/insertionRemovalBehaviors/TokenInsertionRemovalBehavior"; +} from "./util/insertionRemovalBehaviors/TokenInsertionRemovalBehavior"; interface SurroundingPairTargetParameters extends CommonTargetParameters { /** diff --git a/packages/cursorless-engine/src/processTargets/targets/TokenTarget.ts b/packages/cursorless-engine/src/processTargets/targets/TokenTarget.ts index cda03520cb..0d4d64e720 100644 --- a/packages/cursorless-engine/src/processTargets/targets/TokenTarget.ts +++ b/packages/cursorless-engine/src/processTargets/targets/TokenTarget.ts @@ -1,11 +1,11 @@ import { Range } from "@cursorless/common"; -import { BaseTarget, CommonTargetParameters } from "."; +import { BaseTarget, CommonTargetParameters } from "./BaseTarget"; import { Target } from "../../typings/target.types"; import { getTokenLeadingDelimiterTarget, getTokenRemovalRange, getTokenTrailingDelimiterTarget, -} from "../targetUtil/insertionRemovalBehaviors/TokenInsertionRemovalBehavior"; +} from "./util/insertionRemovalBehaviors/TokenInsertionRemovalBehavior"; export class TokenTarget extends BaseTarget { type = "TokenTarget"; diff --git a/packages/cursorless-engine/src/processTargets/targets/UntypedTarget.ts b/packages/cursorless-engine/src/processTargets/targets/UntypedTarget.ts index 570ba619e1..06aab15997 100644 --- a/packages/cursorless-engine/src/processTargets/targets/UntypedTarget.ts +++ b/packages/cursorless-engine/src/processTargets/targets/UntypedTarget.ts @@ -1,11 +1,11 @@ import { Range } from "@cursorless/common"; -import { BaseTarget, CommonTargetParameters } from "."; +import { BaseTarget, CommonTargetParameters } from "./BaseTarget"; import type { Target } from "../../typings/target.types"; import { getTokenLeadingDelimiterTarget, getTokenRemovalRange, getTokenTrailingDelimiterTarget, -} from "../targetUtil/insertionRemovalBehaviors/TokenInsertionRemovalBehavior"; +} from "./util/insertionRemovalBehaviors/TokenInsertionRemovalBehavior"; interface UntypedTargetParameters extends CommonTargetParameters { readonly hasExplicitRange: boolean; diff --git a/packages/cursorless-engine/src/processTargets/targetUtil/createContinuousRange.ts b/packages/cursorless-engine/src/processTargets/targets/util/createContinuousRange.ts similarity index 94% rename from packages/cursorless-engine/src/processTargets/targetUtil/createContinuousRange.ts rename to packages/cursorless-engine/src/processTargets/targets/util/createContinuousRange.ts index c41434aa90..02a2777f34 100644 --- a/packages/cursorless-engine/src/processTargets/targetUtil/createContinuousRange.ts +++ b/packages/cursorless-engine/src/processTargets/targets/util/createContinuousRange.ts @@ -1,5 +1,5 @@ import { Position, Range } from "@cursorless/common"; -import type { Target } from "../../typings/target.types"; +import type { Target } from "../../../typings/target.types"; export function createContinuousRange( startTarget: Target, diff --git a/packages/cursorless-engine/src/processTargets/targetUtil/insertionRemovalBehaviors/DelimitedSequenceInsertionRemovalBehavior.ts b/packages/cursorless-engine/src/processTargets/targets/util/insertionRemovalBehaviors/DelimitedSequenceInsertionRemovalBehavior.ts similarity index 90% rename from packages/cursorless-engine/src/processTargets/targetUtil/insertionRemovalBehaviors/DelimitedSequenceInsertionRemovalBehavior.ts rename to packages/cursorless-engine/src/processTargets/targets/util/insertionRemovalBehaviors/DelimitedSequenceInsertionRemovalBehavior.ts index a6f3cb7b40..6132a78512 100644 --- a/packages/cursorless-engine/src/processTargets/targetUtil/insertionRemovalBehaviors/DelimitedSequenceInsertionRemovalBehavior.ts +++ b/packages/cursorless-engine/src/processTargets/targets/util/insertionRemovalBehaviors/DelimitedSequenceInsertionRemovalBehavior.ts @@ -1,5 +1,5 @@ import { Range } from "@cursorless/common"; -import { Target } from "../../../typings/target.types"; +import { Target } from "../../../../typings/target.types"; /** * Constructs a removal range for the given target that includes either the diff --git a/packages/cursorless-engine/src/processTargets/targetUtil/insertionRemovalBehaviors/TokenInsertionRemovalBehavior.ts b/packages/cursorless-engine/src/processTargets/targets/util/insertionRemovalBehaviors/TokenInsertionRemovalBehavior.ts similarity index 96% rename from packages/cursorless-engine/src/processTargets/targetUtil/insertionRemovalBehaviors/TokenInsertionRemovalBehavior.ts rename to packages/cursorless-engine/src/processTargets/targets/util/insertionRemovalBehaviors/TokenInsertionRemovalBehavior.ts index 004f8fe1da..160cab6351 100644 --- a/packages/cursorless-engine/src/processTargets/targetUtil/insertionRemovalBehaviors/TokenInsertionRemovalBehavior.ts +++ b/packages/cursorless-engine/src/processTargets/targets/util/insertionRemovalBehaviors/TokenInsertionRemovalBehavior.ts @@ -1,7 +1,7 @@ import { Range, TextEditor } from "@cursorless/common"; -import type { Target } from "../../../typings/target.types"; -import { expandToFullLine } from "../../../util/rangeUtils"; -import { PlainTarget } from "../../targets"; +import type { Target } from "../../../../typings/target.types"; +import { expandToFullLine } from "../../../../util/rangeUtils"; +import { PlainTarget } from "../../PlainTarget"; const leadingDelimiters = ['"', "'", "(", "[", "{", "<"]; const trailingDelimiters = ['"', "'", ")", "]", "}", ">", ",", ";", ":"]; diff --git a/packages/cursorless-engine/src/processTargets/targetUtil/insertionRemovalBehaviors/insertionRemovalBehavior.types.ts b/packages/cursorless-engine/src/processTargets/targets/util/insertionRemovalBehaviors/insertionRemovalBehavior.types.ts similarity index 80% rename from packages/cursorless-engine/src/processTargets/targetUtil/insertionRemovalBehaviors/insertionRemovalBehavior.types.ts rename to packages/cursorless-engine/src/processTargets/targets/util/insertionRemovalBehaviors/insertionRemovalBehavior.types.ts index 8968d69000..4690c3235a 100644 --- a/packages/cursorless-engine/src/processTargets/targetUtil/insertionRemovalBehaviors/insertionRemovalBehavior.types.ts +++ b/packages/cursorless-engine/src/processTargets/targets/util/insertionRemovalBehaviors/insertionRemovalBehavior.types.ts @@ -1,5 +1,5 @@ import type { Range } from "@cursorless/common"; -import type { Target } from "../../../typings/target.types"; +import type { Target } from "../../../../typings/target.types"; export interface InsertionRemovalBehavior { getLeadingDelimiterTarget(): Target | undefined; diff --git a/packages/cursorless-engine/src/util/tryConstructTarget.ts b/packages/cursorless-engine/src/util/tryConstructTarget.ts index c9ca286450..a0670b7deb 100644 --- a/packages/cursorless-engine/src/util/tryConstructTarget.ts +++ b/packages/cursorless-engine/src/util/tryConstructTarget.ts @@ -1,9 +1,5 @@ import { Range, TextEditor } from "@cursorless/common"; -import { - CommonTargetParameters, - LineTarget, - PlainTarget, -} from "../processTargets/targets"; +import { CommonTargetParameters } from "../processTargets/targets"; import { Target } from "../typings/target.types"; type TargetConstructor = new ( @@ -34,37 +30,3 @@ export function tryConstructTarget( contentRange: range, }); } - -/** - * Constructs a {@link PlainTarget} from the given range, or returns undefined - * if the range is undefined - * @param editor The editor containing the range - * @param range The range to convert into a target - * @param isReversed Whether the rain should be backward - * @returns A new {@link PlainTarget} constructed from the given range, or null - * if the range is undefined - */ -export function tryConstructPlainTarget( - editor: TextEditor, - range: Range | undefined, - isReversed: boolean, -): PlainTarget | undefined { - return tryConstructTarget(PlainTarget, editor, range, isReversed); -} - -/** - * Constructs a {@link LineTarget} from the given range, or returns undefined - * if the range is undefined - * @param editor The editor containing the range - * @param range The range to convert into a target - * @param isReversed Whether the rain should be backward - * @returns A new {@link LineTarget} constructed from the given range, or null - * if the range is undefined - */ -export function constructLineTarget( - editor: TextEditor, - range: Range | undefined, - isReversed: boolean, -): LineTarget | undefined { - return tryConstructTarget(LineTarget, editor, range, isReversed); -} diff --git a/packages/cursorless-vscode/src/ide/vscode/VSCodeScopeVisualizer/VscodeScopeTargetVisualizer.ts b/packages/cursorless-vscode/src/ide/vscode/VSCodeScopeVisualizer/VscodeScopeTargetVisualizer.ts index f52862a400..ae5c4eb216 100644 --- a/packages/cursorless-vscode/src/ide/vscode/VSCodeScopeVisualizer/VscodeScopeTargetVisualizer.ts +++ b/packages/cursorless-vscode/src/ide/vscode/VSCodeScopeVisualizer/VscodeScopeTargetVisualizer.ts @@ -6,7 +6,7 @@ import { TextEditor, toCharacterRange, } from "@cursorless/common"; -import { VscodeScopeVisualizer } from "."; +import { VscodeScopeVisualizer } from "./VscodeScopeVisualizer"; import { VscodeTextEditorImpl } from "../VscodeTextEditorImpl"; abstract class VscodeScopeTargetVisualizer extends VscodeScopeVisualizer { diff --git a/packages/cursorless-vscode/src/ide/vscode/VscodeFocusEditor.ts b/packages/cursorless-vscode/src/ide/vscode/VscodeFocusEditor.ts index fdc847274a..7b0153dadb 100644 --- a/packages/cursorless-vscode/src/ide/vscode/VscodeFocusEditor.ts +++ b/packages/cursorless-vscode/src/ide/vscode/VscodeFocusEditor.ts @@ -9,10 +9,8 @@ import { } from "vscode"; import { getCellIndex } from "@cursorless/vscode-common"; import { getNotebookFromCellDocument } from "./notebook/notebook"; -import { - focusNotebookCellLegacy, - isVscodeLegacyNotebookVersion, -} from "./notebook/notebookLegacy"; +import { focusNotebookCellLegacy } from "./notebook/notebookLegacy"; +import { isVscodeLegacyNotebookVersion } from "./notebook/notebook"; import type { VscodeIDE } from "./VscodeIDE"; import { VscodeTextEditorImpl } from "./VscodeTextEditorImpl"; diff --git a/packages/cursorless-vscode/src/ide/vscode/notebook/notebook.ts b/packages/cursorless-vscode/src/ide/vscode/notebook/notebook.ts index ddb0563682..8ebbb01664 100644 --- a/packages/cursorless-vscode/src/ide/vscode/notebook/notebook.ts +++ b/packages/cursorless-vscode/src/ide/vscode/notebook/notebook.ts @@ -1,8 +1,12 @@ -import { NotebookCell, TextDocument, window } from "vscode"; -import { - getNotebookFromCellDocumentLegacy, - isVscodeLegacyNotebookVersion, -} from "./notebookLegacy"; +import * as semver from "semver"; +import { version } from "vscode"; +import { TextDocument } from "vscode"; +import { getNotebookFromCellDocumentLegacy } from "./notebookLegacy"; +import { getNotebookFromCellDocumentCurrent } from "./notebookCurrent"; + +export function isVscodeLegacyNotebookVersion() { + return semver.lt(version, "1.68.0"); +} /** * Given a document corresponding to a single cell, retrieve the notebook @@ -14,25 +18,7 @@ import { export function getNotebookFromCellDocument(document: TextDocument) { if (isVscodeLegacyNotebookVersion()) { return getNotebookFromCellDocumentLegacy(document); + } else { + return getNotebookFromCellDocumentCurrent(document); } - - // FIXME: All these type casts are necessary because we've pinned VSCode - // version type defs. Can remove them once we are using more recent type defs - const { notebookEditor } = - ((window as any).visibleNotebookEditors as any[]) - .flatMap((notebookEditor: any) => - ( - ( - notebookEditor.document ?? notebookEditor.notebook - ).getCells() as NotebookCell[] - ).map((cell) => ({ - notebookEditor, - cell, - })), - ) - .find( - ({ cell }) => cell.document.uri.toString() === document.uri.toString(), - ) ?? {}; - - return notebookEditor; } diff --git a/packages/cursorless-vscode/src/ide/vscode/notebook/notebookCurrent.ts b/packages/cursorless-vscode/src/ide/vscode/notebook/notebookCurrent.ts new file mode 100644 index 0000000000..fb4e7d3edf --- /dev/null +++ b/packages/cursorless-vscode/src/ide/vscode/notebook/notebookCurrent.ts @@ -0,0 +1,24 @@ +import { NotebookCell, TextDocument, window } from "vscode"; + +/** Gets the notebook containing a text document using >=1.68.0 VSCode notebook api **/ +export function getNotebookFromCellDocumentCurrent(document: TextDocument) { + // FIXME: All these type casts are necessary because we've pinned VSCode + // version type defs. Can remove them once we are using more recent type defs + const { notebookEditor } = + ((window as any).visibleNotebookEditors as any[]) + .flatMap((notebookEditor: any) => + ( + ( + notebookEditor.document ?? notebookEditor.notebook + ).getCells() as NotebookCell[] + ).map((cell) => ({ + notebookEditor, + cell, + })), + ) + .find( + ({ cell }) => cell.document.uri.toString() === document.uri.toString(), + ) ?? {}; + + return notebookEditor; +} diff --git a/packages/cursorless-vscode/src/ide/vscode/notebook/notebookLegacy.ts b/packages/cursorless-vscode/src/ide/vscode/notebook/notebookLegacy.ts index 610c13b269..e5599929d8 100644 --- a/packages/cursorless-vscode/src/ide/vscode/notebook/notebookLegacy.ts +++ b/packages/cursorless-vscode/src/ide/vscode/notebook/notebookLegacy.ts @@ -1,16 +1,11 @@ import { getCellIndex } from "@cursorless/vscode-common"; import { range } from "lodash"; -import * as semver from "semver"; -import { commands, NotebookDocument, TextDocument, version } from "vscode"; +import { commands, NotebookDocument, TextDocument } from "vscode"; import { toVscodeEditor } from "../toVscodeEditor"; import type { VscodeIDE } from "../VscodeIDE"; import type { VscodeTextEditorImpl } from "../VscodeTextEditorImpl"; import { getNotebookFromCellDocument } from "./notebook"; -export function isVscodeLegacyNotebookVersion() { - return semver.lt(version, "1.68.0"); -} - export async function focusNotebookCellLegacy( ide: VscodeIDE, editor: VscodeTextEditorImpl, diff --git a/packages/vscode-common/src/testUtil/openNewEditor.ts b/packages/vscode-common/src/testUtil/openNewEditor.ts index c83e9b4a1d..daf35b894b 100644 --- a/packages/vscode-common/src/testUtil/openNewEditor.ts +++ b/packages/vscode-common/src/testUtil/openNewEditor.ts @@ -1,4 +1,4 @@ -import { getParseTreeApi } from ".."; +import { getParseTreeApi } from "../getExtensionApi"; import * as vscode from "vscode"; interface NewEditorOptions {