@aliexme/eslint-config 0.3.1 → 0.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
@@ -54,6 +54,7 @@ And add the following lines to your ESLint config file:
54
54
  "extends": [
55
55
  "@aliexme/eslint-config",
56
56
  "@aliexme/eslint-config/react",
57
+ "plugin:react-hooks/recommended",
57
58
  ],
58
59
  }
59
60
  ```
package/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ /** @type {import('eslint').ESLint.ConfigData} */
1
2
  module.exports = {
2
- "extends": ["./rules/base.js", "./rules/import.js"],
3
+ extends: ['./rules/base.js', './rules/import.js'],
3
4
  }
package/package.json CHANGED
@@ -1,13 +1,14 @@
1
1
  {
2
2
  "name": "@aliexme/eslint-config",
3
- "version": "0.3.1",
3
+ "version": "0.4.0",
4
4
  "description": "Rule set for ESLint",
5
5
  "private": false,
6
6
  "author": "Alexander Smirnov <al.smirnov996@gmail.com>",
7
- "homepage": "https://github.com/aliexme/eslint-config",
7
+ "homepage": "https://github.com/aliexme/web-shared",
8
8
  "repository": {
9
9
  "type": "git",
10
- "url": "https://github.com/aliexme/eslint-config"
10
+ "url": "https://github.com/aliexme/web-shared",
11
+ "directory": "packages/eslint-config"
11
12
  },
12
13
  "license": "MIT",
13
14
  "keywords": [
@@ -30,37 +31,17 @@
30
31
  "publishConfig": {
31
32
  "access": "public"
32
33
  },
33
- "scripts": {
34
- "prepare": "husky install",
35
- "lint:check": "eslint --ext .js,.mjs,.jsx,.ts,.tsx --ignore-path .gitignore --cache ./",
36
- "lint:fix": "pnpm lint:check --fix"
37
- },
38
- "devDependencies": {
39
- "@typescript-eslint/eslint-plugin": "5.52.0",
40
- "@typescript-eslint/parser": "5.52.0",
41
- "eslint": "8.34.0",
42
- "eslint-config-prettier": "8.6.0",
43
- "eslint-plugin-import": "2.27.5",
44
- "eslint-plugin-prettier": "4.2.1",
45
- "eslint-plugin-react": "7.32.2",
46
- "eslint-plugin-react-hooks": "4.6.0",
47
- "eslint-plugin-react-native": "4.0.0",
48
- "husky": "8.0.3",
49
- "lint-staged": "13.1.2",
50
- "prettier": "2.8.4",
51
- "typescript": "4.9.5"
52
- },
53
34
  "peerDependencies": {
54
- "@typescript-eslint/eslint-plugin": "^5.52.0",
55
- "@typescript-eslint/parser": "^5.52.0",
56
- "eslint": ">=8",
57
- "eslint-config-prettier": "^8.6.0",
58
- "eslint-plugin-import": "^2.27.5",
59
- "eslint-plugin-prettier": "^4.2.1",
60
- "eslint-plugin-react": "^7.32.2",
35
+ "@typescript-eslint/eslint-plugin": "^6.7.3",
36
+ "@typescript-eslint/parser": "^6.7.3",
37
+ "eslint": "^8.50.0",
38
+ "eslint-config-prettier": "^9.0.0",
39
+ "eslint-plugin-import": "^2.28.1",
40
+ "eslint-plugin-prettier": "^5.0.0",
41
+ "eslint-plugin-react": "^7.33.2",
61
42
  "eslint-plugin-react-hooks": "^4.6.0",
62
- "eslint-plugin-react-native": "^4.0.0",
63
- "prettier": "^2.8.4"
43
+ "eslint-plugin-react-native": "^4.1.0",
44
+ "prettier": "^3.0.3"
64
45
  },
65
46
  "peerDependenciesMeta": {
66
47
  "@typescript-eslint/eslint-plugin": {
@@ -87,5 +68,6 @@
87
68
  "prettier": {
88
69
  "optional": true
89
70
  }
90
- }
71
+ },
72
+ "gitHead": "461eb2c06b68af861d56eaaa5f5f5364aeccc068"
91
73
  }
package/rules/base.js CHANGED
@@ -1,121 +1,122 @@
1
+ /** @type {import('eslint').ESLint.ConfigData} */
1
2
  module.exports = {
2
- "parserOptions": {
3
- "ecmaVersion": "latest",
4
- "sourceType": "module",
3
+ parserOptions: {
4
+ ecmaVersion: 'latest',
5
+ sourceType: 'module',
5
6
  },
6
- "env": {
7
- "browser": true,
8
- "node": true,
9
- "es6": true,
7
+ env: {
8
+ browser: true,
9
+ node: true,
10
+ es6: true,
10
11
  },
11
- "extends": ["eslint:recommended"],
12
- "rules": {
13
- "quotes": ["error", "single"],
14
- "jsx-quotes": ["error", "prefer-single"],
15
- "quote-props": ["error", "as-needed"],
16
- "semi": ["error", "never"],
17
- "indent": ["error", 2, { "SwitchCase": 1 }],
18
- "max-len": ["error", 120],
19
- "no-multiple-empty-lines": ["error", { "max": 1, "maxEOF": 0, "maxBOF": 0 }],
20
- "comma-dangle": ["error", "always-multiline"],
21
- "comma-spacing": ["error", { "before": false, "after": true }],
22
- "comma-style": ["error", "last"],
23
- "key-spacing": "error",
24
- "keyword-spacing": ["error", { "before": true, "after": true }],
25
- "object-curly-spacing": ["error", "always"],
26
- "array-bracket-spacing": ["error", "never"],
27
- "computed-property-spacing": ["error", "never", { "enforceForClassMembers": true }],
28
- "arrow-spacing": "error",
29
- "switch-colon-spacing": ["error", { "after": true, "before": false }],
30
- "space-in-parens": ["error", "never"],
31
- "space-before-function-paren": [
32
- "error",
12
+ extends: ['eslint:recommended'],
13
+ rules: {
14
+ quotes: ['error', 'single'],
15
+ 'jsx-quotes': ['error', 'prefer-single'],
16
+ 'quote-props': ['error', 'as-needed'],
17
+ semi: ['error', 'never'],
18
+ indent: ['error', 2, { SwitchCase: 1 }],
19
+ 'max-len': ['error', 120],
20
+ 'no-multiple-empty-lines': ['error', { max: 1, maxEOF: 0, maxBOF: 0 }],
21
+ 'comma-dangle': ['error', 'always-multiline'],
22
+ 'comma-spacing': ['error', { before: false, after: true }],
23
+ 'comma-style': ['error', 'last'],
24
+ 'key-spacing': 'error',
25
+ 'keyword-spacing': ['error', { before: true, after: true }],
26
+ 'object-curly-spacing': ['error', 'always'],
27
+ 'array-bracket-spacing': ['error', 'never'],
28
+ 'computed-property-spacing': ['error', 'never', { enforceForClassMembers: true }],
29
+ 'arrow-spacing': 'error',
30
+ 'switch-colon-spacing': ['error', { after: true, before: false }],
31
+ 'space-in-parens': ['error', 'never'],
32
+ 'space-before-function-paren': [
33
+ 'error',
33
34
  {
34
- "anonymous": "never",
35
- "named": "never",
36
- "asyncArrow": "always",
35
+ anonymous: 'never',
36
+ named: 'never',
37
+ asyncArrow: 'always',
37
38
  },
38
39
  ],
39
- "space-before-blocks": ["error", "always"],
40
- "no-constant-condition": ["error", { "checkLoops": false }],
41
- "no-trailing-spaces": "error",
42
- "no-multi-spaces": "error",
43
- "eol-last": "error",
44
- "arrow-parens": "error",
45
- "no-useless-rename": "error",
46
- "no-var": "error",
47
- "prefer-const": "error",
48
- "no-new-object": "error",
49
- "object-shorthand": "error",
50
- "prefer-object-spread": "error",
51
- "no-array-constructor": "error",
52
- "array-callback-return": ["error", { "checkForEach": true }],
53
- "prefer-destructuring": ["error", { "array": false, "object": true }, { "enforceForRenamedProperties": false }],
54
- "prefer-template": "error",
55
- "template-curly-spacing": ["error", "never"],
56
- "no-eval": "error",
57
- "wrap-iife": ["error", "inside", { "functionPrototypeMethods": true }],
58
- "no-loop-func": "error",
59
- "prefer-rest-params": "error",
60
- "default-param-last": "error",
61
- "no-new-func": "error",
62
- "no-param-reassign": ["error", { "props": true }],
63
- "prefer-spread": "error",
64
- "space-infix-ops": ["error", { "int32Hint": true }],
65
- "function-paren-newline": ["error", "multiline-arguments"],
66
- "object-curly-newline": ["error", { "consistent": true }],
67
- "prefer-arrow-callback": "error",
68
- "no-empty-function": "error",
69
- "no-useless-constructor": "error",
70
- "dot-notation": "error",
71
- "one-var": ["error", "never"],
72
- "no-multi-assign": "error",
73
- "operator-linebreak": [
74
- "error",
75
- "before",
40
+ 'space-before-blocks': ['error', 'always'],
41
+ 'no-constant-condition': ['error', { checkLoops: false }],
42
+ 'no-trailing-spaces': 'error',
43
+ 'no-multi-spaces': 'error',
44
+ 'eol-last': 'error',
45
+ 'arrow-parens': 'error',
46
+ 'no-useless-rename': 'error',
47
+ 'no-var': 'error',
48
+ 'prefer-const': 'error',
49
+ 'no-new-object': 'error',
50
+ 'object-shorthand': 'error',
51
+ 'prefer-object-spread': 'error',
52
+ 'no-array-constructor': 'error',
53
+ 'array-callback-return': ['error', { checkForEach: true }],
54
+ 'prefer-destructuring': ['error', { array: false, object: true }, { enforceForRenamedProperties: false }],
55
+ 'prefer-template': 'error',
56
+ 'template-curly-spacing': ['error', 'never'],
57
+ 'no-eval': 'error',
58
+ 'wrap-iife': ['error', 'inside', { functionPrototypeMethods: true }],
59
+ 'no-loop-func': 'error',
60
+ 'prefer-rest-params': 'error',
61
+ 'default-param-last': 'error',
62
+ 'no-new-func': 'error',
63
+ 'no-param-reassign': ['error', { props: true }],
64
+ 'prefer-spread': 'error',
65
+ 'space-infix-ops': ['error', { int32Hint: true }],
66
+ 'function-paren-newline': ['error', 'multiline-arguments'],
67
+ 'object-curly-newline': ['error', { consistent: true }],
68
+ 'prefer-arrow-callback': 'error',
69
+ 'no-empty-function': 'error',
70
+ 'no-useless-constructor': 'error',
71
+ 'dot-notation': 'error',
72
+ 'one-var': ['error', 'never'],
73
+ 'no-multi-assign': 'error',
74
+ 'operator-linebreak': [
75
+ 'error',
76
+ 'before',
76
77
  {
77
- "overrides": { "=": "after" },
78
+ overrides: { '=': 'after' },
78
79
  },
79
80
  ],
80
- "eqeqeq": "error",
81
- "no-unneeded-ternary": ["error", { "defaultAssignment": false }],
82
- "no-nested-ternary": "error",
83
- "no-mixed-operators": "error",
84
- "brace-style": ["error", "1tbs"],
85
- "spaced-comment": [
86
- "error",
87
- "always",
81
+ eqeqeq: 'error',
82
+ 'no-unneeded-ternary': ['error', { defaultAssignment: false }],
83
+ 'no-nested-ternary': 'error',
84
+ 'no-mixed-operators': 'error',
85
+ 'brace-style': ['error', '1tbs'],
86
+ 'spaced-comment': [
87
+ 'error',
88
+ 'always',
88
89
  {
89
- "markers": ["/", "!", "?"],
90
+ markers: ['/', '!', '?'],
90
91
  },
91
92
  ],
92
- "newline-per-chained-call": ["error", { "ignoreChainWithDepth": 2 }],
93
- "no-whitespace-before-property": "error",
94
- "padded-blocks": ["error", "never"],
95
- "block-spacing": ["error", "always"],
96
- "func-call-spacing": ["error", "never"],
97
- "no-new-wrappers": "error",
98
- "radix": ["error", "as-needed"],
99
- "id-length": [
100
- "error",
93
+ 'newline-per-chained-call': ['error', { ignoreChainWithDepth: 2 }],
94
+ 'no-whitespace-before-property': 'error',
95
+ 'padded-blocks': ['error', 'never'],
96
+ 'block-spacing': ['error', 'always'],
97
+ 'func-call-spacing': ['error', 'never'],
98
+ 'no-new-wrappers': 'error',
99
+ radix: ['error', 'as-needed'],
100
+ 'id-length': [
101
+ 'error',
101
102
  {
102
- "min": 2,
103
- "exceptions": ["_", "i", "e"],
104
- "exceptionPatterns": ["[x-z]"],
103
+ min: 2,
104
+ exceptions: ['_', 'i', 'e'],
105
+ exceptionPatterns: ['[x-z]'],
105
106
  },
106
107
  ],
107
- "new-cap": "error",
108
- "no-restricted-globals": [
109
- "error",
108
+ 'new-cap': 'error',
109
+ 'no-restricted-globals': [
110
+ 'error',
110
111
  {
111
- "name": "isNaN",
112
- "message": "Use Number.isNaN instead.",
112
+ name: 'isNaN',
113
+ message: 'Use Number.isNaN instead.',
113
114
  },
114
115
  {
115
- "name": "isFinite",
116
- "message": "Use Number.isFinite instead.",
116
+ name: 'isFinite',
117
+ message: 'Use Number.isFinite instead.',
117
118
  },
118
119
  ],
119
- "no-console": "warn",
120
+ 'no-console': 'warn',
120
121
  },
121
122
  }
package/rules/import.js CHANGED
@@ -1,30 +1,31 @@
1
+ /** @type {import('eslint').ESLint.ConfigData} */
1
2
  module.exports = {
2
- "plugins": ["import"],
3
- "extends": ["plugin:import/recommended"],
4
- "settings": {
5
- "import/resolver": {
6
- "node": {
7
- "extensions": [".js", ".cjs", ".mjs", ".jsx", ".ts", ".tsx"],
8
- "moduleDirectory": ["src/", "node_modules"],
3
+ plugins: ['import'],
4
+ extends: ['plugin:import/recommended'],
5
+ settings: {
6
+ 'import/resolver': {
7
+ node: {
8
+ extensions: ['.js', '.cjs', '.mjs', '.jsx', '.ts', '.tsx'],
9
+ moduleDirectory: ['src/', 'node_modules'],
9
10
  },
10
11
  },
11
- "import/ignore": ["node_modules"],
12
+ 'import/ignore': ['node_modules'],
12
13
  },
13
- "rules": {
14
- "import/no-useless-path-segments": ["error", { "noUselessIndex": false }],
15
- "import/order": [
16
- "error",
14
+ rules: {
15
+ 'import/no-useless-path-segments': ['error', { noUselessIndex: false }],
16
+ 'import/order': [
17
+ 'error',
17
18
  {
18
- "groups": [["builtin", "external"], "internal", ["parent", "sibling"], "index", "object"],
19
- "newlines-between": "always",
20
- "warnOnUnassignedImports": true,
19
+ groups: [['builtin', 'external'], 'internal', ['parent', 'sibling'], 'index', 'object'],
20
+ 'newlines-between': 'always',
21
+ warnOnUnassignedImports: true,
21
22
  },
22
23
  ],
23
- "import/no-duplicates": ["error", { "prefer-inline": true }],
24
- "import/no-self-import": "error",
25
- "import/no-mutable-exports": "error",
26
- "import/first": "error",
27
- "import/newline-after-import": "error",
28
- "import/namespace": "off",
24
+ 'import/no-duplicates': ['error', { 'prefer-inline': true }],
25
+ 'import/no-self-import': 'error',
26
+ 'import/no-mutable-exports': 'error',
27
+ 'import/first': 'error',
28
+ 'import/newline-after-import': 'error',
29
+ 'import/namespace': 'off',
29
30
  },
30
31
  }
package/rules/prettier.js CHANGED
@@ -1,7 +1,8 @@
1
+ /** @type {import('eslint').ESLint.ConfigData} */
1
2
  module.exports = {
2
- "plugins": ["prettier"],
3
- "extends": ["prettier"],
4
- "rules": {
5
- "prettier/prettier": "error",
3
+ plugins: ['prettier'],
4
+ extends: ['prettier'],
5
+ rules: {
6
+ 'prettier/prettier': 'error',
6
7
  },
7
8
  }
@@ -1,21 +1,22 @@
1
+ /** @type {import('eslint').ESLint.ConfigData} */
1
2
  module.exports = {
2
- "env": {
3
- "react-native/react-native": true,
3
+ env: {
4
+ 'react-native/react-native': true,
4
5
  },
5
- "plugins": ["react-native"],
6
- "extends": ["plugin:import/react-native"],
7
- "rules": {
8
- "react-native/no-unused-styles": "error",
9
- "react-native/no-inline-styles": "error",
10
- "react-native/no-raw-text": ["error", { "skip": ["Text", "Button"] }],
11
- "react-native/no-single-element-style-arrays": "error",
6
+ plugins: ['react-native'],
7
+ extends: ['plugin:import/react-native'],
8
+ rules: {
9
+ 'react-native/no-unused-styles': 'error',
10
+ 'react-native/no-inline-styles': 'error',
11
+ 'react-native/no-raw-text': ['error', { skip: ['Text', 'Button'] }],
12
+ 'react-native/no-single-element-style-arrays': 'error',
12
13
  },
13
- "overrides": [
14
+ overrides: [
14
15
  {
15
- "files": ["**/*.{jsx,tsx}"],
16
- "parserOptions": {
17
- "ecmaFeatures": {
18
- "jsx": true,
16
+ files: ['**/*.{jsx,tsx}'],
17
+ parserOptions: {
18
+ ecmaFeatures: {
19
+ jsx: true,
19
20
  },
20
21
  },
21
22
  },
package/rules/react.js CHANGED
@@ -1,46 +1,42 @@
1
+ /** @type {import('eslint').ESLint.ConfigData} */
1
2
  module.exports = {
2
- "plugins": ["react", "react-hooks"],
3
- "extends": [
4
- "plugin:import/react",
5
- "plugin:react/recommended",
6
- "plugin:react/jsx-runtime",
7
- "plugin:react-hooks/recommended",
8
- ],
9
- "settings": {
10
- "react": {
11
- "version": "detect",
3
+ plugins: ['react', 'react-hooks'],
4
+ extends: ['plugin:import/react', 'plugin:react/recommended', 'plugin:react/jsx-runtime'],
5
+ settings: {
6
+ react: {
7
+ version: 'detect',
12
8
  },
13
9
  },
14
- "rules": {
15
- "react/jsx-tag-spacing": [
16
- "error",
10
+ rules: {
11
+ 'react/jsx-tag-spacing': [
12
+ 'error',
17
13
  {
18
- "closingSlash": "never",
19
- "beforeSelfClosing": "proportional-always",
20
- "afterOpening": "never",
21
- "beforeClosing": "never",
14
+ closingSlash: 'never',
15
+ beforeSelfClosing: 'proportional-always',
16
+ afterOpening: 'never',
17
+ beforeClosing: 'never',
22
18
  },
23
19
  ],
24
- "react/jsx-max-props-per-line": ["error", { "when": "multiline" }],
25
- "react/jsx-curly-spacing": ["error", { "when": "never", "children": true }],
26
- "react/jsx-curly-brace-presence": ["error", "never"],
27
- "react/jsx-closing-bracket-location": "error",
28
- "react/self-closing-comp": "error",
29
- "react/no-unused-prop-types": "error",
20
+ 'react/jsx-max-props-per-line': ['error', { when: 'multiline' }],
21
+ 'react/jsx-curly-spacing': ['error', { when: 'never', children: true }],
22
+ 'react/jsx-curly-brace-presence': ['error', 'never'],
23
+ 'react/jsx-closing-bracket-location': 'error',
24
+ 'react/self-closing-comp': 'error',
25
+ 'react/no-unused-prop-types': 'error',
30
26
  },
31
- "overrides": [
27
+ overrides: [
32
28
  {
33
- "files": ["**/*.{jsx,tsx}"],
34
- "parserOptions": {
35
- "ecmaFeatures": {
36
- "jsx": true,
29
+ files: ['**/*.{jsx,tsx}'],
30
+ parserOptions: {
31
+ ecmaFeatures: {
32
+ jsx: true,
37
33
  },
38
34
  },
39
35
  },
40
36
  {
41
- "files": ["**/*.tsx"],
42
- "rules": {
43
- "react/prop-types": "off",
37
+ files: ['**/*.tsx'],
38
+ rules: {
39
+ 'react/prop-types': 'off',
44
40
  },
45
41
  },
46
42
  ],
@@ -1,37 +1,38 @@
1
+ /** @type {import('eslint').ESLint.ConfigData} */
1
2
  module.exports = {
2
- "overrides": [
3
+ overrides: [
3
4
  {
4
- "files": ["**/*.{ts,tsx}"],
5
- "parser": "@typescript-eslint/parser",
6
- "plugins": ["@typescript-eslint"],
7
- "extends": ["plugin:import/typescript", "plugin:@typescript-eslint/recommended"],
8
- "rules": {
9
- "@typescript-eslint/naming-convention": [
10
- "error",
5
+ files: ['**/*.{ts,tsx}'],
6
+ parser: '@typescript-eslint/parser',
7
+ plugins: ['@typescript-eslint'],
8
+ extends: ['plugin:import/typescript', 'plugin:@typescript-eslint/recommended'],
9
+ rules: {
10
+ '@typescript-eslint/naming-convention': [
11
+ 'error',
11
12
  {
12
- "selector": "enumMember",
13
- "format": ["UPPER_CASE", "PascalCase"],
13
+ selector: 'enumMember',
14
+ format: ['UPPER_CASE', 'PascalCase'],
14
15
  },
15
16
  ],
16
- "@typescript-eslint/no-unused-vars": ["error", { "argsIgnorePattern": "^_" }],
17
- "@typescript-eslint/member-delimiter-style": [
18
- "error",
17
+ '@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
18
+ '@typescript-eslint/member-delimiter-style': [
19
+ 'error',
19
20
  {
20
- "multiline": { "delimiter": "none" },
21
- "singleline": { "delimiter": "comma" },
21
+ multiline: { delimiter: 'none' },
22
+ singleline: { delimiter: 'comma' },
22
23
  },
23
24
  ],
24
- "@typescript-eslint/no-empty-interface": [
25
- "error",
25
+ '@typescript-eslint/no-empty-interface': [
26
+ 'error',
26
27
  {
27
- "allowSingleExtends": true,
28
+ allowSingleExtends: true,
28
29
  },
29
30
  ],
30
- "@typescript-eslint/consistent-type-imports": [
31
- "error",
32
- { "prefer": "type-imports", "fixStyle": "inline-type-imports" },
31
+ '@typescript-eslint/consistent-type-imports': [
32
+ 'error',
33
+ { prefer: 'type-imports', fixStyle: 'inline-type-imports' },
33
34
  ],
34
- "@typescript-eslint/type-annotation-spacing": "error",
35
+ '@typescript-eslint/type-annotation-spacing': 'error',
35
36
  },
36
37
  },
37
38
  ],