Skip to content

Commit 3e097d9

Browse files
committed
Allow empty selections -> index.
1 parent 9209da7 commit 3e097d9

File tree

5 files changed

+17
-10
lines changed

5 files changed

+17
-10
lines changed

src/vs/workbench/contrib/notebook/browser/controller/chat/notebookChatController.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -354,6 +354,7 @@ export class NotebookChatController extends Disposable implements INotebookEdito
354354
}
355355

356356
this._notebookEditor.focusContainer(true);
357+
this._notebookEditor.setFocus({ start: this._widget.afterModelPosition, end: this._widget.afterModelPosition });
357358
this._notebookEditor.setSelections([{
358359
start: this._widget.afterModelPosition,
359360
end: this._widget.afterModelPosition

src/vs/workbench/contrib/notebook/browser/viewModel/notebookViewModelImpl.ts

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -361,9 +361,6 @@ export class NotebookViewModel extends Disposable implements EditorFoldingStateD
361361
this._focused = focused;
362362
}
363363

364-
/**
365-
* Empty selection will be turned to `null`
366-
*/
367364
validateRange(cellRange: ICellRange | null | undefined): ICellRange | null {
368365
if (!cellRange) {
369366
return null;
@@ -372,11 +369,7 @@ export class NotebookViewModel extends Disposable implements EditorFoldingStateD
372369
const start = clamp(cellRange.start, 0, this.length);
373370
const end = clamp(cellRange.end, 0, this.length);
374371

375-
if (start === end) {
376-
return null;
377-
}
378-
379-
if (start < end) {
372+
if (start <= end) {
380373
return { start, end };
381374
} else {
382375
return { start: end, end: start };

src/vs/workbench/contrib/notebook/common/notebookRange.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ export function reduceCellRanges(ranges: ICellRange[]): ICellRange[] {
6565
return [];
6666
}
6767

68-
return sorted.reduce((prev: ICellRange[], curr) => {
68+
const reduced = sorted.reduce((prev: ICellRange[], curr) => {
6969
const last = prev[prev.length - 1];
7070
if (last.end >= curr.start) {
7171
last.end = Math.max(last.end, curr.end);
@@ -74,6 +74,13 @@ export function reduceCellRanges(ranges: ICellRange[]): ICellRange[] {
7474
}
7575
return prev;
7676
}, [first] as ICellRange[]);
77+
78+
if (reduced.length > 1) {
79+
// remove the (0, 0) range
80+
return reduced.filter(range => !(range.start === range.end && range.start === 0));
81+
}
82+
83+
return reduced;
7784
}
7885

7986
export function cellRangesEqual(a: ICellRange[], b: ICellRange[]) {

src/vs/workbench/contrib/notebook/test/browser/notebookCommon.test.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -399,6 +399,12 @@ suite('CellRange', function () {
399399
{ start: 0, end: 4 }
400400
]);
401401
});
402+
403+
test('Reduce ranges 2, empty ranges', function () {
404+
assert.deepStrictEqual(reduceCellRanges([{ start: 0, end: 0 }, { start: 0, end: 0 }]), [{ start: 0, end: 0 }]);
405+
assert.deepStrictEqual(reduceCellRanges([{ start: 0, end: 0 }, { start: 1, end: 2 }]), [{ start: 1, end: 2 }]);
406+
assert.deepStrictEqual(reduceCellRanges([{ start: 2, end: 2 }]), [{ start: 2, end: 2 }]);
407+
});
402408
});
403409

404410
suite('NotebookWorkingCopyTypeIdentifier', function () {

src/vs/workbench/contrib/notebook/test/browser/notebookSelection.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ suite('NotebookCellList focus/selection', () => {
278278
(editor, viewModel) => {
279279
assert.deepStrictEqual(viewModel.validateRange(null), null);
280280
assert.deepStrictEqual(viewModel.validateRange(undefined), null);
281-
assert.deepStrictEqual(viewModel.validateRange({ start: 0, end: 0 }), null);
281+
assert.deepStrictEqual(viewModel.validateRange({ start: 0, end: 0 }), { start: 0, end: 0 });
282282
assert.deepStrictEqual(viewModel.validateRange({ start: 0, end: 2 }), { start: 0, end: 2 });
283283
assert.deepStrictEqual(viewModel.validateRange({ start: 0, end: 3 }), { start: 0, end: 2 });
284284
assert.deepStrictEqual(viewModel.validateRange({ start: -1, end: 3 }), { start: 0, end: 2 });

0 commit comments

Comments
 (0)