/* @internal */ namespace ts { export interface CodeFix { errorCodes: number[]; getCodeActions(context: CodeFixContext): CodeAction[] | undefined; } export interface CodeFixContext { errorCode: number; sourceFile: SourceFile; span: TextSpan; program: Program; newLineCharacter: string; host: LanguageServiceHost; cancellationToken: CancellationToken; rulesProvider: formatting.RulesProvider; } export namespace codefix { const codeFixes: CodeFix[][] = []; export function registerCodeFix(codeFix: CodeFix) { forEach(codeFix.errorCodes, error => { let fixes = codeFixes[error]; if (!fixes) { fixes = []; codeFixes[error] = fixes; } fixes.push(codeFix); }); } export function getSupportedErrorCodes() { return Object.keys(codeFixes); } export function getFixes(context: CodeFixContext): CodeAction[] { const fixes = codeFixes[context.errorCode]; let allActions: CodeAction[] = []; forEach(fixes, f => { const actions = f.getCodeActions(context); if (actions && actions.length > 0) { allActions = allActions.concat(actions); } }); return allActions; } } }