用途:帮助把现有 IdeaVim 扩展从旧 API(VimExtensionFacade)迁移到新 API(@VimPlugin 注解)。
主要能力:新 API 位于 api/ 目录,旧 API 为 vim-engine 中的 VimExtensionFacade,扩展位于 src/main/java/com/maddyhome/idea/vim/extension/。通过 com.maddyhome.idea.vim.extension.api 的 api() 获取 API,在 init() 开头调用。可用 api.textObjects { } 注册文本对象,用 api.mappings { } 注册映射(如 nmapPluginAction、xmapPluginAction、omapPluginAction)。辅助函数以 VimApi 为接收者定义。
迁移步骤:先确保测试覆盖并验证通过;小步迁移,每次小改动后运行单个测试类;多个 handler 逐个迁移。每个 handler:在 execute 首行注入 val api = api();把 execute 内容抽取为 VimApi 接收者的扩展函数(逻辑不变);验证测试;再迁移函数内容到新 API;再次验证;最后把快捷键注册改为 api.mappings { },之后可删除原 handler 类。复杂插件需先做预重构,例如移除对 Document 的依赖,改为接受 CharSequence。
保持不变:扩展仍继承 VimExtensionFacade,仍通过 XML 注册。
最终校验:检查 com.maddyhome 的 import,仅允许 com.maddyhome.idea.vim.extension.VimExtension 与 com.maddyhome.idea.vim.extension.api,其他 com.maddyhome 导入表示迁移未完成。
限制:资料未提供具体版本要求、兼容范围或回滚方式。