From 8b14fb22ecf22aa5b95f66dee011c69686b458b4 Mon Sep 17 00:00:00 2001 From: iliashkolyar Date: Tue, 11 Sep 2018 13:56:51 +0300 Subject: [PATCH] Initial review --- src/compiler/diagnosticMessages.json | 4 ++-- .../codefixes/fixAddMissingNewOperator.ts | 19 ++++++++-------- tests/cases/fourslash/codeFixAddMissingNew.ts | 2 +- .../fourslash/codeFixAddMissingNew_all.ts | 2 +- .../codeFixAddMissingNew_all_arguments.ts | 22 +++++++++++++++++++ 5 files changed, 35 insertions(+), 14 deletions(-) create mode 100644 tests/cases/fourslash/codeFixAddMissingNew_all_arguments.ts diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index f4ba04df38f..2464b24a89b 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -4624,11 +4624,11 @@ "category": "Message", "code": 95066 }, - "Add missing 'new' operator to caller": { + "Add missing 'new' operator to call": { "category": "Message", "code": 95067 }, - "Add missing 'new' operator to all callers": { + "Add missing 'new' operator to all calls": { "category": "Message", "code": 95068 } diff --git a/src/services/codefixes/fixAddMissingNewOperator.ts b/src/services/codefixes/fixAddMissingNewOperator.ts index b1eca15e185..8b01ccd7815 100644 --- a/src/services/codefixes/fixAddMissingNewOperator.ts +++ b/src/services/codefixes/fixAddMissingNewOperator.ts @@ -6,24 +6,23 @@ namespace ts.codefix { errorCodes, getCodeActions(context) { const { sourceFile, span } = context; - const identifierWithoutNew = getIdentifier(sourceFile, span.start); - const changes = textChanges.ChangeTracker.with(context, t => addMissingNewOperator(t, sourceFile, identifierWithoutNew)); - return [createCodeFixAction(fixId, changes, Diagnostics.Add_missing_new_operator_to_caller, fixId, Diagnostics.Add_missing_new_operator_to_all_callers)]; + const missingNewExpression = getMissingNewExpression(sourceFile, span.start); + const changes = textChanges.ChangeTracker.with(context, t => addMissingNewOperator(t, sourceFile, missingNewExpression)); + return [createCodeFixAction(fixId, changes, Diagnostics.Add_missing_new_operator_to_call, fixId, Diagnostics.Add_missing_new_operator_to_all_calls)]; }, fixIds: [fixId], getAllCodeActions: context => codeFixAll(context, errorCodes, (changes, diag) => - addMissingNewOperator(changes, context.sourceFile, getIdentifier(diag.file, diag.start))), + addMissingNewOperator(changes, context.sourceFile, getMissingNewExpression(diag.file, diag.start))), }); - function getIdentifier(sourceFile: SourceFile, pos: number): Identifier { + function getMissingNewExpression(sourceFile: SourceFile, pos: number): Expression { const token = getTokenAtPosition(sourceFile, pos); - Debug.assert(token.kind === SyntaxKind.Identifier); Debug.assert(isCallExpression(token.parent)); - return token; + return token; } - function addMissingNewOperator(changes: textChanges.ChangeTracker, sourceFile: SourceFile, identifierWithoutNew: Identifier): void { - const newTypeNode = createNew(identifierWithoutNew, /*typeArguments*/ undefined, /*argumentsArray*/ undefined); - changes.replaceNode(sourceFile, identifierWithoutNew, newTypeNode); + function addMissingNewOperator(changes: textChanges.ChangeTracker, sourceFile: SourceFile, missingNewExpression: Expression): void { + const newTypeNode = createNew(missingNewExpression, /*typeArguments*/ undefined, /*argumentsArray*/ undefined); + changes.replaceNode(sourceFile, missingNewExpression, newTypeNode); } } diff --git a/tests/cases/fourslash/codeFixAddMissingNew.ts b/tests/cases/fourslash/codeFixAddMissingNew.ts index ee539387750..84ac58280ee 100644 --- a/tests/cases/fourslash/codeFixAddMissingNew.ts +++ b/tests/cases/fourslash/codeFixAddMissingNew.ts @@ -5,7 +5,7 @@ ////var c = C(); verify.codeFix({ - description: "Add missing 'new' operator to caller", + description: "Add missing 'new' operator to call", index: 0, newFileContent: `class C { } diff --git a/tests/cases/fourslash/codeFixAddMissingNew_all.ts b/tests/cases/fourslash/codeFixAddMissingNew_all.ts index e8cca308c03..019f5b5a5a4 100644 --- a/tests/cases/fourslash/codeFixAddMissingNew_all.ts +++ b/tests/cases/fourslash/codeFixAddMissingNew_all.ts @@ -8,7 +8,7 @@ verify.codeFixAll({ fixId: "addMissingNewOperator", - fixAllDescription: "Add missing 'new' operator to all callers", + fixAllDescription: "Add missing 'new' operator to all calls", newFileContent: `class C { constructor(num?: number) {} diff --git a/tests/cases/fourslash/codeFixAddMissingNew_all_arguments.ts b/tests/cases/fourslash/codeFixAddMissingNew_all_arguments.ts new file mode 100644 index 00000000000..130dfd28fd7 --- /dev/null +++ b/tests/cases/fourslash/codeFixAddMissingNew_all_arguments.ts @@ -0,0 +1,22 @@ +/// + +////class C { +//// x?: T; +//// constructor(x: T) { this.x = x; } +////} +////let a = C(1, 2, 3); +////let b = C("hello"); +////let c = C(); + +verify.codeFixAll({ + fixId: "addMissingNewOperator", + fixAllDescription: "Add missing 'new' operator to all calls", + newFileContent: +`class C { + x?: T; + constructor(x: T) { this.x = x; } +} +let a = new C(1, 2, 3); +let b = new C("hello"); +let c = new C();` +});