eslint-plugin-ft-flow
Version:
Flowtype linting rules for ESLint by flow-typed
52 lines (46 loc) • 1.19 kB
Flow
const schema = [
{
enum: ['always', 'never'],
type: 'string',
},
];
const create = (context) => {
const always = (context.options[0] || 'always') === 'always';
const sourceCode = context.getSourceCode();
return {
ObjectTypeAnnotation(node) {
const {
exact,
indexers,
inexact,
} = node;
if (!['DeclareClass', 'InterfaceDeclaration'].includes(node.parent.type) && always && !exact && !inexact && indexers.length === 0) {
context.report({
fix: (fixer) => [
fixer.replaceText(sourceCode.getFirstToken(node), '{|'),
fixer.replaceText(sourceCode.getLastToken(node), '|}'),
],
message: 'Object type must be exact.',
node,
});
}
if (!always && exact) {
context.report({
fix: (fixer) => [
fixer.replaceText(sourceCode.getFirstToken(node), '{'),
fixer.replaceText(sourceCode.getLastToken(node), '}'),
],
message: 'Object type must not be exact.',
node,
});
}
},
};
};
export default {
create,
meta: {
fixable: 'code',
schema,
},
};