Skip to content

Commit e408e53

Browse files
KingDarBojaJosh Goldberg
authored and
Josh Goldberg
committed
Fix member access converter (#231)
* Handle rule options on member access tslint * Improve code for member-access converter * Fix unused default statement and change interface for type * Add missing test
1 parent 1689af3 commit e408e53

File tree

2 files changed

+180
-8
lines changed

2 files changed

+180
-8
lines changed

src/rules/converters/member-access.ts

Lines changed: 54 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,63 @@
11
import { RuleConverter } from "../converter";
22

3-
export const convertMemberAccess: RuleConverter = () => {
3+
export enum AccessibilityLevel {
4+
Explicit = "explicit",
5+
NoPublic = "no-public",
6+
}
7+
8+
export enum MemberAccessArguments {
9+
NoPublic = "no-public",
10+
Accessor = "check-accessor",
11+
Constructor = "check-constructor",
12+
ParameterProp = "check-parameter-property",
13+
}
14+
15+
type MemberAccessSchema = {
16+
accessibility: string;
17+
overrides?: { [key: string]: string };
18+
};
19+
20+
export const convertMemberAccess: RuleConverter = tslintRule => {
21+
const tslintRuleArguments = tslintRule.ruleArguments;
22+
const schema: MemberAccessSchema = {
23+
accessibility: AccessibilityLevel.Explicit,
24+
};
25+
26+
if (tslintRuleArguments.length >= 2 || tslintRuleArguments[0] === true) {
27+
tslintRuleArguments.forEach(ruleArg => {
28+
if (typeof ruleArg === "string") {
29+
switch (ruleArg) {
30+
case MemberAccessArguments.NoPublic:
31+
schema.accessibility = AccessibilityLevel.NoPublic;
32+
break;
33+
case MemberAccessArguments.Accessor:
34+
schema.overrides = {
35+
...schema.overrides,
36+
accessors: AccessibilityLevel.Explicit,
37+
};
38+
break;
39+
case MemberAccessArguments.Constructor:
40+
schema.overrides = {
41+
...schema.overrides,
42+
constructors: AccessibilityLevel.Explicit,
43+
};
44+
break;
45+
case MemberAccessArguments.ParameterProp:
46+
schema.overrides = {
47+
...schema.overrides,
48+
parameterProperties: AccessibilityLevel.Explicit,
49+
};
50+
break;
51+
}
52+
}
53+
});
54+
}
55+
456
return {
557
rules: [
658
{
759
ruleName: "@typescript-eslint/explicit-member-accessibility",
8-
ruleArguments: [
9-
{
10-
overrides: { constructors: "off" },
11-
},
12-
],
60+
ruleArguments: [schema],
1361
},
1462
],
1563
};

src/rules/converters/tests/member-access.test.ts

Lines changed: 126 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,141 @@
1-
import { convertMemberAccess } from "../member-access";
1+
import { convertMemberAccess, AccessibilityLevel } from "../member-access";
22

33
describe(convertMemberAccess, () => {
44
test("conversion without arguments", () => {
55
const result = convertMemberAccess({
66
ruleArguments: [],
77
});
88

9+
expect(result).toEqual({
10+
rules: [
11+
{
12+
ruleName: "@typescript-eslint/explicit-member-accessibility",
13+
ruleArguments: [{ accessibility: AccessibilityLevel.Explicit }],
14+
},
15+
],
16+
});
17+
});
18+
19+
test("conversion with true argument", () => {
20+
const result = convertMemberAccess({
21+
ruleArguments: [true],
22+
});
23+
24+
expect(result).toEqual({
25+
rules: [
26+
{
27+
ruleName: "@typescript-eslint/explicit-member-accessibility",
28+
ruleArguments: [{ accessibility: AccessibilityLevel.Explicit }],
29+
},
30+
],
31+
});
32+
});
33+
34+
test("conversion with no-public argument", () => {
35+
const result = convertMemberAccess({
36+
ruleArguments: [true, "no-public"],
37+
});
38+
39+
expect(result).toEqual({
40+
rules: [
41+
{
42+
ruleName: "@typescript-eslint/explicit-member-accessibility",
43+
ruleArguments: [{ accessibility: AccessibilityLevel.NoPublic }],
44+
},
45+
],
46+
});
47+
});
48+
49+
test("conversion with check-accessor argument", () => {
50+
const result = convertMemberAccess({
51+
ruleArguments: [true, "check-accessor"],
52+
});
53+
54+
expect(result).toEqual({
55+
rules: [
56+
{
57+
ruleName: "@typescript-eslint/explicit-member-accessibility",
58+
ruleArguments: [
59+
{
60+
accessibility: AccessibilityLevel.Explicit,
61+
overrides: {
62+
accessors: AccessibilityLevel.Explicit,
63+
},
64+
},
65+
],
66+
},
67+
],
68+
});
69+
});
70+
71+
test("conversion with check-constructor argument", () => {
72+
const result = convertMemberAccess({
73+
ruleArguments: [true, "check-constructor"],
74+
});
75+
76+
expect(result).toEqual({
77+
rules: [
78+
{
79+
ruleName: "@typescript-eslint/explicit-member-accessibility",
80+
ruleArguments: [
81+
{
82+
accessibility: AccessibilityLevel.Explicit,
83+
overrides: {
84+
constructors: AccessibilityLevel.Explicit,
85+
},
86+
},
87+
],
88+
},
89+
],
90+
});
91+
});
92+
93+
test("conversion with check-parameter-property argument", () => {
94+
const result = convertMemberAccess({
95+
ruleArguments: [true, "check-parameter-property"],
96+
});
97+
98+
expect(result).toEqual({
99+
rules: [
100+
{
101+
ruleName: "@typescript-eslint/explicit-member-accessibility",
102+
ruleArguments: [
103+
{
104+
accessibility: AccessibilityLevel.Explicit,
105+
overrides: {
106+
parameterProperties: AccessibilityLevel.Explicit,
107+
},
108+
},
109+
],
110+
},
111+
],
112+
});
113+
});
114+
115+
test("conversion with all arguments", () => {
116+
const result = convertMemberAccess({
117+
ruleArguments: [
118+
true,
119+
"no-public",
120+
"check-accessor",
121+
"check-constructor",
122+
"check-parameter-property",
123+
],
124+
});
125+
9126
expect(result).toEqual({
10127
rules: [
11128
{
12129
ruleName: "@typescript-eslint/explicit-member-accessibility",
13130
ruleArguments: [
14-
{ overrides: { constructors: "off" } },
131+
{
132+
accessibility: AccessibilityLevel.NoPublic,
133+
overrides: {
134+
accessors: AccessibilityLevel.Explicit,
135+
constructors: AccessibilityLevel.Explicit,
136+
parameterProperties: AccessibilityLevel.Explicit,
137+
},
138+
},
15139
],
16140
},
17141
],

0 commit comments

Comments
 (0)