Spec-Zone.ru › ESLint

no-irregular-whitespace

Запрещает нерегулярные пробельные символы

✅ Рекомендуется

Использование конфигурации recommended из @eslint/js в файле конфигурации включает это правило

Недопустимые или нерегулярные пробельные символы вызывают проблемы с парсерами ECMAScript 5, а также затрудняют отладку кода подобно смешению табуляций и пробелов.

Программисты могут случайно ввести различные пробельные символы, например, скопировав их или используя сочетания клавиш. Например, нажатие Alt + Space в macOS добавляет неразрывный пробел.

Простое решение этой проблемы — переписать проблемную строку с нуля. Причиной также может быть текстовый редактор: если переписывание строки не помогает, попробуйте использовать другой редактор.

Известные проблемы, вызываемые этими пробелами:

  • Знак пробела огам
    • Является допустимым разделителем токенов, но в большинстве гарнитур отображается видимым глифом, что может вводить в заблуждение при просмотре исходного кода.
  • Разделитель гласных монгольского письма
    • Начиная с Unicode 6.3 больше не считается разделителем пробелов. При использовании вместо обычного разделителя токенов в современных парсерах он вызовет синтаксическую ошибку.
  • Разделитель строк и разделитель абзацев
    • Это всегда были допустимые пробельные символы и символы завершения строки, но до ECMAScript 2019 они считались недопустимыми в строковых литералах.
  • Пробел нулевой ширины
    • НЕ считается разделителем токенов и часто разбирается как Unexpected token ILLEGAL.
    • НЕ отображается в современных браузерах, поэтому ожидается, что программное обеспечение для работы с репозиториями кода сможет корректно его визуализировать.

В JSON ни один из символов, перечисленных этим правилом как нерегулярные пробелы, не может находиться вне строки.

Описание правила

Это правило предназначено для обнаружения недопустимых пробельных символов, не являющихся обычными табуляциями и пробелами. Некоторые из этих символов могут вызывать проблемы в современных браузерах, а другие будет трудно заметить при отладке.

Это правило запрещает следующие символы, кроме случаев, разрешённых параметрами:

\u000B - Line Tabulation (\v) - <VT>
\u000C - Form Feed (\f) - <FF>
\u0085 - Next Line - <NEL>
\u00A0 - No-Break Space - <NBSP>
\u1680 - Ogham Space Mark - <OGSP>
\u180E - Mongolian Vowel Separator - <MVS>
\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>
\uFEFF - Zero Width No-Break Space - <BOM>

Параметры

Для исключений у этого правила есть параметр-объект:

  • "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.

Дополнительная литература

Аннотированный ES5
es5.github.io
JSON: подмножество JavaScript, которым он не является — Timeless
web.archive.org
U+1680 OGHAM SPACE MARK: — Unicode — Codepoints
codepoints.net

Ресурсы

  • Исходный код правила
  • Исходный код тестов

© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/no-irregular-whitespace

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API