Skip to content

Commit ec6b7c3

Browse files
author
Josh Goldberg
authored
Added converter for react-a11y-image-button-has-alt, react-a11y-img-has-alt (#1144)
* Added converter for react-a11y-img-has-alt * Expanded with a merger
1 parent ab7231d commit ec6b7c3

File tree

8 files changed

+140
-0
lines changed

8 files changed

+140
-0
lines changed

src/converters/lintConfigs/rules/ruleConverters.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,8 @@ import { convertQuotemark } from "./ruleConverters/quotemark";
255255
import { convertRadix } from "./ruleConverters/radix";
256256
import { convertReactA11yAccessibleHeadings } from "./ruleConverters/react-a11y-accessible-headings";
257257
import { convertReactA11yAnchors } from "./ruleConverters/react-a11y-anchors";
258+
import { convertReactA11yImageButtonHasAlt } from "./ruleConverters/react-a11y-image-button-has-alt";
259+
import { convertReactA11yImgHasAlt } from "./ruleConverters/react-a11y-img-has-alt";
258260
import { convertReactA11yProps } from "./ruleConverters/react-a11y-props";
259261
import { convertReactA11yTabIndexNoPositive } from "./ruleConverters/react-a11y-tabindex-no-positive";
260262
import { convertReactNoDangerousHtml } from "./ruleConverters/react-no-dangerous-html";
@@ -494,6 +496,8 @@ export const ruleConverters = new Map([
494496
["quotemark", convertQuotemark],
495497
["radix", convertRadix],
496498
["react-a11y-anchors", convertReactA11yAnchors],
499+
["react-a11y-image-button-has-alt", convertReactA11yImageButtonHasAlt],
500+
["react-a11y-img-has-alt", convertReactA11yImgHasAlt],
497501
["react-a11y-props", convertReactA11yProps],
498502
["react-a11y-tabindex-no-positive", convertReactA11yTabIndexNoPositive],
499503
["react-no-dangerous-html", convertReactNoDangerousHtml],
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { RuleConverter } from "../ruleConverter";
2+
3+
export const convertReactA11yImageButtonHasAlt: RuleConverter = () => {
4+
return {
5+
notices: ["jsx-a11y/alt-text covers more cases than react-a11y-image-button-has-alt"],
6+
plugins: ["jsx-a11y"],
7+
rules: [
8+
{
9+
ruleName: "jsx-a11y/alt-text",
10+
},
11+
],
12+
};
13+
};
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { RuleConverter } from "../ruleConverter";
2+
3+
export const convertReactA11yImgHasAlt: RuleConverter = (tslintRule) => {
4+
return {
5+
notices: ["jsx-a11y/alt-text covers more cases than react-a11y-img-has-alt"],
6+
plugins: ["jsx-a11y"],
7+
rules: [
8+
{
9+
...(tslintRule.ruleArguments.length !== 0 && {
10+
ruleArguments: [
11+
{
12+
elements: tslintRule.ruleArguments,
13+
},
14+
],
15+
}),
16+
ruleName: "jsx-a11y/alt-text",
17+
},
18+
],
19+
};
20+
};
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { convertReactA11yImageButtonHasAlt } from "../react-a11y-image-button-has-alt";
2+
3+
describe(convertReactA11yImageButtonHasAlt, () => {
4+
test("conversion without arguments", () => {
5+
const result = convertReactA11yImageButtonHasAlt({
6+
ruleArguments: [],
7+
});
8+
9+
expect(result).toEqual({
10+
notices: ["jsx-a11y/alt-text covers more cases than react-a11y-image-button-has-alt"],
11+
plugins: ["jsx-a11y"],
12+
rules: [
13+
{
14+
ruleName: "jsx-a11y/alt-text",
15+
},
16+
],
17+
});
18+
});
19+
});
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import { convertReactA11yImgHasAlt } from "../react-a11y-img-has-alt";
2+
3+
describe(convertReactA11yImgHasAlt, () => {
4+
test("conversion without arguments", () => {
5+
const result = convertReactA11yImgHasAlt({
6+
ruleArguments: [],
7+
});
8+
9+
expect(result).toEqual({
10+
notices: ["jsx-a11y/alt-text covers more cases than react-a11y-img-has-alt"],
11+
plugins: ["jsx-a11y"],
12+
rules: [
13+
{
14+
ruleName: "jsx-a11y/alt-text",
15+
},
16+
],
17+
});
18+
});
19+
20+
test("conversion with an argument", () => {
21+
const elements = ["Image"];
22+
const result = convertReactA11yImgHasAlt({
23+
ruleArguments: elements,
24+
});
25+
26+
expect(result).toEqual({
27+
notices: ["jsx-a11y/alt-text covers more cases than react-a11y-img-has-alt"],
28+
plugins: ["jsx-a11y"],
29+
rules: [
30+
{
31+
ruleArguments: [{ elements }],
32+
ruleName: "jsx-a11y/alt-text",
33+
},
34+
],
35+
});
36+
});
37+
});

src/converters/lintConfigs/rules/ruleMergers.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { mergeBanTypes } from "./ruleMergers/ban-types";
22
import { mergeConsistentTypeAssertions } from "./ruleMergers/consistent-type-assertions";
33
import { mergeIndent } from "./ruleMergers/indent";
4+
import { mergeJsxA11yAltText } from "./ruleMergers/jsx-a11y-alt-text";
45
import { mergeNoMemberDelimiterStyle } from "./ruleMergers/member-delimiter-style";
56
import { mergeNamingConvention } from "./ruleMergers/naming-convention";
67
import { mergeNoEmpty } from "./ruleMergers/no-empty";
@@ -18,6 +19,7 @@ export const ruleMergers = new Map([
1819
["@typescript-eslint/no-use-before-define", mergeNoUseBeforeDefine],
1920
["@typescript-eslint/no-unnecessary-type-assertion", mergeNoUnnecessaryTypeAssertion],
2021
["@typescript-eslint/triple-slash-reference", mergeTripleSlashReference],
22+
["jsx-a11y/alt-text", mergeJsxA11yAltText],
2123
["no-empty", mergeNoEmpty],
2224
["no-eval", mergeNoEval],
2325
]);
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { uniqueFromSources } from "../../../../utils";
2+
import { RuleMerger } from "../ruleMerger";
3+
4+
export const mergeJsxA11yAltText: RuleMerger = (existingOptions, newOptions) => {
5+
const existingElements = existingOptions?.[0]?.elements;
6+
const newElements = newOptions?.[0]?.elements;
7+
8+
return existingElements || newElements
9+
? [
10+
{
11+
elements: uniqueFromSources(existingElements ?? [], newElements ?? []),
12+
},
13+
]
14+
: [];
15+
};
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import { mergeJsxA11yAltText } from "../jsx-a11y-alt-text";
2+
3+
describe(mergeJsxA11yAltText, () => {
4+
test("neither options existing", () => {
5+
const result = mergeJsxA11yAltText(undefined, undefined);
6+
7+
expect(result).toEqual([]);
8+
});
9+
10+
test("original elements existing", () => {
11+
const result = mergeJsxA11yAltText([{ elements: ["Image"] }], undefined);
12+
13+
expect(result).toEqual([{ elements: ["Image"] }]);
14+
});
15+
16+
test("new elements existing", () => {
17+
const result = mergeJsxA11yAltText(undefined, [{ elements: ["Image"] }]);
18+
19+
expect(result).toEqual([{ elements: ["Image"] }]);
20+
});
21+
22+
test("both elements existing", () => {
23+
const result = mergeJsxA11yAltText(
24+
[{ elements: ["Button", "Image"] }],
25+
[{ elements: ["Image"] }],
26+
);
27+
28+
expect(result).toEqual([{ elements: ["Button", "Image"] }]);
29+
});
30+
});

0 commit comments

Comments
 (0)