Skip to content

Commit 19d4688

Browse files
committed
enable eslint-plugin-es-x no-nonstandard-*-properties rules
1 parent bd23274 commit 19d4688

28 files changed

+326
-1
lines changed

packages/core-js/internals/native-raw-json.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ var fails = require('../internals/fails');
44

55
module.exports = !fails(function () {
66
var unsafeInt = '9007199254740993';
7+
// eslint-disable-next-line es/no-nonstandard-json-properties -- feature detection
78
var raw = JSON.rawJSON(unsafeInt);
9+
// eslint-disable-next-line es/no-nonstandard-json-properties -- feature detection
810
return !JSON.isRawJSON(raw) || JSON.stringify(raw) !== unsafeInt;
911
});

packages/core-js/modules/esnext.array.from-async.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ var $ = require('../internals/export');
33
var fromAsync = require('../internals/array-from-async');
44
var fails = require('../internals/fails');
55

6+
// eslint-disable-next-line es/no-nonstandard-array-properties -- safe
67
var nativeFromAsync = Array.fromAsync;
78
// https://bugs.webkit.org/show_bug.cgi?id=271703
89
var INCORRECT_CONSTRUCTURING = !nativeFromAsync || fails(function () {

packages/core-js/modules/esnext.regexp.escape.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ var padStart = require('../internals/string-pad').start;
77
var WHITESPACES = require('../internals/whitespaces');
88

99
var $Array = Array;
10+
// eslint-disable-next-line es/no-nonstandard-regexp-properties -- safe
1011
var $escape = RegExp.escape;
1112
var charAt = uncurryThis(''.charAt);
1213
var charCodeAt = uncurryThis(''.charCodeAt);

tests/compat/tests.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,6 +374,7 @@ GLOBAL.tests = {
374374
return { foo: 1 };
375375
};
376376

377+
// eslint-disable-next-line es/no-nonstandard-array-prototype-properties -- @@species
377378
return array1.concat()[0] === array1 && array2.concat().foo === 1;
378379
},
379380
'es.array.copy-within': function () {
@@ -395,6 +396,7 @@ GLOBAL.tests = {
395396
constructor[Symbol.species] = function () {
396397
return { foo: 1 };
397398
};
399+
// eslint-disable-next-line es/no-nonstandard-array-prototype-properties -- @@species
398400
return array.filter(Boolean).foo === 1;
399401
},
400402
'es.array.find': function () {
@@ -475,6 +477,7 @@ GLOBAL.tests = {
475477
constructor[Symbol.species] = function () {
476478
return { foo: 1 };
477479
};
480+
// eslint-disable-next-line es/no-nonstandard-array-prototype-properties -- @@species
478481
return array.map(function () { return true; }).foo === 1;
479482
},
480483
'es.array.of': function () {
@@ -513,6 +516,7 @@ GLOBAL.tests = {
513516
constructor[Symbol.species] = function () {
514517
return { foo: 1 };
515518
};
519+
// eslint-disable-next-line es/no-nonstandard-array-prototype-properties -- @@species
516520
return array.slice().foo === 1;
517521
},
518522
'es.array.some': function () {
@@ -569,6 +573,7 @@ GLOBAL.tests = {
569573
constructor[Symbol.species] = function () {
570574
return { foo: 1 };
571575
};
576+
// eslint-disable-next-line es/no-nonstandard-array-prototype-properties -- @@species
572577
return array.splice().foo === 1;
573578
},
574579
'es.array.to-reversed': function () {

tests/eslint/eslint.config.js

Lines changed: 287 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1059,6 +1059,280 @@ const useES3Syntax = {
10591059
'unicorn/prefer-optional-catch-binding': OFF,
10601060
};
10611061

1062+
const forbidNonStandardBuiltIns = {
1063+
// disallow non-standard built-in methods
1064+
'es/no-nonstandard-array-properties': ERROR,
1065+
'es/no-nonstandard-array-prototype-properties': ERROR,
1066+
'es/no-nonstandard-arraybuffer-properties': ERROR,
1067+
'es/no-nonstandard-arraybuffer-prototype-properties': ERROR,
1068+
'es/no-nonstandard-atomics-properties': ERROR,
1069+
'es/no-nonstandard-bigint-properties': ERROR,
1070+
'es/no-nonstandard-bigint-prototype-properties': ERROR,
1071+
'es/no-nonstandard-boolean-properties': ERROR,
1072+
'es/no-nonstandard-boolean-prototype-properties': ERROR,
1073+
'es/no-nonstandard-dataview-properties': ERROR,
1074+
'es/no-nonstandard-dataview-prototype-properties': ERROR,
1075+
'es/no-nonstandard-date-properties': ERROR,
1076+
'es/no-nonstandard-date-prototype-properties': ERROR,
1077+
'es/no-nonstandard-finalizationregistry-properties': ERROR,
1078+
'es/no-nonstandard-finalizationregistry-prototype-properties': ERROR,
1079+
'es/no-nonstandard-function-properties': ERROR,
1080+
'es/no-nonstandard-intl-collator-properties': ERROR,
1081+
'es/no-nonstandard-intl-collator-prototype-properties': ERROR,
1082+
'es/no-nonstandard-intl-datetimeformat-properties': ERROR,
1083+
'es/no-nonstandard-intl-datetimeformat-prototype-properties': ERROR,
1084+
'es/no-nonstandard-intl-displaynames-properties': ERROR,
1085+
'es/no-nonstandard-intl-displaynames-prototype-properties': ERROR,
1086+
'es/no-nonstandard-intl-listformat-properties': ERROR,
1087+
'es/no-nonstandard-intl-listformat-prototype-properties': ERROR,
1088+
'es/no-nonstandard-intl-locale-properties': ERROR,
1089+
'es/no-nonstandard-intl-locale-prototype-properties': ERROR,
1090+
'es/no-nonstandard-intl-numberformat-properties': ERROR,
1091+
'es/no-nonstandard-intl-numberformat-prototype-properties': ERROR,
1092+
'es/no-nonstandard-intl-pluralrules-properties': ERROR,
1093+
'es/no-nonstandard-intl-pluralrules-prototype-properties': ERROR,
1094+
'es/no-nonstandard-intl-properties': ERROR,
1095+
'es/no-nonstandard-intl-relativetimeformat-properties': ERROR,
1096+
'es/no-nonstandard-intl-relativetimeformat-prototype-properties': ERROR,
1097+
'es/no-nonstandard-intl-segmenter-properties': ERROR,
1098+
'es/no-nonstandard-intl-segmenter-prototype-properties': ERROR,
1099+
'es/no-nonstandard-iterator-properties': ERROR,
1100+
'es/no-nonstandard-iterator-prototype-properties': ERROR,
1101+
'es/no-nonstandard-json-properties': ERROR,
1102+
'es/no-nonstandard-map-properties': ERROR,
1103+
'es/no-nonstandard-map-prototype-properties': ERROR,
1104+
'es/no-nonstandard-math-properties': ERROR,
1105+
'es/no-nonstandard-number-properties': ERROR,
1106+
'es/no-nonstandard-number-prototype-properties': ERROR,
1107+
'es/no-nonstandard-object-properties': ERROR,
1108+
'es/no-nonstandard-promise-properties': ERROR,
1109+
'es/no-nonstandard-promise-prototype-properties': ERROR,
1110+
'es/no-nonstandard-proxy-properties': ERROR,
1111+
'es/no-nonstandard-reflect-properties': ERROR,
1112+
'es/no-nonstandard-regexp-properties': ERROR,
1113+
'es/no-nonstandard-regexp-prototype-properties': ERROR,
1114+
'es/no-nonstandard-set-properties': ERROR,
1115+
'es/no-nonstandard-set-prototype-properties': ERROR,
1116+
'es/no-nonstandard-sharedarraybuffer-properties': ERROR,
1117+
'es/no-nonstandard-sharedarraybuffer-prototype-properties': ERROR,
1118+
'es/no-nonstandard-string-properties': ERROR,
1119+
'es/no-nonstandard-string-prototype-properties': ERROR,
1120+
'es/no-nonstandard-symbol-properties': [ERROR, { allow: [
1121+
'sham', // non-standard flag
1122+
] }],
1123+
'es/no-nonstandard-symbol-prototype-properties': ERROR,
1124+
'es/no-nonstandard-typed-array-properties': ERROR,
1125+
'es/no-nonstandard-typed-array-prototype-properties': ERROR,
1126+
'es/no-nonstandard-weakmap-properties': ERROR,
1127+
'es/no-nonstandard-weakmap-prototype-properties': ERROR,
1128+
'es/no-nonstandard-weakref-properties': ERROR,
1129+
'es/no-nonstandard-weakref-prototype-properties': ERROR,
1130+
'es/no-nonstandard-weakset-properties': ERROR,
1131+
'es/no-nonstandard-weakset-prototype-properties': ERROR,
1132+
};
1133+
1134+
const forbidCompletelyNonExistentBuiltIns = {
1135+
...forbidNonStandardBuiltIns,
1136+
// disallow non-standard built-in methods
1137+
'es/no-nonstandard-array-properties': [ERROR, { allow: [
1138+
'fromAsync',
1139+
'isTemplateObject',
1140+
] }],
1141+
'es/no-nonstandard-array-prototype-properties': [ERROR, { allow: [
1142+
'filterReject',
1143+
'uniqueBy',
1144+
// TODO: drop from `core-js@4`
1145+
'filterOut',
1146+
'group',
1147+
'groupBy',
1148+
'groupByToMap',
1149+
'groupToMap',
1150+
'lastIndex',
1151+
'lastItem',
1152+
] }],
1153+
'es/no-nonstandard-bigint-properties': [ERROR, { allow: [
1154+
// TODO: drop from `core-js@4`
1155+
'range',
1156+
] }],
1157+
'es/no-nonstandard-dataview-prototype-properties': [ERROR, { allow: [
1158+
'getFloat16',
1159+
'getUint8Clamped',
1160+
'setFloat16',
1161+
'setUint8Clamped',
1162+
] }],
1163+
'es/no-nonstandard-function-properties': [ERROR, { allow: [
1164+
'isCallable',
1165+
'isConstructor',
1166+
] }],
1167+
'es/no-nonstandard-iterator-properties': [ERROR, { allow: [
1168+
'concat',
1169+
'range',
1170+
] }],
1171+
'es/no-nonstandard-iterator-prototype-properties': [ERROR, { allow: [
1172+
'toAsync',
1173+
// TODO: drop from `core-js@4`
1174+
'asIndexedPairs',
1175+
'indexed',
1176+
] }],
1177+
'es/no-nonstandard-json-properties': [ERROR, { allow: [
1178+
'isRawJSON',
1179+
'rawJSON',
1180+
] }],
1181+
'es/no-nonstandard-map-properties': [ERROR, { allow: [
1182+
'from',
1183+
'of',
1184+
// TODO: drop from `core-js@4`
1185+
'keyBy',
1186+
] }],
1187+
'es/no-nonstandard-map-prototype-properties': [ERROR, { allow: [
1188+
'getOrInsert',
1189+
'getOrInsertComputed',
1190+
// TODO: drop from `core-js@4`
1191+
'deleteAll',
1192+
'emplace',
1193+
'every',
1194+
'filter',
1195+
'find',
1196+
'findKey',
1197+
'includes',
1198+
'keyOf',
1199+
'mapKeys',
1200+
'mapValues',
1201+
'merge',
1202+
'reduce',
1203+
'some',
1204+
'update',
1205+
'updateOrInsert',
1206+
'upsert',
1207+
] }],
1208+
'es/no-nonstandard-math-properties': [ERROR, { allow: [
1209+
'f16round',
1210+
'sumPrecise',
1211+
// TODO: drop from `core-js@4`
1212+
'DEG_PER_RAD',
1213+
'RAD_PER_DEG',
1214+
'clamp',
1215+
'degrees',
1216+
'fscale',
1217+
'iaddh',
1218+
'imulh',
1219+
'isubh',
1220+
'radians',
1221+
'scale',
1222+
'seededPRNG',
1223+
'signbit',
1224+
'umulh',
1225+
] }],
1226+
'es/no-nonstandard-number-properties': [ERROR, { allow: [
1227+
// TODO: drop from `core-js@4`
1228+
'fromString',
1229+
'range',
1230+
] }],
1231+
'es/no-nonstandard-object-properties': [ERROR, { allow: [
1232+
// TODO: drop from `core-js@4`
1233+
'iterateEntries',
1234+
'iterateKeys',
1235+
'iterateValues',
1236+
] }],
1237+
'es/no-nonstandard-reflect-properties': [ERROR, { allow: [
1238+
// TODO: drop from `core-js@4`
1239+
'defineMetadata',
1240+
'deleteMetadata',
1241+
'getMetadata',
1242+
'getMetadataKeys',
1243+
'getOwnMetadata',
1244+
'getOwnMetadataKeys',
1245+
'hasMetadata',
1246+
'hasOwnMetadata',
1247+
'metadata',
1248+
] }],
1249+
'es/no-nonstandard-regexp-properties': [ERROR, { allow: [
1250+
'escape',
1251+
] }],
1252+
'es/no-nonstandard-set-properties': [ERROR, { allow: [
1253+
'from',
1254+
'of',
1255+
] }],
1256+
'es/no-nonstandard-set-prototype-properties': [ERROR, { allow: [
1257+
// TODO: drop from `core-js@4`
1258+
'addAll',
1259+
'deleteAll',
1260+
'every',
1261+
'filter',
1262+
'find',
1263+
'join',
1264+
'map',
1265+
'reduce',
1266+
'some',
1267+
] }],
1268+
'es/no-nonstandard-string-properties': [ERROR, { allow: [
1269+
'cooked',
1270+
'dedent',
1271+
] }],
1272+
'es/no-nonstandard-string-prototype-properties': [ERROR, { allow: [
1273+
// TODO: drop from `core-js@4`
1274+
'codePoints',
1275+
] }],
1276+
'es/no-nonstandard-symbol-properties': [ERROR, { allow: [
1277+
'asyncDispose',
1278+
'customMatcher',
1279+
'dispose',
1280+
'isRegisteredSymbol',
1281+
'isWellKnownSymbol',
1282+
'metadata',
1283+
'sham', // non-standard flag
1284+
// TODO: drop from `core-js@4`
1285+
'isRegistered',
1286+
'isWellKnown',
1287+
'matcher',
1288+
'metadataKey',
1289+
'observable',
1290+
'patternMatch',
1291+
'replaceAll',
1292+
'useSetter',
1293+
'useSimple',
1294+
] }],
1295+
'es/no-nonstandard-typed-array-properties': [ERROR, { allow: [
1296+
'fromBase64',
1297+
'fromHex',
1298+
// TODO: drop from `core-js@4`
1299+
'fromAsync',
1300+
] }],
1301+
'es/no-nonstandard-typed-array-prototype-properties': [ERROR, { allow: [
1302+
'filterReject',
1303+
'uniqueBy',
1304+
// TODO: drop from `core-js@4`
1305+
'filterOut',
1306+
'groupBy',
1307+
'setFromBase64',
1308+
'setFromHex',
1309+
'toBase64',
1310+
'toHex',
1311+
'toSpliced',
1312+
] }],
1313+
'es/no-nonstandard-weakmap-properties': [ERROR, { allow: [
1314+
'from',
1315+
'of',
1316+
] }],
1317+
'es/no-nonstandard-weakmap-prototype-properties': [ERROR, { allow: [
1318+
'getOrInsert',
1319+
'getOrInsertComputed',
1320+
// TODO: drop from `core-js@4`
1321+
'deleteAll',
1322+
'emplace',
1323+
'upsert',
1324+
] }],
1325+
'es/no-nonstandard-weakset-properties': [ERROR, { allow: [
1326+
'from',
1327+
'of',
1328+
] }],
1329+
'es/no-nonstandard-weakset-prototype-properties': [ERROR, { allow: [
1330+
// TODO: drop from `core-js@4`
1331+
'addAll',
1332+
'deleteAll',
1333+
] }],
1334+
};
1335+
10621336
const forbidESAnnexBBuiltIns = {
10631337
'es/no-date-prototype-getyear-setyear': ERROR,
10641338
'es/no-date-prototype-togmtstring': ERROR,
@@ -1384,6 +1658,7 @@ const transpiledAndPolyfilled = {
13841658
// enforce using named capture group in regular expression
13851659
'regexp/prefer-named-capture-group': OFF,
13861660
...forbidSomeES2025Syntax,
1661+
...forbidCompletelyNonExistentBuiltIns,
13871662
};
13881663

13891664
const nodePackages = {
@@ -1668,6 +1943,7 @@ const packagesPackageJSON = {
16681943

16691944
const markdown = {
16701945
...disable(forbidModernBuiltIns),
1946+
...forbidCompletelyNonExistentBuiltIns,
16711947
// allow use of console
16721948
'no-console': OFF,
16731949
// disallow use of new operator when not part of the assignment or comparison
@@ -1781,6 +2057,7 @@ export default [
17812057
},
17822058
rules: {
17832059
...base,
2060+
...forbidNonStandardBuiltIns,
17842061
...forbidESAnnexBBuiltIns,
17852062
},
17862063
},
@@ -1827,7 +2104,10 @@ export default [
18272104
files: [
18282105
'packages/core-js?(-pure)/**/instance/**',
18292106
],
1830-
rules: disable(forbidModernBuiltIns),
2107+
rules: {
2108+
...disable(forbidModernBuiltIns),
2109+
...forbidCompletelyNonExistentBuiltIns,
2110+
},
18312111
},
18322112
{
18332113
files: [
@@ -1844,6 +2124,12 @@ export default [
18442124
],
18452125
rules: tests,
18462126
},
2127+
{
2128+
files: [
2129+
'tests/compat/tests.js',
2130+
],
2131+
rules: forbidCompletelyNonExistentBuiltIns,
2132+
},
18472133
{
18482134
files: [
18492135
'tests/@(helpers|unit-@(global|pure))/**',

0 commit comments

Comments
 (0)