Skip to content

Commit 9d1620c

Browse files
committed
Add component interface rule
1 parent d1f1656 commit 9d1620c

File tree

4 files changed

+41
-5
lines changed

4 files changed

+41
-5
lines changed

src/configs/__tests__/__snapshots__/recommended.test.ts.snap

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14196,8 +14196,6 @@ See https://tkdodo.eu/blog/react-query-fa-qs#2-the-queryclient-is-not-stable",
1419614196
"rules": {
1419714197
"@devup/app-page": "error",
1419814198
"@devup/component": "error",
14199-
"@devup/css-ts": "error",
14200-
"@devup/layout": "error",
1420114199
"@devup/rsc-api": "error",
1420214200
"@typescript-eslint/ban-ts-comment": "off",
1420314201
"@typescript-eslint/explicit-module-boundary-types": "off",

src/configs/recommended.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,11 +124,9 @@ export default [
124124
markers: ['/'],
125125
},
126126
],
127-
'@devup/layout': 'error',
128127
'@devup/rsc-api': 'error',
129128
'@devup/app-page': 'error',
130129
'@devup/component': 'error',
131-
'@devup/css-ts': 'error',
132130
...hooksPlugin.configs.recommended.rules,
133131
// Fix eslint 15 bug
134132
'@typescript-eslint/no-unused-expressions': [

src/rules/component-interface/__tests__/index.test.ts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,46 @@ describe('component rule', () => {
5757
},
5858
],
5959
},
60+
{
61+
code: 'function Hello({}){return <></>}\nfunction Hello2({}){return <></>}',
62+
output:
63+
'interface HelloProps{}\nfunction Hello({}:HelloProps){return <></>}\ninterface Hello2Props{}\nfunction Hello2({}:Hello2Props){return <></>}',
64+
filename: 'src/components/hello.tsx',
65+
errors: [
66+
{
67+
messageId:
68+
'componentPropsShouldHaveTypeAnnotationWhenEmptyObjectPattern',
69+
},
70+
{
71+
messageId:
72+
'componentPropsShouldHaveTypeAnnotationWhenEmptyObjectPattern',
73+
},
74+
],
75+
},
76+
{
77+
code: 'function Hello({}){return <></>}\nfunction Hello2({}){return <></>}\nexport function Hello3({}){return <></>}\nexport default function Hello4({}){return <></>}',
78+
output:
79+
'interface HelloProps{}\nfunction Hello({}:HelloProps){return <></>}\ninterface Hello2Props{}\nfunction Hello2({}:Hello2Props){return <></>}\ninterface Hello3Props{}\nexport function Hello3({}:Hello3Props){return <></>}\ninterface Hello4Props{}\nexport default function Hello4({}:Hello4Props){return <></>}',
80+
filename: 'src/components/hello.tsx',
81+
errors: [
82+
{
83+
messageId:
84+
'componentPropsShouldHaveTypeAnnotationWhenEmptyObjectPattern',
85+
},
86+
{
87+
messageId:
88+
'componentPropsShouldHaveTypeAnnotationWhenEmptyObjectPattern',
89+
},
90+
{
91+
messageId:
92+
'componentPropsShouldHaveTypeAnnotationWhenEmptyObjectPattern',
93+
},
94+
{
95+
messageId:
96+
'componentPropsShouldHaveTypeAnnotationWhenEmptyObjectPattern',
97+
},
98+
],
99+
},
60100
],
61101
})
62102
})

src/rules/component-interface/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ export const componentInterface = createRule({
5050
fixer.insertTextAfter(node.params[0], `:${funcName}Props`),
5151
// 1줄 전
5252
fixer.insertTextBefore(
53-
node.parent ?? node,
53+
node.parent.type === 'Program' ? node : node.parent,
5454
`interface ${funcName}Props{}\n`,
5555
),
5656
]

0 commit comments

Comments
 (0)