From 73f741418f51147d190c24647e3fa8dc6c3a6905 Mon Sep 17 00:00:00 2001 From: zhengbli Date: Mon, 11 Jul 2016 13:01:05 -0700 Subject: [PATCH 1/2] fix the issue that @property types are not recoganized --- src/compiler/checker.ts | 3 ++ .../cases/fourslash/server/jsdocTypedefTag.ts | 34 ++++++++++++++++--- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index aea8c982a9..abba269286 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -3160,6 +3160,9 @@ namespace ts { if (declaration.kind === SyntaxKind.ExportAssignment) { return links.type = checkExpression((declaration).expression); } + if (declaration.kind === SyntaxKind.JSDocPropertyTag && (declaration).typeExpression) { + return links.type = getTypeFromTypeNode((declaration).typeExpression.type); + } // Handle variable, parameter or property if (!pushTypeResolution(symbol, TypeSystemPropertyName.Type)) { return unknownType; diff --git a/tests/cases/fourslash/server/jsdocTypedefTag.ts b/tests/cases/fourslash/server/jsdocTypedefTag.ts index e645b51802..968e30a412 100644 --- a/tests/cases/fourslash/server/jsdocTypedefTag.ts +++ b/tests/cases/fourslash/server/jsdocTypedefTag.ts @@ -32,16 +32,24 @@ //// var numberLike; numberLike./*numberLike*/ //// //// /** @type {Person} */ -//// var p;p./*person*/ +//// var p;p./*person*/; +//// p.personName./*personName*/; +//// p.personAge./*personAge*/; //// //// /** @type {Animal} */ -//// var a;a./*animal*/ +//// var a;a./*animal*/; +//// a.animalName./*animalName*/; +//// a.animalAge./*animalAge*/; //// //// /** @type {Cat} */ -//// var c;c./*cat*/ +//// var c;c./*cat*/; +//// c.catName./*catName*/; +//// c.catAge./*catAge*/; //// //// /** @type {Dog} */ -//// var d;d./*dog*/ +//// var d;d./*dog*/; +//// d.dogName./*dogName*/; +//// d.dogAge./*dogAge*/; goTo.marker('numberLike'); verify.memberListContains('charAt'); @@ -50,15 +58,31 @@ verify.memberListContains('toExponential'); goTo.marker('person'); verify.memberListContains('personName'); verify.memberListContains('personAge'); +goTo.marker('personName'); +verify.memberListContains('charAt'); +goTo.marker('personAge'); +verify.memberListContains('toExponential'); goTo.marker('animal'); verify.memberListContains('animalName'); verify.memberListContains('animalAge'); +goTo.marker('animalName'); +verify.memberListContains('charAt'); +goTo.marker('animalAge'); +verify.memberListContains('toExponential'); goTo.marker('dog'); verify.memberListContains('dogName'); verify.memberListContains('dogAge'); +goTo.marker('dogName'); +verify.memberListContains('charAt'); +goTo.marker('dogAge'); +verify.memberListContains('toExponential'); goTo.marker('cat'); verify.memberListContains('catName'); -verify.memberListContains('catAge'); \ No newline at end of file +verify.memberListContains('catAge'); +goTo.marker('catName'); +verify.memberListContains('charAt'); +goTo.marker('catAge'); +verify.memberListContains('toExponential'); \ No newline at end of file From c19512edb564d5502d0de86e23e4b108941d0174 Mon Sep 17 00:00:00 2001 From: zhengbli Date: Mon, 11 Jul 2016 14:57:54 -0700 Subject: [PATCH 2/2] Add node flag check --- src/compiler/checker.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index abba269286..e842f008bb 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -3160,7 +3160,7 @@ namespace ts { if (declaration.kind === SyntaxKind.ExportAssignment) { return links.type = checkExpression((declaration).expression); } - if (declaration.kind === SyntaxKind.JSDocPropertyTag && (declaration).typeExpression) { + if (declaration.flags & NodeFlags.JavaScriptFile && declaration.kind === SyntaxKind.JSDocPropertyTag && (declaration).typeExpression) { return links.type = getTypeFromTypeNode((declaration).typeExpression.type); } // Handle variable, parameter or property