问题标签 [automated-refactoring]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
146 浏览

oop - Automated evaluation of SOLID principles enforcement

Are there tools that can automatically evaluate the degree to which SOLID principles of OO design are respected in a project?

0 投票
5 回答
265 浏览

c# - 如何轻松地从类中创建接口?

我有一个有 10 种方法的类。我想要的是创建该类的接口,即该接口将仅包含这 10 个方法的签名。

可以使用 Visual Studio 在 .NET 中轻松完成吗?

我问这个问题是因为我正在改变我的项目的架构,并且对于我项目中存在的每个类,我都需要一个接口。

0 投票
1 回答
55 浏览

eclipse - 使测试类与源类保持同步

在 Eclipse 中,我有两个源文件夹,一个src称为test. 它们具有完全相同的包结构,并且每个 src 类都有一个等效的测试,其名称后附加了“Test”。有时,我在重构期间移动了我的 src 类。是否有 Eclipse 自动移动测试类的设置?此外,重命名源类也是如此。

0 投票
4 回答
3310 浏览

c++ - 用于解析 C++ 源并将 in-header 内联方法移动到 .cpp 源文件的工具?

我们应用程序的源代码有几十万行,几千个文件,而且有些地方很老——这个应用程序最初是在 1995 年或 1996 年编写的。在过去的几年里,我的团队已经大大提高了源代码的质量,但是仍然有一个问题特别困扰我:许多类在其头文件中完全定义了许多方法。

在某些情况下,我对在标头中内联声明的方法没有任何问题 - 结构的构造函数,内联可显着提高速度的简单方法(我们有一些像这样的数学函数)等。但是内联方法的自由使用并不明显原因是:

  • 凌乱
  • 很难找到方法的实现(尤其是在类树中搜索虚函数,只发现一个类在标题中声明了它的版本......)
  • 可能会增加编译后的代码大小
  • 可能会导致我们的链接器出现问题,这对于大型代码库来说是出了名的不稳定。说句公道话,在过去的几年里它变得更好了,但并不完美。

最后一个原因现在可能给我们带来了问题,这是一个很好的理由去检查代码库并将大多数定义移动到源文件中。

我们的代码库很大。 有没有一个自动化工具可以为我们做(大部分)这件事?

笔记:

  • 我们使用Embarcadero RAD Studio 2010。也就是说,C++的方言包括VCL和其他扩展等。
  • 一些标头是独立的,但大多数都与相应的 .cpp 文件配对,就像您通常那样。除了扩展名之外,文件名是相同的,即,如果在 Xh 中定义了方法,则可以将它们移动到 X.cpp。这也意味着该工具不必处理整个项目的解析——它可能只解析单独的 .cpp/.h 文件对,忽略包含等,只要它能够可靠地识别定义了主体的方法在类声明中并移动它。
0 投票
0 回答
1214 浏览

netbeans - 我可以撤消 Netbeans 重构(重命名变量)功能吗?

所以今天早上在Netbeans中使用Refactor->Rename函数几次时我没有仔细注意,现在我担心Netbeans可能已经自动更改了一些我不打算更改的变量的名称。有什么方法可以返回并检查日志或其他内容以查看 Netbeans 影响了哪些变量?

0 投票
3 回答
1959 浏览

r - R 语言感知代码重新格式化/重构工具?

最近,我发现自己使用的 R 代码在编码风格方面遍布地图 - 多个作者和不严格坚持单一结构的个人作者。有些任务我想比我现在做的更好地自动化。

我正在寻找一种工具(或多种工具)来管理以下任务 - 按愿望的递增顺序列出,但也按对存在的怀疑的递增顺序列出。

  • 基本格式。诸如将“if(foo)”转换为“if(foo)”并在大括号位置等方面实现统一之类的事情。

  • 将 "foo$blah" 转换为 "foo[["blah"]]" 以进行列表访问。理想情况下,它至少能够猜测一个对象是否真的是一个列表而不是一个 data.frame 并且只转换列表。

  • 将“=”转换为“<-”。是的,这是一个简单的搜索和替换 - 但不是真的。该工具(或正则表达式)需要具有语言意识,以便它知道转换“x = 5”而不是“foo(x=5)”。不仅要简单地替换符号,还要确保赋值运算符两侧都有一个空格,这也非常好。

  • 变量重命名,尤其是跨函数和文件。例如,假设一个列表有一个元素“foo”,我希望能够将其更改为“foobar”一次,而不必在整个代码流中跟踪该列表的每次使用。我想这将需要该工具能够进行整个控制流程,以便识别诸如在不同函数中作为另一个名称存在的列表之类的东西。

  • 命名约定。我希望能够定义一些标准命名约定(例如Google或其他),并让它识别所有函数、变量等并转换它们。请注意,这与之前的条目有关,例如列表元素。

随意列出基本的 unix 处理命令(例如 sed),只要它真的足够聪明,至少通常不会把事情搞砸(例如将“foo(x = 5)”转换为“foo(x <-5)” ”)。

我猜如果这样的工具已经以我现在已经听说过的完美状态存在,而且我也意识到使用像 R 这样的语言很难自动进行一些此类更改,但一个人可以做梦,对吧?有没有人对部分/所有这些有指点?

0 投票
2 回答
1088 浏览

java - Java的重构/重构工具

我有一个大型的单片 Web 应用程序,我希望将其分解为更小的模块。作为第一步,我想更改当前看起来像这样的包层次结构:

booking如果包结构例如用作下面的包名称,我希望它com.companyname.project

现在我想知道是否有一种工具可以例如使用简单的正则表达式为我进行重组。

例如
com.companyname.project.dao.bean.booking
会变成:
com.companyname.project.booking.dao.bean

com.companyname.project.dao.service.booking
会成为:
com.companyname.project.booking.dao.service

我可以使用 Eclipse 并拖放包,但我正在寻找可以在我参与最少的情况下做到这一点的东西,因为它会非常重复。

0 投票
1 回答
159 浏览

namespaces - 将整个项目添加到 XE2 中的命名空间

我们有一个C++ Builder应用程序,它已经经历了Embarcadero RAD Studio的多个版本。现在我试图让它在XE2中编译并遇到一个问题,一个名为TGroup的类与WinsockTGroup类产生了歧义。

令我愤怒的是,我发现系统的初始架构师没有使用任何名称空间,这本来可以解决这个问题。我决定将所有项目代码添加到一个命名空间开始。但很快我就意识到我必须浏览大约1400 个 .h 和 .cpp 文件

拜托,看在上帝的份上……有没有一个很好的工具可以快速地将整个项目封装在一个命名空间中?

大多数文件的布局略有不同。有些在包含之后有定义,有些则没有,等等。但是在包含之后插入命名空间声明应该可以开始,然后在最后一个#endif之前关闭它,这是包含保护#define

0 投票
3 回答
497 浏览

c# - 我可以使用 Visual Studio 重构类构造函数以使用新类吗?

我有以下类,在构造函数中有太多参数,我想重构该类以仅接收一个封装所有参数的对象。

是否可以使用 Visual Studio 重构实用程序将所有构造函数参数封装在一个新类中?

所以我的问题是

  • 我可以使用 Visual Studio 来做到这一点,所以我不必手动将所有参考更新为 classMyClass吗?
  • 是否有其他支持此功能的重构工具,例如Resharper或其他?

这是一项艰巨的工作,因为在我的单元测试套件中有数千个对这个类的引用。

0 投票
2 回答
259 浏览

java - Java 代码库的自动“修复”,只有通用的 `catch (Exception e)`

我有一个大型代码库,其中有很多很多实例

反模式。大约 700 个实例。我想知道是否有一种工具(例如,IDE 或其他东西)可以神奇地大规模地用下一层专门的 catch 块替换所有这些东西。以如下所示的方式应用类似于 IntelliJ 或 Eclipse 的“使用 try/catch 包装”的大规模重构的东西。注意:我并不是说所有 700 都是已知IOException的;这只是一个示例,假设在特定情况下抛出的唯一异常类型是IOException)。

我正在寻求的重构是对try{}IntelliJ/Eclipse 所做的块进行相同语义分析的东西,以提供“用 catch 包装”或“添加到 throws 子句”快速修复:

我知道这并不能“解决”问题,但它节省了一步一步的手动考古工作。

想法?

有关检测一般异常捕获反模式的相关问题。