eslint-config-seekingalpha-react 10.28.2 → 10.29.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/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Change Log
2
2
 
3
+ ## 10.29.0 - 2026-03-10
4
+
5
+ - [new] extend oxlint config
6
+
3
7
  ## 10.28.2 - 2026-02-02
4
8
 
5
9
  - [new] extend oxlint config
@@ -0,0 +1,7 @@
1
+ import reactConfig from './rules/eslint-plugin-react/oxlint-config.js';
2
+ import jsxA11yConfig from './rules/eslint-plugin-jsx-a11y/oxlint-config.js';
3
+ import reactHooksConfig from './rules/eslint-plugin-react-hooks/oxlint-config.js';
4
+
5
+ export default {
6
+ extends: [reactConfig, jsxA11yConfig, reactHooksConfig],
7
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eslint-config-seekingalpha-react",
3
- "version": "10.28.2",
3
+ "version": "10.29.0",
4
4
  "description": "SeekingAlpha's sharable React.js ESLint config",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -0,0 +1,100 @@
1
+ export default {
2
+ plugins: ['jsx-a11y'],
3
+ rules: {
4
+ 'jsx-a11y/alt-text': [
5
+ 'error',
6
+ {
7
+ elements: ['img', 'object', 'area', "input[type='image']"],
8
+ img: [],
9
+ object: [],
10
+ area: [],
11
+ "input[type='image']": [],
12
+ },
13
+ ],
14
+ 'anchor-ambiguous-text': 'off',
15
+ 'jsx-a11y/anchor-has-content': 'off',
16
+ 'jsx-a11y/anchor-is-valid': [
17
+ 'error',
18
+ {
19
+ components: ['Anchor', 'Link'],
20
+ specialLink: ['to'],
21
+ aspects: ['noHref', 'invalidHref', 'preferButton'],
22
+ },
23
+ ],
24
+ 'jsx-a11y/aria-activedescendant-has-tabindex': 'error',
25
+ 'jsx-a11y/aria-props': 'error',
26
+ 'jsx-a11y/aria-proptypes': 'error',
27
+ 'jsx-a11y/aria-role': [
28
+ 'error',
29
+ {
30
+ ignoreNonDOM: false,
31
+ },
32
+ ],
33
+ 'jsx-a11y/aria-unsupported-elements': 'error',
34
+ 'jsx-a11y/autocomplete-valid': 'error',
35
+ 'jsx-a11y/click-events-have-key-events': 'error',
36
+ 'jsx-a11y/heading-has-content': [
37
+ 'error',
38
+ {
39
+ components: [''],
40
+ },
41
+ ],
42
+ 'jsx-a11y/html-has-lang': 'error',
43
+ 'jsx-a11y/iframe-has-title': 'error',
44
+ 'jsx-a11y/img-redundant-alt': 'error',
45
+ 'jsx-a11y/lang': 'error',
46
+ 'jsx-a11y/media-has-caption': [
47
+ 'error',
48
+ {
49
+ audio: [],
50
+ video: [],
51
+ track: [],
52
+ },
53
+ ],
54
+ 'jsx-a11y/mouse-events-have-key-events': 'error',
55
+ 'jsx-a11y/no-access-key': 'error',
56
+ 'jsx-a11y/no-aria-hidden-on-focusable': 'off',
57
+ 'jsx-a11y/no-autofocus': [
58
+ 'error',
59
+ {
60
+ ignoreNonDOM: true,
61
+ },
62
+ ],
63
+ 'jsx-a11y/no-distracting-elements': 'error',
64
+ 'jsx-a11y/no-noninteractive-tabindex': [
65
+ 'error',
66
+ {
67
+ tags: [],
68
+ roles: ['tabpanel'],
69
+ },
70
+ ],
71
+ 'jsx-a11y/no-redundant-roles': 'error',
72
+ 'jsx-a11y/no-static-element-interactions': [
73
+ 'error',
74
+ {
75
+ handlers: [
76
+ 'onClick',
77
+ 'onMouseDown',
78
+ 'onKeyPress',
79
+ 'onKeyDown',
80
+ 'onKeyUp',
81
+ ],
82
+ },
83
+ ],
84
+ 'jsx-a11y/role-has-required-aria-props': 'error',
85
+ 'jsx-a11y/role-supports-aria-props': 'error',
86
+ 'jsx-a11y/scope': 'error',
87
+ 'jsx-a11y/tabindex-no-positive': 'error',
88
+ 'jsx-a11y/label-has-associated-control': [
89
+ 'error',
90
+ {
91
+ labelComponents: [],
92
+ labelAttributes: [],
93
+ controlComponents: [],
94
+ assert: 'both',
95
+ depth: 10,
96
+ },
97
+ ],
98
+ 'jsx-a11y/prefer-tag-over-role': 'error',
99
+ },
100
+ };
@@ -0,0 +1,160 @@
1
+ export default {
2
+ plugins: ['react'],
3
+ rules: {
4
+ 'react/jsx-boolean-value': [
5
+ 'error',
6
+ 'never',
7
+ {
8
+ always: [],
9
+ },
10
+ ],
11
+ 'react/jsx-filename-extension': [
12
+ 'error',
13
+ {
14
+ extensions: ['.tsx'],
15
+ },
16
+ ],
17
+ 'react/jsx-fragments': ['error', 'syntax'],
18
+ 'react/jsx-handler-names': 'off',
19
+ 'react/jsx-key': [
20
+ 'error',
21
+ {
22
+ checkFragmentShorthand: true,
23
+ checkKeyMustBeforeSpread: true,
24
+ warnOnDuplicates: true,
25
+ },
26
+ ],
27
+ 'react/jsx-max-depth': [
28
+ 'error',
29
+ {
30
+ max: 10,
31
+ },
32
+ ],
33
+ 'react/jsx-no-comment-textnodes': 'error',
34
+ 'react/jsx-no-duplicate-props': 'error',
35
+ 'react/jsx-props-no-spread-multi': 'error',
36
+ 'react/no-multi-comp': 'off',
37
+ 'react/jsx-no-target-blank': [
38
+ 'error',
39
+ {
40
+ enforceDynamicLinks: 'always',
41
+ },
42
+ ],
43
+ 'react/jsx-no-undef': 'error',
44
+ 'react/jsx-curly-brace-presence': [
45
+ 'error',
46
+ {
47
+ props: 'never',
48
+ children: 'never',
49
+ },
50
+ ],
51
+ 'react/jsx-pascal-case': [
52
+ 'error',
53
+ {
54
+ allowAllCaps: false,
55
+ ignore: [],
56
+ },
57
+ ],
58
+ 'react/no-danger': 'error',
59
+ 'react/jsx-props-no-spreading': 'off',
60
+ 'react/jsx-no-useless-fragment': [
61
+ 'error',
62
+ {
63
+ allowExpressions: true,
64
+ },
65
+ ],
66
+ 'react/jsx-no-script-url': 'error',
67
+ 'react/button-has-type': [
68
+ 'error',
69
+ {
70
+ button: true,
71
+ submit: true,
72
+ reset: true,
73
+ },
74
+ ],
75
+ 'react/checked-requires-onchange-or-readonly': 'error',
76
+ 'react/display-name': 'off',
77
+ 'react/forbid-dom-props': [
78
+ 'error',
79
+ {
80
+ forbid: [
81
+ 'abbr',
82
+ 'align',
83
+ 'axis',
84
+ 'bgcolor',
85
+ 'border',
86
+ 'cellpadding',
87
+ 'cellspacing',
88
+ 'char',
89
+ 'charoff',
90
+ 'charset',
91
+ 'clear',
92
+ 'coords',
93
+ 'frame',
94
+ 'frameborder',
95
+ 'hspace',
96
+ 'longdesc',
97
+ 'marginheight',
98
+ 'marginwidth',
99
+ 'rev',
100
+ 'scope',
101
+ 'scrolling',
102
+ 'shape',
103
+ 'size',
104
+ 'valign',
105
+ 'vspace',
106
+ ],
107
+ },
108
+ ],
109
+ 'react/forbid-elements': [
110
+ 'error',
111
+ {
112
+ forbid: [
113
+ 'acronym',
114
+ 'applet',
115
+ 'basefont',
116
+ 'big',
117
+ 'center',
118
+ 'dir',
119
+ 'font',
120
+ 'frame',
121
+ 'frameset',
122
+ 'noframes',
123
+ 'isindex',
124
+ 'noframes',
125
+ 's',
126
+ 'strike',
127
+ 'tt',
128
+ 'u',
129
+ ],
130
+ },
131
+ ],
132
+ 'react/forward-ref-uses-ref': 'error',
133
+ 'react/iframe-missing-sandbox': 'error',
134
+ 'react/no-array-index-key': 'error',
135
+ 'react/no-children-prop': 'error',
136
+ 'react/no-danger-with-children': 'error',
137
+ 'react/no-did-mount-set-state': 'off',
138
+ 'react/no-direct-mutation-state': 'error',
139
+ 'react/no-find-dom-node': 'error',
140
+ 'react/no-is-mounted': 'error',
141
+ 'react/no-namespace': 'error',
142
+ 'react/no-redundant-should-component-update': 'error',
143
+ 'react/no-render-return-value': 'error',
144
+ 'react/no-set-state': 'off',
145
+ 'react/only-export-components': 'off',
146
+ 'react/no-string-refs': 'error',
147
+ 'react/no-this-in-sfc': 'error',
148
+ 'react/no-unescaped-entities': 'error',
149
+ 'react/no-unknown-property': 'error',
150
+ 'react/no-unsafe': 'error',
151
+ 'react/no-will-update-set-state': 'error',
152
+ 'react/prefer-es6-class': ['error', 'always'],
153
+ 'react/react-in-jsx-scope': 'off',
154
+ 'require-render-return': 'error',
155
+ 'react/self-closing-comp': 'error',
156
+ 'react/style-prop-object': 'error',
157
+ 'react/void-dom-elements-no-children': 'error',
158
+ 'react/state-in-constructor': ['error', 'always'],
159
+ },
160
+ };
@@ -0,0 +1,7 @@
1
+ export default {
2
+ plugins: ['react'],
3
+ rules: {
4
+ 'react-hooks/rules-of-hooks': 'error',
5
+ 'react-hooks/exhaustive-deps': 'error',
6
+ },
7
+ };
@@ -1,8 +0,0 @@
1
- {
2
- "$schema": "./node_modules/oxlint/configuration_schema.json",
3
- "extends": [
4
- "./rules/eslint-plugin-react/oxlint-config.json",
5
- "./rules/eslint-plugin-jsx-a11y/oxlint-config.json",
6
- "./rules/eslint-plugin-react-hooks/oxlint-config.json"
7
- ]
8
- }
@@ -1,101 +0,0 @@
1
- {
2
- "$schema": "./node_modules/oxlint/configuration_schema.json",
3
- "plugins": ["jsx-a11y"],
4
- "rules": {
5
- "jsx-a11y/alt-text": [
6
- "error",
7
- {
8
- "elements": ["img", "object", "area", "input[type='image']"],
9
- "img": [],
10
- "object": [],
11
- "area": [],
12
- "input[type='image']": []
13
- }
14
- ],
15
- "anchor-ambiguous-text": "off",
16
- "jsx-a11y/anchor-has-content": "off",
17
- "jsx-a11y/anchor-is-valid": [
18
- "error",
19
- {
20
- "components": ["Anchor", "Link"],
21
- "specialLink": ["to"],
22
- "aspects": ["noHref", "invalidHref", "preferButton"]
23
- }
24
- ],
25
- "jsx-a11y/aria-activedescendant-has-tabindex": "error",
26
- "jsx-a11y/aria-props": "error",
27
- "jsx-a11y/aria-proptypes": "error",
28
- "jsx-a11y/aria-role": [
29
- "error",
30
- {
31
- "ignoreNonDOM": false
32
- }
33
- ],
34
- "jsx-a11y/aria-unsupported-elements": "error",
35
- "jsx-a11y/autocomplete-valid": "error",
36
- "jsx-a11y/click-events-have-key-events": "error",
37
- "jsx-a11y/heading-has-content": [
38
- "error",
39
- {
40
- "components": [""]
41
- }
42
- ],
43
- "jsx-a11y/html-has-lang": "error",
44
- "jsx-a11y/iframe-has-title": "error",
45
- "jsx-a11y/img-redundant-alt": "error",
46
- "jsx-a11y/lang": "error",
47
- "jsx-a11y/media-has-caption": [
48
- "error",
49
- {
50
- "audio": [],
51
- "video": [],
52
- "track": []
53
- }
54
- ],
55
- "jsx-a11y/mouse-events-have-key-events": "error",
56
- "jsx-a11y/no-access-key": "error",
57
- "jsx-a11y/no-aria-hidden-on-focusable": "off",
58
- "jsx-a11y/no-autofocus": [
59
- "error",
60
- {
61
- "ignoreNonDOM": true
62
- }
63
- ],
64
- "jsx-a11y/no-distracting-elements": "error",
65
- "jsx-a11y/no-noninteractive-tabindex": [
66
- "error",
67
- {
68
- "tags": [],
69
- "roles": ["tabpanel"]
70
- }
71
- ],
72
- "jsx-a11y/no-redundant-roles": "error",
73
- "jsx-a11y/no-static-element-interactions": [
74
- "error",
75
- {
76
- "handlers": [
77
- "onClick",
78
- "onMouseDown",
79
- "onKeyPress",
80
- "onKeyDown",
81
- "onKeyUp"
82
- ]
83
- }
84
- ],
85
- "jsx-a11y/role-has-required-aria-props": "error",
86
- "jsx-a11y/role-supports-aria-props": "error",
87
- "jsx-a11y/scope": "error",
88
- "jsx-a11y/tabindex-no-positive": "error",
89
- "jsx-a11y/label-has-associated-control": [
90
- "error",
91
- {
92
- "labelComponents": [],
93
- "labelAttributes": [],
94
- "controlComponents": [],
95
- "assert": "both",
96
- "depth": 10
97
- }
98
- ],
99
- "jsx-a11y/prefer-tag-over-role": "error"
100
- }
101
- }
@@ -1,161 +0,0 @@
1
- {
2
- "$schema": "./node_modules/oxlint/configuration_schema.json",
3
- "plugins": ["react"],
4
- "rules": {
5
- "react/jsx-boolean-value": [
6
- "error",
7
- "never",
8
- {
9
- "always": []
10
- }
11
- ],
12
- "react/jsx-filename-extension": [
13
- "error",
14
- {
15
- "extensions": [".tsx"]
16
- }
17
- ],
18
- "react/jsx-fragments": ["error", "syntax"],
19
- "react/jsx-handler-names": "off",
20
- "react/jsx-key": [
21
- "error",
22
- {
23
- "checkFragmentShorthand": true,
24
- "checkKeyMustBeforeSpread": true,
25
- "warnOnDuplicates": true
26
- }
27
- ],
28
- "react/jsx-max-depth": [
29
- "error",
30
- {
31
- "max": 10
32
- }
33
- ],
34
- "react/jsx-no-comment-textnodes": "error",
35
- "react/jsx-no-duplicate-props": "error",
36
- "react/jsx-props-no-spread-multi": "error",
37
- "react/no-multi-comp": "off",
38
- "react/jsx-no-target-blank": [
39
- "error",
40
- {
41
- "enforceDynamicLinks": "always"
42
- }
43
- ],
44
- "react/jsx-no-undef": "error",
45
- "react/jsx-curly-brace-presence": [
46
- "error",
47
- {
48
- "props": "never",
49
- "children": "never"
50
- }
51
- ],
52
- "react/jsx-pascal-case": [
53
- "error",
54
- {
55
- "allowAllCaps": false,
56
- "ignore": []
57
- }
58
- ],
59
- "react/no-danger": "error",
60
- "react/jsx-props-no-spreading": "off",
61
- "react/jsx-no-useless-fragment": [
62
- "error",
63
- {
64
- "allowExpressions": true
65
- }
66
- ],
67
- "react/jsx-no-script-url": "error",
68
- "react/button-has-type": [
69
- "error",
70
- {
71
- "button": true,
72
- "submit": true,
73
- "reset": true
74
- }
75
- ],
76
- "react/checked-requires-onchange-or-readonly": "error",
77
- "react/display-name": "off",
78
- "react/forbid-dom-props": [
79
- "error",
80
- {
81
- "forbid": [
82
- "abbr",
83
- "align",
84
- "axis",
85
- "bgcolor",
86
- "border",
87
- "cellpadding",
88
- "cellspacing",
89
- "char",
90
- "charoff",
91
- "charset",
92
- "clear",
93
- "coords",
94
- "frame",
95
- "frameborder",
96
- "hspace",
97
- "longdesc",
98
- "marginheight",
99
- "marginwidth",
100
- "rev",
101
- "scope",
102
- "scrolling",
103
- "shape",
104
- "size",
105
- "valign",
106
- "vspace"
107
- ]
108
- }
109
- ],
110
- "react/forbid-elements": [
111
- "error",
112
- {
113
- "forbid": [
114
- "acronym",
115
- "applet",
116
- "basefont",
117
- "big",
118
- "center",
119
- "dir",
120
- "font",
121
- "frame",
122
- "frameset",
123
- "noframes",
124
- "isindex",
125
- "noframes",
126
- "s",
127
- "strike",
128
- "tt",
129
- "u"
130
- ]
131
- }
132
- ],
133
- "react/forward-ref-uses-ref": "error",
134
- "react/iframe-missing-sandbox": "error",
135
- "react/no-array-index-key": "error",
136
- "react/no-children-prop": "error",
137
- "react/no-danger-with-children": "error",
138
- "react/no-did-mount-set-state": "off",
139
- "react/no-direct-mutation-state": "error",
140
- "react/no-find-dom-node": "error",
141
- "react/no-is-mounted": "error",
142
- "react/no-namespace": "error",
143
- "react/no-redundant-should-component-update": "error",
144
- "react/no-render-return-value": "error",
145
- "react/no-set-state": "off",
146
- "react/only-export-components": "off",
147
- "react/no-string-refs": "error",
148
- "react/no-this-in-sfc": "error",
149
- "react/no-unescaped-entities": "error",
150
- "react/no-unknown-property": "error",
151
- "react/no-unsafe": "error",
152
- "react/no-will-update-set-state": "error",
153
- "react/prefer-es6-class": ["error", "always"],
154
- "react/react-in-jsx-scope": "off",
155
- "require-render-return": "error",
156
- "react/self-closing-comp": "error",
157
- "react/style-prop-object": "error",
158
- "react/void-dom-elements-no-children": "error",
159
- "react/state-in-constructor": ["error", "always"]
160
- }
161
- }
@@ -1,8 +0,0 @@
1
- {
2
- "$schema": "./node_modules/oxlint/configuration_schema.json",
3
- "plugins": ["react"],
4
- "rules": {
5
- "react-hooks/rules-of-hooks": "error",
6
- "react-hooks/exhaustive-deps": "error"
7
- }
8
- }