From 07a371bbf665d29f6b349bd142efcef862fe7fa8 Mon Sep 17 00:00:00 2001 From: Andrew Branch Date: Fri, 25 Oct 2019 16:13:47 -0700 Subject: [PATCH] Fix extract type on JS function params --- src/services/refactors/extractType.ts | 6 +----- .../cases/fourslash/refactorExtractType_js7.ts | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 5 deletions(-) create mode 100644 tests/cases/fourslash/refactorExtractType_js7.ts diff --git a/src/services/refactors/extractType.ts b/src/services/refactors/extractType.ts index ba06814c4ea..70934ef7a7c 100644 --- a/src/services/refactors/extractType.ts +++ b/src/services/refactors/extractType.ts @@ -68,7 +68,7 @@ namespace ts.refactor { if (!selection || !isTypeNode(selection)) return undefined; const checker = context.program.getTypeChecker(); - const firstStatement = Debug.assertDefined(isJS ? findAncestor(selection, isStatementAndHasJSDoc) : findAncestor(selection, isStatement), "Should find a statement"); + const firstStatement = Debug.assertDefined(findAncestor(selection, isStatement), "Should find a statement"); const typeParameters = collectTypeParameters(checker, selection, firstStatement, file); if (!typeParameters) return undefined; @@ -100,10 +100,6 @@ namespace ts.refactor { return undefined; } - function isStatementAndHasJSDoc(n: Node): n is (Statement & HasJSDoc) { - return isStatement(n) && hasJSDocNodes(n); - } - function rangeContainsSkipTrivia(r1: TextRange, node: Node, file: SourceFile): boolean { return rangeContainsStartEnd(r1, skipTrivia(file.text, node.pos), node.end); } diff --git a/tests/cases/fourslash/refactorExtractType_js7.ts b/tests/cases/fourslash/refactorExtractType_js7.ts new file mode 100644 index 00000000000..c3543ef36e2 --- /dev/null +++ b/tests/cases/fourslash/refactorExtractType_js7.ts @@ -0,0 +1,18 @@ +/// + +// @allowJs: true +// @Filename: a.js +////function a(/** @type {/*a*/string/*b*/} */ b) {} + +goTo.file('a.js') +goTo.select("a", "b"); +edit.applyRefactor({ + refactorName: "Extract type", + actionName: "Extract to typedef", + actionDescription: "Extract to typedef", + newContent: `/** + * @typedef {string} /*RENAME*/NewType + */ + +function a(/** @type {NewType} */ b) {}`, +});