Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/processTargets/modifiers/HeadTailStage.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Range, TextEditor } from "vscode";
import { Range } from "vscode";
import { Target } from "../../typings/target.types";
import {
HeadTailModifier,
Expand Down
2 changes: 1 addition & 1 deletion src/processTargets/targets/BaseTarget.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import {
createContinuousRangeWeakTarget,
} from "../targetUtil/createContinuousRange";

/** Parameters supported by all target classes */
/** Parameters supported by most target classes */
export interface CommonTargetParameters {
readonly editor: TextEditor;
readonly isReversed: boolean;
Expand Down
39 changes: 6 additions & 33 deletions src/processTargets/targets/DocumentTarget.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Range, TextEditor } from "vscode";
import { fitRangeToLineContent } from "../modifiers/scopeTypeStages/LineStage";
import { Range } from "vscode";
import { shrinkRangeToFitContent } from "../../util/selectionUtils";
import BaseTarget, { CommonTargetParameters } from "./BaseTarget";
import WeakTarget from "./WeakTarget";
import PlainTarget from "./PlainTarget";

export default class DocumentTarget extends BaseTarget {
insertionDelimiter = "\n";
Expand All @@ -23,10 +23,11 @@ export default class DocumentTarget extends BaseTarget {

getInteriorStrict() {
return [
new WeakTarget({
// Use plain target instead of interior target since we want the same content and removal range for a document interior.
new PlainTarget({
editor: this.editor,
isReversed: this.isReversed,
contentRange: getDocumentContentRange(this.editor),
contentRange: shrinkRangeToFitContent(this.editor, this.contentRange),
}),
];
}
Expand All @@ -35,31 +36,3 @@ export default class DocumentTarget extends BaseTarget {
return this.state;
}
}

function getDocumentContentRange(editor: TextEditor) {
const { document } = editor;
let firstLineNum = 0;
let lastLineNum = document.lineCount - 1;

for (let i = firstLineNum; i < document.lineCount; ++i) {
if (!document.lineAt(i).isEmptyOrWhitespace) {
firstLineNum = i;
break;
}
}

for (let i = lastLineNum; i > -1; --i) {
if (!document.lineAt(i).isEmptyOrWhitespace) {
lastLineNum = i;
break;
}
}

const firstLine = document.lineAt(firstLineNum);
const lastLine = document.lineAt(lastLineNum);

return fitRangeToLineContent(
editor,
new Range(firstLine.range.start, lastLine.range.end)
);
}
35 changes: 35 additions & 0 deletions src/processTargets/targets/InteriorTarget.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import { Range } from "vscode";
import { shrinkRangeToFitContent } from "../../util/selectionUtils";
import BaseTarget, { CommonTargetParameters } from "./BaseTarget";

export interface InteriorTargetParameters
extends Omit<CommonTargetParameters, "contentRange"> {
Comment thread
AndreasArvidsson marked this conversation as resolved.
readonly fullInteriorRange: Range;
}

export default class InteriorTarget extends BaseTarget {
insertionDelimiter = " ";
private readonly fullInteriorRange: Range;

constructor(parameters: InteriorTargetParameters) {
super({
...parameters,
contentRange: shrinkRangeToFitContent(
parameters.editor,
parameters.fullInteriorRange
),
});
this.fullInteriorRange = parameters.fullInteriorRange;
}

getLeadingDelimiterTarget = () => undefined;
getTrailingDelimiterTarget = () => undefined;
getRemovalRange = () => this.fullInteriorRange;

protected getCloneParameters() {
return {
...this.state,
fullInteriorRange: this.fullInteriorRange,
};
}
}
6 changes: 3 additions & 3 deletions src/processTargets/targets/SurroundingPairTarget.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ import {
getTokenTrailingDelimiterTarget,
} from "../targetUtil/insertionRemovalBehaviors/TokenInsertionRemovalBehavior";
import BaseTarget, { CommonTargetParameters } from "./BaseTarget";
import InteriorTarget from "./InteriorTarget";
import TokenTarget from "./TokenTarget";
import WeakTarget from "./WeakTarget";

interface SurroundingPairTargetParameters extends CommonTargetParameters {
/**
Expand Down Expand Up @@ -48,10 +48,10 @@ export default class SurroundingPairTarget extends BaseTarget {

getInteriorStrict() {
return [
new WeakTarget({
new InteriorTarget({
editor: this.editor,
isReversed: this.isReversed,
contentRange: this.interiorRange_,
fullInteriorRange: this.interiorRange_,
}),
];
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
languageId: plaintext
command:
spokenForm: clear core file
version: 2
targets:
- type: primitive
modifiers:
- {type: interiorOnly}
- type: containingScope
scopeType: {type: document}
usePrePhraseSnapshot: true
action: {name: clearAndSetSelection}
initialState:
documentContents: "\r\n abc \r\n"
selections:
- anchor: {line: 0, character: 0}
active: {line: 0, character: 0}
marks: {}
finalState:
documentContents: "\r\n \r\n"
selections:
- anchor: {line: 1, character: 1}
active: {line: 1, character: 1}
thatMark:
- anchor: {line: 1, character: 1}
active: {line: 1, character: 1}
fullTargets: [{type: primitive, mark: {type: cursor}, modifiers: [{type: interiorOnly}, {type: containingScope, scopeType: {type: document}}]}]
25 changes: 25 additions & 0 deletions src/test/suite/fixtures/recorded/selectionTypes/clearCore.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
languageId: plaintext
command:
spokenForm: clear core
version: 2
targets:
- type: primitive
modifiers:
- {type: interiorOnly}
usePrePhraseSnapshot: true
action: {name: clearAndSetSelection}
initialState:
documentContents: ( )
selections:
- anchor: {line: 0, character: 0}
active: {line: 0, character: 0}
marks: {}
finalState:
documentContents: ()
selections:
- anchor: {line: 0, character: 1}
active: {line: 0, character: 1}
thatMark:
- anchor: {line: 0, character: 1}
active: {line: 0, character: 1}
fullTargets: [{type: primitive, mark: {type: cursor}, modifiers: [{type: interiorOnly}]}]
25 changes: 25 additions & 0 deletions src/test/suite/fixtures/recorded/selectionTypes/clearCore2.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
languageId: plaintext
command:
spokenForm: clear core
version: 2
targets:
- type: primitive
modifiers:
- {type: interiorOnly}
usePrePhraseSnapshot: true
action: {name: clearAndSetSelection}
initialState:
documentContents: ()
selections:
- anchor: {line: 0, character: 0}
active: {line: 0, character: 0}
marks: {}
finalState:
documentContents: ()
selections:
- anchor: {line: 0, character: 1}
active: {line: 0, character: 1}
thatMark:
- anchor: {line: 0, character: 1}
active: {line: 0, character: 1}
fullTargets: [{type: primitive, mark: {type: cursor}, modifiers: [{type: interiorOnly}]}]
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,13 @@ initialState:
marks: {}
finalState:
documentContents: |-
Comment thread
pokey marked this conversation as resolved.
{z)
{
z)
}
selections:
- anchor: {line: 0, character: 1}
active: {line: 0, character: 1}
- anchor: {line: 1, character: 4}
active: {line: 1, character: 4}
thatMark:
- anchor: {line: 0, character: 1}
active: {line: 0, character: 1}
- anchor: {line: 1, character: 4}
active: {line: 1, character: 4}
fullTargets: [{type: primitive, mark: {type: cursor}, modifiers: [{type: extendThroughStartOf, modifiers: [{type: interiorOnly}, {type: containingScope, scopeType: {type: surroundingPair, delimiter: curlyBrackets}}]}]}]
29 changes: 29 additions & 0 deletions src/test/suite/fixtures/recorded/surroundingPair/chuckCore.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
languageId: typescript
command:
spokenForm: chuck core
version: 2
targets:
- type: primitive
modifiers:
- {type: interiorOnly}
usePrePhraseSnapshot: true
action: {name: remove}
initialState:
documentContents: |-
[
"foo",
"bar"
]
selections:
- anchor: {line: 1, character: 10}
active: {line: 1, character: 10}
marks: {}
finalState:
documentContents: "[]"
selections:
- anchor: {line: 0, character: 1}
active: {line: 0, character: 1}
thatMark:
- anchor: {line: 0, character: 1}
active: {line: 0, character: 1}
fullTargets: [{type: primitive, mark: {type: cursor}, modifiers: [{type: interiorOnly}]}]
25 changes: 25 additions & 0 deletions src/test/suite/fixtures/recorded/surroundingPair/chuckCore2.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
languageId: plaintext
command:
spokenForm: chuck core
version: 2
targets:
- type: primitive
modifiers:
- {type: interiorOnly}
usePrePhraseSnapshot: true
action: {name: remove}
initialState:
documentContents: ( hello )
selections:
- anchor: {line: 0, character: 6}
active: {line: 0, character: 6}
marks: {}
finalState:
documentContents: ()
selections:
- anchor: {line: 0, character: 1}
active: {line: 0, character: 1}
thatMark:
- anchor: {line: 0, character: 1}
active: {line: 0, character: 1}
fullTargets: [{type: primitive, mark: {type: cursor}, modifiers: [{type: interiorOnly}]}]
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
languageId: python
command:
version: 1
spokenForm: clear matching
spokenForm: clear inside
action: clearAndSetSelection
targets:
- type: primitive
Expand All @@ -17,7 +17,9 @@ initialState:
active: {line: 1, character: 0}
marks: {}
finalState:
documentContents: "\"\"\"\"\"\""
documentContents: |-
"""
"""
selections:
- anchor: {line: 0, character: 3}
active: {line: 0, character: 3}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,9 @@ finalState:
)
}
selections:
- anchor: {line: 1, character: 45}
active: {line: 3, character: 4}
- anchor: {line: 2, character: 4}
active: {line: 2, character: 30}
thatMark:
- anchor: {line: 1, character: 45}
active: {line: 3, character: 4}
- anchor: {line: 2, character: 4}
active: {line: 2, character: 30}
fullTargets: [{type: primitive, mark: {type: cursor}, modifiers: [{type: containingScope, scopeType: {type: surroundingPair, delimiter: any}}, {type: interiorOnly}]}]
33 changes: 33 additions & 0 deletions src/test/suite/fixtures/recorded/surroundingPair/takeCore.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
languageId: typescript
command:
spokenForm: take core
version: 2
targets:
- type: primitive
modifiers:
- {type: interiorOnly}
usePrePhraseSnapshot: true
action: {name: setSelection}
initialState:
documentContents: |-
[
"foo",
"bar"
]
selections:
- anchor: {line: 1, character: 10}
active: {line: 1, character: 10}
marks: {}
finalState:
documentContents: |-
[
"foo",
"bar"
]
selections:
- anchor: {line: 1, character: 4}
active: {line: 2, character: 9}
thatMark:
- anchor: {line: 1, character: 4}
active: {line: 2, character: 9}
fullTargets: [{type: primitive, mark: {type: cursor}, modifiers: [{type: interiorOnly}]}]
25 changes: 25 additions & 0 deletions src/test/suite/fixtures/recorded/surroundingPair/takeCore2.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
languageId: plaintext
command:
spokenForm: take core
version: 2
targets:
- type: primitive
modifiers:
- {type: interiorOnly}
usePrePhraseSnapshot: true
action: {name: setSelection}
initialState:
documentContents: ( hello )
selections:
- anchor: {line: 0, character: 6}
active: {line: 0, character: 6}
marks: {}
finalState:
documentContents: ( hello )
selections:
- anchor: {line: 0, character: 2}
active: {line: 0, character: 7}
thatMark:
- anchor: {line: 0, character: 2}
active: {line: 0, character: 7}
fullTargets: [{type: primitive, mark: {type: cursor}, modifiers: [{type: interiorOnly}]}]
Loading