【问题标题】:Renaming variables in JavaScript在 JavaScript 中重命名变量
【发布时间】:2013-02-22 16:51:44
【问题描述】:

我一直被“取消缩小”缩小的 JavaScript 代码文件这一令人不快的任务所困扰。使用 JSBeautifier,生成的文件大约有 6000 行。

通常,变量和参数名称会永久丢失,但在这种情况下,我有一个过时的原始文件版本,从该文件生成缩小的 JavaScript 代码文件。这个过时版本的原始文件包含大部分代码 cmets 和变量名,但绝对不能用来代替当前版本。

我想知道是否有某种方法可以重命名 JavaScript 中特定参数或变量的所有实例。由于缩小将名称缩减为单个字符,因此不可能进行查找和替换。

那里有一些工具,我可以告诉我,在这个文件中,函数foo 的参数a 应该是clientName,并让它在语义上将该参数的所有实例重命名为clientName

不幸的是,我为一家拥有已批准软件列表的大型组织工作,在可预见的未来我只能使用 Visual Studio 2010(没有 VS 2012)。

更新: @Kos,我们不使用 Git,但我们使用源代码控制。问题是不再为我的组织工作的开发人员一旦对文件进行了更改,将其缩小,并且仅将缩小版本签入到源代码控制中,因此他对原始文件的更改已经丢失。

【问题讨论】:

  • 我希望 Git 在您的组织名单上,因为它现在可以拯救您 :-)。嗯...您可以尝试在两个版本上使用JSBeautifier(以统一格式),然后制作补丁并有选择地应用它。如果其他变化不大,这将使您的工作实现半自动化。
  • 您可以查看 TypeScript。 typescriptlang.org 默认情况下,所有 javascript 都是 TypeScript,所以我假设在变量重命名方面会有某种帮助——尽管它可能不会跨文件这样做。好消息是 Visual Studio 是 TypeScript AFAIK 唯一可用的 IDE。
  • 我不会这么快就取消查找和替换解决方案。 JS 变量只有在以特定方式使用时才在表达式中有效。我认为您可能可以为每种情况进行一些查找/替换并使其正常工作
  • 从头开始重写可能会更快更好。也许使用 jQuery。
  • @anoopelias: 默认情况下所有 javascript 都是 TypeScript?甚至远非如此。我认为该技术不适用于这种情况。

标签: javascript visual-studio refactoring automated-refactoring


【解决方案1】:

这个答案我迟到了一年,但我遇到了与你类似的问题,所以我构建了这个:https://github.com/zertosh/beautify-with-words。它使用 UglifyJS2 简化代码,但使用拼音词生成器重命名变量。你会得到“长”的变量名,所以查找和替换是一件轻而易举的事。希望这对其他人有帮助!

【讨论】:

    【解决方案2】:

    你可能还有其他出路。

    查看代码的最后一个未缩小版本。对比缩小版。可以说,其中大部分应该是相同的模一致变量重命名。您必须重命名和重新合并的差异。

    Diff 不会进行这种比较;您需要将程序作为代码而不是文本进行比较的工具。我们的 SmartDifferencer 工具将执行此操作(通过使用特定于语言的完整解析器生成 AST,然后比较 AST);实际上,尽管有空白,它还是比较了程序。 SmartDifferencer 也处理重命名;如果两个文件是相同的,以一个重命名为模,这就是 SmartDifferencer 告诉你的。

    我不知道这项工作的效果如何;我们还没有尝试使用 6000 行“一致重命名”变量的 SmartDifferencer。

    【讨论】:

      【解决方案3】:

      我发现我们在这里获得许可的一个名为“Telerik JustCode”的 Visual Studio 扩展具有执行我想要的功能。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-25
        • 2014-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多