Skip to content

Commit f094d1c

Browse files
authored
Add pre-commit check and static code analysis (#94)
* Add precommit checks * Add static code analysis * Fix ESLint issues
1 parent a6df5d8 commit f094d1c

24 files changed

+18657
-701
lines changed

.eslintrc.react.yml

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
env:
2+
browser: true
3+
4+
extends:
5+
- ./.eslintrc.yml
6+
- plugin:react/recommended
7+
- plugin:react-hooks/recommended
8+
9+
parserOptions:
10+
ecmaFeatures:
11+
jsx: true
12+
13+
plugins:
14+
- react
15+
- react-hooks
16+
17+
rules:
18+
react/button-has-type: error
19+
react/default-props-match-prop-types: error
20+
react/destructuring-assignment: error
21+
react/display-name: off
22+
react/forbid-component-props:
23+
- error
24+
- forbid:
25+
- style
26+
react/forbid-dom-props:
27+
- error
28+
- forbid:
29+
- id
30+
31+
# Need to set "children" prop types to "any"
32+
# react/forbid-prop-types: error
33+
34+
react/no-access-state-in-setstate: error
35+
react/no-array-index-key: error
36+
react/no-danger: error
37+
react/no-did-mount-set-state: error
38+
react/no-did-update-set-state: error
39+
react/no-redundant-should-component-update: error
40+
react/no-typos: error
41+
react/no-this-in-sfc: error
42+
react/no-unescaped-entities: error
43+
react/no-unsafe: error
44+
react/no-unused-prop-types: error
45+
react/no-unused-state: error
46+
react/no-will-update-set-state: error
47+
react/prefer-es6-class: error
48+
react/prefer-read-only-props: error
49+
react/require-default-props: error
50+
react/self-closing-comp: error
51+
react/sort-prop-types:
52+
- error
53+
- ignoreCase: true
54+
react/state-in-constructor: error
55+
react/static-property-placement:
56+
- error
57+
- property assignment
58+
react/style-prop-object: error
59+
react/void-dom-elements-no-children: error
60+
react/jsx-boolean-value:
61+
- error
62+
- always
63+
react/jsx-closing-bracket-location:
64+
- error
65+
- tag-aligned
66+
react/jsx-closing-tag-location: error
67+
react/jsx-equals-spacing:
68+
- error
69+
- never
70+
react/jsx-first-prop-new-line:
71+
- error
72+
- multiline-multiprop
73+
react/jsx-handler-names: error
74+
react/jsx-indent:
75+
- error
76+
- 2
77+
react/jsx-indent-props:
78+
- error
79+
- 2
80+
react/jsx-max-props-per-line:
81+
- error
82+
- maximum: 1
83+
when: multiline
84+
react/jsx-no-bind: error
85+
react/jsx-no-literals: error
86+
87+
# Conflicts with prettier
88+
# react/jsx-one-expression-per-line:
89+
# - error
90+
# - allow: literal
91+
92+
react/jsx-fragments:
93+
- error
94+
- element
95+
react/jsx-pascal-case: error
96+
react/jsx-props-no-multi-spaces: error
97+
react/jsx-sort-default-props:
98+
- error
99+
- ignoreCase: true
100+
react/jsx-sort-props:
101+
- error
102+
- ignoreCase: true
103+
react/jsx-tag-spacing:
104+
- error
105+
- afterOpening: never
106+
beforeClosing: never
107+
beforeSelfClosing: always
108+
closingSlash: never
109+
110+
# Conflict with no-extra-parens
111+
react/jsx-wrap-multilines: error
112+
113+
react-hooks/rules-of-hooks: error
114+
react-hooks/exhaustive-deps: warn
115+
116+
settings:
117+
react:
118+
version: detect

.eslintrc.yml

Lines changed: 66 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
1-
env:
2-
browser: true
3-
es6: true
4-
jest: true
51
extends:
6-
- eslint:recommended
7-
globals:
8-
React: readonly
2+
- eslint:recommended
3+
4+
parserOptions:
5+
ecmaVersion: 12
6+
sourceType: module
7+
8+
plugins:
9+
- prettier
10+
911
root: true
12+
1013
rules:
1114
# Only list rules that are not in *:recommended set
1215
# If rules are set to disable the one in *:recommended, please elaborate the reason
@@ -15,28 +18,28 @@ rules:
1518
no-async-promise-executor: error
1619
no-await-in-loop: error
1720
no-console:
18-
- error
19-
- allow:
2021
- error
21-
- warn
22+
- allow:
23+
- error
24+
- warn
2225
# no-extra-parens: error # conflicts with prettier
2326
no-misleading-character-class: error
2427
no-template-curly-in-string: error
2528
require-atomic-updates: error
2629
accessor-pairs: error
2730
block-scoped-var: error
2831
class-methods-use-this:
29-
- error
30-
- exceptMethods:
31-
- render
32+
- error
33+
- exceptMethods:
34+
- render
3235
complexity: error
3336
curly: error
3437
default-case: error
3538
dot-notation: error
3639
eqeqeq: error
3740
max-classes-per-file:
38-
- error
39-
- 2
41+
- error
42+
- 2
4043
no-alert: error
4144
no-caller: error
4245
no-div-regex: error
@@ -54,13 +57,13 @@ rules:
5457
no-labels: error
5558
no-lone-blocks: error
5659
no-magic-numbers:
57-
- error
58-
- ignore:
59-
- 0
60-
- 1
60+
- error
61+
- ignore:
62+
- 0
63+
- 1
6164
no-multi-spaces:
62-
- error
63-
- ignoreEOLComments: true
65+
- error
66+
- ignoreEOLComments: true
6467
no-multi-str: error
6568
no-new: error
6669
no-new-func: error
@@ -75,9 +78,9 @@ rules:
7578
no-throw-literal: error
7679
no-unmodified-loop-condition: error
7780
no-unused-expressions:
78-
- error
79-
- allowShortCircuit: true
80-
allowTernary: true
81+
- error
82+
- allowShortCircuit: true
83+
allowTernary: true
8184
no-useless-call: error
8285
no-useless-catch: error
8386
no-useless-concat: error
@@ -94,11 +97,11 @@ rules:
9497
# Group - Variables
9598
no-label-var: error
9699

97-
# Re-enable later
100+
# Too easy for false positive
98101
# no-shadow:
99-
# - error
100-
# - builtinGlobals: true
101-
# hoist: all
102+
# - error
103+
# - builtinGlobals: true
104+
# hoist: all
102105

103106
no-shadow-restricted-names: error
104107
no-undef-init: error
@@ -107,33 +110,28 @@ rules:
107110
# no-undefined: off
108111

109112
no-unused-vars:
110-
- error
111-
- argsIgnorePattern: ^_$
112-
varsIgnorePattern: ^_
113-
no-use-before-define: error
113+
- error
114+
- argsIgnorePattern: ^_$
115+
varsIgnorePattern: ^_
114116

115-
# Group - Node.js and CommonJS
116-
callback-return: error
117-
global-require: error
118-
handle-callback-err: error
119-
no-buffer-constructor: error
120-
no-mixed-requires: error
121-
no-new-require: error
122-
no-path-concat: error
123-
no-sync: error
117+
no-use-before-define: error
124118

125119
# Group - ECMAScript 6
126120
arrow-body-style:
127-
- error
128-
- as-needed
121+
- error
122+
- as-needed
123+
129124
arrow-parens:
130-
- error
131-
- as-needed
125+
- error
126+
- as-needed
127+
132128
arrow-spacing:
133-
- error
134-
- after: true
135-
before: true
136-
# generator-star-spacing: # conflicts with prettier
129+
- error
130+
- after: true
131+
before: true
132+
133+
# Conflicts with Prettier
134+
# generator-star-spacing:
137135
# - error
138136
# - after
139137

@@ -158,20 +156,27 @@ rules:
158156
# prefer-template: error
159157

160158
rest-spread-spacing:
161-
- error
162-
- never
159+
- error
160+
- never
163161

164162
# Cannot group global or local imports and sort in differently
165-
# sort-imports:
166-
# - error
167-
# - ignoreCase: true
163+
sort-imports:
164+
- error
165+
- allowSeparatedGroups: true
166+
ignoreCase: true
167+
memberSyntaxSortOrder:
168+
- none
169+
- all
170+
- single
171+
- multiple
168172

169173
template-curly-spacing:
170-
- error
171-
- never
174+
- error
175+
- never
176+
172177
yield-star-spacing:
173-
- error
174-
- after
175-
settings:
176-
react:
177-
version: detect
178+
- error
179+
- after
180+
181+
# plugin:prettier
182+
prettier/prettier: error

.github/workflows/ci.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,8 +104,12 @@ jobs:
104104
run: npm run bootstrap
105105

106106
- name: Propagating versions
107+
run: node_modules/.bin/lerna version --force-publish --no-git-tag-version --no-push --yes `cat package.json | jq -r .version`
108+
109+
- name: Running static code analysis
107110
run: |
108-
node_modules/.bin/lerna version --force-publish --no-git-tag-version --no-push --yes `cat package.json | jq -r .version`
111+
cd packages/component
112+
npm run precommit src/
109113
110114
- name: Building for instrumentation
111115
env:

.husky/.gitattributes

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
pre-commit eol=lf

.husky/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
_

.husky/pre-commit

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
#!/bin/sh
2+
. "$(dirname "$0")/_/husky.sh"
3+
4+
npm run precommit

lint-staged.config.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module.exports = {
2+
'packages/component/src/**/*.js': ['npm run precommit:component']
3+
};

0 commit comments

Comments
 (0)