Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions src/compiler/checker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8816,12 +8816,12 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {

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

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

function visitSymbolTable(symbolTable: SymbolTable, suppressNewPrivateContext?: boolean, propertyAsAlias?: boolean) {
Expand Down Expand Up @@ -9120,7 +9120,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
newModifierFlags |= ModifierFlags.Default;
}
if (newModifierFlags) {
node = factory.updateModifiers(node, newModifierFlags | getEffectiveModifierFlags(node));
node = factory.replaceModifiers(node, newModifierFlags | getEffectiveModifierFlags(node));
}
}
results.push(node);
Expand Down
12 changes: 6 additions & 6 deletions src/compiler/factory/nodeFactory.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1178,8 +1178,8 @@ export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNode
ensureUseStrict,
liftToBlock,
mergeLexicalEnvironment,
updateModifiers,
updateModifierLike,
replaceModifiers,
replaceDecoratorsAndModifiers,
};

forEach(nodeFactoryPatchers, fn => fn(factory));
Expand Down Expand Up @@ -7100,8 +7100,8 @@ export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNode
return statements;
}

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

function updateModifierLike<T extends HasModifiers & HasDecorators>(node: T, modifiers: readonly ModifierLike[]): T;
function updateModifierLike(node: HasModifiers & HasDecorators, modifierArray: readonly ModifierLike[]) {
function replaceDecoratorsAndModifiers<T extends HasModifiers & HasDecorators>(node: T, modifiers: readonly ModifierLike[]): T;
function replaceDecoratorsAndModifiers(node: HasModifiers & HasDecorators, modifierArray: readonly ModifierLike[]) {
return isParameter(node) ? updateParameterDeclaration(node, modifierArray, node.dotDotDotToken, node.name, node.questionToken, node.type, node.initializer) :
isPropertyDeclaration(node) ? updatePropertyDeclaration(node, modifierArray, node.name, node.questionToken ?? node.exclamationToken, node.type, node.initializer) :
isMethodDeclaration(node) ? updateMethodDeclaration(node, modifierArray, node.asteriskToken, node.name, node.questionToken, node.typeParameters, node.parameters, node.type, node.body) :
Expand Down
4 changes: 2 additions & 2 deletions src/compiler/transformers/declarations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1436,7 +1436,7 @@ export function transformDeclarations(context: TransformationContext) {
}

const modifiers = factory.createModifiersFromModifierFlags(getEffectiveModifierFlags(statement) & (ModifierFlags.All ^ ModifierFlags.Export));
return factory.updateModifiers(statement, modifiers);
return factory.replaceModifiers(statement, modifiers);
}

function updateModuleDeclarationAndKeyword(
Expand Down Expand Up @@ -1566,7 +1566,7 @@ export function transformDeclarations(context: TransformationContext) {
return factory.createVariableStatement(isNonContextualKeywordName ? undefined : [factory.createToken(SyntaxKind.ExportKeyword)], factory.createVariableDeclarationList([varDecl]));
});
if (!exportMappings.length) {
declarations = mapDefined(declarations, declaration => factory.updateModifiers(declaration, ModifierFlags.None));
declarations = mapDefined(declarations, declaration => factory.replaceModifiers(declaration, ModifierFlags.None));
}
else {
declarations.push(factory.createExportDeclaration(
Expand Down
10 changes: 8 additions & 2 deletions src/compiler/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9072,8 +9072,14 @@ export interface NodeFactory {
* @internal
*/
cloneNode<T extends Node | undefined>(node: T): T;
/** @internal */ updateModifiers<T extends HasModifiers>(node: T, modifiers: readonly Modifier[] | ModifierFlags | undefined): T;
/** @internal */ updateModifierLike<T extends HasModifiers & HasDecorators>(node: T, modifierLike: readonly ModifierLike[] | undefined): T;
/**
* Updates a node that may contain modifiers, replacing only the modifiers of the node.
*/
replaceModifiers<T extends HasModifiers>(node: T, modifiers: readonly Modifier[] | ModifierFlags | undefined): T;
/**
* Updates a node that may contain decorators or modifiers, replacing only the decorators and modifiers of the node.
*/
replaceDecoratorsAndModifiers<T extends HasModifiers & HasDecorators>(node: T, modifiers: readonly ModifierLike[] | undefined): T;
}

/** @internal */
Expand Down
2 changes: 1 addition & 1 deletion src/services/codefixes/addMissingAsync.ts
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ function makeChange(changeTracker: textChanges.ChangeTracker, sourceFile: Source
}
}
fixedDeclarations?.add(getNodeId(insertionSite));
const cloneWithModifier = factory.updateModifiers(
const cloneWithModifier = factory.replaceModifiers(
getSynthesizedDeepClone(insertionSite, /*includeTrivia*/ true),
factory.createNodeArray(factory.createModifiersFromModifierFlags(getSyntacticModifierFlags(insertionSite) | ModifierFlags.Async)),
);
Expand Down
6 changes: 3 additions & 3 deletions src/services/completions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1988,7 +1988,7 @@ function getEntryForMemberCompletion(
// and we need to make sure the modifiers are uniform for all nodes/signatures.
modifiers = node.modifierFlagsCache | requiredModifiers;
}
node = factory.updateModifiers(node, modifiers);
node = factory.replaceModifiers(node, modifiers);
completionNodes.push(node);
},
body,
Expand Down Expand Up @@ -2018,12 +2018,12 @@ function getEntryForMemberCompletion(
modifiers &= ~ModifierFlags.Public;
}
modifiers |= allowedAndPresent;
completionNodes = completionNodes.map(node => factory.updateModifiers(node, modifiers));
completionNodes = completionNodes.map(node => factory.replaceModifiers(node, modifiers));
// Add back the decorators that were already present.
if (presentDecorators?.length) {
const lastNode = completionNodes[completionNodes.length - 1];
if (canHaveDecorators(lastNode)) {
completionNodes[completionNodes.length - 1] = factory.updateModifierLike(lastNode, (presentDecorators as ModifierLike[]).concat(getModifiers(lastNode) || []));
completionNodes[completionNodes.length - 1] = factory.replaceDecoratorsAndModifiers(lastNode, (presentDecorators as ModifierLike[]).concat(getModifiers(lastNode) || []));
}
}

Expand Down
8 changes: 8 additions & 0 deletions tests/baselines/reference/api/typescript.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8387,6 +8387,14 @@ declare namespace ts {
createExportDefault(expression: Expression): ExportAssignment;
createExternalModuleExport(exportName: Identifier): ExportDeclaration;
restoreOuterExpressions(outerExpression: Expression | undefined, innerExpression: Expression, kinds?: OuterExpressionKinds): Expression;
/**
* Updates a node that may contain modifiers, replacing only the modifiers of the node.
*/
replaceModifiers<T extends HasModifiers>(node: T, modifiers: readonly Modifier[] | ModifierFlags | undefined): T;
/**
* Updates a node that may contain decorators or modifiers, replacing only the decorators and modifiers of the node.
*/
replaceDecoratorsAndModifiers<T extends HasModifiers & HasDecorators>(node: T, modifiers: readonly ModifierLike[] | undefined): T;
}
interface CoreTransformationContext {
readonly factory: NodeFactory;
Expand Down