@bpa-dev/eslint-config 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -43,13 +43,13 @@ export { default } from '@bpa-dev/eslint-config/react'
43
43
  import bpaConfig from '@bpa-dev/eslint-config'
44
44
 
45
45
  export default [
46
- ...bpaConfig,
47
- {
48
- rules: {
49
- // Ваши дополнительные правила
50
- 'no-console': 'off'
51
- }
52
- }
46
+ ...bpaConfig,
47
+ {
48
+ rules: {
49
+ // Ваши дополнительные правила
50
+ 'no-console': 'off'
51
+ }
52
+ }
53
53
  ]
54
54
  ```
55
55
 
@@ -67,8 +67,8 @@ export { default } from '@bpa-dev/eslint-config/prettier'
67
67
  import bpaPrettierConfig from '@bpa-dev/eslint-config/prettier'
68
68
 
69
69
  export default {
70
- ...bpaPrettierConfig,
71
- printWidth: 120 // переопределение настроек
70
+ ...bpaPrettierConfig,
71
+ printWidth: 120 // переопределение настроек
72
72
  }
73
73
  ```
74
74
 
@@ -87,11 +87,11 @@ import bpaStylelintConfig from '@bpa-dev/eslint-config/stylelint'
87
87
 
88
88
  /** @type {import('stylelint').Config} */
89
89
  export default {
90
- ...bpaStylelintConfig,
91
- rules: {
92
- ...bpaStylelintConfig.rules,
93
- 'media-feature-range-notation': 'context'
94
- }
90
+ ...bpaStylelintConfig,
91
+ rules: {
92
+ ...bpaStylelintConfig.rules,
93
+ 'media-feature-range-notation': 'context'
94
+ }
95
95
  }
96
96
  ```
97
97
 
@@ -101,12 +101,12 @@ export default {
101
101
 
102
102
  ```json
103
103
  {
104
- "scripts": {
105
- "lint": "eslint .",
106
- "lint:fix": "eslint . --fix",
107
- "format": "prettier --write \"**/*.{js,jsx,ts,tsx,json,css,md}\"",
108
- "format:check": "prettier --check \"**/*.{js,jsx,ts,tsx,json,css,md}\""
109
- }
104
+ "scripts": {
105
+ "lint": "eslint .",
106
+ "lint:fix": "eslint . --fix",
107
+ "format": "prettier --write \"**/*.{js,jsx,ts,tsx,json,css,md}\"",
108
+ "format:check": "prettier --check \"**/*.{js,jsx,ts,tsx,json,css,md}\""
109
+ }
110
110
  }
111
111
  ```
112
112
 
@@ -122,12 +122,12 @@ export default {
122
122
 
123
123
  ```json
124
124
  {
125
- "editor.formatOnSave": true,
126
- "editor.defaultFormatter": "esbenp.prettier-vscode",
127
- "editor.codeActionsOnSave": {
128
- "source.fixAll.eslint": "explicit"
129
- },
130
- "eslint.validate": ["javascript", "javascriptreact", "typescript", "typescriptreact"],
131
- "stylelint.validate": ["css"]
125
+ "editor.formatOnSave": true,
126
+ "editor.defaultFormatter": "esbenp.prettier-vscode",
127
+ "editor.codeActionsOnSave": {
128
+ "source.fixAll.eslint": "explicit"
129
+ },
130
+ "eslint.validate": ["javascript", "javascriptreact", "typescript", "typescriptreact"],
131
+ "stylelint.validate": ["css"]
132
132
  }
133
133
  ```
package/index.js CHANGED
@@ -16,91 +16,97 @@ import { defineConfig } from 'eslint/config'
16
16
  import { configs as tseslintPlugin } from 'typescript-eslint'
17
17
 
18
18
  export default defineConfig([
19
- {
20
- ignores: [
21
- '**/node_modules/**',
22
- '**/dist/**',
23
- '**/build/**',
24
- '**/.next/**',
25
- '**/out/**',
26
- '**/coverage/**',
27
- '**/.turbo/**',
28
- '**/.cache/**',
29
- '**/*.min.js'
30
- ]
31
- },
32
- { files: ['**/*.{js,mjs,cjs,jsx,ts,tsx,mts,cts}'] },
33
- js.configs.recommended,
34
- tseslintPlugin.all,
35
- perfectionistPlugin.configs['recommended-natural'],
36
- importPlugin.flatConfigs.recommended,
37
- importPlugin.flatConfigs.typescript,
38
- prettierPlugin,
39
- unicornPlugin.configs.all,
40
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
41
- securityPlugin.configs.recommended,
42
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
43
- promisePlugin.configs['flat/recommended'],
44
- {
45
- rules: {
46
- '@typescript-eslint/consistent-return': 'off',
47
- '@typescript-eslint/explicit-function-return-type': 'off',
48
- '@typescript-eslint/explicit-module-boundary-types': 'off',
49
- '@typescript-eslint/naming-convention': 'off',
50
- '@typescript-eslint/no-magic-numbers': 'off',
51
- '@typescript-eslint/no-unsafe-assignment': 'warn',
52
- '@typescript-eslint/no-unsafe-member-access': 'warn',
53
- '@typescript-eslint/no-unsafe-type-assertion': 'warn',
54
- '@typescript-eslint/prefer-readonly-parameter-types': 'off',
55
- '@typescript-eslint/prefer-reduce-type-parameter': 'warn',
56
- '@typescript-eslint/restrict-template-expressions': ['error', { allowNumber: true }],
57
- '@typescript-eslint/strict-boolean-expressions': 'warn',
58
- 'import/extensions': [
59
- 'error',
60
- 'ignorePackages',
61
- {
62
- ts: 'never',
63
- tsx: 'never'
64
- }
65
- ],
66
- 'import/no-duplicates': 'error',
67
- 'import/no-named-as-default': 'error',
68
- 'import/no-unresolved': 'error',
69
- 'no-console': 'error',
70
- 'perfectionist/sort-classes': 'off',
71
- 'perfectionist/sort-imports': [
72
- 'error',
73
- {
74
- groups: ['builtin', 'external', 'internal', ['parent', 'sibling'], 'index', 'side-effect', 'type'],
75
- newlinesBetween: 1,
76
- order: 'asc',
77
- type: 'natural'
78
- }
79
- ],
80
- 'unicorn/filename-case': 'off',
81
- 'unicorn/no-array-callback-reference': 'off',
82
- 'unicorn/no-keyword-prefix': 'off',
83
- 'unicorn/no-nested-ternary': 'off',
84
- 'unicorn/no-null': 'off',
85
- 'unicorn/no-useless-undefined': 'off',
86
- 'unicorn/prefer-at': ['error', { checkAllIndexAccess: true }],
87
- 'unicorn/prefer-ternary': 'off',
88
- 'unicorn/prevent-abbreviations': 'off'
89
- },
90
- settings: {
91
- 'import/resolver': {
92
- typescript: {
93
- alwaysTryTypes: true,
94
- project: './tsconfig.json'
95
- }
96
- }
97
- }
98
- },
99
- {
100
- languageOptions: {
101
- parserOptions: {
102
- projectService: true
103
- }
104
- }
105
- }
19
+ {
20
+ ignores: [
21
+ '**/node_modules/**',
22
+ '**/dist/**',
23
+ '**/build/**',
24
+ '**/.next/**',
25
+ '**/out/**',
26
+ '**/coverage/**',
27
+ '**/.turbo/**',
28
+ '**/.cache/**',
29
+ '**/*.min.js'
30
+ ]
31
+ },
32
+ { files: ['**/*.{js,mjs,cjs,jsx,ts,tsx,mts,cts}'] },
33
+ js.configs.recommended,
34
+ tseslintPlugin.all,
35
+ perfectionistPlugin.configs['recommended-natural'],
36
+ importPlugin.flatConfigs.recommended,
37
+ importPlugin.flatConfigs.typescript,
38
+ prettierPlugin,
39
+ unicornPlugin.configs.all,
40
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
41
+ securityPlugin.configs.recommended,
42
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
43
+ promisePlugin.configs['flat/recommended'],
44
+ {
45
+ rules: {
46
+ '@typescript-eslint/consistent-return': 'off',
47
+ '@typescript-eslint/explicit-function-return-type': 'off',
48
+ '@typescript-eslint/explicit-module-boundary-types': 'off',
49
+ '@typescript-eslint/naming-convention': 'off',
50
+ '@typescript-eslint/no-magic-numbers': 'off',
51
+ '@typescript-eslint/no-unsafe-assignment': 'warn',
52
+ '@typescript-eslint/no-unsafe-member-access': 'warn',
53
+ '@typescript-eslint/no-unsafe-type-assertion': 'warn',
54
+ '@typescript-eslint/prefer-readonly-parameter-types': 'off',
55
+ '@typescript-eslint/prefer-reduce-type-parameter': 'warn',
56
+ '@typescript-eslint/restrict-template-expressions': ['error', { allowNumber: true }],
57
+ '@typescript-eslint/strict-boolean-expressions': 'warn',
58
+ 'import/extensions': [
59
+ 'error',
60
+ 'ignorePackages',
61
+ {
62
+ ts: 'never',
63
+ tsx: 'never'
64
+ }
65
+ ],
66
+ 'import/no-duplicates': 'error',
67
+ 'import/no-named-as-default': 'error',
68
+ 'import/no-unresolved': 'error',
69
+ 'no-console': 'error',
70
+ 'perfectionist/sort-classes': 'off',
71
+ 'perfectionist/sort-imports': [
72
+ 'error',
73
+ {
74
+ groups: ['builtin', 'external', 'internal', ['parent', 'sibling'], 'index', 'side-effect', 'type'],
75
+ newlinesBetween: 1,
76
+ order: 'asc',
77
+ type: 'natural'
78
+ }
79
+ ],
80
+ 'unicorn/filename-case': [
81
+ 'error',
82
+ {
83
+ case: 'kebabCase',
84
+ ignore: [/\.config\.(js|ts|mjs|cjs)$/i]
85
+ }
86
+ ],
87
+ 'unicorn/no-array-callback-reference': 'off',
88
+ 'unicorn/no-keyword-prefix': 'off',
89
+ 'unicorn/no-nested-ternary': 'off',
90
+ 'unicorn/no-null': 'off',
91
+ 'unicorn/no-useless-undefined': 'off',
92
+ 'unicorn/prefer-at': ['error', { checkAllIndexAccess: true }],
93
+ 'unicorn/prefer-ternary': 'off',
94
+ 'unicorn/prevent-abbreviations': 'off'
95
+ },
96
+ settings: {
97
+ 'import/resolver': {
98
+ typescript: {
99
+ alwaysTryTypes: true,
100
+ project: './tsconfig.json'
101
+ }
102
+ }
103
+ }
104
+ },
105
+ {
106
+ languageOptions: {
107
+ parserOptions: {
108
+ projectService: true
109
+ }
110
+ }
111
+ }
106
112
  ])
package/package.json CHANGED
@@ -1,78 +1,73 @@
1
1
  {
2
- "name": "@bpa-dev/eslint-config",
3
- "version": "1.3.0",
4
- "description": "Набор конфигураций для ESLint, Prettier и Stylelint для проектов BPA",
5
- "main": "index.js",
6
- "type": "module",
7
- "exports": {
8
- ".": "./index.js",
9
- "./prettier": "./prettier.config.js",
10
- "./stylelint": "./stylelint.config.js",
11
- "./react": "./react.js"
12
- },
13
- "files": [
14
- "index.js",
15
- "react.js",
16
- "prettier.config.js",
17
- "stylelint.config.js"
18
- ],
19
- "keywords": [
20
- "eslint",
21
- "eslintconfig",
22
- "prettier",
23
- "config",
24
- "javascript",
25
- "typescript",
26
- "react",
27
- "stylelint"
28
- ],
29
- "author": "BPA",
30
- "license": "MIT",
31
- "scripts": {
32
- "eslint:fix": "eslint . --fix -c index.js",
33
- "prettier:write": "prettier . --write",
34
- "format": "npm run eslint:fix && npm run prettier:write"
35
- },
36
- "peerDependencies": {
37
- "eslint": "^9.0.0",
38
- "prettier": "^3.0.0",
39
- "stylelint": "^17.0.0",
40
- "typescript": "^5.0.0"
41
- },
42
- "dependencies": {
43
- "@eslint/js": "^9.39.2",
44
- "@stylistic/stylelint-plugin": "^5.0.1",
45
- "@typescript-eslint/eslint-plugin": "^8.53.1",
46
- "@typescript-eslint/parser": "^8.53.1",
47
- "eslint-config-prettier": "^10.1.8",
48
- "eslint-import-resolver-typescript": "^4.4.4",
49
- "eslint-plugin-import": "^2.32.0",
50
- "eslint-plugin-jsx-a11y": "^6.10.2",
51
- "eslint-plugin-perfectionist": "^5.4.0",
52
- "eslint-plugin-prettier": "^5.5.5",
53
- "eslint-plugin-promise": "^7.2.1",
54
- "eslint-plugin-react": "^7.37.5",
55
- "eslint-plugin-react-hooks": "^7.0.1",
56
- "eslint-plugin-security": "^3.0.1",
57
- "eslint-plugin-unicorn": "^62.0.0",
58
- "stylelint-config-recess-order": "^7.6.0",
59
- "stylelint-config-recommended": "^18.0.0",
60
- "stylelint-high-performance-animation": "^2.0.0",
61
- "stylelint-order": "^7.0.1",
62
- "stylelint-plugin-logical-css": "^1.2.3",
63
- "stylelint-plugin-use-baseline": "^1.2.1",
64
- "stylelint-use-nesting": "^6.0.1",
65
- "typescript-eslint": "^8.54.0"
66
- },
67
- "devDependencies": {
68
- "eslint": "^9.39.2",
69
- "prettier": "^3.8.1",
70
- "stylelint": "^17.1.0",
71
- "typescript": "^5.9.3"
72
- },
73
- "overrides": {
74
- "stylelint-plugin-logical-css": {
75
- "stylelint": "^17.0.0"
76
- }
77
- }
2
+ "name": "@bpa-dev/eslint-config",
3
+ "version": "1.4.0",
4
+ "description": "Набор конфигураций для ESLint, Prettier и Stylelint для проектов BPA",
5
+ "main": "index.js",
6
+ "type": "module",
7
+ "exports": {
8
+ ".": "./index.js",
9
+ "./prettier": "./prettier.config.js",
10
+ "./stylelint": "./stylelint.config.js",
11
+ "./react": "./react.js"
12
+ },
13
+ "files": [
14
+ "index.js",
15
+ "react.js",
16
+ "prettier.config.js",
17
+ "stylelint.config.js"
18
+ ],
19
+ "keywords": [
20
+ "eslint",
21
+ "eslintconfig",
22
+ "prettier",
23
+ "config",
24
+ "javascript",
25
+ "typescript",
26
+ "react",
27
+ "stylelint"
28
+ ],
29
+ "author": "BPA",
30
+ "license": "MIT",
31
+ "scripts": {
32
+ "eslint:fix": "eslint . --fix -c index.js",
33
+ "prettier:write": "prettier . --write",
34
+ "format": "npm run eslint:fix && npm run prettier:write"
35
+ },
36
+ "peerDependencies": {
37
+ "eslint": "^9.0.0",
38
+ "prettier": "^3.0.0",
39
+ "stylelint": "^17.0.0",
40
+ "typescript": "^5.0.0"
41
+ },
42
+ "dependencies": {
43
+ "@eslint/js": "^9.39.2",
44
+ "@stylistic/stylelint-plugin": "^5.0.1",
45
+ "@typescript-eslint/eslint-plugin": "^8.53.1",
46
+ "@typescript-eslint/parser": "^8.53.1",
47
+ "eslint-config-prettier": "^10.1.8",
48
+ "eslint-import-resolver-typescript": "^4.4.4",
49
+ "eslint-plugin-import": "^2.32.0",
50
+ "eslint-plugin-jsx-a11y": "^6.10.2",
51
+ "eslint-plugin-perfectionist": "^5.4.0",
52
+ "eslint-plugin-prettier": "^5.5.5",
53
+ "eslint-plugin-promise": "^7.2.1",
54
+ "eslint-plugin-react": "^7.37.5",
55
+ "eslint-plugin-react-hooks": "^7.0.1",
56
+ "eslint-plugin-security": "^3.0.1",
57
+ "eslint-plugin-unicorn": "^62.0.0",
58
+ "stylelint-config-recess-order": "^7.6.0",
59
+ "stylelint-config-recommended": "^18.0.0",
60
+ "stylelint-high-performance-animation": "^2.0.0",
61
+ "stylelint-order": "^7.0.1",
62
+ "stylelint-plugin-logical-css": "^1.3.0",
63
+ "stylelint-plugin-use-baseline": "^1.2.1",
64
+ "stylelint-use-nesting": "^6.0.1",
65
+ "typescript-eslint": "^8.54.0"
66
+ },
67
+ "devDependencies": {
68
+ "eslint": "^9.39.2",
69
+ "prettier": "^3.8.1",
70
+ "stylelint": "^17.1.0",
71
+ "typescript": "^5.9.3"
72
+ }
78
73
  }
@@ -4,15 +4,15 @@
4
4
  * @type {import("prettier").Config}
5
5
  */
6
6
  const config = {
7
- arrowParens: 'always',
8
- bracketSpacing: true,
9
- endOfLine: 'auto',
10
- jsxSingleQuote: true,
11
- printWidth: 120,
12
- semi: false,
13
- singleQuote: true,
14
- tabWidth: 2,
15
- trailingComma: 'none'
7
+ arrowParens: 'avoid',
8
+ bracketSpacing: true,
9
+ endOfLine: 'lf',
10
+ jsxSingleQuote: true,
11
+ printWidth: 120,
12
+ semi: false,
13
+ singleQuote: true,
14
+ trailingComma: 'none',
15
+ useTabs: true
16
16
  }
17
17
 
18
18
  export default config
package/react.js CHANGED
@@ -10,50 +10,50 @@ import { defineConfig } from 'eslint/config'
10
10
  import baseConfig from './index.js'
11
11
 
12
12
  export default defineConfig([
13
- ...baseConfig,
14
- {
15
- files: ['**/*.{jsx,tsx}'],
16
- plugins: {
17
- 'jsx-a11y': a11yPlugin,
18
- react: reactPlugin,
19
- 'react-hooks': reactHooksPlugin
20
- },
21
- rules: {
22
- // React основные правила
23
- ...reactPlugin.configs.recommended.rules,
24
- 'react/jsx-boolean-value': ['error', 'never'],
25
- 'react/jsx-curly-brace-presence': ['error', { children: 'never', props: 'never' }],
26
- 'react/jsx-fragments': ['error', 'syntax'],
27
- 'react/jsx-key': ['error', { checkFragmentShorthand: true }],
28
- 'react/jsx-no-target-blank': 'error',
29
- 'react/jsx-pascal-case': 'error',
30
- 'react/no-array-index-key': 'warn',
31
- 'react/no-unstable-nested-components': 'error',
32
- 'react/prop-types': 'off',
33
- 'react/react-in-jsx-scope': 'off',
34
- 'react/self-closing-comp': 'error',
13
+ ...baseConfig,
14
+ {
15
+ files: ['**/*.{jsx,tsx}'],
16
+ plugins: {
17
+ 'jsx-a11y': a11yPlugin,
18
+ react: reactPlugin,
19
+ 'react-hooks': reactHooksPlugin
20
+ },
21
+ rules: {
22
+ // React основные правила
23
+ ...reactPlugin.configs.recommended.rules,
24
+ 'react/jsx-boolean-value': ['error', 'never'],
25
+ 'react/jsx-curly-brace-presence': ['error', { children: 'never', props: 'never' }],
26
+ 'react/jsx-fragments': ['error', 'syntax'],
27
+ 'react/jsx-key': ['error', { checkFragmentShorthand: true }],
28
+ 'react/jsx-no-target-blank': 'error',
29
+ 'react/jsx-pascal-case': 'error',
30
+ 'react/no-array-index-key': 'warn',
31
+ 'react/no-unstable-nested-components': 'error',
32
+ 'react/prop-types': 'off',
33
+ 'react/react-in-jsx-scope': 'off',
34
+ 'react/self-closing-comp': 'error',
35
35
 
36
- // React Hooks правила
37
- ...reactHooksPlugin.configs.recommended.rules,
38
- 'react-hooks/exhaustive-deps': 'error',
39
- 'react-hooks/rules-of-hooks': 'error',
36
+ // React Hooks правила
37
+ ...reactHooksPlugin.configs.recommended.rules,
38
+ 'react-hooks/exhaustive-deps': 'error',
39
+ 'react-hooks/rules-of-hooks': 'error',
40
40
 
41
- // Доступность
42
- ...a11yPlugin.configs.recommended.rules,
43
- 'jsx-a11y/anchor-is-valid': [
44
- 'error',
45
- {
46
- components: ['Link'],
47
- specialLink: ['to']
48
- }
49
- ],
50
- 'jsx-a11y/click-events-have-key-events': 'warn',
51
- 'jsx-a11y/no-static-element-interactions': 'warn'
52
- },
53
- settings: {
54
- react: {
55
- version: 'detect'
56
- }
57
- }
58
- }
41
+ // Доступность
42
+ ...a11yPlugin.configs.recommended.rules,
43
+ 'jsx-a11y/anchor-is-valid': [
44
+ 'error',
45
+ {
46
+ components: ['Link'],
47
+ specialLink: ['to']
48
+ }
49
+ ],
50
+ 'jsx-a11y/click-events-have-key-events': 'warn',
51
+ 'jsx-a11y/no-static-element-interactions': 'warn'
52
+ },
53
+ settings: {
54
+ react: {
55
+ version: 'detect'
56
+ }
57
+ }
58
+ }
59
59
  ])
@@ -1,33 +1,33 @@
1
1
  /** @type {import('stylelint').Config} */
2
2
  export default {
3
- extends: ['stylelint-config-recommended', 'stylelint-config-recess-order'],
4
- ignoreFiles: ['dist/**'],
5
- plugins: [
6
- '@stylistic/stylelint-plugin',
7
- 'stylelint-high-performance-animation',
8
- 'stylelint-use-nesting',
9
- 'stylelint-plugin-logical-css',
10
- 'stylelint-plugin-use-baseline'
11
- ],
12
- rules: {
13
- '@stylistic/color-hex-case': 'lower',
14
- '@stylistic/number-leading-zero': 'always',
15
- '@stylistic/unit-case': 'lower',
16
- 'alpha-value-notation': 'percentage',
17
- 'color-function-notation': 'modern',
18
- 'color-named': 'never',
19
- 'csstools/use-nesting': 'always',
20
- 'declaration-block-no-shorthand-property-overrides': true,
21
- 'display-notation': 'full',
22
- 'font-weight-notation': 'numeric',
23
- 'hue-degree-notation': 'angle',
24
- 'length-zero-no-unit': true,
25
- 'media-feature-range-notation': 'context',
26
- 'no-descending-specificity': true,
27
- 'plugin/no-low-performance-animation-properties': true,
28
- 'plugin/use-baseline': [true, { available: 'newly' }],
29
- 'plugin/use-logical-properties-and-values': [true, { severity: 'error' }],
30
- 'plugin/use-logical-units': [true, { severity: 'error' }],
31
- 'selector-max-compound-selectors': 2
32
- }
3
+ extends: ['stylelint-config-recommended', 'stylelint-config-recess-order'],
4
+ ignoreFiles: ['dist/**'],
5
+ plugins: [
6
+ '@stylistic/stylelint-plugin',
7
+ 'stylelint-high-performance-animation',
8
+ 'stylelint-use-nesting',
9
+ 'stylelint-plugin-logical-css',
10
+ 'stylelint-plugin-use-baseline'
11
+ ],
12
+ rules: {
13
+ '@stylistic/color-hex-case': 'lower',
14
+ '@stylistic/number-leading-zero': 'always',
15
+ '@stylistic/unit-case': 'lower',
16
+ 'alpha-value-notation': 'percentage',
17
+ 'color-function-notation': 'modern',
18
+ 'color-named': 'never',
19
+ 'csstools/use-nesting': 'always',
20
+ 'declaration-block-no-shorthand-property-overrides': true,
21
+ 'display-notation': 'full',
22
+ 'font-weight-notation': 'numeric',
23
+ 'hue-degree-notation': 'angle',
24
+ 'length-zero-no-unit': true,
25
+ 'media-feature-range-notation': 'context',
26
+ 'no-descending-specificity': true,
27
+ 'plugin/no-low-performance-animation-properties': true,
28
+ 'plugin/use-baseline': [true, { available: 'newly' }],
29
+ 'plugin/use-logical-properties-and-values': [true, { severity: 'error' }],
30
+ 'plugin/use-logical-units': [true, { severity: 'error' }],
31
+ 'selector-max-compound-selectors': 2
32
+ }
33
33
  }