Merge pull request #33469 from amcasey/gh33332

Make extractSymbol explicitly drop JSDoc nodes
This commit is contained in:
Andrew Casey 2019-09-17 11:42:26 -07:00 committed by GitHub
commit 2f8832cccc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 11 additions and 0 deletions

View File

@ -975,6 +975,8 @@ namespace ts {
return getSpanOfTokenAtPosition(sourceFile, node.pos);
}
Debug.assert(!isJSDoc(errorNode));
const isMissing = nodeIsMissing(errorNode);
const pos = isMissing || isJsxText(node)
? errorNode.pos

View File

@ -116,6 +116,7 @@ namespace ts.refactor.extractSymbol {
export const cannotExtractRange: DiagnosticMessage = createMessage("Cannot extract range.");
export const cannotExtractImport: DiagnosticMessage = createMessage("Cannot extract import statement.");
export const cannotExtractSuper: DiagnosticMessage = createMessage("Cannot extract super call.");
export const cannotExtractJSDoc: DiagnosticMessage = createMessage("Cannot extract JSDoc.");
export const cannotExtractEmpty: DiagnosticMessage = createMessage("Cannot extract empty range.");
export const expressionExpected: DiagnosticMessage = createMessage("expression expected.");
export const uselessConstantType: DiagnosticMessage = createMessage("No reason to extract constant of type.");
@ -246,6 +247,10 @@ namespace ts.refactor.extractSymbol {
return { targetRange: { range: statements, facts: rangeFacts, declarations } };
}
if (isJSDoc(start)) {
return { errors: [createFileDiagnostic(sourceFile, span.start, length, Messages.cannotExtractJSDoc)] };
}
if (isReturnStatement(start) && !start.expression) {
// Makes no sense to extract an expression-less return statement.
return { errors: [createFileDiagnostic(sourceFile, span.start, length, Messages.cannotExtractRange)] };

View File

@ -380,6 +380,10 @@ switch (x) {
`[#|{ 1;|] }`,
[refactor.extractSymbol.Messages.cannotExtractRange.message]);
testExtractRangeFailed("extractRangeFailed19",
`[#|/** @type {number} */|] const foo = 1;`,
[refactor.extractSymbol.Messages.cannotExtractJSDoc.message]);
testExtractRangeFailed("extract-method-not-for-token-expression-statement", `[#|a|]`, [refactor.extractSymbol.Messages.cannotExtractIdentifier.message]);
});
}