问题标签 [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 回答
521 浏览

c++ - C++ 重构:条件扩展和块消除

我正在重构大量代码,主要是 C++,以删除一些已永久设置为给定值的临时配置检查。因此,例如,我将有以下代码:

其中对 value 的调用返回 bool 或 int。因为我知道这些调用总是返回的值,所以我做了一些正则表达式替换来将调用扩展到它们的正常值:

请注意,虽然这些值是固定的,但它们不是在编译时设置的,而是从共享内存中读取的,因此编译器当前没有在幕后优化任何东西。

虽然生成的代码看起来有点傻,但这种正则表达式方法实现了我想要的很多东西,因为它应用简单并且消除了对调用的依赖,同时不会改变代码的行为,而且编译器也可能会优化一个很多事情都知道永远不会调用一个块,否则检查将始终返回 true。它还可以相当容易地(尤其是在针对版本控制进行差异化时)查看发生了什么变化并采取最后的清理步骤,因此上面的代码最终如下所示:

问题是我要从第二个正确但愚蠢的阶段进行数百次(可能数千次)更改才能获得最终的清理代码。

我想知道是否有人知道可以处理此问题的重构工具或我可以应用的任何技术。主要问题是 C++ 语法使得完全扩展或消除很难实现,并且上面的代码有很多排列。我觉得我几乎需要一个编译器来处理我需要涵盖的语法变化。

我知道有类似的问题,但我找不到任何类似的要求,并且想知道在被问到之后是否出现了任何工具或程序?

0 投票
2 回答
1691 浏览

.net - 在 Visual Studio Express 2010 版中提取接口是否有简单的方法?

我有一个大类,我想从中提取接口。

我只在 Refactor Option 下找到了“Extract Method”,所以我想知道是否有任何可用的免费工具可以做到这一点,所以我不必手动创建界面?

0 投票
0 回答
259 浏览

java - 重构 XSD 和/或生成 java 代码

我获得了一组旧版 XSD,用于我的应用程序提供的服务,这些服务急需重构。由于某些消费者应用程序没有开发团队,因此我无法更改结果和架构。但是,我可以对实际文件做任何我想做的事情。

这是我的目录设置:

    • 子目录1
      • 常见的
      • 发展
    • 子目录2
      • 常见的
      • 发展

为简单起见,假设文件之间版本的增量将元素添加到 complexType,以便可以将以前的版本重新应用为基类/超类。

现在,在 subdir1/common 中,我可以拥有 Include_v01.xsd 和 Include_v02.xsd。在 subdir1/development 中,我可以拥有使用 Include_v01.xsd 的 svc1_v01.xsd 和使用 Include_v02.xsd 的 svc1_v02.xsd

在 Subdir2/common 中,我可以拥有 Include_v02.xsd 和 Include_v03.xsd 在 subdir2/developmen 中,我可以拥有使用 Include_v02.xsd 的 svc2_v01.xsd 和使用 include_v03.xsd 的 svc2_v02.xsd

我有大约 20 个这样的子目录。我在这些目录中有大约 1500 个左右的 XSD 文件。每个 xsd 可以有多个包含,它自己可以有多个包含,它自己可以有多个包含,等等。

最终,我想将它们重构为最简单的形式,例如,我只有一个 Include_v02.xsd 副本,而 Include_v02.xsd 实际上是从 Include_v01.xsd 构建的,而不是完全独立的副本. 是的,有些混蛋只是复制了文件,将其重命名,并添加了一个字段。然后他将它复制到将要使用的每个子目录中。

比这更重要的是能够生成类似结构的 java 类。

现在,我能做的最好的就是在目录上运行 xjc,并将每个服务的模式编译到不同的包中,所以我现在在各种 java 包中拥有大量 Include_v02 对象的副本。我必须这样做,因为架构没有在版本之间进行版本化或重新调整。同一个白痴只是复制文件,重命名它,并添加一个新元素,保持根元素相同,没有其他显着特征。

这是一个艰巨的任务,我会接受某种方式来轻松复制/合并 java 对象,甚至只是简单地在不同包中的相同 java 对象之间进行复制。

剧集文件,就像这里提到的那样,似乎并不比我现在用来生成东西的脚本更好,因为考虑到多层嵌套,我必须非常刻意地找出每个根元素用过的。

编辑============================= 如果我在 Include_v01.xsd 中有以下内容:

而且,在 Include_v02.xsd 中,我有类似的东西

我会喜欢一些组合

将 XSD 重构为

Include_v01.xsd 同 Include_v02.xsd

或者

Include_v01.xsd Include_v02 中保留的所有单个元素(复杂或简单)以包含 Include_v01.xsd,仅添加了新元素

或者

两个java类

java 类对我来说是最重要的,但任何有助于实现目标的东西都会非常出色。

如果这一切都不可能、简单或值得,我也非常感谢一些简单的方法来将相同的对象从一个复制到另一个,如果它们存在于不同的包中。我真的很想简化我的代码库,我有 160 个左右的服务,每个都有很多版本,每个版本都可以包含相同的精确文件。这意味着在我的生成代码中,我可能有 300 个或更多同一个类的定义,但由于复制的包含而在不同的包中。

0 投票
1 回答
780 浏览

java - Eclipse - 记录并将移动和重命名重构应用到另一个工作区

我目前正在一个大型 Java 项目中工作,其中有很多由不同团队开发的子模块。其中一些团队正在构建“框架”,其他团队正在构建基于框架的“应用程序”。

当框架人员移动或重命名一个类时,应用程序人员在使用重构的框架类的任何地方都会遇到编译错误。Eclipse ( Galileo Release )中有没有办法记录更改并更新另一个工作区中的引用?

到目前为止,我尝试的是在重命名重构期间创建重构脚本,但是当我尝试将该脚本应用到另一个工作区时,它会失败并显示The refactoring 'Rename Type' (org.eclipse.jdt.ui.rename.type) cannot be performed, since its input 'xxx.TestClass" does not exists. 好吧,它不存在(不再)好吧,但我想要的是xxx.TestClass我项目中的所有引用都更改为xxx.MyRenamedTestClass. Eclipse 中有没有办法使用内置功能或现有插件来做到这一点,还是我必须自己编写一个?

谢谢你的帮助!

编辑:到目前为止,我发现“迁移 JAR”-Plugin 提供了我正在寻找的功能,尽管我们使用 Maven 而不是 Eclipse 构建我们的 JAR。我现在正在浏览源代码以找出我可以重用的部分。

0 投票
4 回答
3781 浏览

c++ - 自动拆分(重构).h 为头文件和实现(h+cpp)

在编写 C++ 代码时,我通常首先在头文件中编写完整的“实现”代码,然后需要将实现重构为 .cpp 文件。

这很好,但我发现这个过程很费力,但在其他方面很容易,所以我想知道是否有任何自动化的方法可以做到这一点?

具体来说,我想将.hto 声明中的所有类和函数定义转换,并将它们声明在一个新.cpp文件中。

我正在使用 xcode,但我愿意接受任何解决方案。

0 投票
2 回答
241 浏览

c# - Visual Studio 2010 提示说无法准备重构文件。我该如何解决?

我在 C# 环境中工作,使用 Visual Studio 2010 Ultimate 进行 Web 开发。Intellisense 仍在工作,我的代码编译并运行良好,但我无法使用右键菜单重构工具重构我的代码。相反,系统提示我“无法准备重构文件”。我已经将我的设置重置为默认值,但没有运气。它仍然无法正常工作。其他功能正常工作,如转到定义等。

0 投票
1 回答
113 浏览

c# - 有没有可以从调试器生成代码的工具?

我正在考虑在 VS2010 的即时窗口中对 ?variable 进行等效的重构,是否可以获取该输出或通过另一种机制并创建代码来生成该对象及其属性(递归)。

我正在研究制作一些可用于我们的集成测试的实时“模拟”对象,而这个功能会让它变得更容易。

更新:基本上检查它是否可以执行以下操作...

0 投票
1 回答
3575 浏览

matlab - 在 MATLAB 中重构

我得到了一个徒劳的任务来合并我的前任写的一些程序。一堆乱七八糟的乱七八糟的代码。

到目前为止,我只知道自动识别(Ci)。所以我想知道你是否可以推荐一些工具。

我遇到的一些关键问题:

  • 对同一结构的分配在整个文件中闪闪发光
  • 这是一个大代码文件 - 我想拆分它
  • 相当多的代码会产生从未使用过的结果

更新漂亮的部分,我发现 Emacs 的 Matlab 模式可以打破过长的行,这很合理。

0 投票
2 回答
3453 浏览

xcode - 如何使用 Xcode Extract 重构功能?

你如何使用 Xcode 的Extract重构工具?

无论我选择什么代码,我总是会收到同样无用的错误消息。

选择不包含任何可以提取的内容。做出不同的选择,然后重试。

请参阅下面的屏幕截图: 选择代码,然后使用 Refactor > Extract... 菜单

选择不包含任何可以提取的内容。

我需要遵循什么才能让它工作?

我在一个简单的 iOS 项目上这样做,没什么特别的,没有 C++。尝试使用最新版本的 Xcode (4.4) 和更新的最新开发人员预览版。

这是一个错误吗?任何解决方法?

0 投票
1 回答
364 浏览

c++ - 帮助减少在 C++ 程序中使用宏的工具

不同的 C++ 风格指南不赞成使用 C 预处理器宏。

我知道有一些工具可以帮助检测由于使用宏而导致的错误(CPPCHECKER、Check),以及在存在预处理器指令的情况下提供重构的工具(CSCout、XRefactory)。

我想知道是否有任何重构工具可以为 C++ 程序中的宏提供替代方案(如内联函数、常量表达式)。