diff --git a/src/vs/base/common/strings.ts b/src/vs/base/common/strings.ts index a8698c9a2d892..2373ddc3ebbc8 100644 --- a/src/vs/base/common/strings.ts +++ b/src/vs/base/common/strings.ts @@ -713,14 +713,16 @@ export function isEmojiImprecise(x: number): boolean { * The return value can be longer than the given value of `n`. Leading whitespace is always trimmed. */ export function lcut(text: string, n: number, prefix = '') { - if (text.length < n) { - return text.trimStart(); + const trimmed = text.trimStart(); + + if (trimmed.length < n) { + return trimmed; } const re = /\b/g; let i = 0; - while (re.test(text)) { - if (text.length - re.lastIndex < n) { + while (re.test(trimmed)) { + if (trimmed.length - re.lastIndex < n) { break; } @@ -729,10 +731,10 @@ export function lcut(text: string, n: number, prefix = '') { } if (i === 0) { - return text.trimStart(); + return trimmed; } - return prefix + text.substring(i).trimStart(); + return prefix + trimmed.substring(i).trimStart(); } // Escape codes, compiled from https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h3-Functions-using-CSI-_-ordered-by-the-final-character_s_ diff --git a/src/vs/base/test/common/strings.test.ts b/src/vs/base/test/common/strings.test.ts index 0d090da51e929..b7a8f85e95397 100644 --- a/src/vs/base/test/common/strings.test.ts +++ b/src/vs/base/test/common/strings.test.ts @@ -144,12 +144,14 @@ suite('Strings', () => { assert.strictEqual(strings.lcut('a', 10), 'a'); assert.strictEqual(strings.lcut(' a', 10), 'a'); assert.strictEqual(strings.lcut(' a', 10), 'a'); + assert.strictEqual(strings.lcut(' bbbb a', 10), 'bbbb a'); assert.strictEqual(strings.lcut('............a', 10), '............a'); assert.strictEqual(strings.lcut('', 10, '…'), ''); assert.strictEqual(strings.lcut('a', 10, '…'), 'a'); assert.strictEqual(strings.lcut(' a', 10, '…'), 'a'); assert.strictEqual(strings.lcut(' a', 10, '…'), 'a'); + assert.strictEqual(strings.lcut(' bbbb a', 10, '…'), 'bbbb a'); assert.strictEqual(strings.lcut('............a', 10, '…'), '............a'); });