12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- 'use strict';
- const {isOpeningBraceToken} = require('eslint-utils');
- const {matches} = require('./selectors/index.js');
- const MESSAGE_ID = 'empty-brace-spaces';
- const messages = {
- [MESSAGE_ID]: 'Do not add spaces between braces.',
- };
- const selector = matches([
- 'BlockStatement[body.length=0]',
- 'ClassBody[body.length=0]',
- 'ObjectExpression[properties.length=0]',
- 'StaticBlock[body.length=0]',
- // Experimental https://github.com/tc39/proposal-record-tuple
- 'RecordExpression[properties.length=0]',
- ]);
- /** @param {import('eslint').Rule.RuleContext} context */
- const create = context => ({
- [selector](node) {
- const sourceCode = context.getSourceCode();
- const filter = node.type === 'RecordExpression'
- ? token => token.type === 'Punctuator' && (token.value === '#{' || token.value === '{|')
- : isOpeningBraceToken;
- const openingBrace = sourceCode.getFirstToken(node, {filter});
- const closingBrace = sourceCode.getLastToken(node);
- const [, start] = openingBrace.range;
- const [end] = closingBrace.range;
- const textBetween = sourceCode.text.slice(start, end);
- if (!/^\s+$/.test(textBetween)) {
- return;
- }
- return {
- loc: {
- start: openingBrace.loc.end,
- end: closingBrace.loc.start,
- },
- messageId: MESSAGE_ID,
- fix: fixer => fixer.removeRange([start, end]),
- };
- },
- });
- /** @type {import('eslint').Rule.RuleModule} */
- module.exports = {
- create,
- meta: {
- type: 'layout',
- docs: {
- description: 'Enforce no spaces between braces.',
- },
- fixable: 'whitespace',
- messages,
- },
- };
|