mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-18 12:21:37 -06:00
implement new parameter creation
This commit is contained in:
parent
705ac60a59
commit
23fc65a60c
@ -5,7 +5,6 @@ namespace ts.refactor.convertToNamedParameters {
|
||||
const actionNameNamedParameters = "Convert to named parameters";
|
||||
const actionDescriptionNamedParameters = "Convert to named parameters";
|
||||
const minimumParameterLength = 3;
|
||||
const paramTypeNamePostfix = "Param";
|
||||
registerRefactor(refactorName, { getEditsForAction, getAvailableActions });
|
||||
|
||||
|
||||
@ -30,15 +29,15 @@ namespace ts.refactor.convertToNamedParameters {
|
||||
const func = getFunctionDeclarationAtPosition(file, startPosition);
|
||||
if (!func) return undefined;
|
||||
|
||||
const paramTypeDeclaration = createParamTypeDeclaration(func);
|
||||
const edits = textChanges.ChangeTracker.with(context, t => t.replaceNode(file, func, paramTypeDeclaration));
|
||||
// return undefined;
|
||||
const newParamDeclaration = createObjectParameter(func);
|
||||
const edits = textChanges.ChangeTracker.with(context, t => t.replaceNodeRangeWithNodes(file, first(func.parameters), last(func.parameters), createNodeArray([newParamDeclaration])));
|
||||
return { renameFilename: undefined, renameLocation: undefined, edits };
|
||||
}
|
||||
|
||||
function getFunctionDeclarationAtPosition(file: SourceFile, startPosition: number): ValidFunctionDeclaration | undefined {
|
||||
const node = getTokenAtPosition(file, startPosition);
|
||||
const func = getContainingFunction(node);
|
||||
// TODO: check range
|
||||
if (!func || !isValidFunctionDeclaration(func)) return undefined;
|
||||
return func;
|
||||
}
|
||||
@ -62,21 +61,9 @@ namespace ts.refactor.convertToNamedParameters {
|
||||
return !paramDecl.modifiers && !paramDecl.dotDotDotToken && isIdentifier(paramDecl.name) && !paramDecl.initializer;
|
||||
}
|
||||
|
||||
function createParamTypeDeclaration(func: ValidFunctionDeclaration): InterfaceDeclaration {
|
||||
const paramTypeName = getFunctionName(func);
|
||||
const paramTypeMembers = ts.map(func.parameters, createPropertySignatureFromParameterDeclaration);
|
||||
|
||||
return createInterfaceDeclaration(
|
||||
/* decorators */ undefined,
|
||||
/* modifiers */ undefined,
|
||||
createIdentifier(paramTypeName),
|
||||
func.typeParameters,
|
||||
/* heritageClauses */ undefined,
|
||||
createNodeArray(paramTypeMembers));
|
||||
}
|
||||
|
||||
function getFunctionName(func: ValidFunctionDeclaration): string {
|
||||
return declarationNameToString(func.name) + paramTypeNamePostfix;
|
||||
function createParamTypeNode(func: ValidFunctionDeclaration): TypeLiteralNode {
|
||||
const members = ts.map(func.parameters, createPropertySignatureFromParameterDeclaration);
|
||||
return createTypeLiteralNode(members);
|
||||
}
|
||||
|
||||
function createPropertySignatureFromParameterDeclaration(paramDeclaration: ValidParameterDeclaration): PropertySignature {
|
||||
@ -88,9 +75,10 @@ namespace ts.refactor.convertToNamedParameters {
|
||||
paramDeclaration.initializer);
|
||||
}
|
||||
|
||||
function createParameterObjectBindingPattern(parameters: NodeArray<ValidParameterDeclaration>, paramType: TypeNode): ParameterDeclaration {
|
||||
const bindingElements = ts.map(parameters, param => createBindingElement(/* dotDotDotToken */ undefined, /* propertyName */ undefined, param.name));
|
||||
function createObjectParameter(func: ValidFunctionDeclaration): ParameterDeclaration {
|
||||
const bindingElements = ts.map(func.parameters, param => createBindingElement(/* dotDotDotToken */ undefined, /* propertyName */ undefined, param.name));
|
||||
const paramName = createObjectBindingPattern(bindingElements);
|
||||
const paramType = createParamTypeNode(func);
|
||||
|
||||
return createParameter(
|
||||
/* decorators */ undefined,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user