no-irregular-whitespace
禁止不规则空格
✅ 推荐
在配置文件中使用来自 @eslint/js
的 recommended
配置将启用此规则
无效或不规则的空格会导致 ECMAScript 5 解析器出现问题,并且类似于混合使用制表符和空格一样,使代码更难以调试。
程序员可能会错误地输入各种空格字符,例如从复制或键盘快捷键中输入。例如,在 macOS 上按下 Alt + Space 会添加一个不间断空格字符。
解决此问题的一个简单方法是从头开始重写有问题的行。这可能也是文本编辑器引入的问题:如果重写该行无法解决问题,请尝试使用其他编辑器。
这些空格导致的已知问题
- Ogham 空格标记
- 是一个有效的标记分隔符,但在大多数字体中呈现为可见的字形,这在源代码中可能会产生误导。
- 蒙古语元音分隔符
- 自 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 }
选项的错误代码示例
在游乐场中打开
/*eslint no-irregular-whitespace: "error"*/
var thing = function()/*<NBSP>*/{
return 'test';
}
var thing = function(/*<NBSP>*/){
return 'test';
}
var thing = function/*<NBSP>*/(){
return 'test';
}
var thing = function/*<Ogham Space Mark>*/(){
return 'test';
}
var thing = function() {
return 'test';/*<ENSP>*/
}
var thing = function() {
return 'test';/*<NBSP>*/
}
var thing = function() {
// Description<NBSP>: some descriptive text
}
/*
Description<NBSP>: some descriptive text
*/
var thing = function() {
return /<NBSP>regexp/;
}
var thing = function() {
return `template<NBSP>string`;
}
此规则使用默认 { "skipStrings": true }
选项的正确代码示例
在游乐场中打开
/*eslint no-irregular-whitespace: "error"*/
var thing = function() {
return ' <NBSP>thing';
}
var thing = function() {
return '<ZWSP>thing';
}
var thing = function() {
return 'th <NBSP>ing';
}
skipComments
此规则使用 { "skipComments": true }
选项的其他正确代码示例
在游乐场中打开
/*eslint no-irregular-whitespace: ["error", { "skipComments": true }]*/
function thing() {
// Description <NBSP>: some descriptive text
}
/*
Description <NBSP>: some descriptive text
*/
skipRegExps
此规则使用 { "skipRegExps": true }
选项的其他正确代码示例
在游乐场中打开
/*eslint no-irregular-whitespace: ["error", { "skipRegExps": true }]*/
function thing() {
return / <NBSP>regexp/;
}
skipTemplates
此规则使用 { "skipTemplates": true }
选项的其他正确代码示例
在游乐场中打开
/*eslint no-irregular-whitespace: ["error", { "skipTemplates": true }]*/
function thing() {
return `template <NBSP>string`;
}
skipJSXText
此规则使用 { "skipJSXText": true }
选项的其他正确代码示例
在游乐场中打开
/*eslint no-irregular-whitespace: ["error", { "skipJSXText": true }]*/
function Thing() {
return <div>text in JSX</div>; // <NBSP> before `JSX`
}
何时不使用它
如果您决定希望在应用程序中使用除制表符和空格之外的其他空格。
版本
此规则是在 ESLint v0.9.0 中引入的。