Skip to content

Commit 2077e3d

Browse files
committed
fixup! feat(editor): add option to insert newline when folding last line
1 parent 7372df8 commit 2077e3d

File tree

3 files changed

+26
-31
lines changed

3 files changed

+26
-31
lines changed

src/vs/editor/contrib/folding/browser/foldingModel.ts

Lines changed: 22 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ export class FoldingModel {
6464
let k = 0; // index from [0 ... this.regions.length]
6565
let dirtyRegionEndLine = -1; // end of the range where decorations need to be updated
6666
let lastHiddenLine = -1; // the end of the last hidden lines
67-
let isNewLineNeededAtEnd: boolean = false;
67+
let isNewlineNeededAtEnd: boolean = false;
6868
const updateDecorationsUntil = (index: number) => {
6969
while (k < index) {
7070
const endLineNumber = this._regions.getEndLineNumber(k);
@@ -92,34 +92,31 @@ export class FoldingModel {
9292

9393
dirtyRegionEndLine = Math.max(dirtyRegionEndLine, this._regions.getEndLineNumber(index));
9494

95-
// If isNewLineNeededAtEnd is already true, we can skip this check
96-
if (!isNewLineNeededAtEnd && this.editor.getOption(EditorOption.foldingAddNewlineAtEnd) && newCollapseState && dirtyRegionEndLine === this._textModel.getLineCount()) {
97-
isNewLineNeededAtEnd = true;
95+
// If isNewlineNeededAtEnd is already true, we can skip this check
96+
if (!isNewlineNeededAtEnd && this.editor.getOption(EditorOption.foldingAddNewlineAtEnd) && newCollapseState && dirtyRegionEndLine === this._textModel.getLineCount()) {
97+
const lastLineContent = this._textModel.getLineContent(dirtyRegionEndLine);
98+
// Only insert a newline if the last line is not already empty
99+
if (lastLineContent.trim().length > 0) {
100+
this._textModel.pushEditOperations(
101+
null,
102+
[{
103+
range: {
104+
startLineNumber: dirtyRegionEndLine,
105+
startColumn: lastLineContent.length + 1,
106+
endLineNumber: dirtyRegionEndLine,
107+
endColumn: lastLineContent.length + 1,
108+
},
109+
text: this._textModel.getEOL(),
110+
forceMoveMarkers: true
111+
}],
112+
() => null
113+
);
114+
}
98115
}
116+
isNewlineNeededAtEnd = true;
99117
}
100118
}
101119

102-
if (isNewLineNeededAtEnd) {
103-
const lastLineContent = this._textModel.getLineContent(dirtyRegionEndLine);
104-
105-
// Only insert if the line isn't already empty
106-
if (lastLineContent.trim().length > 0) {
107-
this._textModel.pushEditOperations(
108-
null,
109-
[{
110-
range: {
111-
startLineNumber: dirtyRegionEndLine,
112-
startColumn: lastLineContent.length + 1,
113-
endLineNumber: dirtyRegionEndLine,
114-
endColumn: lastLineContent.length + 1,
115-
},
116-
text: this._textModel.getEOL(),
117-
forceMoveMarkers: true
118-
}],
119-
() => null
120-
);
121-
}
122-
}
123120

124121
updateDecorationsUntil(this._regions.length);
125122
});

src/vs/editor/contrib/folding/test/browser/foldingModel.test.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -955,7 +955,7 @@ suite('Folding Model', () => {
955955
}
956956
});
957957

958-
test('foldingAddNewlineAtEnd - should add newline when folding last line', () => {
958+
test('add newline when foldingAddNewlineAtEnd is enabled', () => {
959959
const lines = [
960960
/* 1*/ 'class A:',
961961
/* 2*/ ' def foo(self):',
@@ -985,7 +985,7 @@ suite('Folding Model', () => {
985985
});
986986

987987

988-
test('foldingAddNewlineAtEnd - should not add newline when option is disabled', () => {
988+
test('no newline when foldingAddNewlineAtEnd is disabled', () => {
989989
const lines = [
990990
/* 1*/ 'class A:',
991991
/* 2*/ ' def foo(self):',
@@ -1011,7 +1011,7 @@ suite('Folding Model', () => {
10111011
}
10121012
});
10131013

1014-
test('foldingAddNewlineAtEnd - should not add newline when last line is already empty', () => {
1014+
test('no newline when last line is already empty', () => {
10151015
const lines = [
10161016
/* 1*/ 'class A:',
10171017
/* 2*/ ' def foo(self):',
@@ -1039,7 +1039,7 @@ suite('Folding Model', () => {
10391039
}
10401040
});
10411041

1042-
test('foldingAddNewlineAtEnd - should not add newline when folding non-last line', () => {
1042+
test('no newline when folding non-last line', () => {
10431043
const lines = [
10441044
/* 1*/ 'class A:',
10451045
/* 2*/ ' def foo(self):',

src/vs/editor/contrib/folding/test/browser/hiddenRangeModel.test.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,4 @@ suite('Hidden Range Model', () => {
111111
hiddenRangeModel.dispose();
112112
}
113113
});
114-
115-
116114
});

0 commit comments

Comments
 (0)