Skip to content

Commit e5e7cbb

Browse files
authored
Expose 'updateModifiers' in public NodeFactory API (#56194)
1 parent d9d027d commit e5e7cbb

File tree

7 files changed

+31
-17
lines changed

7 files changed

+31
-17
lines changed

src/compiler/checker.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8816,12 +8816,12 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
88168816

88178817
function addExportModifier(node: Extract<HasModifiers, Statement>) {
88188818
const flags = (getEffectiveModifierFlags(node) | ModifierFlags.Export) & ~ModifierFlags.Ambient;
8819-
return factory.updateModifiers(node, flags);
8819+
return factory.replaceModifiers(node, flags);
88208820
}
88218821

88228822
function removeExportModifier(node: Extract<HasModifiers, Statement>) {
88238823
const flags = getEffectiveModifierFlags(node) & ~ModifierFlags.Export;
8824-
return factory.updateModifiers(node, flags);
8824+
return factory.replaceModifiers(node, flags);
88258825
}
88268826

88278827
function visitSymbolTable(symbolTable: SymbolTable, suppressNewPrivateContext?: boolean, propertyAsAlias?: boolean) {
@@ -9120,7 +9120,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
91209120
newModifierFlags |= ModifierFlags.Default;
91219121
}
91229122
if (newModifierFlags) {
9123-
node = factory.updateModifiers(node, newModifierFlags | getEffectiveModifierFlags(node));
9123+
node = factory.replaceModifiers(node, newModifierFlags | getEffectiveModifierFlags(node));
91249124
}
91259125
}
91269126
results.push(node);

src/compiler/factory/nodeFactory.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1178,8 +1178,8 @@ export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNode
11781178
ensureUseStrict,
11791179
liftToBlock,
11801180
mergeLexicalEnvironment,
1181-
updateModifiers,
1182-
updateModifierLike,
1181+
replaceModifiers,
1182+
replaceDecoratorsAndModifiers,
11831183
};
11841184

11851185
forEach(nodeFactoryPatchers, fn => fn(factory));
@@ -7100,8 +7100,8 @@ export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNode
71007100
return statements;
71017101
}
71027102

7103-
function updateModifiers<T extends HasModifiers>(node: T, modifiers: readonly Modifier[] | ModifierFlags): T;
7104-
function updateModifiers(node: HasModifiers, modifiers: readonly Modifier[] | ModifierFlags) {
7103+
function replaceModifiers<T extends HasModifiers>(node: T, modifiers: readonly Modifier[] | ModifierFlags): T;
7104+
function replaceModifiers(node: HasModifiers, modifiers: readonly Modifier[] | ModifierFlags) {
71057105
let modifierArray;
71067106
if (typeof modifiers === "number") {
71077107
modifierArray = createModifiersFromModifierFlags(modifiers);
@@ -7137,8 +7137,8 @@ export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNode
71377137
Debug.assertNever(node);
71387138
}
71397139

7140-
function updateModifierLike<T extends HasModifiers & HasDecorators>(node: T, modifiers: readonly ModifierLike[]): T;
7141-
function updateModifierLike(node: HasModifiers & HasDecorators, modifierArray: readonly ModifierLike[]) {
7140+
function replaceDecoratorsAndModifiers<T extends HasModifiers & HasDecorators>(node: T, modifiers: readonly ModifierLike[]): T;
7141+
function replaceDecoratorsAndModifiers(node: HasModifiers & HasDecorators, modifierArray: readonly ModifierLike[]) {
71427142
return isParameter(node) ? updateParameterDeclaration(node, modifierArray, node.dotDotDotToken, node.name, node.questionToken, node.type, node.initializer) :
71437143
isPropertyDeclaration(node) ? updatePropertyDeclaration(node, modifierArray, node.name, node.questionToken ?? node.exclamationToken, node.type, node.initializer) :
71447144
isMethodDeclaration(node) ? updateMethodDeclaration(node, modifierArray, node.asteriskToken, node.name, node.questionToken, node.typeParameters, node.parameters, node.type, node.body) :

src/compiler/transformers/declarations.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1436,7 +1436,7 @@ export function transformDeclarations(context: TransformationContext) {
14361436
}
14371437

14381438
const modifiers = factory.createModifiersFromModifierFlags(getEffectiveModifierFlags(statement) & (ModifierFlags.All ^ ModifierFlags.Export));
1439-
return factory.updateModifiers(statement, modifiers);
1439+
return factory.replaceModifiers(statement, modifiers);
14401440
}
14411441

14421442
function updateModuleDeclarationAndKeyword(
@@ -1566,7 +1566,7 @@ export function transformDeclarations(context: TransformationContext) {
15661566
return factory.createVariableStatement(isNonContextualKeywordName ? undefined : [factory.createToken(SyntaxKind.ExportKeyword)], factory.createVariableDeclarationList([varDecl]));
15671567
});
15681568
if (!exportMappings.length) {
1569-
declarations = mapDefined(declarations, declaration => factory.updateModifiers(declaration, ModifierFlags.None));
1569+
declarations = mapDefined(declarations, declaration => factory.replaceModifiers(declaration, ModifierFlags.None));
15701570
}
15711571
else {
15721572
declarations.push(factory.createExportDeclaration(

src/compiler/types.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9072,8 +9072,14 @@ export interface NodeFactory {
90729072
* @internal
90739073
*/
90749074
cloneNode<T extends Node | undefined>(node: T): T;
9075-
/** @internal */ updateModifiers<T extends HasModifiers>(node: T, modifiers: readonly Modifier[] | ModifierFlags | undefined): T;
9076-
/** @internal */ updateModifierLike<T extends HasModifiers & HasDecorators>(node: T, modifierLike: readonly ModifierLike[] | undefined): T;
9075+
/**
9076+
* Updates a node that may contain modifiers, replacing only the modifiers of the node.
9077+
*/
9078+
replaceModifiers<T extends HasModifiers>(node: T, modifiers: readonly Modifier[] | ModifierFlags | undefined): T;
9079+
/**
9080+
* Updates a node that may contain decorators or modifiers, replacing only the decorators and modifiers of the node.
9081+
*/
9082+
replaceDecoratorsAndModifiers<T extends HasModifiers & HasDecorators>(node: T, modifiers: readonly ModifierLike[] | undefined): T;
90779083
}
90789084

90799085
/** @internal */

src/services/codefixes/addMissingAsync.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ function makeChange(changeTracker: textChanges.ChangeTracker, sourceFile: Source
8787
}
8888
}
8989
fixedDeclarations?.add(getNodeId(insertionSite));
90-
const cloneWithModifier = factory.updateModifiers(
90+
const cloneWithModifier = factory.replaceModifiers(
9191
getSynthesizedDeepClone(insertionSite, /*includeTrivia*/ true),
9292
factory.createNodeArray(factory.createModifiersFromModifierFlags(getSyntacticModifierFlags(insertionSite) | ModifierFlags.Async)),
9393
);

src/services/completions.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1988,7 +1988,7 @@ function getEntryForMemberCompletion(
19881988
// and we need to make sure the modifiers are uniform for all nodes/signatures.
19891989
modifiers = node.modifierFlagsCache | requiredModifiers;
19901990
}
1991-
node = factory.updateModifiers(node, modifiers);
1991+
node = factory.replaceModifiers(node, modifiers);
19921992
completionNodes.push(node);
19931993
},
19941994
body,
@@ -2018,12 +2018,12 @@ function getEntryForMemberCompletion(
20182018
modifiers &= ~ModifierFlags.Public;
20192019
}
20202020
modifiers |= allowedAndPresent;
2021-
completionNodes = completionNodes.map(node => factory.updateModifiers(node, modifiers));
2021+
completionNodes = completionNodes.map(node => factory.replaceModifiers(node, modifiers));
20222022
// Add back the decorators that were already present.
20232023
if (presentDecorators?.length) {
20242024
const lastNode = completionNodes[completionNodes.length - 1];
20252025
if (canHaveDecorators(lastNode)) {
2026-
completionNodes[completionNodes.length - 1] = factory.updateModifierLike(lastNode, (presentDecorators as ModifierLike[]).concat(getModifiers(lastNode) || []));
2026+
completionNodes[completionNodes.length - 1] = factory.replaceDecoratorsAndModifiers(lastNode, (presentDecorators as ModifierLike[]).concat(getModifiers(lastNode) || []));
20272027
}
20282028
}
20292029

tests/baselines/reference/api/typescript.d.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8386,6 +8386,14 @@ declare namespace ts {
83868386
createExportDefault(expression: Expression): ExportAssignment;
83878387
createExternalModuleExport(exportName: Identifier): ExportDeclaration;
83888388
restoreOuterExpressions(outerExpression: Expression | undefined, innerExpression: Expression, kinds?: OuterExpressionKinds): Expression;
8389+
/**
8390+
* Updates a node that may contain modifiers, replacing only the modifiers of the node.
8391+
*/
8392+
replaceModifiers<T extends HasModifiers>(node: T, modifiers: readonly Modifier[] | ModifierFlags | undefined): T;
8393+
/**
8394+
* Updates a node that may contain decorators or modifiers, replacing only the decorators and modifiers of the node.
8395+
*/
8396+
replaceDecoratorsAndModifiers<T extends HasModifiers & HasDecorators>(node: T, modifiers: readonly ModifierLike[] | undefined): T;
83898397
}
83908398
interface CoreTransformationContext {
83918399
readonly factory: NodeFactory;

0 commit comments

Comments
 (0)