Skip to content

Commit b3ac2db

Browse files
committed
style: add rules for JSX formatting
1 parent e598660 commit b3ac2db

File tree

12 files changed

+388
-297
lines changed

12 files changed

+388
-297
lines changed

.eslintrc.js

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,53 @@ module.exports = {
6868
camelcase: 'off',
6969
'react/prop-types': 'off',
7070
'react/display-name': 'off',
71+
indent: ['error', 2, {
72+
SwitchCase: 1,
73+
offsetTernaryExpressions: true,
74+
// from: https://github.com/airbnb/javascript/blob/master/packages/eslint-config-airbnb-base/rules/style.js
75+
ignoredNodes: [
76+
'JSXElement',
77+
'JSXElement :not(JSXExpressionContainer, JSXExpressionContainer *)',
78+
'JSXAttribute',
79+
'JSXIdentifier',
80+
'JSXNamespacedName',
81+
'JSXMemberExpression',
82+
'JSXSpreadAttribute',
83+
'JSXOpeningElement',
84+
'JSXClosingElement',
85+
'JSXFragment',
86+
'JSXOpeningFragment',
87+
'JSXClosingFragment',
88+
'JSXText',
89+
'JSXEmptyExpression',
90+
'JSXSpreadChild'
91+
]
92+
}],
93+
'react/jsx-indent': ['error', 2, { checkAttributes: false, indentLogicalExpressions: true }],
94+
'react/jsx-indent-props': ['error', 2],
95+
'react/jsx-first-prop-new-line': ['error', 'multiline-multiprop'],
96+
'react/jsx-closing-bracket-location': ['error', 'tag-aligned'],
97+
'react/jsx-max-props-per-line': ['error', { maximum: 1, when: 'multiline' }],
98+
'react/jsx-tag-spacing': ['error', {
99+
closingSlash: 'never',
100+
beforeSelfClosing: 'always',
101+
afterOpening: 'never',
102+
beforeClosing: 'never'
103+
}],
104+
'react/jsx-wrap-multilines': ['error', {
105+
declaration: 'parens-new-line',
106+
assignment: 'parens-new-line',
107+
return: 'parens-new-line',
108+
arrow: 'parens-new-line',
109+
condition: 'parens-new-line',
110+
logical: 'parens-new-line',
111+
prop: 'parens-new-line'
112+
}],
113+
'react/jsx-curly-spacing': ['error', 'never', { allowMultiline: true }],
114+
'react/jsx-curly-newline': ['error', {
115+
multiline: 'consistent',
116+
singleline: 'consistent'
117+
}],
71118
'@typescript-eslint/no-var-requires': 'off',
72119
'@typescript-eslint/camelcase': 'off',
73120
'@typescript-eslint/ban-ts-ignore': 'off',

docs/pages/full/index.tsx

Lines changed: 42 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,9 @@ const example = {
105105
}
106106

107107
const KeyRenderer: JsonViewerKeyRenderer = ({ path }) => {
108-
return <del aria-label='I dont like this number'>&quot;{path.slice(
109-
-1)}&quot;</del>
108+
return (
109+
<del aria-label='I dont like this number'>&quot;{path.slice(-1)}&quot;</del>
110+
)
110111
}
111112
KeyRenderer.when = (props) => props.value === 114.514
112113

@@ -145,36 +146,44 @@ const IndexPage: FC = () => {
145146
</Typography>
146147
</Toolbar>
147148
</AppBar>
148-
<Box sx={{
149-
display: 'flex',
150-
alignItems: 'center',
151-
flexWrap: 'wrap',
152-
width: '100%',
153-
gap: '10px',
154-
paddingX: '5px',
155-
paddingY: '10px',
156-
minHeight: '64px',
157-
marginTop: '64px'
158-
}}>
149+
<Box
150+
sx={{
151+
display: 'flex',
152+
alignItems: 'center',
153+
flexWrap: 'wrap',
154+
width: '100%',
155+
gap: '10px',
156+
paddingX: '5px',
157+
paddingY: '10px',
158+
minHeight: '64px',
159+
marginTop: '64px'
160+
}}
161+
>
159162
<FormControlLabel
160-
control={<Switch
161-
checked={editable}
162-
onChange={event => setEditable(event.target.checked)}
163-
/>}
163+
control={(
164+
<Switch
165+
checked={editable}
166+
onChange={event => setEditable(event.target.checked)}
167+
/>
168+
)}
164169
label='Editable'
165170
/>
166171
<FormControlLabel
167-
control={<Switch
168-
checked={displayDataTypes}
169-
onChange={event => setDisplayDataTypes(event.target.checked)}
170-
/>}
172+
control={(
173+
<Switch
174+
checked={displayDataTypes}
175+
onChange={event => setDisplayDataTypes(event.target.checked)}
176+
/>
177+
)}
171178
label='DisplayDataTypes'
172179
/>
173180
<FormControlLabel
174-
control={<Switch
175-
checked={displayObjectSize}
176-
onChange={event => setDisplayObjectSize(event.target.checked)}
177-
/>}
181+
control={(
182+
<Switch
183+
checked={displayObjectSize}
184+
onChange={event => setDisplayObjectSize(event.target.checked)}
185+
/>
186+
)}
178187
label='DisplayObjectSize'
179188
/>
180189
<TextField
@@ -252,8 +261,14 @@ const IndexPage: FC = () => {
252261
return false
253262
},
254263
(props) => {
255-
return <Image height={50} width={50} src={props.value}
256-
alt={props.value} />
264+
return (
265+
<Image
266+
height={50}
267+
width={50}
268+
src={props.value}
269+
alt={props.value}
270+
/>
271+
)
257272
}
258273
)
259274
]}

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@
5050
],
5151
"scripts": {
5252
"test": "vitest",
53+
"test:run": "vitest run",
54+
"dev": "yarn workspace @textea/json-viewer-docs dev",
5355
"coverage": "vitest run --coverage",
5456
"postinstall": "husky install",
5557
"prepack": "pinst --disable",

src/browser.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ export default class JsonViewer {
2323

2424
if (container) {
2525
this.root = createRoot(container)
26-
this.root.render(<JsonViewerComponent {...this.props}/>)
26+
this.root.render(<JsonViewerComponent {...this.props} />)
2727
}
2828
}
2929

0 commit comments

Comments
 (0)