ESLint:解决“不允许使用不规则空格”的快速方法

Igg*_*ggY 8 javascript eslint js-beautify

我正在尝试使用 ESLint 在项目中强制执行一种编码风格,但我有很多Irregular whitespace not allowed由这样的代码引起的错误:

var a = b ||  10; //note the 2 spaces between || and 10
if (a === 10)  {  // again, 2 spaces between ) and {
Run Code Online (Sandbox Code Playgroud)

我没有找到任何方法可以轻松地为我的所有文件解决这个问题。我认为基本的正则表达式不起作用,因为在某些情况下双空格可能有效(JSON 对象的列缩进、软制表符缩进、字符串)。

我尝试了诸如 js-beautify 之类的工具,但没有找到解决此问题的任何选项。有什么工具可以帮助我吗?

Moh*_*lal 11

您可以使用vscode的扩展fix-irregular-whitspace

\n

它的工作原理是用普通空格替换代码中的所有不间断空格

\n

特征

\n
    \n
  • 节省时间自动替换不间断空间。
  • \n
  • 添加“修复当前文件中的不规则空格”命令以随意替换所有不间断空格。
  • \n
  • 添加“修复工作区中的不规则空白”命令以替换工作区中的所有不间断空格。(它将重写并保存当前未在编辑器中打开的文件,并且仅更新活动文件而不保存它们)。
  • \n
\n

安装

\n

在此输入图像描述

\n

如何跑

\n

命令托盘(CTRL + SHIFT + P)和:

\n
> Fix irregular whitespace in workspace\n
Run Code Online (Sandbox Code Playgroud)\n

对于整个工作区(项目、文件夹)

\n

在此输入图像描述

\n
> Fix irregular whitespace in current file\n
Run Code Online (Sandbox Code Playgroud)\n

对于当前文件!

\n

一旦执行!整个过程在后台运行!

\n

命令运行并完成后!您收到此通知!

\n

在此输入图像描述

\n

如果你没有使用 vscode!然后就可以通过vscode来使用了!您可以使用 vscode 轻松打开您的项目文件夹!安装扩展!并简单地运行命令!魔法完成了!

\n

即使我正在使用其他 IDE,我也使用 vscode 来做很多事情(比如代码块一次(我必须这样做!帮助朋友!))!

\n

VSCode 太强大了!在许多方面!

\n

什么是不规则空间

\n

https://eslint.org/docs/rules/no-irregular-whitespace

\n

一种类似无效的空白,不是正常的制表符和空格。其中一些字符可能会在现代浏览器中引起问题,而另一些字符则需要调试才能发现。(我有一次糟糕的经历,我彻底抓破了头!最后我很幸运,我使用了某个编辑器,为我发现了糟糕的空白!这就是原因)!

\n

祝我们 eslint 检测到它们!还有这么多的编辑器和工具!

\n

Eslint 将这些空间视为不规则空间

\n
\\u000B - Line Tabulation (\\v) - <VT>\n\\u000C - Form Feed (\\f) - <FF>\n\\u00A0 - No-Break Space - <NBSP>\n\\u0085 - Next Line\n\\u1680 - Ogham Space Mark\n\\u180E - Mongolian Vowel Separator - <MVS>\n\\ufeff - Zero Width No-Break Space - <BOM>\n\\u2000 - En Quad\n\\u2001 - Em Quad\n\\u2002 - En Space - <ENSP>\n\\u2003 - Em Space - <EMSP>\n\\u2004 - Tree-Per-Em\n\\u2005 - Four-Per-Em\n\\u2006 - Six-Per-Em\n\\u2007 - Figure Space\n\\u2008 - Punctuation Space - <PUNCSP>\n\\u2009 - Thin Space\n\\u200A - Hair Space\n\\u200B - Zero Width Space - <ZWSP>\n\\u2028 - Line Separator\n\\u2029 - Paragraph Separator\n\\u202F - Narrow No-Break Space\n\\u205f - Medium Mathematical Space\n\\u3000 - Ideographic Space\n
Run Code Online (Sandbox Code Playgroud)\n

关于它们可能导致的问题的示例和见解:

\n
\n

无效或不规则的空格会导致 ECMAScript 5 解析器出现问题,并且还会使代码更难以调试,其性质类似于混合制表符和空格。

\n
\n
\n

程序员可能会错误地输入各种空白字符,例如通过复制或键盘快捷键输入。例如,在 macOS 上按 Alt + Space 会添加不间断的空格字符。

\n
\n
\n

解决此问题的一个简单方法是从头开始重写有问题的行。这也可能是文本编辑器引入的问题:如果重写该行不能解决问题,请尝试使用其他编辑器。

\n
\n

这些空间导致的已知问题:

\n

零宽度空间

\n
    \n
  • 不被视为标记的分隔符,并且通常被解析为意外标记非法
  • \n
  • 在现代浏览器中未显示,使得代码存储库软件有望解决可视化问题
  • \n
\n

行分隔符

\n
    \n
  • 不是 JSON 中的有效字符,这会导致解析错误
  • \n
\n

好的

\n

#\xc2\xa0Ok 否

\n

是的,这是什么,好吧,不!你不知道吗!?

\n

那里有一个我创造的不规则空间!

\n

在哪儿 !?在这里> #<irregular space>OK<normal space>NO

\n

我是按字面意思打字的# + ALT + SPACE + "OK NO"!速度就是原因!我做的很快!我知道这个伎俩!我可以随意创造这种不规则的空间类型!

\n

您想了解更多!在这里查看我关于不规则空间的文章:

\n

修复和去除不规则空间

\n

检查如何创建它们部分!讲的是markdown的问题!你可以在stackoverflow中看到这一点!README.md文件写入!如果您已经遇到了这么多问题!慢点写#+空格应该就可以了!

\n

这是我故意做的另一个不规则空间

\n

在此输入图像描述

\n

#\xc2\xa0+空间快!然后删除#!

\n

事实上,要创建不规则的空间,我们只需要ALT + SPACE!这就是它的原理!

\n

你可以看到编辑器检测到它(vscode 这里使用 eslint linter)!

\n

更新(对于 eslint)

\n

eslint lint 规则的修复实现实际上已经制定出来了!过几天就会出来了!它将作为eslint 插件(npm install + 添加到扩展)(允许支持旧的 eslint 版本)!然后是新版本的 eslint!它也可能进入核心规则!很快再检查一次!我也会更新这个部分!有完整的细节!

\n

如果您喜欢,可以在本期查看https://github.com/eslint/eslint/issues/14073

\n


rad*_*ual 1

如果您正在寻找一种在命令行上执行此操作的方法,您可以通过管道将awk或 的输出传输tstee(如果它们在您的操作系统上可用)。以下选项将标准化文件中的空格,并覆盖现有文件:

(警告!这将覆盖 的内容file.js
选项#1: tr -s " " < file.js | tee file.js
选项#2: awk '{$2=$2};1' file.js | tee file.js

假设您有一个file.js包含以下内容的文件:

// there       are lots        of spaces
// in      this          file
var a    =    b     ||  10;
if (  a  ===   10     )  { 
 //      ....
}
Run Code Online (Sandbox Code Playgroud)

运行上述命令之一后,该file.js文件将如下所示:

// there are lots of spaces
// in this file
var a = b || 10;
if ( a === 10 ) {
// ....
} 
Run Code Online (Sandbox Code Playgroud)

如果您只想将更正后的空白内容的结果打印到终端而不覆盖文件,则不要将输出通过管道传输到tee,如下所示:

选项#1: tr -s " " < file.js
选项#2: awk '{$2=$2};1' file.js

否则,如果要将内容输出到新文件

选项#1: tr -s " " < file.js | tee newfile.js
选项#2: awk '{$2=$2};1' file.js | tee newfile.js

输出到同一文件
选项#1: tr -s " " < file.js | tee file.js
选项#2: awk '{$2=$2};1' file.js | tee file.js

话虽如此,在信任源代码文件上的命令行操作之前,您应该始终非常谨慎并进行详细的测试。

查看这篇文章以获取更好的详细信息和更多选项。