什么是修复丢失分号的好的独立JavaScript格式化程序?

什么是修复丢失分号的好的独立JavaScript格式化程序?,javascript,formatting,Javascript,Formatting,我正试图改造/修复大量遗留的web代码,不幸的是,其中大部分是格式糟糕的JavaScript。我正在寻找一个批处理/可编写脚本的实用程序,它可以修复在可执行语句末尾缺少相似项的JavaScript 我已经用Rhino尝试了beautify-cl.js脚本,但它没有添加分号。此外,我曾试图将其修改为可编写脚本,但它删除了所有注释。考虑到我们有大约2000-3000个文件,任何解决方案都必须是可编写脚本的 参考了以下主题,但由于各种原因,没有一种解决方案是充分的: -不处理分号 -无法编写脚本 有什

我正试图改造/修复大量遗留的web代码,不幸的是,其中大部分是格式糟糕的JavaScript。我正在寻找一个批处理/可编写脚本的实用程序,它可以修复在可执行语句末尾缺少相似项的JavaScript

我已经用Rhino尝试了beautify-cl.js脚本,但它没有添加分号。此外,我曾试图将其修改为可编写脚本,但它删除了所有注释。考虑到我们有大约2000-3000个文件,任何解决方案都必须是可编写脚本的

参考了以下主题,但由于各种原因,没有一种解决方案是充分的: -不处理分号 -无法编写脚本


有什么想法/解决方案吗?提前感谢。

您不必担心仅仅为了插入分号而对大量遗留代码进行大规模更新。这是“做错了”的经典案例

你将如何测试结果? 您如何确保没有“功能”(由于缺少分号而导致的错误的副作用)丢失

你认为在所有这些文件中添加分号会给你带来什么?除了更大的文件(我不反对使用分号)和大量未经测试的代码更改之外

正如秋葵所说,使用。当你在日常工作中编辑文件时,我会在文件上使用它。当您编辑这些文件时,您可能会在那时测试对文件的更改。那将是插入分号最理想的时机


此外,如果您担心保持2000-3000个遗留javascript文件的活动性和受支持性,那么您会遇到比分号更大的问题。显然,如果您想在部署时缩小文件,您需要这样做。缺少分号可能是JS文件不能正确缩小的第一个原因,所以我理解你的动机

编写一个小Python(或其他)脚本,通过jslint运行文件,然后使用jslint的输出查看哪些行需要分号,然后旋转js源代码并添加它们

我认为您在这里可以无所畏惧,因为JavaScript隐式地添加了分号



更新:。“格式”选项卡提供缺少分号插入

如果您在上使用JavaScript Utlity V2并使用格式化功能,它将自动替换缺少的分号


此外,如果您使用压缩功能,它还将替换缺少的分号,以便压缩不会导致任何错误。

如果抛出太多错误(并且无法格式化),您可以尝试使用以下内容对其进行压缩:(这将添加缺少的分号)然后返回pjoneil.net formatter以获得带有分号的漂亮代码。

我在和谷歌的:

#legacy.js是您格式不佳的JavaScript文件,将在适当的位置进行修改
js beautify-s2-n-b end expand-x-r legacy.js和fixjsstyle legacy.js
js美化
选项说明:

  • -s2
    :用两个空格缩进
  • -n
    :确保在文件末尾换行
  • -b end expand
    :将
    {
    大括号放在行的末尾,但总是给
    }
    大括号自己的行
  • -x
    :unescape
    \xNN
    -字符串中的转义字符
  • -r
    :进行适当的更改
fixjsstyle
,与Closure Linter套件一起安装,默认情况下会进行适当的更改

此管道保留注释(!),按我喜欢的方式缩进所有内容(大部分),在适当的地方添加分号,甚至在可行的情况下将双引号更改为单引号。这两个命令都可以提供一个文件列表(例如,
***.js
),而不仅仅是一个

要在Mac OS X上安装所需的软件包,请执行以下操作:

npm install -g js-beautify
brew install closure-linter

你试过了吗?这不是一个美化,但最好的质量检查工具。剩下的是手工工作。是的,找到问题没问题。不幸的是,浏览3000个文件并在每个可执行行的末尾手动添加分号是非常繁琐的。很多文件都超过了50k。添加分号有什么特殊原因吗(比如使用特殊的JS打包机)?否则,省略分号仍然符合规范。如果单元测试覆盖率很好,您可以完成它。但很有可能,如果它的格式一开始就很糟糕,那么就不会有任何单元测试。显然,大量的代码覆盖允许进行无畏的重构,但我高度怀疑这种情况:)我同意。无论何时出于其他原因更改文件,都值得使用jslint(或类似工具)。但是跳过大规模的迁移。主要的问题是我们可以更安全地进行缩小。此外,许多工具都假设代码的格式比当前更为良好。我们有回归测试来验证事情,所以这不是一个很大的问题。另外,现在实际上是我们进行“大爆炸”变革的绝佳时机,因为其他必要的变革需要全面回归。其他的更改相对简单,但是可以自动执行。有趣的是,我不同意你们的观点,因为JavaScript隐式地添加了分号。我认为这是一个相当安全的重构。穿条纹衣服的约翰·坎迪:“如果是我,我会把一切都赌上。但那就是我。我是一个好斗的赌徒。维加斯先生。来吧。去吧。”对,谁能保证一切都像以前一样有效?这是一个风险。但我认为他的可能性很大。我没有让JSLint告诉我在不应该添加分号的时候添加分号。我见过很多人不管怎么说都会毫无意识地接受jslint的分号建议。如果有商业理由缩小规模,他将浪费大量时间与jslint一起手工完成。他会接受jslint的分号