web-dev-qa-db-fra.com

Comment puis-je écrire une règle ESLint pour "style de saut de ligne", changeant selon Windows ou Unix?

Comme nous le savons tous, les sauts de ligne (nouvelle ligne) utilisés dans Windows sont généralement des retours à la ligne (CR) suivis d'un saut de ligne (LF), c'est-à-dire (CRLF), tandis que Linux et Unix utilisent un simple saut de ligne (LF)

Maintenant, dans mon cas, mon serveur de build utilise les formats Linux et Unix, donc la règle ci-dessous fonctionne parfaitement sur le serveur de build:

linebreak-style: ["error", "unix"]

Mais je fais du développement sur Windows et je dois mettre à jour la règle sur chaque git pull/git Push comme ci-dessous,

linebreak-style: ["error", "windows"]

Alors, est-il possible d'écrire une règle générique linebreak-style pour prendre en charge les deux environnements, Linux/Unix et Windows?

Note : J'utilise ECMAScript6 [js], WebStorm [ide] pour le développement

Toutes les solutions/suggestions seraient très appréciées. Merci! 

22
Ravindra Thorat

Le fichier de configuration eslint peut être un fichier .js standard (c'est-à-dire, pas JSON, mais JS complet avec logique) qui exporte l'objet de configuration.

Cela signifie que vous pouvez modifier la configuration de la règle linebreak-style en fonction de votre environnement actuel (ou de toute autre logique JS à laquelle vous pouvez penser). 

Par exemple, pour utiliser une configuration linebreak-style différente lorsque votre environnement de noeud est 'prod':

module.exports = {
    "root": true,
    "parserOptions": {
        "sourceType": "module",
        "ecmaVersion": 6
    },
    "rules": {
        // windows linebreaks when not in production environment
        "linebreak-style": ["error", process.env.NODE_ENV === 'prod' ? "unix" : "windows"]
    }
};

Exemple d'utilisation:

$ NODE_ENV=prod node_modules/.bin/eslint src/test.js

src/test.js
  1:25  error  Expected linebreaks to be 'CRLF' but found 'LF'  linebreak-style
  2:30  error  Expected linebreaks to be 'CRLF' but found 'LF'  linebreak-style
  3:36  error  Expected linebreaks to be 'CRLF' but found 'LF'  linebreak-style
  4:26  error  Expected linebreaks to be 'CRLF' but found 'LF'  linebreak-style
  5:17  error  Expected linebreaks to be 'CRLF' but found 'LF'  linebreak-style
  6:50  error  Expected linebreaks to be 'CRLF' but found 'LF'  linebreak-style
  7:62  error  Expected linebreaks to be 'CRLF' but found 'LF'  linebreak-style
  8:21  error  Expected linebreaks to be 'CRLF' but found 'LF'  linebreak-style

✖ 8 problems (8 errors, 0 warnings)

$ NODE_ENV=dev node_modules/.bin/eslint src/test.js
$ # no errors
22
vitorbal

J'ai passé du temps à essayer de trouver comment fermer le style linkbreak et je l'ai perdu à cause de l'inversion de mon code. Je pensais que d'autres aimeraient bien avoir cela aussi. 

Dans le fichier .eslintrc, vous pouvez également définir linebreak-style sur 0, ce qui ferme la fonction linebreak :

module.exports = {
  extends: 'google',
  quotes: [2, 'single'],
  globals: {
    SwaggerEditor: false
  },
  env: {
    browser: true
  },
  rules:{
    "linebreak-style": 0   // <----------
  }
};
28
Stu

.eslintc pour Windows visualstudio code

{
  "env": {
    "node": true
  },
  "rules":{
    "linebreak-style": 0
  }
}

2
AndyC

L'emplacement du fichier de configuration requis pour modifier les règles ESLint pour le style de saut de ligne peut varier selon que vous souhaitez modifier les paramètres locaux, de projet ou globaux. Il recherche d'abord le local qui remplace celui situé plus en haut de l'arborescence. l'arbre à propager pour le monde

J'ai utilisé le style airbnb et mes paramètres globaux se trouvaient ici: node_modules/eslint-config-airbnb-base/rules/style.js:

Si vous n'êtes pas sûr de l'emplacement du fichier, vous pouvez toujours rechercher une liste de fichiers contenant du texte relatif aux paramètres. Sous Linux, pour rechercher tous les fichiers avec des paramètres de saut de ligne, accédez au dossier où ESLint a été installé et utilisez:

grep -r linebreak
0
Leigh Mathieson

Dans votre .eslintrc.js:

"rules": {
  "linebreak-style": ["error", (process.platform === "win32" ? "windows" : "unix")], // https://stackoverflow.com/q/39114446/2771889
}

Voir aussi: Comment déterminer le système d'exploitation actuel avec Node.js

0
thisismydesign