Spec-Zone.ru › ESLint

strict

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

🔧 Исправляемое

Некоторые проблемы, о которых сообщает это правило, можно автоматически исправить с помощью параметра командной строки --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, поскольку в конфигурации указано любое из следующего:

  • "sourceType": "commonjs" в параметрах языка
  • "globalReturn": true в объекте ecmaFeatures параметров парсера

В противном случае параметр "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) {
    }
}());

const foo2 = (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.

Версия

Это правило появилось в 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