Skip to content

Commit 8799e99

Browse files
authored
fix: fixed suggestions for 'no-missing-button-type' rule (#1137)
1 parent 5fe73f2 commit 8799e99

File tree

2 files changed

+59
-11
lines changed

2 files changed

+59
-11
lines changed

packages/plugins/eslint-plugin-react-dom/src/rules/no-missing-button-type.spec.ts

Lines changed: 53 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,56 @@ import rule, { RULE_NAME } from "./no-missing-button-type";
55

66
ruleTester.run(RULE_NAME, rule, {
77
invalid: [
8+
{
9+
code: tsx`<button />;`,
10+
errors: [
11+
{
12+
messageId: "noMissingButtonType",
13+
suggestions: [
14+
{
15+
messageId: "addButtonType",
16+
data: { type: "button" },
17+
output: tsx`<button type="button" />;`,
18+
},
19+
{
20+
messageId: "addButtonType",
21+
data: { type: "submit" },
22+
output: tsx`<button type="submit" />;`,
23+
},
24+
{
25+
messageId: "addButtonType",
26+
data: { type: "reset" },
27+
output: tsx`<button type="reset" />;`,
28+
},
29+
],
30+
},
31+
],
32+
},
33+
{
34+
code: tsx`<button type />;`,
35+
errors: [
36+
{
37+
messageId: "noMissingButtonType",
38+
suggestions: [
39+
{
40+
messageId: "addButtonType",
41+
data: { type: "button" },
42+
output: tsx`<button type="button" />;`,
43+
},
44+
{
45+
messageId: "addButtonType",
46+
data: { type: "submit" },
47+
output: tsx`<button type="submit" />;`,
48+
},
49+
{
50+
messageId: "addButtonType",
51+
data: { type: "reset" },
52+
output: tsx`<button type="reset" />;`,
53+
},
54+
],
55+
},
56+
],
57+
},
858
{
959
code: tsx`<button>Click me</button>;`,
1060
errors: [
@@ -39,17 +89,17 @@ ruleTester.run(RULE_NAME, rule, {
3989
{
4090
messageId: "addButtonType",
4191
data: { type: "button" },
42-
output: tsx`<PolyComponent as="button" type="button">Click me</PolyComponent>;`,
92+
output: tsx`<PolyComponent type="button" as="button">Click me</PolyComponent>;`,
4393
},
4494
{
4595
messageId: "addButtonType",
4696
data: { type: "submit" },
47-
output: tsx`<PolyComponent as="button" type="submit">Click me</PolyComponent>;`,
97+
output: tsx`<PolyComponent type="submit" as="button">Click me</PolyComponent>;`,
4898
},
4999
{
50100
messageId: "addButtonType",
51101
data: { type: "reset" },
52-
output: tsx`<PolyComponent as="button" type="reset">Click me</PolyComponent>;`,
102+
output: tsx`<PolyComponent type="reset" as="button">Click me</PolyComponent>;`,
53103
},
54104
],
55105
},

packages/plugins/eslint-plugin-react-dom/src/rules/no-missing-button-type.ts

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ export const RULE_FEATURES = [
1212

1313
export const BUTTON_TYPES = ["button", "submit", "reset"] as const;
1414

15-
export type MessageID =
16-
| CamelCase<typeof RULE_NAME>
17-
| "addButtonType";
15+
export type MessageID = CamelCase<typeof RULE_NAME> | RuleSuggestMessageID;
16+
17+
export type RuleSuggestMessageID = "addButtonType";
1818

1919
export default createRule<[], MessageID>({
2020
meta: {
@@ -55,12 +55,12 @@ export function create(context: RuleContext<MessageID, []>): RuleListener {
5555
attributeNode,
5656
propNameOnJsx,
5757
);
58-
if (attributeValue.kind === "some" && typeof attributeValue.value !== "string") {
58+
if (attributeValue.kind !== "some" || typeof attributeValue.value !== "string") {
5959
context.report({
6060
messageId: "noMissingButtonType",
6161
node: attributeNode,
6262
suggest: getSuggest((type) => (fixer: RuleFixer) => {
63-
return fixer.replaceText(node, `${propNameOnJsx}="${type}"`);
63+
return fixer.replaceText(attributeNode, `${propNameOnJsx}="${type}"`);
6464
}),
6565
});
6666
}
@@ -71,9 +71,7 @@ export function create(context: RuleContext<MessageID, []>): RuleListener {
7171
messageId: "noMissingButtonType",
7272
node,
7373
suggest: getSuggest((type) => (fixer: RuleFixer) => {
74-
const lastToken = context.sourceCode.getLastToken(node.openingElement);
75-
if (lastToken == null) return null;
76-
return fixer.insertTextBefore(lastToken, ` type="${type}"`);
74+
return fixer.insertTextAfter(node.openingElement.name, ` type="${type}"`);
7775
}),
7876
});
7977
}

0 commit comments

Comments
 (0)