From 6e06bb39a13281c6080e973e1a015aea66e8b9ce Mon Sep 17 00:00:00 2001 From: Ryan Cavanaugh Date: Tue, 2 Feb 2016 13:32:21 -0800 Subject: [PATCH 1/2] Allow parsing TS-style generics in JSDoc Fixes #6814 --- src/compiler/parser.ts | 20 +++++++++++++------- tests/cases/fourslash/jsDocGenerics1.ts | 10 ++++++++++ 2 files changed, 23 insertions(+), 7 deletions(-) create mode 100644 tests/cases/fourslash/jsDocGenerics1.ts diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index b6ba02b987c..99ceafb15cb 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -5734,16 +5734,22 @@ namespace ts { const result = createNode(SyntaxKind.JSDocTypeReference); result.name = parseSimplePropertyName(); - while (parseOptional(SyntaxKind.DotToken)) { - if (token === SyntaxKind.LessThanToken) { - result.typeArguments = parseTypeArguments(); - break; - } - else { - result.name = parseQualifiedName(result.name); + if (token === SyntaxKind.LessThanToken) { + result.typeArguments = parseTypeArguments(); + } + else { + while (parseOptional(SyntaxKind.DotToken)) { + if (token === SyntaxKind.LessThanToken) { + result.typeArguments = parseTypeArguments(); + break; + } + else { + result.name = parseQualifiedName(result.name); + } } } + return finishNode(result); } diff --git a/tests/cases/fourslash/jsDocGenerics1.ts b/tests/cases/fourslash/jsDocGenerics1.ts new file mode 100644 index 00000000000..3b5742af8b1 --- /dev/null +++ b/tests/cases/fourslash/jsDocGenerics1.ts @@ -0,0 +1,10 @@ +/// + +// @allowNonTsExtensions: true +// @Filename: Foo.js +//// /** @type {Array} */ +//// var v; +//// v[0]./**/ + +goTo.marker(); +verify.memberListContains("toFixed", /*displayText:*/ undefined, /*documentation*/ undefined, "method"); From e347c3711cc4b85eda34f1aba844e1a6576ff40c Mon Sep 17 00:00:00 2001 From: Ryan Cavanaugh Date: Thu, 4 Feb 2016 10:14:13 -0800 Subject: [PATCH 2/2] Add more complex test scenarios --- tests/cases/fourslash/jsDocGenerics1.ts | 28 +++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/tests/cases/fourslash/jsDocGenerics1.ts b/tests/cases/fourslash/jsDocGenerics1.ts index 3b5742af8b1..61358e3f490 100644 --- a/tests/cases/fourslash/jsDocGenerics1.ts +++ b/tests/cases/fourslash/jsDocGenerics1.ts @@ -1,10 +1,34 @@ /// // @allowNonTsExtensions: true +// @Filename: ref.d.ts +//// namespace Thing { +//// export interface Thung { +//// a: number; +//// ] +//// ] + + // @Filename: Foo.js +//// //// /** @type {Array} */ //// var v; -//// v[0]./**/ +//// v[0]./*1*/ +//// +//// /** @type {{x: Array>}} */ +//// var w; +//// w.x[0][0]./*2*/ +//// +//// /** @type {Array} */ +//// var x; +//// x[0].a./*3*/ -goTo.marker(); + +goTo.marker('1'); +verify.memberListContains("toFixed", /*displayText:*/ undefined, /*documentation*/ undefined, "method"); + +goTo.marker('2'); +verify.memberListContains("toFixed", /*displayText:*/ undefined, /*documentation*/ undefined, "method"); + +goTo.marker('3'); verify.memberListContains("toFixed", /*displayText:*/ undefined, /*documentation*/ undefined, "method");