From 053b3cd893d00b63dda48085c744844128aaba43 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Mon, 23 Jan 2017 16:01:29 -0800 Subject: [PATCH] getFirstToken skips JSDoc Fixes #13519. This is a better fix than #13599. Also fixes broken tests associated with #13599. --- src/harness/unittests/jsDocParsing.ts | 13 +++++++++---- src/services/services.ts | 8 +++----- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/harness/unittests/jsDocParsing.ts b/src/harness/unittests/jsDocParsing.ts index 3cafc9d49ae..98c32c77778 100644 --- a/src/harness/unittests/jsDocParsing.ts +++ b/src/harness/unittests/jsDocParsing.ts @@ -290,16 +290,21 @@ namespace ts { }); describe("getFirstToken", () => { it("gets jsdoc", () => { - const first = ts.createSourceFile("foo.ts", "/** comment */var a = true;", ts.ScriptTarget.ES5, /*setParentNodes*/ true); + const root = ts.createSourceFile("foo.ts", "/** comment */var a = true;", ts.ScriptTarget.ES5, /*setParentNodes*/ true); + assert.isDefined(root); + assert.equal(root.kind, ts.SyntaxKind.SourceFile); + const first = root.getFirstToken(); assert.isDefined(first); - assert.equal(first.kind, 263); + assert.equal(first.kind, ts.SyntaxKind.VarKeyword); }); }); describe("getLastToken", () => { it("gets jsdoc", () => { - const last = ts.createSourceFile("foo.ts", "var a = true;/** comment */", ts.ScriptTarget.ES5, /*setParentNodes*/ true); + const root = ts.createSourceFile("foo.ts", "var a = true;/** comment */", ts.ScriptTarget.ES5, /*setParentNodes*/ true); + assert.isDefined(root); + const last = root.getLastToken(); assert.isDefined(last); - assert.equal(last.kind, 263); + assert.equal(last.kind, ts.SyntaxKind.EndOfFileToken); }); }); }); diff --git a/src/services/services.ts b/src/services/services.ts index cb38b1d500e..208e1031cd2 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -193,8 +193,8 @@ namespace ts { return undefined; } - const child = children[0]; - return child.kind < SyntaxKind.FirstNode || SyntaxKind.FirstJSDocNode <= child.kind && child.kind <= SyntaxKind.LastJSDocNode ? + const child = ts.find(children, kid => kid.kind < SyntaxKind.FirstJSDocNode || kid.kind > SyntaxKind.LastJSDocNode); + return child.kind < SyntaxKind.FirstNode ? child : child.getFirstToken(sourceFile); } @@ -207,9 +207,7 @@ namespace ts { return undefined; } - return child.kind < SyntaxKind.FirstNode || SyntaxKind.FirstJSDocNode <= child.kind && child.kind <= SyntaxKind.LastJSDocNode ? - child : - child.getLastToken(sourceFile); + return child.kind < SyntaxKind.FirstNode ? child : child.getLastToken(sourceFile); } }