Skip to content

Commit 44b6c8f

Browse files
committed
feature/prefer-collections-with-pagination
- Typescript parsing support - Detect rules automatically
1 parent e21a694 commit 44b6c8f

File tree

3 files changed

+215
-16
lines changed

3 files changed

+215
-16
lines changed

eslint-plugin/lib/index.js

Lines changed: 40 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -21,23 +21,48 @@
2121
*/
2222
"use strict";
2323

24-
const rules = [
25-
// add rule names here in an alphabetical order to avoid conflicts
26-
"no-multiple-access-dom-element",
27-
];
24+
const fs = require("fs");
25+
const path = require("path");
26+
27+
const resolveRule = (rulePath) => {
28+
try {
29+
return require(rulePath);
30+
} catch (e) {
31+
return null;
32+
}
33+
};
34+
35+
const hasTypescriptParser = () => {
36+
try {
37+
require("@typescript-eslint/parser");
38+
return true;
39+
} catch (e) {
40+
return false;
41+
}
42+
};
2843

2944
const ruleModules = {};
30-
const configs = { recommended: { plugins: ["@ecocode"], rules: {} } };
31-
32-
rules.forEach((rule) => {
33-
ruleModules[rule] = require(`./rules/${rule}`);
34-
const {
35-
meta: {
36-
docs: { recommended },
37-
},
38-
} = ruleModules[rule];
39-
configs.recommended.rules[`@ecocode/${rule}`] =
40-
recommended === false ? "off" : recommended;
45+
46+
const configs = {
47+
recommended: { plugins: ["@ecocode"], rules: {} },
48+
...(hasTypescriptParser() ? { parser: "@typescript-eslint/parser" } : {}),
49+
};
50+
51+
const rulesDirectory = "./rules";
52+
fs.readdirSync(rulesDirectory).forEach((file) => {
53+
const ruleName = path.parse(file).name;
54+
const resolvedRule = resolveRule(`./${path.join(rulesDirectory, ruleName)}`);
55+
56+
if (resolvedRule != null) {
57+
ruleModules[ruleName] = resolvedRule;
58+
const {
59+
meta: {
60+
docs: { recommended },
61+
},
62+
} = ruleModules[ruleName];
63+
configs.recommended.rules[`@ecocode/${ruleName}`] =
64+
recommended === false ? "off" : recommended;
65+
}
4166
});
4267

4368
module.exports = { rules: ruleModules, configs };

eslint-plugin/package.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@
2828
"update:eslint-docs": "eslint-doc-generator"
2929
},
3030
"devDependencies": {
31+
"@typescript-eslint/eslint-plugin": "^5.57.1",
32+
"@typescript-eslint/parser": "^5.57.1",
33+
"@typescript-eslint/utils": "^5.57.1",
3134
"eslint": "^8.19.0",
3235
"eslint-config-prettier": "^8.6.0",
3336
"eslint-doc-generator": "^1.0.0",
@@ -38,7 +41,8 @@
3841
"mocha": "^10.0.0",
3942
"npm-run-all": "^4.1.5",
4043
"nyc": "^15.1.0",
41-
"prettier": "^2.8.4"
44+
"prettier": "^2.8.4",
45+
"typescript": "^5.0.3"
4246
},
4347
"engines": {
4448
"node": "^14.17.0 || ^16.0.0 || >= 18.0.0"

yarn.lock

Lines changed: 170 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,9 @@ __metadata:
246246
version: 0.0.0-use.local
247247
resolution: "@ecocode/eslint-plugin@workspace:eslint-plugin"
248248
dependencies:
249+
"@typescript-eslint/eslint-plugin": ^5.57.1
250+
"@typescript-eslint/parser": ^5.57.1
251+
"@typescript-eslint/utils": ^5.57.1
249252
eslint: ^8.19.0
250253
eslint-config-prettier: ^8.6.0
251254
eslint-doc-generator: ^1.0.0
@@ -257,11 +260,30 @@ __metadata:
257260
npm-run-all: ^4.1.5
258261
nyc: ^15.1.0
259262
prettier: ^2.8.4
263+
typescript: ^5.0.3
260264
peerDependencies:
261265
eslint: ">=7"
262266
languageName: unknown
263267
linkType: soft
264268

269+
"@eslint-community/eslint-utils@npm:^4.2.0":
270+
version: 4.4.0
271+
resolution: "@eslint-community/eslint-utils@npm:4.4.0"
272+
dependencies:
273+
eslint-visitor-keys: ^3.3.0
274+
peerDependencies:
275+
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
276+
checksum: cdfe3ae42b4f572cbfb46d20edafe6f36fc5fb52bf2d90875c58aefe226892b9677fef60820e2832caf864a326fe4fc225714c46e8389ccca04d5f9288aabd22
277+
languageName: node
278+
linkType: hard
279+
280+
"@eslint-community/regexpp@npm:^4.4.0":
281+
version: 4.5.0
282+
resolution: "@eslint-community/regexpp@npm:4.5.0"
283+
checksum: 99c01335947dbd7f2129e954413067e217ccaa4e219fe0917b7d2bd96135789384b8fedbfb8eb09584d5130b27a7b876a7150ab7376f51b3a0c377d5ce026a10
284+
languageName: node
285+
linkType: hard
286+
265287
"@eslint/eslintrc@npm:^2.0.0":
266288
version: 2.0.0
267289
resolution: "@eslint/eslintrc@npm:2.0.0"
@@ -474,6 +496,47 @@ __metadata:
474496
languageName: node
475497
linkType: hard
476498

499+
"@typescript-eslint/eslint-plugin@npm:^5.57.1":
500+
version: 5.57.1
501+
resolution: "@typescript-eslint/eslint-plugin@npm:5.57.1"
502+
dependencies:
503+
"@eslint-community/regexpp": ^4.4.0
504+
"@typescript-eslint/scope-manager": 5.57.1
505+
"@typescript-eslint/type-utils": 5.57.1
506+
"@typescript-eslint/utils": 5.57.1
507+
debug: ^4.3.4
508+
grapheme-splitter: ^1.0.4
509+
ignore: ^5.2.0
510+
natural-compare-lite: ^1.4.0
511+
semver: ^7.3.7
512+
tsutils: ^3.21.0
513+
peerDependencies:
514+
"@typescript-eslint/parser": ^5.0.0
515+
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
516+
peerDependenciesMeta:
517+
typescript:
518+
optional: true
519+
checksum: 3ea842ef9615e298e28c6687c4dc285577ea0995944410553b3ca514ce9d437534b6e89114e9398c1a370324afe7a4a251c8c49540bb3bf13dcadde9ada3ecc2
520+
languageName: node
521+
linkType: hard
522+
523+
"@typescript-eslint/parser@npm:^5.57.1":
524+
version: 5.57.1
525+
resolution: "@typescript-eslint/parser@npm:5.57.1"
526+
dependencies:
527+
"@typescript-eslint/scope-manager": 5.57.1
528+
"@typescript-eslint/types": 5.57.1
529+
"@typescript-eslint/typescript-estree": 5.57.1
530+
debug: ^4.3.4
531+
peerDependencies:
532+
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
533+
peerDependenciesMeta:
534+
typescript:
535+
optional: true
536+
checksum: db61a12a67bc45d814297e7f089768c0849f18162b330279aa15121223ec3b18d80df4c327f4ca0a40a7bddb9150ba1a9379fce00bc0e4a10cc189d04e36f0e3
537+
languageName: node
538+
linkType: hard
539+
477540
"@typescript-eslint/scope-manager@npm:5.54.1":
478541
version: 5.54.1
479542
resolution: "@typescript-eslint/scope-manager@npm:5.54.1"
@@ -484,13 +547,47 @@ __metadata:
484547
languageName: node
485548
linkType: hard
486549

550+
"@typescript-eslint/scope-manager@npm:5.57.1":
551+
version: 5.57.1
552+
resolution: "@typescript-eslint/scope-manager@npm:5.57.1"
553+
dependencies:
554+
"@typescript-eslint/types": 5.57.1
555+
"@typescript-eslint/visitor-keys": 5.57.1
556+
checksum: 4f03d54372f0591fbc5f6e0267a6f1b73e3012e8a319c1893829e0b8e71f882e17a696995dc8b11e700162daf74444fd2d8f55dba314e1a95221a9d3eabcfb2b
557+
languageName: node
558+
linkType: hard
559+
560+
"@typescript-eslint/type-utils@npm:5.57.1":
561+
version: 5.57.1
562+
resolution: "@typescript-eslint/type-utils@npm:5.57.1"
563+
dependencies:
564+
"@typescript-eslint/typescript-estree": 5.57.1
565+
"@typescript-eslint/utils": 5.57.1
566+
debug: ^4.3.4
567+
tsutils: ^3.21.0
568+
peerDependencies:
569+
eslint: "*"
570+
peerDependenciesMeta:
571+
typescript:
572+
optional: true
573+
checksum: 06fab95315fc1ffdaaa011e6ec1ae538826ef3d9b422e2c926dbe9b83e55d9e8bdaa07c43317a4c0a59b40a24c5c48a7c8284e6a18780475a65894b1b949fc23
574+
languageName: node
575+
linkType: hard
576+
487577
"@typescript-eslint/types@npm:5.54.1":
488578
version: 5.54.1
489579
resolution: "@typescript-eslint/types@npm:5.54.1"
490580
checksum: 84a8f725cfa10646af389659e09c510c38d82c65960c7b613f844a264acc0e197471cba03f3e8f4b6411bc35dca28922c8352a7bd44621411c73fd6dd4096da2
491581
languageName: node
492582
linkType: hard
493583

584+
"@typescript-eslint/types@npm:5.57.1":
585+
version: 5.57.1
586+
resolution: "@typescript-eslint/types@npm:5.57.1"
587+
checksum: 21789eb697904bbb44a18df961d5918e7c5bd90c79df3a8b8b835da81d0c0f42c7eeb2d05f77cafe49a7367ae7f549a0c8281656ea44b6dc56ae1bf19a3a1eae
588+
languageName: node
589+
linkType: hard
590+
494591
"@typescript-eslint/typescript-estree@npm:5.54.1":
495592
version: 5.54.1
496593
resolution: "@typescript-eslint/typescript-estree@npm:5.54.1"
@@ -509,6 +606,42 @@ __metadata:
509606
languageName: node
510607
linkType: hard
511608

609+
"@typescript-eslint/typescript-estree@npm:5.57.1":
610+
version: 5.57.1
611+
resolution: "@typescript-eslint/typescript-estree@npm:5.57.1"
612+
dependencies:
613+
"@typescript-eslint/types": 5.57.1
614+
"@typescript-eslint/visitor-keys": 5.57.1
615+
debug: ^4.3.4
616+
globby: ^11.1.0
617+
is-glob: ^4.0.3
618+
semver: ^7.3.7
619+
tsutils: ^3.21.0
620+
peerDependenciesMeta:
621+
typescript:
622+
optional: true
623+
checksum: bf96520f6de562838a40c3f009fc61fbee5369621071cd0d1dba4470b2b2f746cf79afe4ffa3fbccb8913295a2fbb3d89681d5178529e8da4987c46ed4e5cbed
624+
languageName: node
625+
linkType: hard
626+
627+
"@typescript-eslint/utils@npm:5.57.1, @typescript-eslint/utils@npm:^5.57.1":
628+
version: 5.57.1
629+
resolution: "@typescript-eslint/utils@npm:5.57.1"
630+
dependencies:
631+
"@eslint-community/eslint-utils": ^4.2.0
632+
"@types/json-schema": ^7.0.9
633+
"@types/semver": ^7.3.12
634+
"@typescript-eslint/scope-manager": 5.57.1
635+
"@typescript-eslint/types": 5.57.1
636+
"@typescript-eslint/typescript-estree": 5.57.1
637+
eslint-scope: ^5.1.1
638+
semver: ^7.3.7
639+
peerDependencies:
640+
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
641+
checksum: 12e55144c8087f4e8f0f22e5693f3901b81bb7899dec42c7bfe540ac672a802028b688884bb43bd67bcf3cd3546a7205d207afcd948c731c19f551ea61267205
642+
languageName: node
643+
linkType: hard
644+
512645
"@typescript-eslint/utils@npm:^5.38.1":
513646
version: 5.54.1
514647
resolution: "@typescript-eslint/utils@npm:5.54.1"
@@ -537,6 +670,16 @@ __metadata:
537670
languageName: node
538671
linkType: hard
539672

673+
"@typescript-eslint/visitor-keys@npm:5.57.1":
674+
version: 5.57.1
675+
resolution: "@typescript-eslint/visitor-keys@npm:5.57.1"
676+
dependencies:
677+
"@typescript-eslint/types": 5.57.1
678+
eslint-visitor-keys: ^3.3.0
679+
checksum: d187dfac044b7c0f24264a9ba5eebcf6651412d840b4aaba8eacabff7e771babcd67c738525b1f7c9eb8c94b7edfe7658f6de99f5fdc9745e409c538c1374674
680+
languageName: node
681+
linkType: hard
682+
540683
"abbrev@npm:^1.0.0":
541684
version: 1.1.1
542685
resolution: "abbrev@npm:1.1.1"
@@ -2947,6 +3090,13 @@ __metadata:
29473090
languageName: node
29483091
linkType: hard
29493092

3093+
"natural-compare-lite@npm:^1.4.0":
3094+
version: 1.4.0
3095+
resolution: "natural-compare-lite@npm:1.4.0"
3096+
checksum: 5222ac3986a2b78dd6069ac62cbb52a7bf8ffc90d972ab76dfe7b01892485d229530ed20d0c62e79a6b363a663b273db3bde195a1358ce9e5f779d4453887225
3097+
languageName: node
3098+
linkType: hard
3099+
29503100
"natural-compare@npm:^1.4.0":
29513101
version: 1.4.0
29523102
resolution: "natural-compare@npm:1.4.0"
@@ -4088,6 +4238,26 @@ __metadata:
40884238
languageName: node
40894239
linkType: hard
40904240

4241+
"typescript@npm:^5.0.3":
4242+
version: 5.0.3
4243+
resolution: "typescript@npm:5.0.3"
4244+
bin:
4245+
tsc: bin/tsc
4246+
tsserver: bin/tsserver
4247+
checksum: 3cce0576d218cb4277ff8b6adfef1a706e9114a98b4261a38ad658a7642f1b274a8396394f6cbff8c0ba852996d7ed2e233e9b8431d5d55ac7c2f6fea645af02
4248+
languageName: node
4249+
linkType: hard
4250+
4251+
"typescript@patch:typescript@^5.0.3#~builtin<compat/typescript>":
4252+
version: 5.0.3
4253+
resolution: "typescript@patch:typescript@npm%3A5.0.3#~builtin<compat/typescript>::version=5.0.3&hash=1f5320"
4254+
bin:
4255+
tsc: bin/tsc
4256+
tsserver: bin/tsserver
4257+
checksum: 9ec0a8eed38d46cc2c8794555b7674e413604c56c159f71b8ff21ce7f17334a44127a68724cb2ef8221ff3b19369f8f05654e8a5266621d7d962aeed889bd630
4258+
languageName: node
4259+
linkType: hard
4260+
40914261
"unbox-primitive@npm:^1.0.2":
40924262
version: 1.0.2
40934263
resolution: "unbox-primitive@npm:1.0.2"

0 commit comments

Comments
 (0)