Skip to content

Commit dbe2bb2

Browse files
authored
Forbid .range (#2599)
1 parent 563d45c commit dbe2bb2

14 files changed

+27
-39
lines changed

Diff for: eslint.config.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ import globals from 'globals';
22
import xo from 'eslint-config-xo';
33
import eslintPlugin from 'eslint-plugin-eslint-plugin';
44
import jsdoc from 'eslint-plugin-jsdoc';
5-
import internal from './scripts/internal-rules/index.js';
5+
import internalRules from './scripts/internal-rules/index.js';
66
import unicorn from './index.js';
77

88
const config = [
99
...xo,
1010
unicorn.configs.recommended,
11-
internal.configs.all,
11+
internalRules,
1212
{
1313
languageOptions: {
1414
globals: {

Diff for: rules/fix/fix-space-around-keywords.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ export default function * fixSpaceAroundKeyword(fixer, node, sourceCode) {
1414

1515
if (
1616
tokenBefore
17-
&& range[0] === tokenBefore.range[1]
17+
&& range[0] === sourceCode.getRange(tokenBefore)[1]
1818
&& isProblematicToken(tokenBefore)
1919
) {
2020
yield fixer.insertTextAfter(tokenBefore, ' ');
@@ -24,7 +24,7 @@ export default function * fixSpaceAroundKeyword(fixer, node, sourceCode) {
2424

2525
if (
2626
tokenAfter
27-
&& range[1] === tokenAfter.range[0]
27+
&& range[1] === sourceCode.getRange(tokenAfter)[0]
2828
&& isProblematicToken(tokenAfter)
2929
) {
3030
yield fixer.insertTextBefore(tokenAfter, ' ');

Diff for: rules/fix/remove-spaces-after.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
export default function removeSpacesAfter(indexOrNodeOrToken, sourceCode, fixer) {
22
let index = indexOrNodeOrToken;
3-
if (typeof indexOrNodeOrToken === 'object' && Array.isArray(indexOrNodeOrToken.range)) {
4-
index = indexOrNodeOrToken.range[1];
3+
if (typeof indexOrNodeOrToken === 'object') {
4+
index = sourceCode.getRange(indexOrNodeOrToken)[1];
55
}
66

77
const textAfter = sourceCode.text.slice(index);

Diff for: rules/fix/replace-reference-identifier.js

+1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ export default function replaceReferenceIdentifier(identifier, replacement, fixe
2222
// `typeAnnotation`
2323
if (identifier.typeAnnotation) {
2424
return fixer.replaceTextRange(
25+
// eslint-disable-next-line internal/no-restricted-property-access
2526
[identifier.range[0], identifier.typeAnnotation.range[0]],
2627
`${replacement}${identifier.optional ? '?' : ''}`,
2728
);

Diff for: rules/fix/replace-string-raw.js

+2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ const replaceStringRaw = (fixer, node, raw) =>
33
fixer.replaceTextRange(
44
// Ignore quotes and backticks
55
[
6+
// eslint-disable-next-line internal/no-restricted-property-access
67
node.range[0] + 1,
8+
// eslint-disable-next-line internal/no-restricted-property-access
79
node.range[1] - 1,
810
],
911
raw,

Diff for: rules/fix/replace-template-element.js

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
const replaceTemplateElement = (fixer, node, replacement) => {
2+
// eslint-disable-next-line internal/no-restricted-property-access
23
const {range: [start, end], tail} = node;
34
return fixer.replaceTextRange(
45
[start + 1, end - (tail ? 1 : 2)],

Diff for: rules/no-static-only-class.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ function switchClassToObject(node, sourceCode) {
153153
type === 'ClassExpression'
154154
&& parent.type === 'ReturnStatement'
155155
&& sourceCode.getLoc(body).start.line !== sourceCode.getLoc(parent).start.line
156-
&& sourceCode.text.slice(classToken.range[1], body.range[0]).trim()
156+
&& sourceCode.text.slice(sourceCode.getRange(classToken)[1], sourceCode.getRange(body)[0]).trim()
157157
) {
158158
yield fixer.replaceText(classToken, '{');
159159

Diff for: rules/prefer-at.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -197,9 +197,9 @@ function create(context) {
197197
if (
198198
tokenBefore.type === 'Punctuator'
199199
&& tokenBefore.value === '-'
200-
&& /^\s+$/.test(sourceCode.text.slice(tokenBefore.range[1], numberNode.range[0]))
200+
&& /^\s+$/.test(sourceCode.text.slice(sourceCode.getRange(tokenBefore)[1], sourceCode.getRange(numberNode)[0]))
201201
) {
202-
yield fixer.removeRange([tokenBefore.range[1], numberNode.range[0]]);
202+
yield fixer.removeRange([sourceCode.getRange(tokenBefore)[1], sourceCode.getRange(numberNode)[0]]);
203203
}
204204
}
205205

@@ -275,7 +275,7 @@ function create(context) {
275275
// Remove extra arguments
276276
if (sliceCall.arguments.length !== 1) {
277277
const [, start] = getParenthesizedRange(sliceCall.arguments[0], sourceCode);
278-
const [end] = sourceCode.getLastToken(sliceCall).range;
278+
const [end] = sourceCode.getRange(sourceCode.getLastToken(sliceCall));
279279
yield fixer.removeRange([start, end]);
280280
}
281281

Diff for: rules/prefer-switch.js

+1
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ const getBreakTarget = node => {
9898
};
9999

100100
const isNodeInsideNode = (inner, outer) =>
101+
// eslint-disable-next-line internal/no-restricted-property-access
101102
inner.range[0] >= outer.range[0] && inner.range[1] <= outer.range[1];
102103
function hasBreakInside(breakStatements, node) {
103104
for (const breakStatement of breakStatements) {

Diff for: rules/utils/has-same-range.js

+2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
const hasSameRange = (node1, node2) =>
22
node1
33
&& node2
4+
// eslint-disable-next-line internal/no-restricted-property-access
45
&& node1.range[0] === node2.range[0]
6+
// eslint-disable-next-line internal/no-restricted-property-access
57
&& node1.range[1] === node2.range[1];
68

79
export default hasSameRange;

Diff for: rules/utils/parentheses.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ Get the parenthesized range of the node.
4646
*/
4747
export function getParenthesizedRange(node, sourceCode) {
4848
const parentheses = getParentheses(node, sourceCode);
49-
const [start] = (parentheses[0] || node).range;
50-
const [, end] = (parentheses.at(-1) || node).range;
49+
const [start] = sourceCode.getRange(parentheses[0] ?? node);
50+
const [, end] = sourceCode.getRange(parentheses.at(-1) ?? node);
5151
return [start, end];
5252
}
5353

Diff for: scripts/internal-rules/index.js

+7-17
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import {fileURLToPath} from 'node:url';
2-
import packageJson from './package.json' with {type: 'json'};
32
import fixSnapshotTest from './fix-snapshot-test.js';
43
import noTestOnly from './no-test-only.js';
54
import preferNegativeBooleanAttribute from './prefer-negative-boolean-attribute.js';
@@ -26,10 +25,10 @@ const rules = [
2625

2726
const isFileInsideDirectory = (filename, directory) => filename.startsWith(directory);
2827

29-
const internal = {
28+
const plugin = {
3029
meta: {
31-
name: packageJson.name,
32-
version: packageJson.version,
30+
name: pluginName,
31+
version: '1.0.0',
3332
},
3433
rules: Object.fromEntries(
3534
rules.map(({id, directories, rule}) => [
@@ -49,18 +48,9 @@ const internal = {
4948
),
5049
};
5150

52-
const configs = {
53-
all: {
54-
plugins: {
55-
internal,
56-
},
57-
rules: Object.fromEntries(rules.map(({id}) => [`${pluginName}/${id}`, 'error'])),
58-
},
59-
};
60-
61-
const allConfigs = {
62-
...internal,
63-
configs,
51+
const config = {
52+
plugins: {[pluginName]: plugin},
53+
rules: Object.fromEntries(rules.map(({id}) => [`${pluginName}/${id}`, 'error'])),
6454
};
6555

66-
export default allConfigs;
56+
export default config;

Diff for: scripts/internal-rules/no-restricted-property-access.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@ import {removeMemberExpressionProperty} from '../../rules/fix/index.js';
66
const messageId = path.basename(fileURLToPath(import.meta.url), '.js');
77

88
const properties = new Map([
9-
// Todo: forbid `.range`
10-
// ['range', 'sourceCode.getRange'],
9+
['range', 'sourceCode.getRange'],
1110
['loc', 'sourceCode.getLoc'],
1211
]);
1312

Diff for: scripts/internal-rules/package.json

-8
This file was deleted.

0 commit comments

Comments
 (0)