Skip to content

Commit 6320bee

Browse files
committed
feat: Refactor array-style-... rules
In rules' files there was unnecessary redundant code. Now, all rule logic is in one place and actual rules only export this logic with necessary settings.
1 parent b95dd31 commit 6320bee

File tree

3 files changed

+33
-93
lines changed

3 files changed

+33
-93
lines changed

src/rules/arrayStyle/index.js

Lines changed: 31 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,6 @@ const schema = [
88
}
99
];
1010

11-
const fixShorthand = (node, type) => {
12-
return (fixer) => {
13-
return fixer.replaceText(node, 'Array<' + type + '>');
14-
};
15-
};
16-
17-
const fixVerbose = (node, type, elementTypeNode) => {
18-
return (fixer) => {
19-
if (needWrap(elementTypeNode)) {
20-
return fixer.replaceText(node, '(' + type + ')[]');
21-
} else {
22-
return fixer.replaceText(node, type + '[]');
23-
}
24-
};
25-
};
26-
2711
const inlineType = (type) => {
2812
const inlined = type.replace(/\s+/g, ' ');
2913

@@ -34,7 +18,7 @@ const inlineType = (type) => {
3418
}
3519
};
3620

37-
export default (defaultConfig, shorthandHandler, verboseHandler) => {
21+
export default (defaultConfig, simpleType) => {
3822
const create = (context) => {
3923
const verbose = (context.options[0] || defaultConfig) === 'verbose';
4024

@@ -45,15 +29,19 @@ export default (defaultConfig, shorthandHandler, verboseHandler) => {
4529
const inlinedType = inlineType(rawElementType);
4630
const wrappedInlinedType = needWrap(node.elementType) ? '(' + inlinedType + ')' : inlinedType;
4731

48-
shorthandHandler(
49-
isSimpleType(node.elementType),
50-
verbose,
51-
context,
52-
node,
53-
fixShorthand(node, rawElementType),
54-
inlinedType,
55-
wrappedInlinedType
56-
);
32+
if (isSimpleType(node.elementType) === simpleType && verbose) {
33+
context.report({
34+
data: {
35+
type: inlinedType,
36+
wrappedType: wrappedInlinedType
37+
},
38+
fix (fixer) {
39+
return fixer.replaceText(node, 'Array<' + rawElementType + '>');
40+
},
41+
message: 'Use "Array<{{ type }}>", not "{{ wrappedType }}[]"',
42+
node
43+
});
44+
}
5745
},
5846
// verbose
5947
GenericTypeAnnotation (node) {
@@ -64,15 +52,23 @@ export default (defaultConfig, shorthandHandler, verboseHandler) => {
6452
const inlinedType = inlineType(rawElementType);
6553
const wrappedInlinedType = needWrap(elementTypeNode) ? '(' + inlinedType + ')' : inlinedType;
6654

67-
verboseHandler(
68-
isSimpleType(elementTypeNode),
69-
verbose,
70-
context,
71-
node,
72-
fixVerbose(node, rawElementType, elementTypeNode),
73-
inlinedType,
74-
wrappedInlinedType
75-
);
55+
if (isSimpleType(elementTypeNode) === simpleType && !verbose) {
56+
context.report({
57+
data: {
58+
type: inlinedType,
59+
wrappedType: wrappedInlinedType
60+
},
61+
fix (fixer) {
62+
if (needWrap(elementTypeNode)) {
63+
return fixer.replaceText(node, '(' + rawElementType + ')[]');
64+
} else {
65+
return fixer.replaceText(node, rawElementType + '[]');
66+
}
67+
},
68+
message: 'Use "{{ wrappedType }}[]", not "Array<{{ type }}>"',
69+
node
70+
});
71+
}
7672
}
7773
}
7874
}

src/rules/arrayStyleComplexType.js

Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,3 @@
11
import makeArrayStyleRule from './arrayStyle';
22

3-
const shorthandHandler = (isSimpleType, verbose, context, node, fix, inlinedType, wrappedInlinedType) => {
4-
if (!isSimpleType && verbose) {
5-
context.report({
6-
data: {
7-
type: inlinedType,
8-
wrappedType: wrappedInlinedType
9-
},
10-
fix,
11-
message: 'Use "Array<{{ type }}>", not "{{ wrappedType }}[]"',
12-
node
13-
});
14-
}
15-
};
16-
17-
const verboseHandler = (isSimpleType, verbose, context, node, fix, inlinedType, wrappedInlinedType) => {
18-
if (!isSimpleType && !verbose) {
19-
context.report({
20-
data: {
21-
type: inlinedType,
22-
wrappedType: wrappedInlinedType
23-
},
24-
fix,
25-
message: 'Use "{{ wrappedType }}[]", not "Array<{{ type }}>"',
26-
node
27-
});
28-
}
29-
};
30-
31-
export default makeArrayStyleRule('verbose', shorthandHandler, verboseHandler);
3+
export default makeArrayStyleRule('verbose', false);

src/rules/arrayStyleSimpleType.js

Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,3 @@
11
import makeArrayStyleRule from './arrayStyle';
22

3-
const shorthandHandler = (isSimpleType, verbose, context, node, fix, inlinedType, wrappedInlinedType) => {
4-
if (isSimpleType && verbose) {
5-
context.report({
6-
data: {
7-
type: inlinedType,
8-
wrappedType: wrappedInlinedType
9-
},
10-
fix,
11-
message: 'Use "Array<{{ type }}>", not "{{ wrappedType }}[]"',
12-
node
13-
});
14-
}
15-
};
16-
17-
const verboseHandler = (isSimpleType, verbose, context, node, fix, inlinedType, wrappedInlinedType) => {
18-
if (isSimpleType && !verbose) {
19-
context.report({
20-
data: {
21-
type: inlinedType,
22-
wrappedType: wrappedInlinedType
23-
},
24-
fix,
25-
message: 'Use "{{ wrappedType }}[]", not "Array<{{ type }}>"',
26-
node
27-
});
28-
}
29-
};
30-
31-
export default makeArrayStyleRule('verbose', shorthandHandler, verboseHandler);
3+
export default makeArrayStyleRule('verbose', true);

0 commit comments

Comments
 (0)