require or disallow strict mode directives (strict)

L’option --fix de la ligne de commande peut automatiquement corriger certains des problèmes signalés par cette règle.

Une directive de mode strict est un "use strict" littéral au début du corps d’un script ou d’une fonction. Elle active la sémantique du mode strict.

Lorsqu’une directive se produit dans la portée globale, le mode strict s’applique à l’ensemble du script :

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

Lorsqu’une directive se produit au début du corps d’une fonction, le mode strict s’applique uniquement à cette fonction, y compris toutes les fonctions contenues :

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

Dans le système de modules CommonJS, une fonction cachée enveloppe chaque module et limite la portée d’une directive de mode strict « globale ».

Dans les modules ECMAScript, qui ont toujours une sémantique de mode strict, les directives sont inutiles.

Détails de la règle

Cette règle exige ou interdit les directives de mode strict.

Cette règle rejette les directives de mode strict, quelle que soit l’option spécifiée, si la configuration ESLint spécifie l’un des éléments suivants comme options d’analyseur :

  • "sourceType": "module" c’est-à-dire que les fichiers sont des modules ECMAScript
  • "impliedStrict": true propriété de l’objet ecmaFeatures

Cette règle interdit les directives de mode strict, quelle que soit l’option spécifiée, dans les fonctions avec des listes de paramètres non simples (par exemple, des listes de paramètres avec des valeurs de paramètres par défaut), car cela constitue une erreur de syntaxe dans ECMAScript 2016 et les versions ultérieures. Voir les exemples de l’option function.

L’option --fix sur la ligne de commande n’insère pas de nouvelles déclarations "use strict", mais supprime uniquement les déclarations inutiles.

Options

Cette règle possède une option de type chaîne de caractères :

  • "safe" (par défaut) correspond à l’une des options suivantes :
    • "global" si ESLint considère qu’un fichier est un module CommonJS
    • "function" sinon
  • "global". requiert une directive en mode strict dans la portée globale (et interdit toute autre directive en mode strict)
  • "function" requiert une directive en mode strict dans chaque déclaration de fonction ou expression de haut niveau.level function declaration or expression (and disallows any other strict mode directives)
  • "never" disallows strict mode directives
  • .

safe

L’option "safe" correspond à l’option "global" si ESLint considère qu’un fichier est un module Node.js ou un module CommonJS parce que la configuration spécifie l’un des éléments suivants :

  • node ou commonjs environnements
  • "globalReturn": true propriété dans l’environnement ecmaFeatures objet des options de l’analyseur

Au contraire, l’option "safe" correspond à l’option "function". Notez que si "globalReturn": false est explicitement spécifié dans la configuration, l’option "safe" correspondra à l’option "function" quel que soit l’environnement spécifié.

global

Exemples de code incorrect pour cette règle avec l’option "global" :

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

Exemples de code correct pour cette règle avec l’option "global" :

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

function

Cette option garantit que tous les corps de fonction sont du code en mode strict, alors que le code global ne l’est pas. En particulier si une étape de construction concatène plusieurs scripts, une directive de mode strict dans le code global d’un script pourrait involontairement activer le mode strict dans un autre script qui n’était pas destiné à être du code strict.

Exemples de code incorrect pour cette règle avec l’option "function" :

/*eslint strict: */"use strict";function foo() {}
/*eslint strict: */function foo() {}(function() { function bar() { "use strict"; }}());
/*eslint strict: *//*eslint-env es6*/// 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.function foo(a = 1) {}

Exemples de code correct pour cette règle avec l’option "function" :

/*eslint strict: */function foo() { "use strict";}(function() { "use strict"; function bar() { } function baz(a = 1) { }}());var foo = (function() { "use strict"; return function foo(a = 1) { };}());

jamais

Exemples de code incorrect pour cette règle avec l’option "never" :

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

Exemples de code correct pour cette règle avec l’option "never" :

/*eslint strict: */function foo() {}

Défaut antérieur (supprimé)

L’option par défaut (c’est-à-dire sans option de chaîne spécifiée) pour cette règle a été supprimée dans ESLint v1.0. L’option "function" est la plus similaire à l’option supprimée.

Cette option garantit que toutes les fonctions sont exécutées en mode strict. Une directive de mode strict doit être présente dans le code global ou dans chaque déclaration ou expression de fonction de haut niveau. Elle ne se préoccupe pas des directives de mode strict inutiles dans les fonctions imbriquées qui sont déjà strictes, ni des directives de mode strict multiples au même niveau.

Exemples de code incorrect pour cette règle avec l’option par défaut antérieure qui a été supprimée :

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

Exemples de code correct pour cette règle avec l’option par défaut antérieure qui a été supprimée :

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

Quand ne pas l’utiliser

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *