UNPKG

eslint-plugin-ft-flow

Version:
90 lines (79 loc) 2.29 kB
import { spacingFixers, } from '../utilities'; const schema = [ { enum: ['always', 'never'], type: 'string', }, ]; const sameLine = (left, right) => left.loc.end.line === right.loc.start.line; const create = (context) => { const never = (context?.options[0] ?? 'never') === 'never'; const sourceCode = context.getSourceCode(); return { ObjectTypeAnnotation(node) { const { properties, } = node; if (properties.length === 0) { return; } const [opener, firstInnerToken] = sourceCode.getFirstTokens(node, 2); const [lastInnerToken, closer] = sourceCode.getLastTokens(node, 2); const spacesBefore = firstInnerToken.range[0] - opener.range[1]; const spacesAfter = closer.range[0] - lastInnerToken.range[1]; // Check the opening brace if (sameLine(opener, firstInnerToken)) { if (never && spacesBefore) { context.report({ data: { token: opener.value, }, fix: spacingFixers.stripSpacesAfter(opener, spacesBefore), message: 'There must be no space after "{{token}}".', node, }); } else if (!never && !spacesBefore) { context.report({ data: { token: opener.value, }, fix: spacingFixers.addSpaceAfter(opener), message: 'A space is required after "{{token}}".', node, }); } } // Check the closing brace if (sameLine(lastInnerToken, closer)) { if (never && spacesAfter) { context.report({ data: { token: closer.value, }, fix: spacingFixers.stripSpacesBefore(closer, spacesAfter), message: 'There must be no space before "{{token}}".', node, }); } else if (!never && !spacesAfter) { context.report({ data: { token: closer.value, }, fix: spacingFixers.addSpaceAfter(lastInnerToken), message: 'A space is required before "{{token}}".', node, }); } } }, }; }; export default { create, meta: { fixable: 'code', schema, }, };