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
+});