Skip to content

Commit 519ceb6

Browse files
committed
Respect editor.wrappingAlgorithm
1 parent 53125e3 commit 519ceb6

4 files changed

Lines changed: 22 additions & 13 deletions

File tree

src/vs/editor/common/config/editorOptions.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3730,7 +3730,8 @@ export const EditorOptions = {
37303730
)),
37313731
wrappingAlgorithm: register(new EditorStringEnumOption(
37323732
EditorOption.wrappingAlgorithm, 'wrappingAlgorithm',
3733-
'monospace', ['monospace', 'dom'],
3733+
'monospace' as 'monospace' | 'dom',
3734+
['monospace', 'dom'] as const,
37343735
{
37353736
enumDescriptions: [
37363737
nls.localize('wrappingAlgorithm.monospace', "Assumes that all characters are of the same width. This is a fast algorithm."),

src/vs/editor/common/viewModel/splitLinesCollection.ts

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ export interface ISplitLine {
109109
export interface IViewModelLinesCollection extends IDisposable {
110110
createCoordinatesConverter(): ICoordinatesConverter;
111111

112-
setWrappingSettings(fontInfo: FontInfo, wrappingColumn: number, wrappingIndent: WrappingIndent): boolean;
112+
setWrappingSettings(fontInfo: FontInfo, wrappingAlgorithm: 'monospace' | 'dom', wrappingColumn: number, wrappingIndent: WrappingIndent): boolean;
113113
setTabSize(newTabSize: number): boolean;
114114
getHiddenAreas(): Range[];
115115
setHiddenAreas(_ranges: Range[]): boolean;
@@ -265,8 +265,6 @@ class LineNumberMapper {
265265
}
266266
}
267267

268-
const usDOMLineBreaksComputerFactory = false;
269-
270268
export class SplitLinesCollection implements IViewModelLinesCollection {
271269

272270
private readonly model: ITextModel;
@@ -279,6 +277,7 @@ export class SplitLinesCollection implements IViewModelLinesCollection {
279277
private tabSize: number;
280278
private wrappingColumn: number;
281279
private wrappingIndent: WrappingIndent;
280+
private wrappingAlgorithm: 'monospace' | 'dom';
282281
private lines!: ISplitLine[];
283282

284283
private prefixSumComputer!: LineNumberMapper;
@@ -291,15 +290,17 @@ export class SplitLinesCollection implements IViewModelLinesCollection {
291290
monospaceLineBreaksComputerFactory: ILineBreaksComputerFactory,
292291
fontInfo: FontInfo,
293292
tabSize: number,
293+
wrappingAlgorithm: 'monospace' | 'dom',
294294
wrappingColumn: number,
295-
wrappingIndent: WrappingIndent
295+
wrappingIndent: WrappingIndent,
296296
) {
297297
this.model = model;
298298
this._validModelVersionId = -1;
299299
this._domLineBreaksComputerFactory = domLineBreaksComputerFactory;
300300
this._monospaceLineBreaksComputerFactory = monospaceLineBreaksComputerFactory;
301301
this.fontInfo = fontInfo;
302302
this.tabSize = tabSize;
303+
this.wrappingAlgorithm = wrappingAlgorithm;
303304
this.wrappingColumn = wrappingColumn;
304305
this.wrappingIndent = wrappingIndent;
305306

@@ -483,17 +484,19 @@ export class SplitLinesCollection implements IViewModelLinesCollection {
483484
return true;
484485
}
485486

486-
public setWrappingSettings(fontInfo: FontInfo, wrappingColumn: number, wrappingIndent: WrappingIndent): boolean {
487+
public setWrappingSettings(fontInfo: FontInfo, wrappingAlgorithm: 'monospace' | 'dom', wrappingColumn: number, wrappingIndent: WrappingIndent): boolean {
487488
const equalFontInfo = this.fontInfo.equals(fontInfo);
489+
const equalWrappingAlgorithm = (this.wrappingAlgorithm === wrappingAlgorithm);
488490
const equalWrappingColumn = (this.wrappingColumn === wrappingColumn);
489491
const equalWrappingIndent = (this.wrappingIndent === wrappingIndent);
490-
if (equalFontInfo && equalWrappingColumn && equalWrappingIndent) {
492+
if (equalFontInfo && equalWrappingAlgorithm && equalWrappingColumn && equalWrappingIndent) {
491493
return false;
492494
}
493495

494-
const onlyWrappingColumnChanged = (equalFontInfo && !equalWrappingColumn && equalWrappingIndent);
496+
const onlyWrappingColumnChanged = (equalFontInfo && equalWrappingAlgorithm && !equalWrappingColumn && equalWrappingIndent);
495497

496498
this.fontInfo = fontInfo;
499+
this.wrappingAlgorithm = wrappingAlgorithm;
497500
this.wrappingColumn = wrappingColumn;
498501
this.wrappingIndent = wrappingIndent;
499502

@@ -512,7 +515,7 @@ export class SplitLinesCollection implements IViewModelLinesCollection {
512515

513516
public createLineBreaksComputer(): ILineBreaksComputer {
514517
const lineBreaksComputerFactory = (
515-
usDOMLineBreaksComputerFactory
518+
this.wrappingAlgorithm === 'dom'
516519
? this._domLineBreaksComputerFactory
517520
: this._monospaceLineBreaksComputerFactory
518521
);
@@ -1457,7 +1460,7 @@ export class IdentityLinesCollection implements IViewModelLinesCollection {
14571460
return false;
14581461
}
14591462

1460-
public setWrappingSettings(_fontInfo: FontInfo, _wrappingColumn: number, _wrappingIndent: WrappingIndent): boolean {
1463+
public setWrappingSettings(_fontInfo: FontInfo, _wrappingAlgorithm: 'monospace' | 'dom', _wrappingColumn: number, _wrappingIndent: WrappingIndent): boolean {
14611464
return false;
14621465
}
14631466

src/vs/editor/common/viewModel/viewModelImpl.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,9 @@ export class ViewModel extends viewEvents.ViewEventEmitter implements IViewModel
6767

6868
} else {
6969
const options = this.configuration.options;
70-
const wrappingInfo = options.get(EditorOption.wrappingInfo);
7170
const fontInfo = options.get(EditorOption.fontInfo);
71+
const wrappingAlgorithm = options.get(EditorOption.wrappingAlgorithm);
72+
const wrappingInfo = options.get(EditorOption.wrappingInfo);
7273
const wrappingIndent = options.get(EditorOption.wrappingIndent);
7374

7475
this.lines = new SplitLinesCollection(
@@ -77,6 +78,7 @@ export class ViewModel extends viewEvents.ViewEventEmitter implements IViewModel
7778
monospaceLineBreaksComputerFactory,
7879
fontInfo,
7980
this.model.getOptions().tabSize,
81+
wrappingAlgorithm,
8082
wrappingInfo.wrappingColumn,
8183
wrappingIndent
8284
);
@@ -153,11 +155,12 @@ export class ViewModel extends viewEvents.ViewEventEmitter implements IViewModel
153155
let restorePreviousViewportStart = false;
154156

155157
const options = this.configuration.options;
156-
const wrappingInfo = options.get(EditorOption.wrappingInfo);
157158
const fontInfo = options.get(EditorOption.fontInfo);
159+
const wrappingAlgorithm = options.get(EditorOption.wrappingAlgorithm);
160+
const wrappingInfo = options.get(EditorOption.wrappingInfo);
158161
const wrappingIndent = options.get(EditorOption.wrappingIndent);
159162

160-
if (this.lines.setWrappingSettings(fontInfo, wrappingInfo.wrappingColumn, wrappingIndent)) {
163+
if (this.lines.setWrappingSettings(fontInfo, wrappingAlgorithm, wrappingInfo.wrappingColumn, wrappingIndent)) {
161164
eventsCollector.emit(new viewEvents.ViewFlushedEvent());
162165
eventsCollector.emit(new viewEvents.ViewLineMappingChangedEvent());
163166
eventsCollector.emit(new viewEvents.ViewDecorationsChangedEvent());

src/vs/editor/test/common/viewModel/splitLinesCollection.test.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ suite('Editor ViewModel - SplitLinesCollection', () => {
111111
lineBreaksComputerFactory,
112112
fontInfo,
113113
model.getOptions().tabSize,
114+
'monospace',
114115
wrappingInfo.wrappingColumn,
115116
wrappingIndent
116117
);
@@ -752,6 +753,7 @@ suite('SplitLinesCollection', () => {
752753
lineBreaksComputerFactory,
753754
fontInfo,
754755
model.getOptions().tabSize,
756+
'monospace',
755757
wrappingInfo.wrappingColumn,
756758
wrappingIndent
757759
);

0 commit comments

Comments
 (0)