Skip to content

Commit e761153

Browse files
authored
empty-brace-spaces: Use simple selector (#2123)
1 parent 2bfc7c2 commit e761153

File tree

2 files changed

+52
-33
lines changed

2 files changed

+52
-33
lines changed

rules/empty-brace-spaces.js

Lines changed: 46 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,62 @@
11
'use strict';
22
const {isOpeningBraceToken} = require('@eslint-community/eslint-utils');
3-
const {matches} = require('./selectors/index.js');
43

54
const MESSAGE_ID = 'empty-brace-spaces';
65
const messages = {
76
[MESSAGE_ID]: 'Do not add spaces between braces.',
87
};
98

10-
const selector = matches([
11-
'BlockStatement[body.length=0]',
12-
'ClassBody[body.length=0]',
13-
'ObjectExpression[properties.length=0]',
14-
'StaticBlock[body.length=0]',
15-
// Experimental https://github.com/tc39/proposal-record-tuple
16-
'RecordExpression[properties.length=0]',
17-
]);
9+
const getProblem = (node, context) => {
10+
const {sourceCode} = context;
11+
const filter = node.type === 'RecordExpression'
12+
? token => token.type === 'Punctuator' && (token.value === '#{' || token.value === '{|')
13+
: isOpeningBraceToken;
14+
const openingBrace = sourceCode.getFirstToken(node, {filter});
15+
const closingBrace = sourceCode.getLastToken(node);
16+
const [, start] = openingBrace.range;
17+
const [end] = closingBrace.range;
18+
const textBetween = sourceCode.text.slice(start, end);
19+
20+
if (!/^\s+$/.test(textBetween)) {
21+
return;
22+
}
23+
24+
return {
25+
loc: {
26+
start: openingBrace.loc.end,
27+
end: closingBrace.loc.start,
28+
},
29+
messageId: MESSAGE_ID,
30+
fix: fixer => fixer.removeRange([start, end]),
31+
};
32+
};
1833

1934
/** @param {import('eslint').Rule.RuleContext} context */
20-
const create = context => ({
21-
[selector](node) {
22-
const {sourceCode} = context;
23-
const filter = node.type === 'RecordExpression'
24-
? token => token.type === 'Punctuator' && (token.value === '#{' || token.value === '{|')
25-
: isOpeningBraceToken;
26-
const openingBrace = sourceCode.getFirstToken(node, {filter});
27-
const closingBrace = sourceCode.getLastToken(node);
28-
const [, start] = openingBrace.range;
29-
const [end] = closingBrace.range;
30-
const textBetween = sourceCode.text.slice(start, end);
31-
32-
if (!/^\s+$/.test(textBetween)) {
35+
const create = context => {
36+
context.on([
37+
'BlockStatement',
38+
'ClassBody',
39+
'StaticBlock',
40+
], node => {
41+
if (node.body.length > 0) {
3342
return;
3443
}
3544

36-
return {
37-
loc: {
38-
start: openingBrace.loc.end,
39-
end: closingBrace.loc.start,
40-
},
41-
messageId: MESSAGE_ID,
42-
fix: fixer => fixer.removeRange([start, end]),
43-
};
44-
},
45-
});
45+
return getProblem(node, context);
46+
});
47+
48+
context.on([
49+
'ObjectExpression',
50+
// Experimental https://github.com/tc39/proposal-record-tuple
51+
'RecordExpression',
52+
], node => {
53+
if (node.properties.length > 0) {
54+
return;
55+
}
56+
57+
return getProblem(node, context);
58+
});
59+
};
4660

4761
/** @type {import('eslint').Rule.RuleModule} */
4862
module.exports = {

rules/utils/rule.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,12 @@ function reportProblems(create) {
8686
const contextProxy = new Proxy(context, {
8787
get(target, property, receiver) {
8888
if (property === 'on') {
89-
return addListener;
89+
return (selectorOrSelectors, listener) => {
90+
const selectors = Array.isArray(selectorOrSelectors) ? selectorOrSelectors : [selectorOrSelectors];
91+
for (const selector of selectors) {
92+
addListener(selector, listener);
93+
}
94+
};
9095
}
9196

9297
return Reflect.get(target, property, receiver);

0 commit comments

Comments
 (0)