Ludovic Laly, mon blog

12:26

eslint, stylelint, csscomb : mes fichiers

Bien que ces fichiers soient versionnés dans chacun de mes dépôts, avec souvent quelques variantes.
Ci dessous la base commune à tous mes fichiers de configuration.
Je les posent ici pour archivage et à titre d'information, car ils me valent souvent le qualificatif de "nazi du lintage" sur le plateau quand j'essaye de proposer ces fichiers.
J'aime m'imposer des règles assez strictes (ou rigolote comme la syntaxe Yoda) dans mes projets perso, pour les projets en équipe c'est souvent la fête à la saucisse avec des fichiers beaucoup plus permissif.

.eslintrc

{
    "extends": "eslint:recommended",
    "rules": {
        "quotes": "single",
        "no-extra-semi": 1,
        "no-inner-declarations": 2,
        "curly": 2,
        "no-eval": 2,
        "no-extend-native": 2,
        "no-new-wrappers": 2,
        "no-with": 2,
        "eqeqeq": [2, "always"],
        "yoda": [2, "always"],
        "no-undef": 2,
        "no-var": 1,
        "prefer-const": 1,
        "array-bracket-spacing": [2, "never"],
        "no-array-constructor": 2,
        "no-mixed-spaces-and-tabs": 2,
        "no-new-object": 2,
        "object-curly-spacing": [2, "always"],
        "keyword-spacing": 2,
        "key-spacing": 2,
        "semi": 2,
        "no-console": 0,
        "max-depth": 2,
    }
}

nb: ne pas oublier d'ajouter les sections propres au projet comme env et globals par exemple !

.stylelintrc

{
    "rules": {
        "at-rule-empty-line-before": ["always", {
            except: [
                "blockless-after-same-name-blockless",
                "first-nested",
            ],
            ignore: ["after-comment"],
        }],
        "at-rule-name-case": "lower",
        "at-rule-name-space-after": "always-single-line",
        "at-rule-semicolon-newline-after": "always",
        "block-closing-brace-empty-line-before": "never",
        "block-closing-brace-newline-after": "always",
        "block-closing-brace-newline-before": "always-multi-line",
        "block-closing-brace-space-before": "always-single-line",
        "block-opening-brace-newline-after": "always-multi-line",
        "block-opening-brace-space-after": "always-single-line",
        "block-opening-brace-space-before": "always",
        "color-hex-case": "lower",
        "color-hex-length": "short",
        "comment-empty-line-before": ["always", {
            except: ["first-nested"],
            ignore: ["stylelint-commands"],
        }],
        "comment-whitespace-inside": "always",
        "custom-property-empty-line-before": ["always", {
            except: [
                "after-custom-property",
                "first-nested",
            ],
            ignore: [
                "after-comment",
                "inside-single-line-block",
            ],
        }],
        "declaration-bang-space-after": "never",
        "declaration-bang-space-before": "always",
        "declaration-block-semicolon-newline-after": "always-multi-line",
        "declaration-block-semicolon-space-after": "always-single-line",
        "declaration-block-semicolon-space-before": "never",
        "declaration-block-single-line-max-declarations": 1,
        "declaration-block-trailing-semicolon": "always",
        "declaration-colon-newline-after": "always-multi-line",
        "declaration-colon-space-after": "always-single-line",
        "declaration-colon-space-before": "never",
        "declaration-empty-line-before": ["always", {
            except: [
                "after-declaration",
                "first-nested",
            ],
            ignore: [
                "after-comment",
                "inside-single-line-block",
            ],
        }],
        "function-comma-newline-after": "always-multi-line",
        "function-comma-space-after": "always-single-line",
        "function-comma-space-before": "never",
        "function-max-empty-lines": 0,
        "function-name-case": "lower",
        "function-parentheses-newline-inside": "always-multi-line",
        "function-parentheses-space-inside": "never-single-line",
        "function-whitespace-after": "always",
        "indentation": "tab",
        "length-zero-no-unit": true,
        "max-empty-lines": 1,
        "media-feature-colon-space-after": "always",
        "media-feature-colon-space-before": "never",
        "media-feature-name-case": "lower",
        "media-feature-parentheses-space-inside": "never",
        "media-feature-range-operator-space-after": "always",
        "media-feature-range-operator-space-before": "always",
        "media-query-list-comma-newline-after": "always-multi-line",
        "media-query-list-comma-space-after": "always-single-line",
        "media-query-list-comma-space-before": "never",
        "no-eol-whitespace": true,
        "no-missing-end-of-source-newline": true,
        "number-leading-zero": "always",
        "number-no-trailing-zeros": true,
        "property-case": "lower",
        "rule-empty-line-before": ["always-multi-line", {
            except: ["first-nested"],
            ignore: ["after-comment"],
        }],
        "selector-attribute-brackets-space-inside": "never",
        "selector-attribute-operator-space-after": "never",
        "selector-attribute-operator-space-before": "never",
        "selector-combinator-space-after": "always",
        "selector-combinator-space-before": "always",
        "selector-descendant-combinator-no-non-space": true,
        "selector-list-comma-newline-after": "always",
        "selector-list-comma-space-before": "never",
        "selector-max-empty-lines": 0,
        "selector-pseudo-class-case": "lower",
        "selector-pseudo-class-parentheses-space-inside": "never",
        "selector-pseudo-element-case": "lower",
        "selector-pseudo-element-colon-notation": "double",
        "selector-type-case": "lower",
        "unit-case": "lower",
        "value-list-comma-newline-after": "always-multi-line",
        "value-list-comma-space-after": "always-single-line",
        "value-list-comma-space-before": "never",
        "value-list-max-empty-lines": 0,
    }
}

.csscomb.json

{
    "remove-empty-rulesets": true,
    "always-semicolon": true,
    "color-case": "lower",
    "block-indent": "\t",
    "color-shorthand": false,
    "element-case": "lower",
    "eof-newline": true,
    "leading-zero": false,
    "quotes": "single",
    "space-before-colon": "",
    "space-after-colon": " ",
    "space-before-combinator": " ",
    "space-after-combinator": " ",
    "space-between-declarations": "\n",
    "space-before-opening-brace": " ",
    "space-after-opening-brace": "\n",
    "space-after-selector-delimiter": "\n",
    "space-before-selector-delimiter": "",
    "space-before-closing-brace": "\n",
    "strip-spaces": true,
    "unitless-zero": true
}