JavaScript 工具 : how complex refactoring is possible right now?

标签 javascript node.js refactoring tooling

来自 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/

相关文章:

javascript - 确定页面顶部和div底部之间的距离

javascript - NodeJS 中的数组理解

node.js - 使用 mocha/supertest 测试随机值

javascript - 为什么无法尝试/捕捉某些东西?

javascript - 从字符和数字数组中查找最大值

java - 清理带有过多条件的代码

java - 跨多个项目的 Maven 和重构

function - Haskell 中的折叠实现

javascript - 从 javascript 对象获取值

javascript - 如何在nodejs中保持速度调用10000行的大数据