mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-18 22:45:50 -06:00
create refactoring for converting to named parameters
This commit is contained in:
parent
3d2bf6a75f
commit
9aeeae54b0
94
src/services/refactors/convertToNamedParameters.ts
Normal file
94
src/services/refactors/convertToNamedParameters.ts
Normal file
@ -0,0 +1,94 @@
|
||||
/* @internal */
|
||||
namespace ts.refactor.convertToNamedParameters {
|
||||
const refactorName = "Convert to named parameters";
|
||||
const refactorDescription = "Convert to named parameters";
|
||||
const actionNameNamedParameters = "Convert to named parameters";
|
||||
const actionDescriptionNamedParameters = "Convert to named parameters";
|
||||
const minimumParameterLength = 3;
|
||||
const paramTypeNamePostfix = "Param";
|
||||
registerRefactor(refactorName, { getEditsForAction, getAvailableActions });
|
||||
|
||||
|
||||
function getAvailableActions(context: RefactorContext): ReadonlyArray<ApplicableRefactorInfo> {
|
||||
const { file, startPosition } = context;
|
||||
const func = getFunctionDeclarationAtPosition(file, startPosition);
|
||||
if (!func) return emptyArray;
|
||||
|
||||
return [{
|
||||
name: refactorName,
|
||||
description: refactorDescription,
|
||||
actions: [{
|
||||
name: actionNameNamedParameters,
|
||||
description: actionDescriptionNamedParameters
|
||||
}]
|
||||
}];
|
||||
}
|
||||
|
||||
function getEditsForAction(context: RefactorContext, actionName: string): RefactorEditInfo | undefined {
|
||||
Debug.assert(actionName === actionNameNamedParameters);
|
||||
const { file, startPosition } = context;
|
||||
const func = getFunctionDeclarationAtPosition(file, startPosition);
|
||||
if (!func) return undefined;
|
||||
|
||||
const paramTypeDeclaration = createParamTypeDeclaration(func);
|
||||
return undefined;
|
||||
}
|
||||
|
||||
function getFunctionDeclarationAtPosition(file: SourceFile, startPosition: number): ValidFunctionDeclaration | undefined {
|
||||
const node = getTokenAtPosition(file, startPosition);
|
||||
const func = getContainingFunction(node);
|
||||
if (!func || !isValidFunctionDeclaration(func)) return undefined;
|
||||
return func;
|
||||
}
|
||||
|
||||
function isValidFunctionDeclaration(func: SignatureDeclaration): func is ValidFunctionDeclaration {
|
||||
switch (func.kind) {
|
||||
case SyntaxKind.FunctionDeclaration:
|
||||
case SyntaxKind.MethodDeclaration:
|
||||
if (func.name && func.parameters && func.parameters.length > minimumParameterLength) {
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function createParamTypeDeclaration(func: ValidFunctionDeclaration): InterfaceDeclaration {
|
||||
const paramTypeName = getFunctionName(func);
|
||||
const paramTypeMembers =
|
||||
ts.map(func.parameters,
|
||||
(paramDecl, _i) => createPropertySignatureFromParameterDeclaration(paramDecl));
|
||||
return createInterfaceDeclaration(
|
||||
/* decorators */ undefined,
|
||||
/* modifiers */ undefined,
|
||||
createIdentifier(paramTypeName),
|
||||
/* type parameters */ undefined,
|
||||
/* heritage clauses */ undefined,
|
||||
createNodeArray(paramTypeMembers));
|
||||
}
|
||||
|
||||
function getFunctionName(func: ValidFunctionDeclaration): string {
|
||||
return entityNameToString(func.name) + paramTypeNamePostfix;
|
||||
}
|
||||
|
||||
function createPropertySignatureFromParameterDeclaration(paramDeclaration: ValidParameterDeclaration): PropertySignature {
|
||||
return createPropertySignature(
|
||||
/*modifiers*/ undefined,
|
||||
paramDeclaration.name,
|
||||
paramDeclaration.questionToken,
|
||||
paramDeclaration.type,
|
||||
paramDeclaration.initializer);
|
||||
}
|
||||
|
||||
interface ValidFunctionDeclaration extends FunctionDeclaration {
|
||||
name: Identifier;
|
||||
body?: FunctionBody;
|
||||
typeParameters?: NodeArray<TypeParameterDeclaration>;
|
||||
parameters: NodeArray<ValidParameterDeclaration>;
|
||||
}
|
||||
|
||||
interface ValidParameterDeclaration extends ParameterDeclaration {
|
||||
name: Identifier;
|
||||
}
|
||||
}
|
||||
@ -84,6 +84,7 @@
|
||||
"refactors/generateGetAccessorAndSetAccessor.ts",
|
||||
"refactors/moveToNewFile.ts",
|
||||
"refactors/addOrRemoveBracesToArrowFunction.ts",
|
||||
"refactors/convertToNamedParameters.ts",
|
||||
"services.ts",
|
||||
"breakpoints.ts",
|
||||
"transform.ts",
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user