Skip to content

Commit 7c8c16d

Browse files
authored
Merge pull request #1608 from rayat-amperity/wip/rayat/issue-#1607/selection-cursor-api-cleanup
WIP: #1607 - Cleanup selection/cursor API
2 parents 8f7bfb1 + 1c1d5b5 commit 7c8c16d

File tree

7 files changed

+271
-286
lines changed

7 files changed

+271
-286
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
Changes to Calva.
44

55
## [Unreleased]
6+
- Maintenance: [Cleanup/removal of EditableDocument.selectionLeft/Right APIs](https://github.com/BetterThanTomorrow/calva/issues/1607)]
67

78
## [2.0.261] - 2022-04-01
89
- Fix: [Results doc gets in a bad state and does not update](https://github.com/BetterThanTomorrow/calva/issues/1509)

src/cursor-doc/model.ts

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -104,8 +104,6 @@ export interface EditableModel {
104104
}
105105

106106
export interface EditableDocument {
107-
readonly selectionLeft: number;
108-
readonly selectionRight: number;
109107
selection: ModelEditSelection;
110108
model: EditableModel;
111109
selectionStack: ModelEditSelection[];
@@ -534,17 +532,7 @@ export class StringDocument implements EditableDocument {
534532
}
535533
}
536534

537-
selectionLeft: number;
538-
selectionRight: number;
539-
540-
get selection() {
541-
return new ModelEditSelection(this.selectionLeft, this.selectionRight);
542-
}
543-
544-
set selection(sel: ModelEditSelection) {
545-
this.selectionLeft = sel.anchor;
546-
this.selectionRight = sel.active;
547-
}
535+
selection: ModelEditSelection;
548536

549537
model: LineInputModel = new LineInputModel(1, this);
550538

@@ -565,14 +553,14 @@ export class StringDocument implements EditableDocument {
565553
getSelectionText: () => string;
566554

567555
delete() {
568-
const p = this.selectionLeft;
556+
const p = this.selection.anchor;
569557
return this.model.edit([new ModelEdit('deleteRange', [p, 1])], {
570558
selection: new ModelEditSelection(p),
571559
});
572560
}
573561

574562
backspace() {
575-
const p = this.selectionLeft;
563+
const p = this.selection.anchor;
576564
return this.model.edit([new ModelEdit('deleteRange', [p - 1, 1])], {
577565
selection: new ModelEditSelection(p - 1),
578566
});

src/cursor-doc/paredit.ts

Lines changed: 44 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { includes } from 'lodash';
21
import { validPair } from './clojure-lexer';
32
import { ModelEdit, EditableDocument, ModelEditSelection } from './model';
43
import { LispTokenCursor } from './token-cursor';
@@ -16,8 +15,8 @@ import { LispTokenCursor } from './token-cursor';
1615
export function killRange(
1716
doc: EditableDocument,
1817
range: [number, number],
19-
start = doc.selectionLeft,
20-
end = doc.selectionRight
18+
start = doc.selection.anchor,
19+
end = doc.selection.active
2120
) {
2221
const [left, right] = [Math.min(...range), Math.max(...range)];
2322
void doc.model.edit([new ModelEdit('deleteRange', [left, right - left, [start, end]])], {
@@ -86,7 +85,7 @@ export function selectBackwardDownSexp(doc: EditableDocument) {
8685
}
8786

8887
export function selectForwardUpSexp(doc: EditableDocument) {
89-
selectRangeForward(doc, rangeToForwardUpList(doc, doc.selectionRight));
88+
selectRangeForward(doc, rangeToForwardUpList(doc, doc.selection.active));
9089
}
9190

9291
export function selectBackwardUpSexp(doc: EditableDocument) {
@@ -98,7 +97,7 @@ export function selectBackwardUpSexp(doc: EditableDocument) {
9897
}
9998

10099
export function selectCloseList(doc: EditableDocument) {
101-
selectRangeForward(doc, rangeToForwardList(doc, doc.selectionRight));
100+
selectRangeForward(doc, rangeToForwardList(doc, doc.selection.active));
102101
}
103102

104103
export function selectOpenList(doc: EditableDocument) {
@@ -159,7 +158,7 @@ export function backwardSexpRange(
159158

160159
export function forwardListRange(
161160
doc: EditableDocument,
162-
start: number = doc.selectionRight
161+
start: number = doc.selection.active
163162
): [number, number] {
164163
const cursor = doc.getTokenCursor(start);
165164
cursor.forwardList();
@@ -168,7 +167,7 @@ export function forwardListRange(
168167

169168
export function backwardListRange(
170169
doc: EditableDocument,
171-
start: number = doc.selectionRight
170+
start: number = doc.selection.active
172171
): [number, number] {
173172
const cursor = doc.getTokenCursor(start);
174173
cursor.backwardList();
@@ -358,8 +357,8 @@ export function wrapSexpr(
358357
doc: EditableDocument,
359358
open: string,
360359
close: string,
361-
start: number = doc.selectionLeft,
362-
end: number = doc.selectionRight,
360+
start: number = doc.selection.anchor,
361+
end: number = doc.selection.active,
363362
options = { skipFormat: false }
364363
): Thenable<boolean> {
365364
const cursor = doc.getTokenCursor(end);
@@ -407,8 +406,8 @@ export function rewrapSexpr(
407406
doc: EditableDocument,
408407
open: string,
409408
close: string,
410-
start: number = doc.selectionLeft,
411-
end: number = doc.selectionRight
409+
start: number = doc.selection.anchor,
410+
end: number = doc.selection.active
412411
): Thenable<boolean> {
413412
const cursor = doc.getTokenCursor(end);
414413
if (cursor.backwardList()) {
@@ -428,7 +427,7 @@ export function rewrapSexpr(
428427
}
429428
}
430429

431-
export function splitSexp(doc: EditableDocument, start: number = doc.selectionRight) {
430+
export function splitSexp(doc: EditableDocument, start: number = doc.selection.active) {
432431
const cursor = doc.getTokenCursor(start);
433432
if (!cursor.withinString() && !(cursor.isWhiteSpace() || cursor.previousIsWhiteSpace())) {
434433
cursor.forwardWhitespace();
@@ -452,7 +451,7 @@ export function splitSexp(doc: EditableDocument, start: number = doc.selectionRi
452451
*/
453452
export function joinSexp(
454453
doc: EditableDocument,
455-
start: number = doc.selectionRight
454+
start: number = doc.selection.active
456455
): Thenable<boolean> {
457456
const cursor = doc.getTokenCursor(start);
458457
cursor.backwardWhitespace();
@@ -481,7 +480,7 @@ export function joinSexp(
481480

482481
export function spliceSexp(
483482
doc: EditableDocument,
484-
start: number = doc.selectionRight,
483+
start: number = doc.selection.active,
485484
undoStopBefore = true
486485
): Thenable<boolean> {
487486
const cursor = doc.getTokenCursor(start);
@@ -542,7 +541,7 @@ export function killForwardList(
542541

543542
export function forwardSlurpSexp(
544543
doc: EditableDocument,
545-
start: number = doc.selectionRight,
544+
start: number = doc.selection.active,
546545
extraOpts = { formatDepth: 1 }
547546
) {
548547
const cursor = doc.getTokenCursor(start);
@@ -587,7 +586,7 @@ export function forwardSlurpSexp(
587586

588587
export function backwardSlurpSexp(
589588
doc: EditableDocument,
590-
start: number = doc.selectionRight,
589+
start: number = doc.selection.active,
591590
extraOpts = {}
592591
) {
593592
const cursor = doc.getTokenCursor(start);
@@ -621,7 +620,7 @@ export function backwardSlurpSexp(
621620
}
622621
}
623622

624-
export function forwardBarfSexp(doc: EditableDocument, start: number = doc.selectionRight) {
623+
export function forwardBarfSexp(doc: EditableDocument, start: number = doc.selection.active) {
625624
const cursor = doc.getTokenCursor(start);
626625
cursor.forwardList();
627626
if (cursor.getToken().type == 'close') {
@@ -644,7 +643,7 @@ export function forwardBarfSexp(doc: EditableDocument, start: number = doc.selec
644643
}
645644
}
646645

647-
export function backwardBarfSexp(doc: EditableDocument, start: number = doc.selectionRight) {
646+
export function backwardBarfSexp(doc: EditableDocument, start: number = doc.selection.active) {
648647
const cursor = doc.getTokenCursor(start);
649648
cursor.backwardList();
650649
const tk = cursor.getPrevToken();
@@ -674,9 +673,9 @@ export function open(
674673
doc: EditableDocument,
675674
open: string,
676675
close: string,
677-
start: number = doc.selectionRight
676+
start: number = doc.selection.active
678677
) {
679-
const [cs, ce] = [doc.selectionLeft, doc.selectionRight];
678+
const [cs, ce] = [doc.selection.anchor, doc.selection.active];
680679
doc.insertString(open + doc.getSelectionText() + close);
681680
if (cs != ce) {
682681
doc.selection = new ModelEditSelection(cs + open.length, ce + open.length);
@@ -694,7 +693,7 @@ function docIsBalanced(doc: EditableDocument, start: number = doc.selection.acti
694693
return cursor.atEnd();
695694
}
696695

697-
export function close(doc: EditableDocument, close: string, start: number = doc.selectionRight) {
696+
export function close(doc: EditableDocument, close: string, start: number = doc.selection.active) {
698697
const cursor = doc.getTokenCursor(start);
699698
const inString = cursor.withinString();
700699
cursor.forwardWhitespace(false);
@@ -754,8 +753,8 @@ export function backspace(
754753

755754
export function deleteForward(
756755
doc: EditableDocument,
757-
start: number = doc.selectionLeft,
758-
end: number = doc.selectionRight
756+
start: number = doc.selection.anchor,
757+
end: number = doc.selection.active
759758
) {
760759
if (start != end) {
761760
void doc.delete();
@@ -788,8 +787,8 @@ export function deleteForward(
788787

789788
export function stringQuote(
790789
doc: EditableDocument,
791-
start: number = doc.selectionLeft,
792-
end: number = doc.selectionRight
790+
start: number = doc.selection.anchor,
791+
end: number = doc.selection.active
793792
) {
794793
if (start != end) {
795794
doc.insertString('"');
@@ -826,8 +825,8 @@ export function stringQuote(
826825

827826
export function growSelection(
828827
doc: EditableDocument,
829-
start: number = doc.selectionLeft,
830-
end: number = doc.selectionRight
828+
start: number = doc.selection.anchor,
829+
end: number = doc.selection.active
831830
) {
832831
const startC = doc.getTokenCursor(start),
833832
endC = doc.getTokenCursor(end),
@@ -876,7 +875,7 @@ export function growSelectionStack(doc: EditableDocument, range: [number, number
876875
const [start, end] = range;
877876
if (doc.selectionStack.length > 0) {
878877
const prev = doc.selectionStack[doc.selectionStack.length - 1];
879-
if (!(doc.selectionLeft == prev.anchor && doc.selectionRight == prev.active)) {
878+
if (!(doc.selection.anchor == prev.anchor && doc.selection.active == prev.active)) {
880879
setSelectionStack(doc);
881880
} else if (prev.anchor === range[0] && prev.active === range[1]) {
882881
return;
@@ -893,8 +892,8 @@ export function shrinkSelection(doc: EditableDocument) {
893892
const latest = doc.selectionStack.pop();
894893
if (
895894
doc.selectionStack.length &&
896-
latest.anchor == doc.selectionLeft &&
897-
latest.active == doc.selectionRight
895+
latest.anchor == doc.selection.anchor &&
896+
latest.active == doc.selection.active
898897
) {
899898
doc.selection = doc.selectionStack[doc.selectionStack.length - 1];
900899
}
@@ -907,8 +906,8 @@ export function setSelectionStack(doc: EditableDocument, selection = doc.selecti
907906

908907
export function raiseSexp(
909908
doc: EditableDocument,
910-
start = doc.selectionLeft,
911-
end = doc.selectionRight
909+
start = doc.selection.anchor,
910+
end = doc.selection.active
912911
) {
913912
const cursor = doc.getTokenCursor(end);
914913
const [formStart, formEnd] = cursor.rangeForCurrentForm(start);
@@ -937,8 +936,8 @@ export function raiseSexp(
937936

938937
export function convolute(
939938
doc: EditableDocument,
940-
start = doc.selectionLeft,
941-
end = doc.selectionRight
939+
start = doc.selection.anchor,
940+
end = doc.selection.active
942941
) {
943942
if (start == end) {
944943
const cursorStart = doc.getTokenCursor(end);
@@ -977,8 +976,8 @@ export function convolute(
977976

978977
export function transpose(
979978
doc: EditableDocument,
980-
left = doc.selectionLeft,
981-
right = doc.selectionRight,
979+
left = doc.selection.anchor,
980+
right = doc.selection.active,
982981
newPosOffset: { fromLeft?: number; fromRight?: number } = {}
983982
) {
984983
const cursor = doc.getTokenCursor(right);
@@ -1088,8 +1087,8 @@ function currentSexpsRange(
10881087
export function dragSexprBackward(
10891088
doc: EditableDocument,
10901089
pairForms = bindingForms,
1091-
left = doc.selectionLeft,
1092-
right = doc.selectionRight
1090+
left = doc.selection.anchor,
1091+
right = doc.selection.active
10931092
) {
10941093
const cursor = doc.getTokenCursor(right);
10951094
const usePairs = isInPairsList(cursor, pairForms);
@@ -1115,8 +1114,8 @@ export function dragSexprBackward(
11151114
export function dragSexprForward(
11161115
doc: EditableDocument,
11171116
pairForms = bindingForms,
1118-
left = doc.selectionLeft,
1119-
right = doc.selectionRight
1117+
left = doc.selection.anchor,
1118+
right = doc.selection.active
11201119
) {
11211120
const cursor = doc.getTokenCursor(right);
11221121
const usePairs = isInPairsList(cursor, pairForms);
@@ -1161,7 +1160,7 @@ export type WhitespaceInfo = {
11611160
*/
11621161
export function collectWhitespaceInfo(
11631162
doc: EditableDocument,
1164-
p = doc.selectionRight
1163+
p = doc.selection.active
11651164
): WhitespaceInfo {
11661165
const cursor = doc.getTokenCursor(p);
11671166
const currentRange = cursor.rangeForCurrentForm(p);
@@ -1189,7 +1188,7 @@ export function collectWhitespaceInfo(
11891188
};
11901189
}
11911190

1192-
export function dragSexprBackwardUp(doc: EditableDocument, p = doc.selectionRight) {
1191+
export function dragSexprBackwardUp(doc: EditableDocument, p = doc.selection.active) {
11931192
const wsInfo = collectWhitespaceInfo(doc, p);
11941193
const cursor = doc.getTokenCursor(p);
11951194
const currentRange = cursor.rangeForCurrentForm(p);
@@ -1230,7 +1229,7 @@ export function dragSexprBackwardUp(doc: EditableDocument, p = doc.selectionRigh
12301229
}
12311230
}
12321231

1233-
export function dragSexprForwardDown(doc: EditableDocument, p = doc.selectionRight) {
1232+
export function dragSexprForwardDown(doc: EditableDocument, p = doc.selection.active) {
12341233
const wsInfo = collectWhitespaceInfo(doc, p);
12351234
const currentRange = doc.getTokenCursor(p).rangeForCurrentForm(p);
12361235
const newPosOffset = p - currentRange[0];
@@ -1266,7 +1265,7 @@ export function dragSexprForwardDown(doc: EditableDocument, p = doc.selectionRig
12661265
}
12671266
}
12681267

1269-
export function dragSexprForwardUp(doc: EditableDocument, p = doc.selectionRight) {
1268+
export function dragSexprForwardUp(doc: EditableDocument, p = doc.selection.active) {
12701269
const wsInfo = collectWhitespaceInfo(doc, p);
12711270
const cursor = doc.getTokenCursor(p);
12721271
const currentRange = cursor.rangeForCurrentForm(p);
@@ -1297,7 +1296,7 @@ export function dragSexprForwardUp(doc: EditableDocument, p = doc.selectionRight
12971296
}
12981297
}
12991298

1300-
export function dragSexprBackwardDown(doc: EditableDocument, p = doc.selectionRight) {
1299+
export function dragSexprBackwardDown(doc: EditableDocument, p = doc.selection.active) {
13011300
const wsInfo = collectWhitespaceInfo(doc, p);
13021301
const currentRange = doc.getTokenCursor(p).rangeForCurrentForm(p);
13031302
const newPosOffset = p - currentRange[0];

0 commit comments

Comments
 (0)