struct Foo{
Bar get(){
}
}
auto f = Foo();
f.get();
例如,您认为get
对于名称来说是一个非常糟糕的选择,但您已经在许多不同的文件中使用它,并且手动更改过去非常烦人。
您也无法真正进行全局替换,因为其他类型也可能有一个名为get
的方法。
D有什么可以帮助重构类型,函数,变量等的名称吗?
答案 0 :(得分:2)
以下是我的表现方式:
这是半手册,但我发现它非常简单,并且很快就会发生,因为编译器错误消息会将您带到正确的位置,并且大多数编辑都可以很好地阅读这些错误消息把你转移到正确的路线上,然后告诉它再次重复最后一次更换是一件简单的事情。 (在我使用我的热键进行的vim设置中,我点击了F4以获取下一条错误消息,然后点击重复上一次更改直到完成。即使是具有一百次使用的功能也可以在几分钟内可靠地更改。)
你可以编写一个脚本,通过查找"来自动处理90%的案例:错误:"在编译器的输出中,提取文件/行号,并在那里运行纯文本替换。如果单词只显示一次并且在字符串文字之外,则可以自动替换它,如果没有,请让用户手动处理剩余的10%的情况。
但我认为用我的编辑器热键很容易,我从来没有费心去编写脚本。
在这种情况下,您可以执行三步编译器辅助更改:
@disable
添加到要重命名的内容中。@disable
并重命名定义。再次重新编译,以确保你没有错过像子类一样(编译器会抱怨"方法foo不会覆盖任何函数"所以他们也站出来。所以是的,它不是完全自动化的,但只是改变它并且编译错误有助于找到对我来说足够好的东西。
答案 1 :(得分:1)
在主要的IDE插件(如Mono-D或VisualD)中可以找到一些有限的重构支持。我记得Brian Schott计划通过添加对dfix的依赖来为他的dsymbol工具添加类似的功能,但它似乎还没有实现。
然而,并非所有这些选项目前都具有非常有限的稳健性。这是因为找出任何给定符号的完全限定名称是D中非常复杂的任务,需要100%正确完成语义分析。考虑本地导入,模板,函数重载,混合以及它们如何影响识别符号。
从长远来看,我们需要等待参考D编译器前端变得可用作库,以便以干净和真正可靠的方式实现这样的重构工具。
答案 2 :(得分:1)