diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 730c3fc51d4..e4afb3339d0 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -1818,10 +1818,8 @@ namespace ts { function getJSDocCommentsAndTagsWorker(node: Node): void { const parent = node.parent; - if (parent && - (parent.kind === SyntaxKind.PropertyAssignment || - parent.kind === SyntaxKind.PropertyDeclaration || - getNestedModuleDeclaration(parent))) { + if (!parent) return; + if (parent.kind === SyntaxKind.PropertyAssignment || parent.kind === SyntaxKind.PropertyDeclaration || getNestedModuleDeclaration(parent)) { getJSDocCommentsAndTagsWorker(parent); } // Try to recognize this pattern when node is initializer of variable declaration and JSDoc comments are on containing variable statement. @@ -1830,16 +1828,18 @@ namespace ts { // * @returns {number} // */ // var x = function(name) { return name.length; } - if (parent && parent.parent && + if (parent.parent && (getSingleVariableOfVariableStatement(parent.parent) === node || getSourceOfAssignment(parent.parent))) { getJSDocCommentsAndTagsWorker(parent.parent); } - if (parent && parent.parent && parent.parent.parent && - (getSingleInitializerOfVariableStatementOrPropertyDeclaration(parent.parent.parent) === node || getSourceOfDefaultedAssignment(parent.parent.parent))) { + if (parent.parent && parent.parent.parent && + (getSingleVariableOfVariableStatement(parent.parent.parent) || + getSingleInitializerOfVariableStatementOrPropertyDeclaration(parent.parent.parent) === node || + getSourceOfDefaultedAssignment(parent.parent.parent))) { getJSDocCommentsAndTagsWorker(parent.parent.parent); } if (isBinaryExpression(node) && getSpecialPropertyAssignmentKind(node) !== SpecialPropertyAssignmentKind.None || - parent && isBinaryExpression(parent) && getSpecialPropertyAssignmentKind(parent) !== SpecialPropertyAssignmentKind.None || + isBinaryExpression(parent) && getSpecialPropertyAssignmentKind(parent) !== SpecialPropertyAssignmentKind.None || node.kind === SyntaxKind.PropertyAccessExpression && node.parent && node.parent.kind === SyntaxKind.ExpressionStatement) { getJSDocCommentsAndTagsWorker(parent); } diff --git a/tests/cases/fourslash/commentsVariables.ts b/tests/cases/fourslash/commentsVariables.ts index 4d5682ef401..bf7e13ee51c 100644 --- a/tests/cases/fourslash/commentsVariables.ts +++ b/tests/cases/fourslash/commentsVariables.ts @@ -59,8 +59,8 @@ verify.currentSignatureHelpDocCommentIs("foos comment"); verify.quickInfoAt("5q", "function foo(): void", "foos comment"); goTo.marker('6'); -verify.currentSignatureHelpDocCommentIs(""); -verify.quickInfoAt("6q", "var fooVar: () => void"); +verify.currentSignatureHelpDocCommentIs("fooVar comment"); +verify.quickInfoAt("6q", "var fooVar: () => void", "fooVar comment"); goTo.marker('7'); verify.completionListContains("foo", "function foo(): void", "foos comment"); @@ -71,9 +71,9 @@ verify.currentSignatureHelpDocCommentIs("foos comment"); verify.quickInfoAt("8q", "function foo(): void", "foos comment"); goTo.marker('9'); -verify.currentSignatureHelpDocCommentIs(""); +verify.currentSignatureHelpDocCommentIs("fooVar comment"); verify.quickInfos({ - "9q": "var fooVar: () => void", + "9q": ["var fooVar: () => void", "fooVar comment"], "9aq": ["var fooVar: () => void", "fooVar comment"] });