From 5a2153a7298f09ac9b4cddca4ef7e645fb2483b0 Mon Sep 17 00:00:00 2001 From: Martin Johns Date: Tue, 3 Aug 2021 20:01:30 +0200 Subject: [PATCH] Fix position of keyword in "Add 'override' modifier" code fix (#45274) fixes #45270 --- src/compiler/factory/nodeTests.ts | 5 +++++ src/services/codefixes/fixOverrideModifier.ts | 6 ++++-- tests/cases/fourslash/codeFixOverrideModifier12.ts | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/compiler/factory/nodeTests.ts b/src/compiler/factory/nodeTests.ts index 270fded5c92..7f5fda1994c 100644 --- a/src/compiler/factory/nodeTests.ts +++ b/src/compiler/factory/nodeTests.ts @@ -129,6 +129,11 @@ namespace ts { return node.kind === SyntaxKind.StaticKeyword; } + /* @internal */ + export function isAbstractModifier(node: Node): node is AbstractKeyword { + return node.kind === SyntaxKind.AbstractKeyword; + } + /*@internal*/ export function isSuperKeyword(node: Node): node is SuperExpression { return node.kind === SyntaxKind.SuperKeyword; diff --git a/src/services/codefixes/fixOverrideModifier.ts b/src/services/codefixes/fixOverrideModifier.ts index a804a5f97db..d267dececcf 100644 --- a/src/services/codefixes/fixOverrideModifier.ts +++ b/src/services/codefixes/fixOverrideModifier.ts @@ -89,11 +89,13 @@ namespace ts.codefix { const classElement = findContainerClassElementLike(sourceFile, pos); const modifiers = classElement.modifiers || emptyArray; const staticModifier = find(modifiers, isStaticModifier); + const abstractModifier = find(modifiers, isAbstractModifier); const accessibilityModifier = find(modifiers, m => isAccessibilityModifier(m.kind)); - const modifierPos = staticModifier ? staticModifier.end : + const modifierPos = abstractModifier ? abstractModifier.end : + staticModifier ? staticModifier.end : accessibilityModifier ? accessibilityModifier.end : classElement.decorators ? skipTrivia(sourceFile.text, classElement.decorators.end) : classElement.getStart(sourceFile); - const options = accessibilityModifier || staticModifier ? { prefix: " " } : { suffix: " " }; + const options = accessibilityModifier || staticModifier || abstractModifier ? { prefix: " " } : { suffix: " " }; changeTracker.insertModifierAt(sourceFile, modifierPos, SyntaxKind.OverrideKeyword, options); } diff --git a/tests/cases/fourslash/codeFixOverrideModifier12.ts b/tests/cases/fourslash/codeFixOverrideModifier12.ts index 60c673e739b..1f36a92761d 100644 --- a/tests/cases/fourslash/codeFixOverrideModifier12.ts +++ b/tests/cases/fourslash/codeFixOverrideModifier12.ts @@ -11,6 +11,6 @@ verify.codeFix({ description: "Add 'override' modifier", - newRangeContent: "override abstract bar() {}", + newRangeContent: "abstract override bar() {}", index: 0 })