mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-04 21:53:42 -06:00
Expose 'updateModifiers' in public NodeFactory API (#56194)
This commit is contained in:
parent
d9d027d0c4
commit
e5e7cbba79
@ -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) {
|
||||
@ -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);
|
||||
|
||||
@ -1178,8 +1178,8 @@ export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNode
|
||||
ensureUseStrict,
|
||||
liftToBlock,
|
||||
mergeLexicalEnvironment,
|
||||
updateModifiers,
|
||||
updateModifierLike,
|
||||
replaceModifiers,
|
||||
replaceDecoratorsAndModifiers,
|
||||
};
|
||||
|
||||
forEach(nodeFactoryPatchers, fn => fn(factory));
|
||||
@ -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);
|
||||
@ -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) :
|
||||
|
||||
@ -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(
|
||||
@ -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(
|
||||
|
||||
@ -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 */
|
||||
|
||||
@ -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)),
|
||||
);
|
||||
|
||||
@ -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,
|
||||
@ -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) || []));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -8386,6 +8386,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;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user