Spec-Zone.ru › ESLint

Неправильные пробелы

Запрет неправильных пробелов

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

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

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

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

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

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

  • Знак пробела Огам
    • Является допустимым разделителем токенов, но отображается как видимый глиф в большинстве шрифтов, что может ввести в заблуждение при просмотре исходного кода.
  • Разделитель гласных монгольского алфавита
    • Больше не считается разделителем пробелов с версии 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"*/

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 }:

Открыть в Playground
/*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 }:

Открыть в 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
JSON: Подмножество JavaScript, которым он не является — Timeless
U+1680 MARK OGHAM SPACE: — Unicode — Codepoints

Ресурсы

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

© 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