Spec-Zone.ru › ESLint

строгий

Требовать или запрещать директивы строгого режима

🔧 Исправимые

Некоторые проблемы, выявленные этим правилом, автоматически исправляются с помощью параметра командной строки --fix командной строки.

Директива строгого режима — это литерал "use strict" в начале тела скрипта или функции. Она активирует семантику строгого режима.

Когда директива находится в глобальной области видимости, строгий режим применяется ко всему скрипту:

"use strict";

// strict mode

function foo() {
    // strict mode
}

Когда директива находится в начале тела функции, строгий режим применяется только к этой функции, включая все вложенные функции:

function foo() {
    "use strict";
    // strict mode
}

function foo2() {
    // not strict mode
};

(function() {
    "use strict";
    function bar() {
        // strict mode
    }
}());

В системе модулей CommonJS каждая функция модуля обернута в скрытую функцию, что ограничивает область действия директивы «глобального» строгого режима.

В модулях ECMAScript, которые всегда имеют семантику строгого режима, директивы не нужны.

Подробности правила

Это правило требует или запрещает директивы строгого режима.

Это правило запрещает директивы строгого режима, независимо от указанного параметра, если в конфигурации ESLint указаны следующие параметры разбора:

  • "sourceType": "module" то есть файлы являются модулями ECMAScript
  • "impliedStrict": true свойство в объекте ecmaFeatures

Это правило запрещает директивы строгого режима, независимо от указанного параметра, в функциях с нетривиальными списками параметров (например, списки параметров с значениями по умолчанию), потому что это синтаксическая ошибка в ECMAScript 2016 и более поздних версиях. См. примеры параметра function.

Это правило не применяется к статическим блокам классов, независимо от указанного параметра, так как статические блоки классов не имеют директив. Поэтому оператор "use strict" в статическом блоке класса не является директивой и будет отображаться правилом no-unused-expressions.

Параметр --fix в командной строке не вставляет новые операторы "use strict", а только удаляет неиспользуемые.

Параметры

Это правило имеет строковый параметр:

  • "safe" (по умолчанию) соответствует одному из следующих параметров:
    • "global" если ESLint считает файл модулем CommonJS
    • "function" в противном случае
  • "global" требует одну директиву строгого режима в глобальной области видимости (и запрещает любые другие директивы строгого режима)
  • "function" требует одну директиву строгого режима в каждом объявлении или выражении функции верхнего уровня (и запрещает любые другие директивы строгого режима)
  • "never" запрещает директивы строгого режима

safe

Параметр "safe" соответствует параметру "global" если ESLint считает файл модулем Node.js или CommonJS, так как конфигурация указывает одно из следующих свойств:

  • "globalReturn": true свойство в объекте ecmaFeatures параметров разбора

В противном случае параметр "safe" соответствует параметру "function". Обратите внимание, что если "globalReturn": false явно указан в конфигурации, параметр "safe" будет соответствовать параметру "function" независимо от указанной среды.

global

Примеры неправильного кода для этого правила с параметром "global".

Открыть в Playground
/*eslint strict: ["error", "global"]*/

functionfoo(){}
Открыть в Playground
/*eslint strict: ["error", "global"]*/

functionfoo(){"use strict";}
Открыть в Playground
/*eslint strict: ["error", "global"]*/

"use strict";

function foo() {
    "use strict";
}

Примеры правильного кода для этого правила с параметром "global":

Открыть в Playground
/*eslint strict: ["error", "global"]*/

"use strict";

function foo() {
}

function

Этот параметр гарантирует, что все тела функций являются кодом строгого режима, а глобальный код — нет. Особенно если этап сборки конкатенирует несколько скриптов, директива строгого режима в глобальном коде одного скрипта может непреднамеренно активировать строгий режим в другом скрипте, который не должен быть кодом строгого режима.

Примеры неправильного кода для этого правила с параметром "function":

Открыть в Playground
/*eslint strict: ["error", "function"]*/

"use strict";

functionfoo(){}
Открыть в Playground
/*eslint strict: ["error", "function"]*/

functionfoo(){}

(function(){functionbar(){"use strict";}}());
Открыть в Playground
/*eslint strict: ["error", "function"]*/

// Illegal "use strict" directive in function with non-simple parameter list.
// This is a syntax error since ES2016.
function foo(a = 1) {
    "use strict";
}

// We cannot write "use strict" directive in this function.
// So we have to wrap this function with a function with "use strict" directive.
functionfoo(a = 1){}

Примеры правильного кода для этого правила с параметром "function":

Открыть в Playground
/*eslint strict: ["error", "function"]*/

function foo() {
    "use strict";
}

(function() {
    "use strict";

    function bar() {
    }

    function baz(a = 1) {
    }
}());

var foo = (function() {
    "use strict";

    return function foo(a = 1) {
    };
}());

never

Примеры неправильного кода для этого правила с параметром "never":

Открыть в Playground
/*eslint strict: ["error", "never"]*/

"use strict";

function foo() {
}
Открыть в Playground
/*eslint strict: ["error", "never"]*/

function foo() {
    "use strict";
}

Примеры правильного кода для этого правила с параметром "never":

Открыть в Playground
/*eslint strict: ["error", "never"]*/

function foo() {
}

предыдущее значение по умолчанию (удалено)

(удалено) Значение по умолчанию для этого правила (то есть, без указанного строкового параметра) было удалено в ESLint v1.0. Параметр "function" наиболее похож на удалённый.

Этот параметр гарантирует, что все функции выполняются в строгом режиме. Директива строгого режима должна присутствовать в глобальном коде или в каждом объявлении или выражении функции верхнего уровня. Он не контролирует необоснованные директивы строгого режима в вложенных функциях, которые уже находятся в строгом режиме, или несколько директив строгого режима на одном уровне.

Примеры неправильного кода для этого правила с удалённым значением по умолчанию:

// "strict": "error"

function foo() {
}
// "strict": "error"

(function() {
    function bar() {
        "use strict";
    }
}());

Примеры правильного кода для этого правила с удалённым значением по умолчанию:

// "strict": "error"

"use strict";

function foo() {
}
// "strict": "error"

function foo() {
    "use strict";
}
// "strict": "error"

(function() {
    "use strict";
    function bar() {
        "use strict";
    }
}());

Когда не следует его использовать

В кодовой базе, содержащей как код строгого, так и не строгого режима, либо отключите это правило, либо выберите места для отключения, где это необходимо. Например, функции, ссылающиеся на arguments.callee, недействительны в строгом режиме. Полный список различий в строгом режиме доступен на MDN. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode/Transitioning_to_strict_mode#Differences_from_non-strict_to_strict.

Версия

Это правило было добавлено в ESLint v0.1.0.

Ресурсы

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

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

Spec-Zone.ru

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