From 3ba499aa8ced8f3b455886576725276bf6338eb6 Mon Sep 17 00:00:00 2001 From: Rui Neves Date: Thu, 30 Apr 2026 15:17:57 +0100 Subject: [PATCH 1/5] Prevent crash when firstChild is not a text node --- src/vs/editor/browser/controller/mouseTarget.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/vs/editor/browser/controller/mouseTarget.ts b/src/vs/editor/browser/controller/mouseTarget.ts index 8256f6b487ce6..bff064f4475a5 100644 --- a/src/vs/editor/browser/controller/mouseTarget.ts +++ b/src/vs/editor/browser/controller/mouseTarget.ts @@ -1172,8 +1172,13 @@ function shadowCaretRangeFromPoint(shadowRoot: ShadowRoot, x: number, y: number) } // Creates a range with the text node of the element and set the offset found - range.setStart(el.firstChild!, offset); - range.setEnd(el.firstChild!, offset); + if (el.firstChild!.nodeType === 3 /* TEXT_NODE */) { + range.setStart(el.firstChild!, offset); + range.setEnd(el.firstChild!, offset); + } else { + range.setStart(el!, 0); + range.setEnd(el!, 0); + } } return range; From 55bd9d78c4e234cd035b30886593a63a86dd6a24 Mon Sep 17 00:00:00 2001 From: Rui Neves Date: Thu, 30 Apr 2026 15:25:56 +0100 Subject: [PATCH 2/5] Fix tabs --- src/vs/editor/browser/controller/mouseTarget.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/vs/editor/browser/controller/mouseTarget.ts b/src/vs/editor/browser/controller/mouseTarget.ts index bff064f4475a5..fc4fa176931c4 100644 --- a/src/vs/editor/browser/controller/mouseTarget.ts +++ b/src/vs/editor/browser/controller/mouseTarget.ts @@ -1175,10 +1175,10 @@ function shadowCaretRangeFromPoint(shadowRoot: ShadowRoot, x: number, y: number) if (el.firstChild!.nodeType === 3 /* TEXT_NODE */) { range.setStart(el.firstChild!, offset); range.setEnd(el.firstChild!, offset); - } else { - range.setStart(el!, 0); - range.setEnd(el!, 0); - } + } else { + range.setStart(el!, 0); + range.setEnd(el!, 0); + } } return range; From 639c91ccda6b89948ea126b0e157b8eeab1f55d1 Mon Sep 17 00:00:00 2001 From: Rui Neves Date: Thu, 30 Apr 2026 15:29:24 +0100 Subject: [PATCH 3/5] Fix tabs again --- src/vs/editor/browser/controller/mouseTarget.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/vs/editor/browser/controller/mouseTarget.ts b/src/vs/editor/browser/controller/mouseTarget.ts index fc4fa176931c4..acc5a69ef9442 100644 --- a/src/vs/editor/browser/controller/mouseTarget.ts +++ b/src/vs/editor/browser/controller/mouseTarget.ts @@ -1176,8 +1176,8 @@ function shadowCaretRangeFromPoint(shadowRoot: ShadowRoot, x: number, y: number) range.setStart(el.firstChild!, offset); range.setEnd(el.firstChild!, offset); } else { - range.setStart(el!, 0); - range.setEnd(el!, 0); + range.setStart(el!, 0); + range.setEnd(el!, 0); } } From b43d00a683af918cd002ea9b466a92174f2ad92c Mon Sep 17 00:00:00 2001 From: Rui Neves Date: Thu, 30 Apr 2026 15:34:11 +0100 Subject: [PATCH 4/5] Space -> tab --- src/vs/editor/browser/controller/mouseTarget.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/vs/editor/browser/controller/mouseTarget.ts b/src/vs/editor/browser/controller/mouseTarget.ts index acc5a69ef9442..95b5e3ace3120 100644 --- a/src/vs/editor/browser/controller/mouseTarget.ts +++ b/src/vs/editor/browser/controller/mouseTarget.ts @@ -1173,8 +1173,8 @@ function shadowCaretRangeFromPoint(shadowRoot: ShadowRoot, x: number, y: number) // Creates a range with the text node of the element and set the offset found if (el.firstChild!.nodeType === 3 /* TEXT_NODE */) { - range.setStart(el.firstChild!, offset); - range.setEnd(el.firstChild!, offset); + range.setStart(el.firstChild!, offset); + range.setEnd(el.firstChild!, offset); } else { range.setStart(el!, 0); range.setEnd(el!, 0); From 8ec9fae3b29955501038ac3f1908f4fb50ec7849 Mon Sep 17 00:00:00 2001 From: Rui Neves Date: Thu, 30 Apr 2026 15:46:03 +0100 Subject: [PATCH 5/5] CR --- src/vs/editor/browser/controller/mouseTarget.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/vs/editor/browser/controller/mouseTarget.ts b/src/vs/editor/browser/controller/mouseTarget.ts index 95b5e3ace3120..a653ecc2a47d5 100644 --- a/src/vs/editor/browser/controller/mouseTarget.ts +++ b/src/vs/editor/browser/controller/mouseTarget.ts @@ -1172,9 +1172,9 @@ function shadowCaretRangeFromPoint(shadowRoot: ShadowRoot, x: number, y: number) } // Creates a range with the text node of the element and set the offset found - if (el.firstChild!.nodeType === 3 /* TEXT_NODE */) { - range.setStart(el.firstChild!, offset); - range.setEnd(el.firstChild!, offset); + if (el.firstChild!.nodeType === Node.TEXT_NODE) { + range.setStart(el.firstChild!, offset); + range.setEnd(el.firstChild!, offset); } else { range.setStart(el!, 0); range.setEnd(el!, 0);