来自 Java,大多数 IDE 支持复杂的重构,可以跨越更多源代码文件和项目,我想知道是否有任何 Javascript 编辑器支持相同的功能?
我刚刚看完 some presentation about Cloud9's AST tooling support 。该演示文稿已存在一年多了。我想知道从那时起 Cloud9 是否获得了复杂的重构函数,可以理解例如。 NodeJs require() 语句?当然这个问题并不想缩小到Cloud9,我们有brackets.io、Orion等。这只是我遇到的演示,所以这就是为什么我给出基于Cloud9的示例。
假设我有一个导出对象原型(prototype)的 Node 模块,并且我有另一个使用它的模块。假设我想重命名导出原型(prototype)中的函数,我正在寻找的是 IDE 将根据更改重构其他模块中的调用。是否有工具支持跨模块依赖项重构重命名?
最佳答案
我浪费了很多时间来寻找解决方案,但是......
我认为不存在像您想要的那样的应用程序。 JavaScript 是一种有点奇怪的语言。例如范围界定。很难检测函数调用,因为很难检测当前变量是否是另一个变量的实例/克隆,也很难检测原型(prototype)中的更改。您有一个“类”,创建一个新实例,并且只能更改此新实例的属性。当然,“this”关键字可能是作用域的一个新问题。
举个例子。如果我重命名 addNew
函数,什么也会被重命名?
var Sample = function() {
this.values = [];
};
Sample.prototype.addNew = function(value) {
this.values.push(value);
};
var s = new Sample();
s.addNew("1");
var s2 = new Sample();
s2.addNew = function(value) {
this.values.push(parseInt(value, 10));
};
s2.addNew("12x");
Sample.prototype.addNewRaw = Sample.prototype.addNew;
Sample.prototype.addNew = function(value) {
this.values.push("x" + value);
};
var s3 = new Sample();
s3.addNew(12);
s3.addNewRaw(12);
console.log(s);
console.log(s2);
console.log(s3);
好吧,这是一个糟糕的代码:)如果我的同事遇到了这个代码,我想,我就会敲打他们,直到他看起来像这个。是的,这是一个有趣的话题/问题,我认为“这可能并且可用吗?”问题是我们首先需要问的。当然可能并且可以使用。
顺便说一句,我一般使用 Brackets、sed、grep 和 jshint,也使用重构。
关于JavaScript 工具 : how complex refactoring is possible right now?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20924372/