message: Introduce new ActionProvider pattern
diff: import { Code, Editor } from "./editor/editor";
  import { Selection } from "./editor/selection";
  +import { AST } from "./ast";
  -export { Refactoring, RefactoringWithActionProvider, Operation };
  +export {
  + Refactoring,
  + RefactoringWithActionProvider,
  + xxxnew_RefactoringWithActionProvider,
  + Operation
  +};
  interface Refactoring {
  command: {
  @@ -23,6 +29,19 @@ interface RefactoringWithActionProvider extends Refactoring {
  };
  }
  +interface xxxnew_RefactoringWithActionProvider extends Refactoring {
  + command: {
  + key: string;
  + title: string;
  + operation: Operation;
  + };
  + actionProvider: {
  + message: string;
  + canPerform: (ast: AST, selection: Selection) => boolean;
  + isPreferred?: boolean;
  + };
  +}
  +
  type Operation = (
  code: Code,
  selection: Selection,
  