这个问题是否在禁用所有扩展时发生?:否
- VS Code 版本:1.78.2
- OS 版本:Ubuntu 20.04
重现步骤:
目前,PHP 扩展与我正在使用的扩展之间存在冲突。我已经在 PHP 扩展的 GitHub 仓库中报告了这个问题:DEVSENSE/phptools-docs#334 。但是,即使他们修复了它,问题也可能在使用用户安装和启用的不同不可预测的扩展的情况下重复出现。
基本上情况如下:
- 两个独立的扩展为相同的文档选择器注册 RenameProvider。
- 我的扩展定义了 both prepareRename() 和 provideRenameEdits() 函数,然而 "prepareRename()" 没有被执行,因为另一个扩展劫持了它。
- 同时,我的回调 provideRenameEdits() 正在执行,并且它假定范围是 prepareRename() 中指定的范围,但原始范围完全不同
- 结果是完全随机的范围被替换
问题在于,从我的Angular 来看,在 provideRenameEdits() 内部,我收到了 newName 参数,但我没有收到关于用户认为他们正在替换的 oldName 或范围的任何信息。
3条答案
按热度按时间bvpmtnay1#
实际上,我的假设是错误的,PHP扩展甚至没有实现prepareRename() ,因为他们在他们的github问题中评论了。无论如何,当两个重命名提供程序冲突时,会出现一些奇怪的行为。
参考一下,这是我的演示扩展的代码:$x_{https://github.com/marinaglancy/vscode-renamedemo/blob/master/src/extension.ts}$
这是在禁用和启用PHP扩展时它的行为如何的屏幕录像:$x_{https://github.com/microsoft/vscode/assets/836986/a8ee6ced-80ff-403e-8cf8-e86fbb6ed855}$
uqxowvwt2#
实际上,我可以在一个实现两个重命名提供者的扩展中演示这个问题:
https://github.com/marinaglancy/vscode-renamedemo/blob/singledemo/src/extension.ts
一个提供者的目标是类似于['something']的数组索引,另一个提供者的目标是函数名。如果另一个提供者没有实现prepareRename()方法,它将以与我在上面的屏幕录像中展示的方式破坏第一个提供者。
VSCode API表示prepareRename()方法是可选的,但实际上非常重要。我理解到这一点,VSCode无法告诉扩展现在它们必须实现它。
为了减少混淆,可以采取以下措施:
zsohkypk3#