From 08d7798fba394799a000f707fd2dce4d98c70f7b Mon Sep 17 00:00:00 2001 From: kwy404 Date: Sun, 4 Oct 2026 20:21:23 -0300 Subject: [PATCH] Fix InlayHint.is throwing on undefined and accepting invalid hints --- types/src/main.ts | 2 +- types/src/test/typeguards.test.ts | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/types/src/main.ts b/types/src/main.ts index a87ac71f2..b1d1b939c 100644 --- a/types/src/main.ts +++ b/types/src/main.ts @@ -4511,7 +4511,7 @@ export namespace InlayHint { return Is.objectLiteral(candidate) && Position.is(candidate.position) && (Is.string(candidate.label) || Is.typedArray(candidate.label, InlayHintLabelPart.is)) && (candidate.kind === undefined || InlayHintKind.is(candidate.kind)) - && (candidate.textEdits === undefined) || Is.typedArray(candidate.textEdits, TextEdit.is) + && (candidate.textEdits === undefined || Is.typedArray(candidate.textEdits, TextEdit.is)) && (candidate.tooltip === undefined || Is.string(candidate.tooltip) || MarkupContent.is(candidate.tooltip)) && (candidate.paddingLeft === undefined || Is.boolean(candidate.paddingLeft)) && (candidate.paddingRight === undefined || Is.boolean(candidate.paddingRight)); diff --git a/types/src/test/typeguards.test.ts b/types/src/test/typeguards.test.ts index e0bd30201..6fedba08d 100644 --- a/types/src/test/typeguards.test.ts +++ b/types/src/test/typeguards.test.ts @@ -5,7 +5,7 @@ 'use strict'; import * as assert from 'assert'; -import { Range, Position, Hover, MarkedString, TextEdit, ColorPresentation, FoldingRange } from '../main'; +import { Range, Position, Hover, MarkedString, TextEdit, ColorPresentation, FoldingRange, InlayHint } from '../main'; suite('Type guards', () => { suite('Position.is', () => { @@ -207,4 +207,21 @@ suite('Type guards', () => { assert.strictEqual(ColorPresentation.is(presentation), true); }); }); + suite('InlayHint.is', () => { + test('InlayHint', () => { + assert.strictEqual(InlayHint.is(InlayHint.create(Position.create(0, 0), 'test')), true); + }); + test('invalid paddingLeft', () => { + const inlayHint = { position: Position.create(0, 0), label: 'test', paddingLeft: 'yes' }; + assert.strictEqual(InlayHint.is(inlayHint), false); + }); + test('missing position and label', () => { + const inlayHint = { textEdits: [] }; + assert.strictEqual(InlayHint.is(inlayHint), false); + }); + test('undefined', () => { + const inlayHint = undefined; + assert.strictEqual(InlayHint.is(inlayHint), false); + }); + }); }); \ No newline at end of file