Skip to content

Commit

Permalink
feat: Refactor array-style-... rules
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
pnevyk committed Oct 5, 2017
1 parent b95dd31 commit 6320bee
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 93 deletions.
66 changes: 31 additions & 35 deletions src/rules/arrayStyle/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,22 +8,6 @@ const schema = [
}
];

const fixShorthand = (node, type) => {
return (fixer) => {
return fixer.replaceText(node, 'Array<' + type + '>');
};
};

const fixVerbose = (node, type, elementTypeNode) => {
return (fixer) => {
if (needWrap(elementTypeNode)) {
return fixer.replaceText(node, '(' + type + ')[]');
} else {
return fixer.replaceText(node, type + '[]');
}
};
};

const inlineType = (type) => {
const inlined = type.replace(/\s+/g, ' ');

Expand All @@ -34,7 +18,7 @@ const inlineType = (type) => {
}
};

export default (defaultConfig, shorthandHandler, verboseHandler) => {
export default (defaultConfig, simpleType) => {
const create = (context) => {
const verbose = (context.options[0] || defaultConfig) === 'verbose';

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

shorthandHandler(
isSimpleType(node.elementType),
verbose,
context,
node,
fixShorthand(node, rawElementType),
inlinedType,
wrappedInlinedType
);
if (isSimpleType(node.elementType) === simpleType && verbose) {
context.report({
data: {
type: inlinedType,
wrappedType: wrappedInlinedType
},
fix (fixer) {
return fixer.replaceText(node, 'Array<' + rawElementType + '>');
},
message: 'Use "Array<{{ type }}>", not "{{ wrappedType }}[]"',
node
});
}
},
// verbose
GenericTypeAnnotation (node) {
Expand All @@ -64,15 +52,23 @@ export default (defaultConfig, shorthandHandler, verboseHandler) => {
const inlinedType = inlineType(rawElementType);
const wrappedInlinedType = needWrap(elementTypeNode) ? '(' + inlinedType + ')' : inlinedType;

verboseHandler(
isSimpleType(elementTypeNode),
verbose,
context,
node,
fixVerbose(node, rawElementType, elementTypeNode),
inlinedType,
wrappedInlinedType
);
if (isSimpleType(elementTypeNode) === simpleType && !verbose) {
context.report({
data: {
type: inlinedType,
wrappedType: wrappedInlinedType
},
fix (fixer) {
if (needWrap(elementTypeNode)) {
return fixer.replaceText(node, '(' + rawElementType + ')[]');
} else {
return fixer.replaceText(node, rawElementType + '[]');
}
},
message: 'Use "{{ wrappedType }}[]", not "Array<{{ type }}>"',
node
});
}
}
}
}
Expand Down
30 changes: 1 addition & 29 deletions src/rules/arrayStyleComplexType.js
Original file line number Diff line number Diff line change
@@ -1,31 +1,3 @@
import makeArrayStyleRule from './arrayStyle';

const shorthandHandler = (isSimpleType, verbose, context, node, fix, inlinedType, wrappedInlinedType) => {
if (!isSimpleType && verbose) {
context.report({
data: {
type: inlinedType,
wrappedType: wrappedInlinedType
},
fix,
message: 'Use "Array<{{ type }}>", not "{{ wrappedType }}[]"',
node
});
}
};

const verboseHandler = (isSimpleType, verbose, context, node, fix, inlinedType, wrappedInlinedType) => {
if (!isSimpleType && !verbose) {
context.report({
data: {
type: inlinedType,
wrappedType: wrappedInlinedType
},
fix,
message: 'Use "{{ wrappedType }}[]", not "Array<{{ type }}>"',
node
});
}
};

export default makeArrayStyleRule('verbose', shorthandHandler, verboseHandler);
export default makeArrayStyleRule('verbose', false);
30 changes: 1 addition & 29 deletions src/rules/arrayStyleSimpleType.js
Original file line number Diff line number Diff line change
@@ -1,31 +1,3 @@
import makeArrayStyleRule from './arrayStyle';

const shorthandHandler = (isSimpleType, verbose, context, node, fix, inlinedType, wrappedInlinedType) => {
if (isSimpleType && verbose) {
context.report({
data: {
type: inlinedType,
wrappedType: wrappedInlinedType
},
fix,
message: 'Use "Array<{{ type }}>", not "{{ wrappedType }}[]"',
node
});
}
};

const verboseHandler = (isSimpleType, verbose, context, node, fix, inlinedType, wrappedInlinedType) => {
if (isSimpleType && !verbose) {
context.report({
data: {
type: inlinedType,
wrappedType: wrappedInlinedType
},
fix,
message: 'Use "{{ wrappedType }}[]", not "Array<{{ type }}>"',
node
});
}
};

export default makeArrayStyleRule('verbose', shorthandHandler, verboseHandler);
export default makeArrayStyleRule('verbose', true);

0 comments on commit 6320bee

Please sign in to comment.