Skip to content

Commit 41c840e

Browse files
committed
trim whitespace after new line character deletion
1 parent f861341 commit 41c840e

File tree

1 file changed

+31
-2
lines changed

1 file changed

+31
-2
lines changed

src/vs/editor/common/cursor/cursorDeleteOperations.ts

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,12 +170,41 @@ export class DeleteOperations {
170170
}
171171

172172
private static getDeleteRange(selection: Selection, model: ICursorSimpleModel, config: CursorConfiguration,): Range {
173+
const position = selection.getPosition();
174+
const startPosition = selection.getSelectionStart();
175+
176+
const startLineNumber = Math.min(startPosition.lineNumber, position.lineNumber);
177+
const endLineNumber = Math.max(startPosition.lineNumber, position.lineNumber);
178+
let startColumn = position.column;
179+
let endColumn = startPosition.column;
180+
if (startLineNumber == startPosition.lineNumber) {
181+
//top down deletion
182+
startColumn = startPosition.column;
183+
endColumn = position.column;
184+
}
185+
let firstNonWhiteSpaceColumn = model.getLineFirstNonWhitespaceColumn(endLineNumber);
186+
let lastNonWhiteSpaceColumn = model.getLineLastNonWhitespaceColumn(startLineNumber);
187+
if (startLineNumber != endLineNumber && model.getLineContent(startLineNumber).length > 0) {
188+
//deleting new line character + trimming white space
189+
if (startColumn < lastNonWhiteSpaceColumn) {
190+
lastNonWhiteSpaceColumn = startColumn;
191+
}
192+
if (endColumn > firstNonWhiteSpaceColumn) {
193+
firstNonWhiteSpaceColumn = endColumn;
194+
}
195+
if (/^[ \t]*$/.test(model.getLineContent(startLineNumber))) {
196+
//if line with '\n' character has only spaces/tabs -- no need to trim left side
197+
return Range.fromPositions(new Position(startLineNumber, startColumn),
198+
new Position(endLineNumber, firstNonWhiteSpaceColumn));
199+
}
200+
return Range.fromPositions(new Position(startLineNumber, lastNonWhiteSpaceColumn),
201+
new Position(endLineNumber, firstNonWhiteSpaceColumn));
202+
}
203+
173204
if (!selection.isEmpty()) {
174205
return selection;
175206
}
176207

177-
const position = selection.getPosition();
178-
179208
// Unintend when using tab stops and cursor is within indentation
180209
if (config.useTabStops && position.column > 1) {
181210
const lineContent = model.getLineContent(position.lineNumber);

0 commit comments

Comments
 (0)