From f96c5e63eec15a995498bc2677d8abde71fa9ce4 Mon Sep 17 00:00:00 2001 From: Mat Brown Date: Tue, 2 Jul 2019 21:58:10 -0400 Subject: [PATCH] Linter reform, add Prettier MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Overall, goal is to make sure the linter is an aid, not a barrier, to contribution, by ensuring all linting rules serve one of the following purposes: 1. Catch likely coding mistakes 2. Enforce major, uncontroversial best practices 3. Enforce opinionated/arbitrary style/formatting rules, **with autofixing**. In particular, makes the following changes: - Removes overly prescriptive eslint rules - Uses presets for eslint and all plugins; overrides some rules to downgrade from `error` to `warn` but otherwise removes redundant rules from rc - Adds Prettier to development environment; configures eslint and stylelint integration with Prettier - Removes eslint and stylelint rules that conflict or are redundant with Prettier - Adds new `fixlint.prettier` and `lint.prettier` tasks that apply and verify Prettier formatting for file types that don’t have Prettier integration in their linters; these are included in the top level `fixlint` and `lint` tasks Note that this commit does _not_ actually modify source files to conform to updated formatting; that will be in a separate commit to make upgrading open branches easier. --- .eslintignore | 2 +- .eslintrc | 303 ++-------------------------------------------- .prettierignore | 1 + .prettierrc | 5 + .stylelintignore | 1 + .stylelintrc.json | 61 +--------- config/lintignore | 4 + package.json | 17 ++- yarn.lock | 43 +++++++ 9 files changed, 80 insertions(+), 357 deletions(-) mode change 100644 => 120000 .eslintignore create mode 120000 .prettierignore create mode 100644 .prettierrc create mode 120000 .stylelintignore create mode 100644 config/lintignore diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 1c074a8f89..0000000000 --- a/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -test/data/**/*.js diff --git a/.eslintignore b/.eslintignore new file mode 120000 index 0000000000..2f86255e2b --- /dev/null +++ b/.eslintignore @@ -0,0 +1 @@ +config/lintignore \ No newline at end of file diff --git a/.eslintrc b/.eslintrc index 5aa2cce3dc..6a087ae8ee 100644 --- a/.eslintrc +++ b/.eslintrc @@ -3,6 +3,14 @@ "browser": true, "es6": true }, + "extends": [ + "eslint:recommended", + "plugin:import/errors", + "plugin:import/warnings", + "plugin:react/recommended", + "plugin:promise/recommended", + "plugin:prettier/recommended" + ], "globals": { "__dirname": true }, @@ -127,85 +135,22 @@ "plugins": [ "import", "react", + "prettier", "promise", "private-props" ], "rules": { "accessor-pairs": "error", - "array-bracket-newline": [ - "warn", - { - "multiline": true - } - ], - "array-bracket-spacing": [ - "warn", - "never" - ], - "array-element-newline": [ - "warn", - "consistent" - ], - "arrow-body-style": [ - "warn", - "as-needed" - ], - "arrow-parens": [ - "warn", - "as-needed", - { - "requireForBlockBody": true - } - ], - "arrow-spacing": "warn", - "block-spacing": [ - "warn", - "always" - ], - "brace-style": [ - "warn", - "1tbs" - ], "camelcase": [ "warn", { "properties": "never" } ], - "comma-dangle": [ - "warn", - { - "arrays": "always-multiline", - "objects": "always-multiline", - "imports": "always-multiline", - "exports": "always-multiline", - "functions": "always-multiline" - } - ], - "comma-spacing": [ - "warn", - { - "before": false, - "after": true - } - ], - "complexity": "warn", - "computed-property-spacing": [ - "warn", - "never" - ], "consistent-return": "warn", "consistent-this": "warn", - "constructor-super": "error", - "curly": "warn", - "dot-location": "warn", "dot-notation": "warn", - "eol-last": "warn", "eqeqeq": "warn", - "function-paren-newline": [ - "warn", - "consistent" - ], "func-names": [ "warn", "as-needed" @@ -214,20 +159,8 @@ "warn", "declaration" ], - "generator-star-spacing": [ - "warn", - { - "before": false, - "after": true, - "anonymous": "neither" - } - ], - "getter-return": "error", - "global-require": "warn", "guard-for-in": "warn", - "import/default": "error", "import/dynamic-import-chunkname": "warn", - "import/export": "warn", "import/extensions": [ "warn", "always", @@ -238,7 +171,6 @@ } ], "import/first": "warn", - "import/named": "error", "import/newline-after-import": "warn", "import/no-absolute-path": "warn", "import/no-amd": "warn", @@ -253,11 +185,8 @@ ], "import/no-commonjs": "warn", "import/no-cycle": "error", - "import/no-duplicates": "warn", "import/no-extraneous-dependencies": "error", "import/no-mutable-exports": "warn", - "import/no-named-as-default": "warn", - "import/no-named-as-default-member": "warn", "import/no-named-default": "warn", "import/no-namespace": "warn", "import/no-nodejs-modules": [ @@ -279,7 +208,6 @@ ] } ], - "import/no-unresolved": "error", "import/no-useless-path-segments": "warn", "import/no-webpack-loader-syntax": "warn", "import/order": [ @@ -289,44 +217,6 @@ } ], "import/unambiguous": "warn", - "indent": [ - "warn", - 2, - { - "SwitchCase": 1 - } - ], - "jsx-quotes": [ - "warn", - "prefer-double" - ], - "key-spacing": [ - "warn", - { - "beforeColon": false, - "afterColon": true, - "mode": "strict" - } - ], - "keyword-spacing": [ - "warn", - { - "before": true, - "after": true - } - ], - "linebreak-style": [ - "warn", - "unix" - ], - "max-len": [ - "warn", - 79, - 2, - { - "ignoreUrls": true - } - ], "new-cap": [ "warn", { @@ -336,53 +226,30 @@ ] } ], - "new-parens": "warn", "no-alert": "warn", "no-array-constructor": "warn", "no-async-promise-executor": "warn", "no-await-in-loop": "warn", "no-caller": "warn", "no-catch-shadow": "warn", - "no-class-assign": "warn", - "no-cond-assign": "warn", "no-console": "warn", - "no-const-assign": "error", "no-constant-condition": "warn", "no-continue": "warn", - "no-control-regex": "warn", "no-debugger": "warn", - "no-delete-var": "warn", "no-div-regex": "warn", - "no-dupe-args": "error", - "no-dupe-class-members": "error", - "no-dupe-keys": "error", - "no-duplicate-case": "error", "no-else-return": "warn", "no-empty": "warn", - "no-empty-character-class": "warn", - "no-empty-pattern": "warn", "no-eq-null": "warn", "no-eval": "warn", - "no-ex-assign": "error", "no-extend-native": "warn", "no-extra-bind": "warn", "no-extra-boolean-cast": "warn", - "no-extra-parens": [ - "warn", - "functions" - ], - "no-extra-semi": "warn", "no-fallthrough": "warn", - "no-floating-decimal": "warn", - "no-func-assign": "error", - "no-global-assign": "error", "no-implicit-coercion": "warn", "no-implied-eval": "warn", "no-inline-comments": "warn", "no-inner-declarations": "warn", - "no-invalid-regexp": "error", "no-invalid-this": "error", - "no-irregular-whitespace": "warn", "no-iterator": "error", "no-labels": "error", "no-lone-blocks": "error", @@ -390,10 +257,7 @@ "no-loop-func": "warn", "no-misleading-character-class": "warn", "no-mixed-requires": "warn", - "no-mixed-spaces-and-tabs": "warn", - "no-multi-spaces": "warn", "no-multi-str": "warn", - "no-multiple-empty-lines": "warn", "no-negated-condition": "warn", "no-nested-ternary": "warn", "no-new-func": "warn", @@ -401,14 +265,10 @@ "no-new-require": "warn", "no-new-wrappers": "warn", "no-new": "warn", - "no-obj-calls": "warn", - "no-octal": "warn", "no-octal-escape": "warn", "no-param-reassign": "warn", "no-path-concat": "warn", "no-proto": "warn", - "no-redeclare": "error", - "no-regex-spaces": "warn", "no-restricted-imports": [ "error", "jquery" @@ -420,17 +280,10 @@ "no-sequences": "warn", "no-shadow": "warn", "no-shadow-restricted-names": "warn", - "no-spaced-func": "warn", - "no-sparse-arrays": "warn", "no-throw-literal": "warn", - "no-this-before-super": "error", - "no-trailing-spaces": "warn", - "no-undef": "error", "no-undef-init": "warn", - "no-unexpected-multiline": "warn", "no-unneeded-ternary": "warn", "no-unreachable": "warn", - "no-unsafe-negation": "error", "no-unused-expressions": "warn", "no-unused-vars": "warn", "no-use-before-define": [ @@ -445,55 +298,26 @@ "no-void": "warn", "no-warning-comments": "warn", "no-with": "error", - "object-curly-newline": [ - "warn", - { - "consistent": true - } - ], - "object-curly-spacing": [ - "warn", - "never" - ], "object-shorthand": [ "warn", "always" ], - "one-var": [ - "warn", - { - "uninitialized": "always", - "initialized": "never" - } - ], "operator-assignment": [ "warn", "always" ], - "operator-linebreak": [ - "warn", - "after" - ], - "padded-blocks": [ - "warn", - "never" - ], - "prefer-arrow-callback": "warn", "prefer-const": "warn", - "prefer-destructuring": "warn", "prefer-promise-reject-errors": "warn", "prefer-reflect": "warn", "prefer-rest-params": "warn", "prefer-spread": "warn", "prefer-template": "warn", + "prettier/prettier": "warn", "private-props/no-unused-or-undeclared": "warn", "private-props/no-use-outside": "warn", - "promise/no-callback-in-promise": "warn", - "promise/no-promise-in-callback": "warn", "promise/param-names": "warn", "promise/prefer-await-to-callbacks": "warn", "promise/prefer-await-to-then": "warn", - "promise/valid-params": "warn", "radix": "warn", "react/display-name": "warn", "react/forbid-foreign-prop-types": "warn", @@ -501,46 +325,12 @@ "warn", "never" ], - "react/jsx-closing-bracket-location": [ - "warn", - "tag-aligned" - ], "react/jsx-curly-brace-presence": [ "warn", "never" ], - "react/jsx-curly-spacing": [ - "warn", - "never" - ], - "react/jsx-equals-spacing": [ - "warn", - "never" - ], - "react/jsx-first-prop-new-line": [ - "warn", - "multiline" - ], - "react/jsx-handler-names": [ - "warn", - { - "eventHandlerPrefix": "_handle" - } - ], - "react/jsx-indent": [ - "warn", - 2 - ], - "react/jsx-indent-props": [ - "warn", - 2 - ], "react/jsx-key": "warn", - "react/jsx-no-comment-textnodes": "warn", - "react/jsx-no-duplicate-props": "warn", "react/jsx-no-target-blank": "warn", - "react/jsx-no-undef": "error", - "react/jsx-props-no-multi-spaces": "warn", "react/jsx-sort-props": [ "warn", { @@ -548,45 +338,24 @@ "shorthandFirst": true } ], - "react/jsx-tag-spacing": [ - "warn", - { - "closingSlash": "never", - "beforeSelfClosing": "always", - "afterOpening": "never" - } - ], "react/jsx-uses-react": "error", - "react/jsx-uses-vars": "warn", - "react/jsx-wrap-multilines": "warn", - "react/no-array-index-key": "warn", - "react/no-children-prop": "warn", - "react/no-danger-with-children": "error", "react/no-deprecated": "warn", "react/no-did-mount-set-state": "warn", "react/no-did-update-set-state": "warn", - "react/no-direct-mutation-state": "error", "react/no-multi-comp": "warn", "react/no-set-state": "warn", "react/no-string-refs": "warn", - "react/no-unescaped-entities": "warn", "react/no-unknown-property": "warn", - "react/no-unsafe": "warn", "react/no-unused-prop-types": "warn", "react/prefer-es6-class": [ "warn", "always" ], "react/prefer-stateless-function": [ - "warn", - { - "ignorePureComponents": true - } + "warn" ], "react/prop-types": "warn", - "react/react-in-jsx-scope": "error", "react/require-default-props": "warn", - "react/require-render-return": "error", "react/self-closing-comp": "warn", "react/sort-comp": "warn", "react/sort-prop-types": [ @@ -598,48 +367,6 @@ "require-atomic-updates": "warn", "require-unicode-regexp": "warn", "require-yield": "error", - "quote-props": [ - "warn", - "as-needed", - { - "keywords": true - } - ], - "quotes": [ - "warn", - "single" - ], - "semi": [ - "warn", - "always" - ], - "semi-spacing": [ - "warn", - { - "before": false, - "after": true - } - ], - "space-before-blocks": [ - "warn", - "always" - ], - "space-before-function-paren": [ - "warn", - "never" - ], - "space-in-parens": [ - "warn", - "never" - ], - "space-infix-ops": "warn", - "space-unary-ops": [ - "warn", - { - "words": true, - "nonwords": false - } - ], "spaced-comment": [ "warn", "always" @@ -648,16 +375,8 @@ "warn", "never" ], - "switch-colon-spacing": "warn", "use-isnan": "warn", - "template-curly-spacing": [ - "warn", - "never" - ], "valid-jsdoc": "warn", - "valid-typeof": "error", - "wrap-iife": "warn", - "yield-star-spacing": "warn", "yoda": [ "warn", "never" diff --git a/.prettierignore b/.prettierignore new file mode 120000 index 0000000000..2f86255e2b --- /dev/null +++ b/.prettierignore @@ -0,0 +1 @@ +config/lintignore \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000000..e4a8e67ffa --- /dev/null +++ b/.prettierrc @@ -0,0 +1,5 @@ +{ + "bracketSpacing": false, + "singleQuote": true, + "trailingComma": "all" +} diff --git a/.stylelintignore b/.stylelintignore new file mode 120000 index 0000000000..2f86255e2b --- /dev/null +++ b/.stylelintignore @@ -0,0 +1 @@ +config/lintignore \ No newline at end of file diff --git a/.stylelintrc.json b/.stylelintrc.json index 24c190e10b..1c778a2eec 100644 --- a/.stylelintrc.json +++ b/.stylelintrc.json @@ -1,26 +1,9 @@ { + "extends": ["stylelint-prettier/recommended"], "plugins": ["stylelint-selector-bem-pattern"], "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-no-empty": true, - "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", "color-no-invalid-hex": true, "comment-empty-line-before": ["always", { @@ -46,14 +29,7 @@ }], "declaration-block-no-redundant-longhand-properties": true, "declaration-block-no-shorthand-property-overrides": true, - "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", @@ -66,67 +42,32 @@ }], "font-family-no-duplicate-names": true, "function-calc-no-unspaced-operator": true, - "function-comma-newline-after": "always-multi-line", - "function-comma-space-after": "always-single-line", - "function-comma-space-before": "never", "function-linear-gradient-no-nonstandard-direction": true, - "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": 2, "keyframe-declaration-no-important": true, "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-name-no-unknown": true, "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-empty-source": true, - "no-eol-whitespace": true, - "no-extra-semicolons": true, "no-invalid-double-slash-comments": true, - "no-missing-end-of-source-newline": true, - "number-leading-zero": "always", - "number-no-trailing-zeros": true, - "property-case": "lower", "property-no-unknown": true, - "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-no-unknown": true, "selector-pseudo-class-parentheses-space-inside": "never", - "selector-pseudo-element-case": "lower", "selector-pseudo-element-colon-notation": "double", "selector-pseudo-element-no-unknown": true, "selector-type-case": "lower", "selector-type-no-unknown": true, "shorthand-property-no-redundant-values": true, "string-no-newline": true, - "unit-case": "lower", "unit-no-unknown": true, - "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, "plugin/selector-bem-pattern": { "preset": "bem", diff --git a/config/lintignore b/config/lintignore new file mode 100644 index 0000000000..765f752c0a --- /dev/null +++ b/config/lintignore @@ -0,0 +1,4 @@ +/node_modules +/bower_components +/test/data +/templates diff --git a/package.json b/package.json index 4a357afabb..0f81ddf766 100644 --- a/package.json +++ b/package.json @@ -276,10 +276,14 @@ "check-duplicate-dependencies": "script/check-duplicate-dependencies", "deduplicate": "yarn-deduplicate --strategy fewer", "dev": "yarn install --frozen-lockfile && yarn start", - "fixlint": "eslint --ext .js,.jsx --fix src test *.js", - "lint": "yarn run lint-js && yarn run lint-css", - "lint-css": "stylelint src/**/*.css", - "lint-js": "eslint --max-warnings=0 --report-unused-disable-directives --ext .js,.jsx -- src test *.js", + "fixlint": "yarn run fixlint.eslint && yarn run fixlint.stylelint && yarn run fixlint.prettier", + "fixlint.eslint": "eslint --ext .js,.jsx --fix .", + "fixlint.prettier": "prettier --write '**/*.{json,html,md,yml}'", + "fixlint.stylelint": "stylelint --fix src/**/*.css", + "lint": "yarn run lint.eslint && yarn run lint.stylelint && yarn run lint.prettier", + "lint.eslint": "eslint --max-warnings=0 --report-unused-disable-directives --ext .js,.jsx -- .", + "lint.prettier": "prettier --check '**/*.{json,html,md,yml}'", + "lint.stylelint": "stylelint src/**/*.css", "preview": "rm -rvf dist/* && NODE_ENV=production gulp build && static -a 0.0.0.0 -p 3000 dist", "test-jest": "jest", "test-karma": "karma start --single-run --no-auto-watch", @@ -311,10 +315,12 @@ "cssnano": "^3.10.0", "doctoc": "^1.2.0", "eslint": "^5.6.0", + "eslint-config-prettier": "^5.0.0", "eslint-import-resolver-webpack": "^0.10.1", "eslint-loader": "^2.1.1", "eslint-plugin-import": "^2.17.2", "eslint-plugin-jest": "^22.3.0", + "eslint-plugin-prettier": "^3.1.0", "eslint-plugin-private-props": "^0.3.0", "eslint-plugin-promise": "^4.0.1", "eslint-plugin-react": "^7.12.4", @@ -347,6 +353,7 @@ "npm-check": "^5.9.0", "null-loader": "^0.1.1", "postcss-preset-env": "^5.3.0", + "prettier": "^1.18.2", "raw-loader": "^0.5.1", "redux-saga-test-plan": "^4.0.0-beta.2", "rosie": "^2.0.1", @@ -356,6 +363,8 @@ "source-map-loader": "^0.2.2", "stats-webpack-plugin": "^0.6.2", "string-replace-loader": "^2.1.1", + "stylelint-config-prettier": "^5.2.0", + "stylelint-prettier": "^1.1.1", "stylelint-selector-bem-pattern": "^2.0.0", "substitute-loader": "^1.0.0", "svg-react-loader": "^0.4.4", diff --git a/yarn.lock b/yarn.lock index a8778c556c..21252ccfdd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5205,6 +5205,13 @@ escodegen@~1.3.2: optionalDependencies: source-map "~0.1.33" +eslint-config-prettier@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-5.0.0.tgz#f7a94b2b8ae7cbf25842c36fa96c6d32cd0a697c" + integrity sha512-c17Aqiz5e8LEqoc/QPmYnaxQFAHTx2KlCZBPxXXjEMmNchOLnV/7j0HoPZuC+rL/tDC9bazUYOKJW9bOhftI/w== + dependencies: + get-stdin "^6.0.0" + eslint-import-resolver-node@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" @@ -5270,6 +5277,13 @@ eslint-plugin-jest@^22.3.0: resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-22.4.1.tgz#a5fd6f7a2a41388d16f527073b778013c5189a9c" integrity sha512-gcLfn6P2PrFAVx3AobaOzlIEevpAEf9chTpFZz7bYfc7pz8XRv7vuKTIE4hxPKZSha6XWKKplDQ0x9Pq8xX2mg== +eslint-plugin-prettier@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.0.tgz#8695188f95daa93b0dc54b249347ca3b79c4686d" + integrity sha512-XWX2yVuwVNLOUhQijAkXz+rMPPoCr7WFiAl8ig6I7Xn+pPVhDhzg4DxHpmbeb0iqjO9UronEA3Tb09ChnFVHHA== + dependencies: + prettier-linter-helpers "^1.0.0" + eslint-plugin-private-props@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/eslint-plugin-private-props/-/eslint-plugin-private-props-0.3.0.tgz#aeff3521ec9aad93b4f0e835aa8beff74c24fc70" @@ -5771,6 +5785,11 @@ fast-deep-equal@^2.0.1: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= +fast-diff@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + fast-glob@^2.0.2: version "2.2.6" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.6.tgz#a5d5b697ec8deda468d85a74035290a025a95295" @@ -11678,6 +11697,18 @@ preserve@^0.2.0: resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks= +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier@^1.18.2: + version "1.18.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea" + integrity sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw== + pretty-error@^2.0.2: version "2.1.1" resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" @@ -14056,6 +14087,18 @@ style-to-object@^0.2.1: dependencies: css "2.2.4" +stylelint-config-prettier@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/stylelint-config-prettier/-/stylelint-config-prettier-5.2.0.tgz#b73d56a380662abd434ed745ca84db15e1a5aac6" + integrity sha512-ehrG/mBi9CTKkOBi0wlStX58+g9eGJhJW/jFEcCm/dUVHg9I2+T90k4tlyratvhlz876dyrTlor7gvDEaohVnA== + +stylelint-prettier@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stylelint-prettier/-/stylelint-prettier-1.1.1.tgz#213873c1d0097cd0985dafc766197dcd955e21c5" + integrity sha512-H7Zjb+9ufF0dTjjJ4qSbN/yeAV14BNUK5rl267lvYfmmW4Swlz4a2rfwqqgiN/YlntHXXzM6Nh/UXHFIvLI8zA== + dependencies: + prettier-linter-helpers "^1.0.0" + stylelint-selector-bem-pattern@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/stylelint-selector-bem-pattern/-/stylelint-selector-bem-pattern-2.0.0.tgz#9a6130c9c90963b30e925c917079d6c8fed73f45"