Skip to content

Commit 7615dd1

Browse files
committed
Refactor tsl-rules-of-react rules
1 parent 69debdc commit 7615dd1

File tree

14 files changed

+1175
-440
lines changed

14 files changed

+1175
-440
lines changed

package.json

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,16 @@
3838
"@tsconfig/node24": "^24.0.4",
3939
"@tsconfig/strictest": "^2.0.8",
4040
"@types/node": "^25.2.3",
41+
"@types/react": "^19.2.14",
42+
"@types/react-dom": "^19.2.3",
4143
"ansis": "^4.2.0",
44+
"dedent": "^1.7.1",
4245
"dprint": "^0.51.1",
43-
"effect": "^3.19.17",
46+
"effect": "^3.19.18",
47+
"preact": "^10.28.3",
4448
"publint": "^0.3.17",
49+
"react": "^19.2.4",
50+
"react-dom": "^19.2.4",
4551
"sort-package-json": "^3.6.1",
4652
"tinyglobby": "^0.2.15",
4753
"ts-pattern": "^5.9.0",
@@ -55,7 +61,7 @@
5561
"typescript": "^5.9.3",
5662
"vitest": "^4.0.18"
5763
},
58-
"packageManager": "pnpm@10.29.3",
64+
"packageManager": "pnpm@10.30.0",
5965
"engines": {
6066
"node": ">=24.0.0"
6167
}

packages/eslint-plugin-function/package.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,14 @@
3636
"dependencies": {
3737
"@eslint-react/ast": "^2.13.0",
3838
"@eslint-react/shared": "^2.13.0",
39-
"@typescript-eslint/scope-manager": "^8.55.0",
40-
"@typescript-eslint/type-utils": "^8.55.0",
41-
"@typescript-eslint/types": "^8.55.0",
42-
"@typescript-eslint/utils": "^8.55.0",
39+
"@typescript-eslint/scope-manager": "^8.56.0",
40+
"@typescript-eslint/type-utils": "^8.56.0",
41+
"@typescript-eslint/types": "^8.56.0",
42+
"@typescript-eslint/utils": "^8.56.0",
4343
"string-ts": "^2.3.1",
4444
"ts-api-utils": "^2.4.0",
4545
"ts-pattern": "^5.9.0",
46-
"typescript-eslint": "^8.55.0"
46+
"typescript-eslint": "^8.56.0"
4747
},
4848
"devDependencies": {
4949
"@local/eff": "workspace:*",

packages/tsl-rules-of-react/docs/README.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
| Variable | Description |
66
| ------ | ------ |
7-
| [rulesOfComponentHookFactories](variables/rulesOfComponentHookFactories.md) | - |
87
| [rulesOfEffect](variables/rulesOfEffect.md) | - |
98
| [rulesOfJsx](variables/rulesOfJsx.md) | TS checks for most of the issues described at https://react.dev/learn/writing-markup-with-jsx#the-rules-of-jsx by default, so there isn't much for us to implement. |
109
| [rulesOfKeys](variables/rulesOfKeys.md) | - |

packages/tsl-rules-of-react/docs/variables/rulesOfComponentHookFactories.md

Lines changed: 0 additions & 21 deletions
This file was deleted.

packages/tsl-rules-of-react/docs/variables/rulesOfProps.md

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,3 @@ const rulesOfProps: (options?: "off") => Rule<unknown>;
1515
## Returns
1616

1717
`Rule`\<`unknown`\>
18-
19-
## Todo
20-
21-
implement this

packages/tsl-rules-of-react/src/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
export { rulesOfComponentHookFactories } from "./rules/rules-of-component-hook-factories";
21
export { rulesOfEffect } from "./rules/rules-of-effect";
32
export { rulesOfJsx } from "./rules/rules-of-jsx";
43
export { rulesOfKeys } from "./rules/rules-of-keys";

packages/tsl-rules-of-react/src/rules/rules-of-component-hook-factories.test.ts

Lines changed: 0 additions & 15 deletions
This file was deleted.

packages/tsl-rules-of-react/src/rules/rules-of-component-hook-factories.ts

Lines changed: 0 additions & 14 deletions
This file was deleted.
Lines changed: 3 additions & 213 deletions
Original file line numberDiff line numberDiff line change
@@ -1,224 +1,14 @@
1-
import tsx from "dedent";
21
import { ruleTester } from "tsl/ruleTester";
3-
import ts from "typescript";
42
import { expect, test } from "vitest";
53

6-
import { messages, rulesOfKeys } from "./rules-of-keys";
4+
import { rulesOfKeys } from "./rules-of-keys";
75

86
test("rules-of-keys", () => {
97
const ret = ruleTester({
108
tsx: true,
119
ruleFn: rulesOfKeys,
12-
invalid: [
13-
{
14-
code: tsx`
15-
function Component({ data }: { data: { key: string; name: string } }) {
16-
return <div {...data} />;
17-
}
18-
`,
19-
compilerOptions: {
20-
jsx: ts.JsxEmit.ReactJSX,
21-
},
22-
errors: [
23-
{ message: messages[4] },
24-
],
25-
},
26-
{
27-
code: tsx`
28-
interface Props { key: string; value: number }
29-
function Component({ props }: { props: Props }) {
30-
return <div {...props} />;
31-
}
32-
`,
33-
compilerOptions: {
34-
jsx: ts.JsxEmit.ReactJSX,
35-
},
36-
errors: [
37-
{ message: messages[4] },
38-
],
39-
},
40-
{
41-
code: tsx`
42-
function Component({ item }: { item: { key: number; id: string } }) {
43-
return <div {...item} {...item} />;
44-
}
45-
`,
46-
compilerOptions: {
47-
jsx: ts.JsxEmit.ReactJSX,
48-
},
49-
errors: [
50-
{ message: messages[4] },
51-
{ message: messages[4] },
52-
],
53-
},
54-
{
55-
code: tsx`
56-
function Component({ props }) {
57-
return <div {...props} key="id" />;
58-
}
59-
`,
60-
compilerOptions: {
61-
jsx: ts.JsxEmit.ReactJSX,
62-
},
63-
errors: [
64-
{ message: messages[3] },
65-
],
66-
},
67-
{
68-
code: tsx`
69-
function Component({ props1, props2 }) {
70-
return <div {...props1} {...props2} key="id" />;
71-
}
72-
`,
73-
compilerOptions: {
74-
jsx: ts.JsxEmit.ReactJSX,
75-
},
76-
errors: [
77-
{ message: messages[3] },
78-
{ message: messages[3] },
79-
],
80-
},
81-
{
82-
code: tsx`
83-
function Component({ props }) {
84-
return <div className="test" {...props} key="id" />;
85-
}
86-
`,
87-
compilerOptions: {
88-
jsx: ts.JsxEmit.ReactJSX,
89-
},
90-
errors: [
91-
{ message: messages[3] },
92-
],
93-
},
94-
{
95-
code: tsx`
96-
function Component({ props }) {
97-
return <div {...props} key="id" className="test" />;
98-
}
99-
`,
100-
compilerOptions: {
101-
jsx: ts.JsxEmit.ReactJSX,
102-
},
103-
errors: [
104-
{ message: messages[3] },
105-
],
106-
},
107-
],
108-
valid: [
109-
{
110-
code: tsx`
111-
function Component({ props }) {
112-
return <div key="id" {...props} />;
113-
}
114-
`,
115-
compilerOptions: {
116-
jsx: ts.JsxEmit.ReactJSX,
117-
},
118-
},
119-
{
120-
code: tsx`
121-
function Component() {
122-
return <div key="id" />;
123-
}
124-
`,
125-
compilerOptions: {
126-
jsx: ts.JsxEmit.ReactJSX,
127-
},
128-
},
129-
{
130-
code: tsx`
131-
function Component({ props }) {
132-
return <div {...props} />;
133-
}
134-
`,
135-
compilerOptions: {
136-
jsx: ts.JsxEmit.ReactJSX,
137-
},
138-
},
139-
{
140-
code: tsx`
141-
function Component({ props }) {
142-
return <div key="id" key="id2" {...props} />;
143-
}
144-
`,
145-
compilerOptions: {
146-
jsx: ts.JsxEmit.ReactJSX,
147-
},
148-
},
149-
{
150-
code: tsx`
151-
function Component({ props }) {
152-
return <div className="test" {...props} />;
153-
}
154-
`,
155-
compilerOptions: {
156-
jsx: ts.JsxEmit.ReactJSX,
157-
},
158-
},
159-
{
160-
code: tsx`
161-
function Component({ props }) {
162-
return <div {...props} key="id" />;
163-
}
164-
`,
165-
compilerOptions: {
166-
jsx: ts.JsxEmit.None,
167-
},
168-
},
169-
{
170-
code: tsx`
171-
function Component({ props }) {
172-
return <div {...props} key="id" />;
173-
}
174-
`,
175-
compilerOptions: {
176-
jsx: ts.JsxEmit.Preserve,
177-
},
178-
},
179-
{
180-
code: tsx`
181-
function Component({ props }) {
182-
return <div {...props} key="id" />;
183-
}
184-
`,
185-
compilerOptions: {
186-
jsx: ts.JsxEmit.ReactNative,
187-
},
188-
},
189-
{
190-
code: tsx`
191-
import React from "react";
192-
function Component({ attrs }: { attrs: React.Attributes }) {
193-
return <div {...attrs} />;
194-
}
195-
`,
196-
compilerOptions: {
197-
jsx: ts.JsxEmit.ReactJSX,
198-
},
199-
},
200-
{
201-
code: tsx`
202-
function Component({ data }: { data: { id: string; name: string } }) {
203-
return <div {...data} />;
204-
}
205-
`,
206-
compilerOptions: {
207-
jsx: ts.JsxEmit.ReactJSX,
208-
},
209-
},
210-
{
211-
code: tsx`
212-
interface Props { id: number; value: string }
213-
function Component({ props }: { props: Props }) {
214-
return <div {...props} />;
215-
}
216-
`,
217-
compilerOptions: {
218-
jsx: ts.JsxEmit.ReactJSX,
219-
},
220-
},
221-
],
10+
invalid: [],
11+
valid: [],
22212
});
22313
expect(ret).toBe(false);
22414
});

0 commit comments

Comments
 (0)