我使用vscode的Refactor函数来重命名变量名。我发现全局变量或局部变量的智能修改没有问题,但是对象的属性无效。是否有任何方法或扩展程序可以做到这一点?
Vscode信息: 版本:1.36.1(用户设置) 提交:2213894ea0415ee8c85c5eea0d0ff81ecc191529 日期:2019-07-08T22:59:35.033Z 电子:4.2.5 铬:69.0.3497.128 Node.js:10.11.0 V8:6.9.427.31-electron.0 操作系统:Windows_NT x64 10.0.18922
g = se.prototype;
g.eb = function (a) {
this.pf = this.Sr(); //this.Sr will be refactored
a = this.cu(a);
return Pc(a, null)
};
g.au = function (a) {
this.pf && "*" == this.Me && (a.id = this.pf)
};
g.Tt = function (a) {
if (!this.zi)
return a;
a = de("<div>" + a + "</div>");
he(a);
return a.innerHTML
};
g.Sr = function () { //want to smart rename the g.Sr to g.sanitizer
var a = !("STYLE" in this.Pe) && "STYLE" in this.Qe;
return "*" == this.Me && a ? "sanitizer-" + (Math.floor(2147483648 * Math.random()).toString(36) + Math.abs(Math.floor(2147483648 * Math.random()) ^ Ja()).toString(36)) : this.Me
};
答案 0 :(得分:0)
VS Code的内置JavaScript IntelliSense无法理解该代码,这就是为什么重命名不起作用的原因。该代码在很大程度上取决于动态行为,例如将g
分配给se.prototype
,然后进一步将属性写入g
。 IntelliSense引擎只是无法理解this.Sr
中的eb
指的是下面的同一g.Sr
(乍一看,对程序员的作用也不明显)
您可以将鼠标悬停在源代码中的各个变量上,以进行调查。如果悬停信息显示any
,则表示VS Code IntelliSense引擎无法正确推断变量的类型,因此诸如重命名之类的语义操作将不起作用。您还可以在文件顶部添加// @ts-check
,以对代码进行一些基本的类型检查
对于现有代码段,最好的选择是基于文本的查找/替换。