Skip to content

Commit d39b373

Browse files
authored
Merge pull request microsoft#127416 from microsoft/hediet/injected-text-domLineBreaksComputer
domLineBreaksComputer needs to allow for injected text when there is no wrapping
2 parents 4495b3c + 0de7389 commit d39b373

File tree

1 file changed

+22
-6
lines changed

1 file changed

+22
-6
lines changed

src/vs/editor/browser/view/domLineBreaksComputer.ts

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,27 @@ export class DOMLineBreaksComputerFactory implements ILineBreaksComputerFactory
4242
}
4343
}
4444

45-
function createLineBreaks(requests: string[], fontInfo: FontInfo, tabSize: number, firstLineBreakColumn: number, wrappingIndent: WrappingIndent, injectedTexts: (LineInjectedText[] | null)[]): (LineBreakData | null)[] {
45+
function createLineBreaks(requests: string[], fontInfo: FontInfo, tabSize: number, firstLineBreakColumn: number, wrappingIndent: WrappingIndent, injectedTextsPerLine: (LineInjectedText[] | null)[]): (LineBreakData | null)[] {
46+
function createEmptyLineBreakWithPossiblyInjectedText(requestIdx: number): LineBreakData | null {
47+
const injectedTexts = injectedTextsPerLine[requestIdx];
48+
if (injectedTexts) {
49+
const lineText = LineInjectedText.applyInjectedText(requests[requestIdx], injectedTexts);
50+
51+
const injectionTexts = injectedTexts.map(t => t.text);
52+
const injectionOffsets = injectedTexts.map(text => text.column - 1);
53+
54+
// creating a `LineBreakData` with an invalid `breakOffsetsVisibleColumn` is OK
55+
// because `breakOffsetsVisibleColumn` will never be used because it contains injected text
56+
return new LineBreakData([lineText.length], [], 0, injectionTexts, injectionOffsets);
57+
} else {
58+
return null;
59+
}
60+
}
61+
4662
if (firstLineBreakColumn === -1) {
47-
const result: null[] = [];
63+
const result: (LineBreakData | null)[] = [];
4864
for (let i = 0, len = requests.length; i < len; i++) {
49-
result[i] = null;
65+
result[i] = createEmptyLineBreakWithPossiblyInjectedText(i);
5066
}
5167
return result;
5268
}
@@ -69,7 +85,7 @@ function createLineBreaks(requests: string[], fontInfo: FontInfo, tabSize: numbe
6985
const allCharOffsets: number[][] = [];
7086
const allVisibleColumns: number[][] = [];
7187
for (let i = 0; i < requests.length; i++) {
72-
const lineContent = LineInjectedText.applyInjectedText(requests[i], injectedTexts[i]);
88+
const lineContent = LineInjectedText.applyInjectedText(requests[i], injectedTextsPerLine[i]);
7389

7490
let firstNonWhitespaceIndex = 0;
7591
let wrappedTextIndentLength = 0;
@@ -130,7 +146,7 @@ function createLineBreaks(requests: string[], fontInfo: FontInfo, tabSize: numbe
130146
const lineDomNode = lineDomNodes[i];
131147
const breakOffsets: number[] | null = readLineBreaks(range, lineDomNode, renderLineContents[i], allCharOffsets[i]);
132148
if (breakOffsets === null) {
133-
result[i] = null;
149+
result[i] = createEmptyLineBreakWithPossiblyInjectedText(i);
134150
continue;
135151
}
136152

@@ -152,7 +168,7 @@ function createLineBreaks(requests: string[], fontInfo: FontInfo, tabSize: numbe
152168

153169
let injectionTexts: string[] | null;
154170
let injectionOffsets: number[] | null;
155-
const curInjectedTexts = injectedTexts[i];
171+
const curInjectedTexts = injectedTextsPerLine[i];
156172
if (curInjectedTexts) {
157173
injectionTexts = curInjectedTexts.map(t => t.text);
158174
injectionOffsets = curInjectedTexts.map(text => text.column - 1);

0 commit comments

Comments
 (0)