Skip to content
This repository was archived by the owner on Feb 20, 2025. It is now read-only.

Commit c1eb663

Browse files
committed
update ruleset and readme
1 parent d125a29 commit c1eb663

File tree

2 files changed

+226
-87
lines changed

2 files changed

+226
-87
lines changed

.eslintrc

Lines changed: 207 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
{
22
"env": {
33
"browser": true,
4-
"node": true
4+
"node": true,
5+
"jest/globals": true
56
},
67
"settings": {
78
"react": {
@@ -15,92 +16,221 @@
1516
"sourceType": "module"
1617
},
1718
"rules": {
18-
// Best practices
19-
"block-scoped-var": 2,
20-
"consistent-return": 1,
21-
"curly": [2, "multi-line"],
22-
"default-case": 2,
23-
"dot-location": [2, "property"],
24-
"eqeqeq": [1, "always"],
25-
"max-classes-per-file": [2, 1],
26-
"no-empty-function": 1,
27-
"no-empty-pattern": 1,
28-
"no-eq-null": 2,
29-
"no-eval": 2,
30-
"no-implied-eval": 2,
31-
"no-iterator": 2,
32-
"no-lone-blocks": 2,
33-
"no-multi-spaces": 1,
34-
"no-multi-str": 2,
35-
"no-new": 1,
36-
"no-new-func": 2,
37-
"no-new-wrappers": 2,
38-
"no-param-reassign": 2,
39-
"no-redeclare": 1,
40-
"no-return-assign": 2,
41-
"no-script-url": 2,
42-
"no-self-assign": 2,
43-
"no-self-compare": 2,
44-
"no-unmodified-loop-condition": 1,
45-
"no-useless-return": 1,
46-
"yoda": [1, "never", {"onlyEquality": true}],
47-
48-
// Variables
49-
"no-undef-init": 2,
50-
"no-undefined": 2,
51-
"no-unused-vars": 1,
52-
"no-use-before-define": 2,
53-
54-
// Node.js and CommonJS
55-
"no-new-require": 2,
56-
"no-path-concat": 1,
57-
58-
// Stylistic
59-
"jsx-quotes": [2, "prefer-double"],
60-
"no-lonely-if": 2,
61-
"no-mixed-spaces-and-tabs": 2,
62-
"no-multi-assign": 2,
63-
"quotes": [1, "single", {
64-
"avoidEscape": true,
65-
"allowTemplateLiterals": true
19+
"for-direction": "error",
20+
"getter-return": "error",
21+
"no-async-promise-executor": "error",
22+
"no-await-in-loop": "warn",
23+
"no-compare-neg-zero": "error",
24+
"no-cond-assign": "error",
25+
"no-constant-condition": "error",
26+
"no-debugger": "error",
27+
"no-dupe-args": "error",
28+
"no-dupe-keys": "error",
29+
"no-duplicate-case": "error",
30+
"no-empty": "error",
31+
"no-empty-character-class": "error",
32+
"no-ex-assign": "error",
33+
"no-extra-boolean-cast": "error",
34+
"no-extra-parens": ["error", "all", {
35+
"returnAssign": false,
36+
"nestedBinaryExpressions": false,
37+
"ignoreJSX": "multi-line"
38+
}],
39+
"no-extra-semi": "error",
40+
"no-func-assign": "error",
41+
"no-inner-declarations": "error",
42+
"no-irregular-whitespace": [ "error", { "skipRegExps": true }],
43+
"no-obj-calls": "error",
44+
"no-regex-spaces": "error",
45+
"no-sparse-arrays": "error",
46+
"no-template-curly-in-string": "warn",
47+
"no-unexpected-multiline": "error",
48+
"no-unreachable": "error",
49+
"no-unsafe-finally": "error",
50+
"no-unsafe-negation": "error",
51+
"require-atomic-updates": "error",
52+
"use-isnan": "error",
53+
"valid-typeof": "error",
54+
"array-callback-return": "error",
55+
"class-methods-use-this": "error",
56+
"consistent-return": "error",
57+
"curly": ["error", "multi-line"],
58+
"dot-location": ["error", "property"],
59+
"dot-notation": "error",
60+
"eqeqeq": ["error", "always"],
61+
"guard-for-in": "error",
62+
"no-alert": "error",
63+
"no-caller": "error",
64+
"no-empty-function": "error",
65+
"no-empty-pattern": "error",
66+
"no-eq-null": "error",
67+
"no-eval": "error",
68+
"no-extend-native": "error",
69+
"no-fallthrough": "error",
70+
"no-floating-decimal": "error",
71+
"no-global-assign": "error",
72+
"no-implicit-coercion": ["error", { "boolean": false }],
73+
"no-implied-eval": "error",
74+
"no-invalid-this": "error",
75+
"no-iterator": "error",
76+
"no-labels": "error",
77+
"no-lone-blocks": "error",
78+
"no-multi-spaces": "error",
79+
"no-multi-str": "error",
80+
"no-new": "error",
81+
"no-new-func": "error",
82+
"no-new-wrappers": "error",
83+
"no-octal": "error",
84+
"no-proto": "error",
85+
"no-redeclare": "error",
86+
"no-return-assign": ["error", "always"],
87+
"no-return-await": "error",
88+
"no-script-url": "error",
89+
"no-self-assign": "error",
90+
"no-self-compare": "error",
91+
"no-sequences": "error",
92+
"no-throw-literal": "error",
93+
"no-unused-labels": "error",
94+
"no-useless-concat": "error",
95+
"no-useless-escape": "error",
96+
"no-useless-return": "error",
97+
"no-void": "error",
98+
"no-with": "error",
99+
"radix": "error",
100+
"require-await": "warn",
101+
"wrap-iife": ["error", "inside"],
102+
"yoda": ["error", "never", { "exceptRange": true }],
103+
"no-delete-var": "error",
104+
"no-label-var": "error",
105+
"no-shadow": "error",
106+
"no-shadow-restricted-names": "error",
107+
"no-undef": "error",
108+
"no-undef-init": "error",
109+
"no-undefined": "error",
110+
"no-unused-vars": "warn",
111+
"no-use-before-define": ["error", { "functions": false }],
112+
"callback-return": "warn",
113+
"no-mixed-requires": "error",
114+
"no-new-require": "error",
115+
"no-path-concat": "error",
116+
"array-bracket-newline": ["error", "consistent"],
117+
"array-bracket-spacing": ["error", "never"],
118+
"array-element-newline": ["error", "consistent"],
119+
"block-spacing": "error",
120+
"brace-style": "error",
121+
"camelcase": ["error", { "properties": "never" }],
122+
"comma-dangle": ["error", "never"],
123+
"comma-spacing": ["error", {
124+
"before": false,
125+
"after": true
126+
}],
127+
"comma-style": ["error", "last"],
128+
"computed-property-spacing": ["error", "never"],
129+
"func-call-spacing": ["error", "never"],
130+
"indent": ["error", 2, {
131+
"VariableDeclarator": "first",
132+
"SwitchCase": 1,
133+
"MemberExpression": 1
134+
}],
135+
"jsx-quotes": ["error", "prefer-double"],
136+
"key-spacing": ["error", {
137+
"beforeColon": false,
138+
"afterColon": true,
139+
"mode": "strict"
140+
}],
141+
"keyword-spacing": "error",
142+
"line-comment-position": ["error", { "position": "above" }],
143+
"new-parens": "error",
144+
"no-array-constructor": "error",
145+
"no-lonely-if": "error",
146+
"no-mixed-operators": "error",
147+
"no-mixed-spaces-and-tabs": "error",
148+
"no-multi-assign": "error",
149+
"no-multiple-empty-lines": ["error", {
150+
"max": 1,
151+
"maxBOF": 0,
152+
"maxEOF": 1
66153
}],
67-
"semi-spacing": [2, {"before": false, "after": true}],
68-
"semi-style": [2, "last"],
69-
"space-before-function-paren": [2, {
154+
"no-new-object": "error",
155+
"no-tabs": "error",
156+
"no-trailing-spaces": "error",
157+
"no-unneeded-ternary": "error",
158+
"no-whitespace-before-property": "error",
159+
"nonblock-statement-body-position": ["error", "beside"],
160+
"object-curly-newline": ["error", { "consistent": true }],
161+
"object-curly-spacing": ["error", "always", { "objectsInObjects": false }],
162+
"operator-assignment": ["error", "always"],
163+
"operator-linebreak": ["error", "before", {
164+
"overrides": {
165+
"||": "after",
166+
"&&": "after"
167+
}
168+
}],
169+
"padded-blocks": ["error", "never"],
170+
"quote-props": ["error", "as-needed"],
171+
"quotes": ["error", "single", { "allowTemplateLiterals": true }],
172+
"semi": ["error", "always"],
173+
"semi-spacing": ["error", {
174+
"before": false,
175+
"after": true
176+
}],
177+
"semi-style": ["error", "last"],
178+
"space-before-blocks": "error",
179+
"space-before-function-paren": ["error", {
70180
"anonymous": "never",
71181
"named": "never",
72182
"asyncArrow": "always"
73183
}],
74-
75-
// ES6
76-
"arrow-parens": [1, "always"],
77-
"constructor-super": 2,
78-
"no-class-assign": 2,
79-
"no-confusing-arrow": 1,
80-
"no-const-assign": 2,
81-
"no-duplicate-imports": 2,
82-
"no-this-before-super": 1,
83-
"no-useless-rename": 2,
84-
"no-var": 2,
85-
"require-yield": 2,
86-
"rest-spread-spacing": [2, "never"],
184+
"space-in-parens": "error",
185+
"space-infix-ops": "error",
186+
"space-unary-ops": ["error", {
187+
"words": true,
188+
"nonwords": false
189+
}],
190+
"spaced-comment": ["error", "always", {
191+
"line": { "exceptions": ["-", "+"] },
192+
"block": { "exceptions": ["*"], "balanced": true }
193+
}],
194+
"switch-colon-spacing": "error",
195+
"template-tag-spacing": "error",
196+
"arrow-parens": ["error", "as-needed", { "requireForBlockBody": true }],
197+
"arrow-spacing": "error",
198+
"constructor-super": "error",
199+
"generator-star-spacing": ["error", {
200+
"before": true,
201+
"after": false
202+
}],
203+
"no-class-assign": "error",
204+
"no-confusing-arrow": ["error", { "allowParens": true }],
205+
"no-const-assign": "error",
206+
"no-dupe-class-members": "error",
207+
"no-duplicate-imports": "error",
208+
"no-new-symbol": "error",
209+
"no-this-before-super": "error",
210+
"no-useless-computed-key": "error",
211+
"no-useless-constructor": "error",
212+
"no-useless-rename": "error",
213+
"require-yield": "error",
214+
"rest-spread-spacing": "error",
215+
"template-curly-spacing": "error",
216+
"yield-star-spacing": ["error", "before"],
87217

88218
// React
89-
"react/jsx-key": 2,
90-
"react/jsx-no-bind": [1, {
219+
"react/jsx-key": "error",
220+
"react/jsx-no-bind": ["error", {
91221
"ignoreRefs": true,
92222
"allowArrowFunctions": true,
93223
"allowBind": false
94224
}],
95-
"react/jsx-no-duplicate-props": 2,
96-
"react/jsx-pascal-case": 2,
97-
"react/jsx-uses-react": 2,
98-
"react/jsx-uses-vars": 2,
99-
"react/no-danger": 1,
100-
"react/no-deprecated": 1,
101-
"react/no-is-mounted": 2,
102-
"react/no-unknown-property": 2,
103-
"react/react-in-jsx-scope": 2,
104-
"react/require-render-return": 2
225+
"react/jsx-no-duplicate-props": "error",
226+
"react/jsx-pascal-case": "error",
227+
"react/jsx-uses-react": "error",
228+
"react/jsx-uses-vars": "error",
229+
"react/no-danger": "error",
230+
"react/no-deprecated": "error",
231+
"react/no-is-mounted": "error",
232+
"react/no-unknown-property": "error",
233+
"react/react-in-jsx-scope": "error",
234+
"react/require-render-return": "error"
105235
}
106236
}

README.md

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
1-
[![License](https://img.shields.io/github/license/adamdavies001/react-hooks-object-state)](https://github.com/adamdavies001/react-hooks-object-state/blob/master/LICENSE)
2-
[![NPM Version](https://img.shields.io/npm/v/react-hooks-object-state)](https://www.npmjs.com/package/react-hooks-object-state)
3-
[![Travis Build Status](https://img.shields.io/travis/adamdavies001/react-hooks-object-state)](https://travis-ci.org/adamdavies001/react-hooks-object-state)
4-
[![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/jc0a2g2t7t4logcu?svg=true)](https://ci.appveyor.com/project/adamdavies001/react-hooks-object-state)
5-
[![Codecov](https://img.shields.io/codecov/c/gh/adamdavies001/react-hooks-object-state)](https://codecov.io/gh/adamdavies001/react-hooks-object-state)
1+
[![License][license-img]][license-link]
2+
[![NPM Version][npm-img]][npm-link]
3+
[![Travis Build Status][travis-img]][travis-link]
4+
[![Codecov][coverage-img]][coverage-link]
65

76
## About
87

9-
This package is a React hook for partially updating object states within functional components that avoids the default behavior of `useState` that overwrites the entire object state. It reflects the merge behavior of `setState` used in classical components.
8+
A React hook for partially updating object states within functional components that avoids the default behavior of `useState` that overwrites the entire object state. It reflects the merge behavior of `setState` used in classical components.
109

1110
**Use this** when you need an object state that shouldn't be split up into multiple states.
1211
**Don't use this** if you only need an object state with a few simple properties.
@@ -35,9 +34,7 @@ import useObjectState from 'react-hooks-object-state';
3534
const Example = () => {
3635
const [myObject, setMyObject] = useObjectState({ bool: true, string: 'foo' });
3736

38-
const updateObject = () => {
39-
setMyObject({ bool: false });
40-
}
37+
const updateObject = () => setMyObject({ bool: false });
4138

4239
return <button onClick={updateObject}>Update object</button>;
4340
}
@@ -69,4 +66,16 @@ The use of `props` in function arguments is not included since hooks are not abl
6966

7067
An initial object **must** be provided to `useObjectState`. This hook deep-merges objects by copying common entries from a source to a target object.
7168

72-
Like the classical `setState` method, this does not create entries if they don't already exist. Providing an empty initial object will always result in an empty object.
69+
Like the classical `setState` method, this does not create entries if they don't already exist. Providing an empty initial object will always result in an empty object.
70+
71+
[license-img]: https://img.shields.io/github/license/acdvs/react-hooks-object-state
72+
[license-link]: https://github.com/acdvs/react-hooks-object-state/blob/master/LICENSE
73+
74+
[npm-img]: https://img.shields.io/npm/v/react-hooks-object-state
75+
[npm-link]: https://www.npmjs.com/package/react-hooks-object-state
76+
77+
[travis-img]: https://img.shields.io/travis/acdvs/react-hooks-object-state
78+
[travis-link]: https://travis-ci.org/acdvs/react-hooks-object-state
79+
80+
[coverage-img]: https://img.shields.io/codecov/c/gh/adamdavies001/react-hooks-object-state
81+
[coverage-link]: https://codecov.io/gh/adamdavies001/react-hooks-object-state

0 commit comments

Comments
 (0)