@moccu/eslint-config 0.6.0 → 0.8.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.
@@ -4,14 +4,18 @@ on: push
4
4
  jobs:
5
5
  build:
6
6
  runs-on: ubuntu-latest
7
+ permissions:
8
+ contents: read
9
+ id-token: write
10
+ packages: write
7
11
  steps:
8
12
  - name: Checkout 🛎️
9
- uses: actions/checkout@v4
13
+ uses: actions/checkout@v7
10
14
  with:
11
15
  persist-credentials: false
12
16
 
13
17
  - name: Setup 🔌
14
- uses: actions/setup-node@v4
18
+ uses: actions/setup-node@v6
15
19
  with:
16
20
  node-version-file: '.nvmrc'
17
21
  registry-url: https://registry.npmjs.org/
@@ -25,8 +29,6 @@ jobs:
25
29
  - name: Publish 🚀
26
30
  if: startsWith(github.ref, 'refs/tags/')
27
31
  run: npm publish --access public
28
- env:
29
- NODE_AUTH_TOKEN: ${{secrets.NODE_AUTH_TOKEN}}
30
32
 
31
33
  - name: Publish to GitHub 🚀
32
34
  if: startsWith(github.ref, 'refs/tags/')
package/.nvmrc CHANGED
@@ -1 +1 @@
1
- 20.15.0
1
+ lts/*
package/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  [![Build](https://github.com/moccu/eslint-config-moccu/actions/workflows/build.yml/badge.svg)](https://github.com/moccu/eslint-config-moccu/actions)
4
4
 
5
5
 
6
- The eslint config we use at moccu
6
+ The eslint config we use at Moccu
7
7
 
8
8
  ## Installation
9
9
 
@@ -13,49 +13,21 @@ $ npm install --save-dev @moccu/eslint-config
13
13
 
14
14
  ## Usage
15
15
 
16
- ### Base
17
-
18
- This is a customized ruleset based on the [eslint recommended](https://eslint.org/docs/rules/)
19
- rules.
20
-
21
- ```js
22
- {
23
- "extends": [
24
- "@moccu/eslint-config"
25
- ],
26
- "rules": {
27
- // Additional rules...
28
- }
29
- }
30
- ```
31
-
32
- ### React
33
-
34
- This is a customized ruleset based on the [eslint-plugin-react](https://github.com/yannickcr/eslint-plugin-react)
35
- rules.
36
- Separately there is a ruleset for proptypes-validation in `@moccu/eslint-config/react-proptypes`.
37
-
38
16
  ```js
39
- {
40
- "extends": [
41
- "@moccu/eslint-config",
42
- "@moccu/eslint-config/react",
43
- "@moccu/eslint-config/react-proptypes"
44
- ],
45
- "rules": {
46
- // Additional rules...
17
+ // eslint.config.js
18
+ const {defineConfig} = require('eslint/config');
19
+ const moccu = require('@moccu/eslint-config');
20
+
21
+ module.exports = defineConfig([
22
+ moccu.configs['recommended'],
23
+ {
24
+ rules: {
25
+ semi: ['warn', 'always']
26
+ }
47
27
  }
48
- }
28
+ ]);
49
29
  ```
50
30
 
51
- ## Contribute
52
-
53
- * Add / Edit rules after agreements with developers at Moccu
54
- * Run tests using `npm test`
55
- * Set new version in [package.json](https://github.com/moccu/eslint-config-moccu/blob/master/package.json)
56
- * Publish new version on npm using `npm publish --access=public`
57
- * Add github release and tag including release notes
58
-
59
31
  ## License
60
32
 
61
33
  [MIT](./LICENSE)
@@ -1,3 +1,5 @@
1
+ 'use strict';
2
+
1
3
  const
2
4
  {List} = require('../helper')
3
5
  ;
package/helper/index.js CHANGED
@@ -1,3 +1,5 @@
1
+ 'use strict';
2
+
1
3
  module.exports.List = class extends Array {
2
4
 
3
5
  insert(value) {
package/index.js CHANGED
@@ -1,139 +1,137 @@
1
+ 'use strict';
2
+
1
3
  const
2
4
  {CLASS_MEMBER_GROUPS, CLASS_MEMBER_ORDER} = require('./defaults/sort-class-members'),
3
- _package = require('./package.json'),
4
5
  js = require('@eslint/js'),
6
+ globals = require('globals'),
5
7
  sortClassMembers = require('eslint-plugin-sort-class-members'),
6
- plugin = {
7
- meta: {
8
- name: _package.name,
9
- version: _package.version
10
- },
11
- configs: {},
12
- rules: {
13
- 'accessor-pairs': 'error',
14
- 'array-callback-return': 'error',
15
- 'block-scoped-var': 'error',
16
- 'complexity': 'error',
17
- 'consistent-this': [
18
- 2, 'self'
19
- ],
20
- 'curly': 'error',
21
- 'dot-notation': 'error',
22
- 'eqeqeq': 'error',
23
- 'func-name-matching': 'error',
24
- 'func-names': [
25
- 'error', 'never'
26
- ],
27
- 'func-style': [
28
- 'error',
29
- 'declaration', {
30
- 'allowArrowFunctions': true
31
- }
32
- ],
33
- 'guard-for-in': 'error',
34
- 'id-match': 'error',
35
- 'max-depth': 'error',
36
- 'max-lines': [
37
- 'error', {
38
- 'max': 350,
39
- 'skipBlankLines': true
40
- }
41
- ],
42
- 'max-nested-callbacks': 'error',
43
- 'no-alert': 'error',
44
- 'no-array-constructor': 'error',
45
- 'no-await-in-loop': 'error',
46
- 'no-bitwise': 'error',
47
- 'no-caller': 'error',
48
- 'no-continue': 'error',
49
- 'no-div-regex': 'error',
50
- 'no-duplicate-imports': 'error',
51
- 'no-empty-function': 'error',
52
- 'no-eq-null': 'error',
53
- 'no-eval': 'error',
54
- 'no-extend-native': 'error',
55
- 'no-extra-bind': 'error',
56
- 'no-extra-label': 'error',
57
- 'no-implicit-coercion': [
58
- 'error', {
59
- 'boolean': false,
60
- 'number': false,
61
- 'string': false
62
- }
63
- ],
64
- 'no-implicit-globals': 'error',
65
- 'no-implied-eval': 'error',
66
- 'no-inner-declarations': [
67
- 'error', 'functions'
68
- ],
69
- 'no-iterator': 'error',
70
- 'no-label-var': 'error',
71
- 'no-labels': 'error',
72
- 'no-lone-blocks': 'error',
73
- 'no-lonely-if': 'error',
74
- 'no-loop-func': 'error',
75
- 'no-multi-str': 'error',
76
- 'no-nested-ternary': 'error',
77
- 'no-new-func': 'error',
78
- 'no-new-wrappers': 'error',
79
- 'no-octal-escape': 'error',
80
- 'no-proto': 'error',
81
- 'no-prototype-builtins': 'error',
82
- 'no-restricted-globals': 'error',
83
- 'no-restricted-imports': 'error',
84
- 'no-restricted-properties': 'error',
85
- 'no-restricted-syntax': 'error',
86
- 'no-script-url': 'error',
87
- 'no-self-compare': 'error',
88
- 'no-shadow-restricted-names': 'error',
89
- 'no-template-curly-in-string': 'error',
90
- 'no-throw-literal': 'error',
91
- 'no-undef-init': 'error',
92
- 'no-unmodified-loop-condition': 'error',
93
- 'no-unneeded-ternary': 'error',
94
- 'no-useless-call': 'error',
95
- 'no-useless-computed-key': 'error',
96
- 'no-useless-concat': 'error',
97
- 'no-useless-constructor': 'error',
98
- 'no-useless-rename': 'error',
99
- 'no-useless-return': 'error',
100
- 'no-void': 'error',
101
- 'no-warning-comments': 'error',
102
- 'no-with': 'error',
103
- 'one-var': 'error',
104
- 'prefer-const': 'error',
105
- 'prefer-numeric-literals': 'error',
106
- 'prefer-promise-reject-errors': 'error',
107
- 'radix': [
108
- 'error', 'always'
109
- ],
110
- 'require-await': 'error',
111
- 'strict': 'error',
112
- 'symbol-description': 'error',
113
- 'unicode-bom': [
114
- 'error', 'never'
115
- ],
116
- 'sort-class-members/sort-class-members': [2, {
117
- order: CLASS_MEMBER_ORDER,
118
- groups: CLASS_MEMBER_GROUPS
119
- }]
120
- }
121
- }
122
- ;
123
-
124
- plugin.configs = {
125
- recommended: {
126
- extends: ['eslint:recommended'],
127
- plugins: ['sort-class-members'],
128
- rules: plugin.rules
8
+ rules = {
9
+ 'accessor-pairs': 'error',
10
+ 'array-callback-return': 'error',
11
+ 'block-scoped-var': 'error',
12
+ 'complexity': 'error',
13
+ 'consistent-this': [
14
+ 2, 'self'
15
+ ],
16
+ 'curly': 'error',
17
+ 'dot-notation': 'error',
18
+ 'eqeqeq': 'error',
19
+ 'func-name-matching': 'error',
20
+ 'func-names': [
21
+ 'error', 'never'
22
+ ],
23
+ 'func-style': [
24
+ 'error',
25
+ 'declaration', {
26
+ 'allowArrowFunctions': true
27
+ }
28
+ ],
29
+ 'guard-for-in': 'error',
30
+ 'id-match': 'error',
31
+ 'max-depth': 'error',
32
+ 'max-lines': [
33
+ 'error', {
34
+ 'max': 350,
35
+ 'skipBlankLines': true
36
+ }
37
+ ],
38
+ 'max-nested-callbacks': 'error',
39
+ 'no-alert': 'error',
40
+ 'no-array-constructor': 'error',
41
+ 'no-await-in-loop': 'error',
42
+ 'no-bitwise': 'error',
43
+ 'no-caller': 'error',
44
+ 'no-continue': 'error',
45
+ 'no-div-regex': 'error',
46
+ 'no-duplicate-imports': 'error',
47
+ 'no-empty-function': 'error',
48
+ 'no-eq-null': 'error',
49
+ 'no-eval': 'error',
50
+ 'no-extend-native': 'error',
51
+ 'no-extra-bind': 'error',
52
+ 'no-extra-label': 'error',
53
+ 'no-implicit-coercion': [
54
+ 'error', {
55
+ 'boolean': false,
56
+ 'number': false,
57
+ 'string': false
58
+ }
59
+ ],
60
+ 'no-implicit-globals': 'error',
61
+ 'no-implied-eval': 'error',
62
+ 'no-inner-declarations': [
63
+ 'error', 'functions'
64
+ ],
65
+ 'no-iterator': 'error',
66
+ 'no-label-var': 'error',
67
+ 'no-labels': 'error',
68
+ 'no-lone-blocks': 'error',
69
+ 'no-lonely-if': 'error',
70
+ 'no-loop-func': 'error',
71
+ 'no-multi-str': 'error',
72
+ 'no-nested-ternary': 'error',
73
+ 'no-new-func': 'error',
74
+ 'no-new-wrappers': 'error',
75
+ 'no-octal-escape': 'error',
76
+ 'no-proto': 'error',
77
+ 'no-prototype-builtins': 'error',
78
+ 'no-restricted-globals': 'error',
79
+ 'no-restricted-imports': 'error',
80
+ 'no-restricted-properties': 'error',
81
+ 'no-restricted-syntax': 'error',
82
+ 'no-script-url': 'error',
83
+ 'no-self-compare': 'error',
84
+ 'no-shadow-restricted-names': 'error',
85
+ 'no-template-curly-in-string': 'error',
86
+ 'no-throw-literal': 'error',
87
+ 'no-undef-init': 'error',
88
+ 'no-unmodified-loop-condition': 'error',
89
+ 'no-unneeded-ternary': 'error',
90
+ 'no-useless-call': 'error',
91
+ 'no-useless-computed-key': 'error',
92
+ 'no-useless-concat': 'error',
93
+ 'no-useless-constructor': 'error',
94
+ 'no-useless-rename': 'error',
95
+ 'no-useless-return': 'error',
96
+ 'no-void': 'error',
97
+ 'no-warning-comments': 'error',
98
+ 'no-with': 'error',
99
+ 'one-var': 'error',
100
+ 'prefer-const': 'error',
101
+ 'prefer-numeric-literals': 'error',
102
+ 'prefer-promise-reject-errors': 'error',
103
+ 'radix': [
104
+ 'error', 'always'
105
+ ],
106
+ 'require-await': 'error',
107
+ 'strict': 'error',
108
+ 'symbol-description': 'error',
109
+ 'unicode-bom': [
110
+ 'error', 'never'
111
+ ],
112
+ 'sort-class-members/sort-class-members': [2, {
113
+ order: CLASS_MEMBER_ORDER,
114
+ groups: CLASS_MEMBER_GROUPS
115
+ }]
129
116
  },
130
- 'flat/recommended': {
117
+ recommended = {
131
118
  ...js.configs.recommended,
119
+ languageOptions: {
120
+ ...js.configs.recommended.languageOptions,
121
+ sourceType: 'commonjs',
122
+ globals: {
123
+ ...globals.node
124
+ }
125
+ },
132
126
  plugins: {
133
127
  'sort-class-members': sortClassMembers
134
128
  },
135
- rules: plugin.rules
129
+ rules: {
130
+ ...js.configs.recommended.rules,
131
+ ...rules
132
+ }
136
133
  }
137
- };
134
+ ;
138
135
 
139
- module.exports = plugin;
136
+ module.exports.configs = { recommended };
137
+ module.exports.rules = rules;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@moccu/eslint-config",
3
3
  "description": "The eslint config we use at moccu",
4
- "version": "0.6.0",
4
+ "version": "0.8.0",
5
5
  "author": "Moccu GmbH & Co. KG",
6
6
  "license": "MIT",
7
7
  "repository": "moccu/eslint-config-moccu",
@@ -30,12 +30,14 @@
30
30
  "hint"
31
31
  ],
32
32
  "devDependencies": {
33
- "eslint": "^9.8.0",
34
- "eslint-plugin-react": "^7.32.2",
35
- "eslint-plugin-sort-class-members": "^1.20.0"
33
+ "eslint": "^10.6.0"
34
+ },
35
+ "dependencies": {
36
+ "@eslint/js": "^10.0.1",
37
+ "eslint-plugin-sort-class-members": "^1.22.1",
38
+ "globals": "^17.7.0"
36
39
  },
37
40
  "peerDependencies": {
38
- "eslint": ">=8.0.0",
39
- "eslint-plugin-sort-class-members": "^1.20.0"
41
+ "eslint": ">=10.0.0"
40
42
  }
41
43
  }
package/test/core.js CHANGED
@@ -1,9 +1,10 @@
1
+ 'use strict';
2
+
1
3
  (async function() {
2
4
  const
3
5
  assert = require('assert'),
4
6
  {ESLint} = require('eslint'),
5
7
  files = ['**/*.js'],
6
- // configs = ['index', 'react', 'react-proptypes']
7
8
  configs = ['index']
8
9
  ;
9
10
 
@@ -17,7 +18,7 @@
17
18
  plugin = require(`../${name}.js`),
18
19
  eslint = new ESLint({
19
20
  overrideConfigFile: true,
20
- overrideConfig: plugin.configs['flat/recommended']
21
+ overrideConfig: plugin.configs.recommended
21
22
  }),
22
23
  results = await eslint.lintFiles(files)
23
24
  ;
package/test/helper.js CHANGED
@@ -1,3 +1,5 @@
1
+ 'use strict';
2
+
1
3
  const
2
4
  assert = require('assert'),
3
5
 
package/test/index.js CHANGED
@@ -1,2 +1,4 @@
1
+ 'use strict';
2
+
1
3
  require('./core');
2
4
  require('./helper');
@@ -1,19 +0,0 @@
1
- // @TODO: Add flat config
2
-
3
- module.exports = {
4
- plugins: [
5
- 'react'
6
- ],
7
- rules: {
8
- 'react/boolean-prop-naming': [2, {'rule': '^(is|has|can)[A-Z]([A-Za-z0-9]?)+'}],
9
- 'react/no-unused-prop-types': [2],
10
- 'react/require-default-props': [2],
11
- 'react/sort-prop-types': [2, {
12
- 'callbacksLast': true,
13
- 'ignoreCase': true,
14
- 'requiredFirst': true,
15
- 'sortShapeProp': true,
16
- 'noSortAlphabetically': false
17
- }]
18
- }
19
- };
package/react.js DELETED
@@ -1,79 +0,0 @@
1
- // @TODO: Add flat config
2
-
3
- const
4
- {CLASS_MEMBER_GROUPS, CLASS_MEMBER_ORDER} = require('./defaults/sort-class-members')
5
- ;
6
-
7
- module.exports = {
8
- extends: [
9
- 'plugin:react/recommended'
10
- ],
11
- plugins: [
12
- 'react',
13
- 'sort-class-members'
14
- ],
15
- rules: {
16
- 'react/button-has-type': [2],
17
- 'react/display-name': 'off',
18
- 'react/no-access-state-in-setstate': [2],
19
- 'react/no-unused-state': [2],
20
- 'react/require-render-return': [2],
21
- 'react/jsx-curly-spacing': [2, {'when': 'never', 'allowMultiline': true}],
22
- 'react/jsx-equals-spacing': [2, 'never'],
23
- 'react/jsx-no-bind': [2],
24
- 'react/jsx-curly-brace-presence': [2],
25
- 'react/jsx-fragments': [2, 'element'],
26
- 'react/jsx-pascal-case': [2],
27
- 'react/jsx-props-no-multi-spaces': [2],
28
- 'react/jsx-sort-props': [2, {
29
- 'callbacksLast': true,
30
- 'ignoreCase': true,
31
- 'noSortAlphabetically': false,
32
- 'reservedFirst': true
33
- }],
34
- 'react/jsx-tag-spacing': [2, {
35
- 'closingSlash': 'never',
36
- 'beforeSelfClosing': 'always',
37
- 'afterOpening': 'never',
38
- 'beforeClosing': 'never'
39
- }],
40
- 'react/jsx-wrap-multilines': [2, {
41
- 'declaration': 'parens',
42
- 'assignment': 'parens',
43
- 'return': 'parens',
44
- 'arrow': 'parens',
45
- 'condition': 'parens',
46
- 'logical': 'parens',
47
- 'prop': 'parens'
48
- }],
49
- 'sort-class-members/sort-class-members': [2, {
50
- order: CLASS_MEMBER_ORDER
51
- .insert('[framework-static-properties]').after('[static-properties]')
52
- .insert('[framework-static-methods]').after('[static-methods]')
53
- .insert('[framework-lifecycle-methods]').before('render'),
54
- groups: Object.assign({}, CLASS_MEMBER_GROUPS, {
55
- 'framework-static-properties': [
56
- {'name': 'propTypes', 'type': 'property', 'static': true},
57
- {'name': 'defaultProps', 'type': 'property', 'static': true}
58
- ],
59
- 'framework-static-methods': [
60
- {'name': 'getDerivedStateFromProps', 'type': 'method', 'static': true}
61
- ],
62
- 'framework-lifecycle-methods': [
63
- {'name': 'componentWillMount', 'type': 'method'},
64
- {'name': 'UNSAFE_componentWillMount', 'type': 'method'},
65
- {'name': 'componentDidMount', 'type': 'method'},
66
- {'name': 'componentWillReceiveProps', 'type': 'method'},
67
- {'name': 'UNSAFE_componentWillReceiveProps', 'type': 'method'},
68
- {'name': 'shouldComponentUpdate', 'type': 'method'},
69
- {'name': 'componentWillUpdate', 'type': 'method'},
70
- {'name': 'UNSAFE_componentWillUpdate', 'type': 'method'},
71
- {'name': 'getSnapshotBeforeUpdate', 'type': 'method'},
72
- {'name': 'componentDidUpdate', 'type': 'method'},
73
- {'name': 'componentDidCatch', 'type': 'method'},
74
- {'name': 'componentWillUnmount', 'type': 'method'}
75
- ]
76
- })
77
- }]
78
- }
79
- };