版本

no-irregular-whitespace

禁用不规则的空白

推荐

配置文件 中使用 @eslint/jsrecommended 配置启用此规则

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

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

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

这些空格导致的已知问题

  • 欧甘空格符
    • 是一个有效的标记分隔符,但在大多数字体中呈现为可见字形,这可能会在源代码中产生误导。
  • 蒙古文元音分隔符
    • 自 Unicode 6.3 以来,不再被认为是空格分隔符。当用作常规标记分隔符时,它将在当前解析器中导致语法错误。
  • 行分隔符和段落分隔符
    • 这些一直都是有效的空白字符和行终止符,但在 ECMAScript 2019 之前,在字符串字面量中被认为是非法的。
  • 零宽度空格
    • 不被认为是标记的分隔符,并且通常被解析为 Unexpected token ILLEGAL
    • 在现代浏览器中不显示,使得代码仓库软件需要解决可视化问题。

在 JSON 中,此规则列为不规则空白的字符都不能出现在字符串之外。

规则详情

此规则旨在捕获非普通制表符和空格的无效空白。其中一些字符可能会在现代浏览器中引起问题,而另一些字符将成为难以发现的调试问题。

此规则禁止以下字符,除非选项允许

\u000B - Line Tabulation (\v) - <VT>
\u000C - Form Feed (\f) - <FF>
\u00A0 - No-Break Space - <NBSP>
\u0085 - Next Line - <NEL>
\u1680 - Ogham Space Mark - <OGSP>
\u180E - Mongolian Vowel Separator - <MVS>
\ufeff - Zero Width No-Break Space - <BOM>
\u2000 - En Quad - <NQSP>
\u2001 - Em Quad - <MQSP>
\u2002 - En Space - <ENSP>
\u2003 - Em Space - <EMSP>
\u2004 - Three-Per-Em - <THPMSP> - <3/MSP>
\u2005 - Four-Per-Em - <FPMSP> - <4/MSP>
\u2006 - Six-Per-Em - <SPMSP> - <6/MSP>
\u2007 - Figure Space - <FSP>
\u2008 - Punctuation Space - <PUNCSP>
\u2009 - Thin Space - <THSP>
\u200A - Hair Space - <HSP>
\u200B - Zero Width Space - <ZWSP>
\u2028 - Line Separator - <LS> - <LSEP>
\u2029 - Paragraph Separator - <PS> - <PSEP>
\u202F - Narrow No-Break Space - <NNBSP>
\u205f - Medium Mathematical Space - <MMSP>
\u3000 - Ideographic Space - <IDSP>

选项

此规则具有用于异常的对象选项

  • "skipStrings": true (默认) 允许字符串字面量中出现任何空白字符
  • "skipComments": true 允许注释中出现任何空白字符
  • "skipRegExps": true 允许正则表达式字面量中出现任何空白字符
  • "skipTemplates": true 允许模板字面量中出现任何空白字符
  • "skipJSXText": true 允许 JSX 文本中出现任何空白字符

skipStrings

此规则的错误代码示例,使用默认的 { "skipStrings": true } 选项

在 Playground 中打开
/*eslint no-irregular-whitespace: "error"*/

const thing = function() /*<NBSP>*/{
    return 'test';
}

const foo = function( /*<NBSP>*/){
    return 'test';
}

const bar = function /*<NBSP>*/(){
    return 'test';
}

const baz = function/*<Ogham Space Mark>*/(){
    return 'test';
}

const qux = function() {
    return 'test';/*<ENSP>*/
}

const quux = function() {
    return 'test'; /*<NBSP>*/
}

const item = function() {
    // Description <NBSP>: some descriptive text
}

/*
Description <NBSP>: some descriptive text
*/

const func = function() {
    return / <NBSP>regexp/;
}

const myFunc = function() {
    return `template<NBSP>string`;
}

此规则的正确代码示例,使用默认的 { "skipStrings": true } 选项

在 Playground 中打开
/*eslint no-irregular-whitespace: "error"*/

const thing = function() {
    return ' <NBSP>thing';
}

const foo = function() {
    return '​<ZWSP>thing';
}

const bar = function() {
    return 'th <NBSP>ing';
}

skipComments

此规则的附加正确代码示例,使用 { "skipComments": true } 选项

在 Playground 中打开
/*eslint no-irregular-whitespace: ["error", { "skipComments": true }]*/

function thing() {
    // Description <NBSP>: some descriptive text
}

/*
Description <NBSP>: some descriptive text
*/

skipRegExps

此规则的附加正确代码示例,使用 { "skipRegExps": true } 选项

在 Playground 中打开
/*eslint no-irregular-whitespace: ["error", { "skipRegExps": true }]*/

function thing() {
    return / <NBSP>regexp/;
}

skipTemplates

此规则的附加正确代码示例,使用 { "skipTemplates": true } 选项

在 Playground 中打开
/*eslint no-irregular-whitespace: ["error", { "skipTemplates": true }]*/

function thing() {
    return `template <NBSP>string`;
}

skipJSXText

此规则的附加正确代码示例,使用 { "skipJSXText": true } 选项

在 Playground 中打开
/*eslint no-irregular-whitespace: ["error", { "skipJSXText": true }]*/

function Thing() {
    return <div>text in JSX</div>; // <NBSP> before `JSX`
}

何时不使用它

如果您决定希望在应用程序中字符串之外使用制表符和空格以外的空白。

版本

此规则在 ESLint v0.9.0 中引入。

延伸阅读

资源

更改语言