版本

no-irregular-whitespace

禁用不規則的空白字元

建議

設定檔中使用 @eslint/js 中的 recommended 設定會啟用此規則

無效或不規則的空白字元會導致 ECMAScript 5 解析器出現問題,並且也會使程式碼更難以偵錯,性質類似於混合使用 Tab 鍵和空格鍵。

程式設計師可能會錯誤地輸入各種空白字元,例如從複製或鍵盤快捷鍵。例如,在 macOS 上按下 Alt + 空格鍵會加入不斷行空格字元。

此問題的簡單修復方法可能是從頭重寫違規行。這也可能是文字編輯器引入的問題:如果重寫行無法修正問題,請嘗試使用其他編輯器。

這些空格造成的已知問題

  • 歐甘空格符號
    • 是有效的語法單元分隔符,但在大多數字體中呈現為可見的符號,這可能會在原始碼中產生誤導。
  • 蒙古文母音分隔符
    • 自 Unicode 6.3 以來,不再被視為空格分隔符。當用作取代一般語法單元分隔符時,會在目前的解析器中產生語法錯誤。
  • 行分隔符和段落分隔符
    • 這些一直是有效的空白字元和行終止符,但在 ECMAScript 2019 之前,在字串文字中被視為非法。
  • 零寬度空格
    • 不被視為語法單元的分隔符,並且通常被解析為 Unexpected token ILLEGAL
    • 在現代瀏覽器中不顯示,使得程式碼儲存庫軟體預期會解決視覺化問題。

在 JSON 中,此規則列為不規則空白字元的字元都不得出現在字串之外。

規則詳情

此規則旨在捕捉不是一般 Tab 鍵和空格鍵的無效空白字元。其中某些字元可能會在現代瀏覽器中造成問題,而其他字元將是難以發現的偵錯問題。

此規則不允許下列字元,但選項允許的情況除外

\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"*/

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 } 選項時,此規則的正確程式碼範例

在遊樂場中開啟
/*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 } 選項時,此規則的其他正確程式碼範例

在遊樂場中開啟
/*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`
}

何時不應使用

如果您決定希望在應用程式中字串外部使用 Tab 鍵和空格鍵以外的空白字元。

版本

此規則在 ESLint v0.9.0 中引入。

延伸閱讀

資源

變更語言