From 39c653cd83ca83955a248579bcbfe774932297c1 Mon Sep 17 00:00:00 2001 From: Oleksandr T Date: Tue, 3 Aug 2021 02:27:22 +0300 Subject: [PATCH] fix: omit inlay hints for setters (#45228) --- src/services/inlayHints.ts | 10 +++++++--- tests/cases/fourslash/inlayHintsShouldWork55.ts | 13 +++---------- tests/cases/fourslash/inlayHintsShouldWork61.ts | 9 +++++++++ 3 files changed, 19 insertions(+), 13 deletions(-) create mode 100644 tests/cases/fourslash/inlayHintsShouldWork61.ts diff --git a/src/services/inlayHints.ts b/src/services/inlayHints.ts index 835dba147c3..b2c0e318cc7 100644 --- a/src/services/inlayHints.ts +++ b/src/services/inlayHints.ts @@ -67,13 +67,17 @@ namespace ts.InlayHints { if (preferences.includeInlayFunctionParameterTypeHints && isFunctionExpressionLike(node)) { visitFunctionExpressionLikeForParameterType(node); } - if (preferences.includeInlayFunctionLikeReturnTypeHints && isFunctionLikeDeclaration(node)) { + if (preferences.includeInlayFunctionLikeReturnTypeHints && isSignatureSupportingReturnAnnotation(node)) { visitFunctionDeclarationLikeForReturnType(node); } } return forEachChild(node, visitor); } + function isSignatureSupportingReturnAnnotation(node: Node): node is FunctionDeclaration | ArrowFunction | FunctionExpression | MethodDeclaration | GetAccessorDeclaration { + return isArrowFunction(node) || isFunctionExpression(node) || isFunctionDeclaration(node) || isMethodDeclaration(node) || isGetAccessorDeclaration(node); + } + function isFunctionExpressionLike(node: Node): node is ArrowFunction | FunctionExpression { return isArrowFunction(node) || isFunctionExpression(node); } @@ -206,7 +210,7 @@ namespace ts.InlayHints { return isLiteralExpression(node) || isBooleanLiteral(node) || isFunctionExpressionLike(node) || isObjectLiteralExpression(node) || isArrayLiteralExpression(node); } - function visitFunctionDeclarationLikeForReturnType(decl: FunctionLikeDeclaration) { + function visitFunctionDeclarationLikeForReturnType(decl: FunctionDeclaration | ArrowFunction | FunctionExpression | MethodDeclaration | GetAccessorDeclaration) { if (isArrowFunction(decl)) { if (!findChildOfKind(decl, SyntaxKind.OpenParenToken, file)) { return; @@ -236,7 +240,7 @@ namespace ts.InlayHints { addTypeHints(typeDisplayString, getTypeAnnotationPosition(decl)); } - function getTypeAnnotationPosition(decl: FunctionLikeDeclaration) { + function getTypeAnnotationPosition(decl: FunctionDeclaration | ArrowFunction | FunctionExpression | MethodDeclaration | GetAccessorDeclaration) { const closeParenToken = findChildOfKind(decl, SyntaxKind.CloseParenToken, file); if (closeParenToken) { return closeParenToken.end; diff --git a/tests/cases/fourslash/inlayHintsShouldWork55.ts b/tests/cases/fourslash/inlayHintsShouldWork55.ts index d75fbe9e900..f2cb1c7cb21 100644 --- a/tests/cases/fourslash/inlayHintsShouldWork55.ts +++ b/tests/cases/fourslash/inlayHintsShouldWork55.ts @@ -1,22 +1,15 @@ /// ////class Foo { -//// get foo()/*a*/ { return 1; } -//// set foo(value: number)/*b*/ {} +//// get foo()/**/ { return 1; } ////} -const [a, b] = test.markers(); +const [marker] = test.markers(); verify.getInlayHints([ { text: ': number', - position: a.position, - kind: ts.InlayHintKind.Type, - whitespaceBefore: true - }, - { - text: ': void', - position: b.position, + position: marker.position, kind: ts.InlayHintKind.Type, whitespaceBefore: true }, diff --git a/tests/cases/fourslash/inlayHintsShouldWork61.ts b/tests/cases/fourslash/inlayHintsShouldWork61.ts new file mode 100644 index 00000000000..e4adaa32567 --- /dev/null +++ b/tests/cases/fourslash/inlayHintsShouldWork61.ts @@ -0,0 +1,9 @@ +/// + +////class Foo { +//// set foo(value: number)/**/ {} +////} + +verify.getInlayHints([], undefined, { + includeInlayFunctionLikeReturnTypeHints: true +});