@ethang/eslint-config 18.4.21 → 19.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -4,20 +4,20 @@
4
4
 
5
5
  Do **NOT** use this with Prettier! Styling rules are included.
6
6
 
7
- * 614 errored rules.
8
- * 142 rules from vanilla EsLint
7
+ * 900 errored rules.
8
+ * 300 rules from [eslint-plugin-sonarjs](https://github.com/SonarSource/eslint-plugin-sonarjs)
9
+ * 140 rules from vanilla EsLint
9
10
  * 113 rules from [sindresorhus/eslint-plugin-unicorn](https://github.com/sindresorhus/eslint-plugin-unicorn)
10
- * 104 rules from [@typescript/eslint](https://github.com/typescript-eslint/typescript-eslint)
11
+ * 103 rules from [@typescript/eslint](https://github.com/typescript-eslint/typescript-eslint)
11
12
  * 91 rules from [@stylistic/eslint-plugin](https://eslint.style/)
12
13
  * 42 rules from [eslint-plugin-lodash](https://github.com/wix-incubator/eslint-plugin-lodash)
13
14
  * 35 rules from [jsx-a11y](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y)
14
- * 32 rules from [eslint-plugin-sonarjs](https://github.com/SonarSource/eslint-plugin-sonarjs)
15
15
  * 20 rules from [eslint-plugin-n](https://github.com/eslint-community/eslint-plugin-n/tree/67bbfdf3c6862dcbfe455a4afbd83fa60f9d1ea4)
16
16
  * 20 rules from [eslint-plugin-github](https://github.com/github/eslint-plugin-github)
17
17
  * 19 rules from [eslint-plugin-perfectionist](https://github.com/azat-io/eslint-plugin-perfectionist)
18
18
  * 7 rules from [eslint-plugin-tailwindcss](https://github.com/francoismassart/eslint-plugin-tailwindcss)
19
19
  * 4 rules from [eslint-plugin-barrel-files](https://github.com/thepassle/eslint-plugin-barrel-files)
20
- * 3 rules from [@tanstack/eslint-plugin-query](https://tanstack.com/query/latest/docs/eslint/eslint-plugin-query)
20
+ * 4 rules from [@tanstack/eslint-plugin-query](https://tanstack.com/query/latest/docs/eslint/eslint-plugin-query)
21
21
  * 1 rule from [eslint-plugin-depend](https://github.com/es-tooling/eslint-plugin-depend/tree/main)
22
22
  * 1 rule from [eslint-plugin-compat](https://github.com/amilajack/eslint-plugin-compat)
23
23
 
package/config.react.js CHANGED
@@ -85,7 +85,6 @@ export default tseslint.config({
85
85
  "react/prefer-shorthand-boolean": "error",
86
86
  "react/prefer-shorthand-fragment": "error",
87
87
  "react/web-api/no-leaked-event-listener": "error",
88
-
89
88
  "react/web-api/no-leaked-interval": "error",
90
89
  "react/web-api/no-leaked-timeout": "error",
91
90
  },
package/eslint.config.js CHANGED
@@ -25,7 +25,7 @@ export const languageOptions = {
25
25
  export const ignores = ["eslint.config.js", "node_modules", "dist"];
26
26
 
27
27
  export default tseslint.config({
28
- files: ["**/*.{js,ts,jsx,tsx,cjs,cts,mjs,mts}"],
28
+ files: ["**/*.{js,ts,jsx,tsx,cjs,cts,mjs,mts,css,html}"],
29
29
  ignores,
30
30
  languageOptions,
31
31
  plugins: {
@@ -55,6 +55,8 @@ export default tseslint.config({
55
55
  "array-callback-return": "error",
56
56
  "arrow-body-style": ["error", "always"],
57
57
  "block-scoped-var": "error",
58
+ "camelcase": "off", // No
59
+ "capitalized-comments": "off", // No
58
60
  "constructor-super": "error",
59
61
  eqeqeq: "error",
60
62
  "for-direction": "error",
@@ -72,8 +74,8 @@ export default tseslint.config({
72
74
  "logical-assignment-operators": "error",
73
75
  "max-classes-per-file": "error",
74
76
  "max-depth": "error",
75
- "max-lines": "error",
76
- "max-lines-per-function": "error",
77
+ "max-lines": "off", // Handled by Sonar
78
+ "max-lines-per-function": "off", // Handled by Sonar
77
79
  "max-nested-callbacks": "error",
78
80
  "max-statements": "error",
79
81
  "no-alert": "error",
@@ -237,7 +239,7 @@ export default tseslint.config({
237
239
  "@typescript-eslint/default-param-last": "error",
238
240
  "@typescript-eslint/dot-notation": "error",
239
241
  "@typescript-eslint/explicit-member-accessibility": "error",
240
- "@typescript-eslint/max-params": "error",
242
+ "@typescript-eslint/max-params": "off", // Handled by Sonar
241
243
  "@typescript-eslint/method-signature-style": "error",
242
244
  "@typescript-eslint/no-array-constructor": "error",
243
245
  "@typescript-eslint/no-array-delete": "error",
@@ -496,38 +498,311 @@ export default tseslint.config({
496
498
  "lodash/prop-shorthand": ["error", "always"],
497
499
  "lodash/unwrap": "error",
498
500
 
501
+ "sonar/accessor-pairs": "error",
502
+ "sonar/alt-text": "error",
503
+ "sonar/anchor-has-content": "error",
504
+ "sonar/anchor-is-valid": "error",
505
+ "sonar/anchor-precedence": "error",
506
+ "sonar/argument-type": "error",
507
+ "sonar/arguments-order": "error",
508
+ "sonar/arguments-usage": "error",
509
+ "sonar/array-callback-without-return": "error",
510
+ "sonar/array-constructor": "error",
511
+ "sonar/arrow-function-convention": "off", // Not handled by Sonar
512
+ "sonar/assertions-in-tests": "error",
513
+ "sonar/aws-apigateway-public-api": "error",
514
+ "sonar/aws-ec2-rds-dms-public": "error",
515
+ "sonar/aws-ec2-unencrypted-ebs-volume": "error",
516
+ "sonar/aws-efs-unencrypted": "error",
517
+ "sonar/aws-iam-all-privileges": "error",
518
+ "sonar/aws-iam-all-resources-accessible": "error",
519
+ "sonar/aws-iam-privilege-escalation": "error",
520
+ "sonar/aws-iam-public-access": "error",
521
+ "sonar/aws-opensearchservice-domain": "error",
522
+ "sonar/aws-rds-unencrypted-databases": "error",
523
+ "sonar/aws-restricted-ip-admin-access": "error",
524
+ "sonar/aws-s3-bucket-granted-access": "error",
525
+ "sonar/aws-s3-bucket-insecure-http": "error",
526
+ "sonar/aws-s3-bucket-public-access": "error",
527
+ "sonar/aws-s3-bucket-versioning": "error",
528
+ "sonar/aws-sagemaker-unencrypted-notebook": "error",
529
+ "sonar/aws-sns-unencrypted-topics": "error",
530
+ "sonar/aws-sqs-unencrypted-queue": "error",
531
+ "sonar/bitwise-operators": "error",
532
+ "sonar/bool-param-default": "error",
533
+ "sonar/call-argument-line": "error",
534
+ "sonar/certificate-transparency": "error",
535
+ "sonar/chai-determinate-assertion": "error",
536
+ "sonar/class-name": "error",
537
+ "sonar/class-prototype": "error",
538
+ "sonar/code-eval": "error",
499
539
  "sonar/cognitive-complexity": "error",
540
+ "sonar/comma-or-logical-or-case": "error",
541
+ "sonar/comment-regex": "off", // Rule template
542
+ "sonar/concise-regex": "error",
543
+ "sonar/confidential-information-logging": "error",
544
+ "sonar/constructor-for-side-effects": "error",
545
+ "sonar/content-length": "error",
546
+ "sonar/content-security-policy": "error",
547
+ "sonar/cookie-no-httponly": "error",
548
+ "sonar/cors": "error",
549
+ "sonar/csrf": "error",
550
+ "sonar/cyclomatic-complexity": "error",
551
+ "sonar/declarations-in-global-scope": "error",
552
+ "sonar/default-param-last": "error",
553
+ "sonar/deprecation": "error",
554
+ "sonar/destructuring-assignment-syntax": "error",
555
+ "sonar/different-types-comparison": "error",
556
+ "sonar/disabled-auto-escaping": "error",
557
+ "sonar/disabled-resource-integrity": "error",
558
+ "sonar/disabled-timeout": "error",
559
+ "sonar/duplicates-in-character-class": "error",
500
560
  "sonar/elseif-without-else": "error",
561
+ "sonar/empty-string-repetition": "error",
562
+ "sonar/encryption-secure-mode": "error",
563
+ "sonar/existing-groups": "error",
564
+ "sonar/expression-complexity": "error",
565
+ "sonar/file-header": "off", // No
566
+ "sonar/file-name-differ-from-class": "error",
567
+ "sonar/file-permissions": "error",
568
+ "sonar/file-uploads": "error",
569
+ "sonar/fixme-tag": "error",
570
+ "sonar/for-in": "error",
571
+ "sonar/for-loop-increment-sign": "error",
572
+ "sonar/frame-ancestors": "error",
573
+ "sonar/function-inside-loop": "error",
574
+ "sonar/function-name": "error",
575
+ "sonar/function-return-type": "error",
576
+ "sonar/future-reserved-words": "error",
577
+ "sonar/generator-without-yield": "error",
578
+ "sonar/hashing": "error",
579
+ "sonar/hidden-files": "error",
580
+ "sonar/hook-use-state": "error",
581
+ "sonar/html-has-lang": "error",
582
+ "sonar/in-operator-type-error": "error",
583
+ "sonar/inconsistent-function-call": "error",
584
+ "sonar/index-of-compare-to-positive-number": "error",
585
+ "sonar/insecure-cookie": "error",
586
+ "sonar/insecure-jwt-token": "error",
587
+ "sonar/inverted-assertion-arguments": "error",
588
+ "sonar/jsx-key": "error",
589
+ "sonar/jsx-no-constructed-context-values": "error",
590
+ "sonar/jsx-no-useless-fragment": "error",
591
+ "sonar/label-has-associated-control": "error",
592
+ "sonar/label-position": "error",
593
+ "sonar/link-with-target-blank": "error",
501
594
  "sonar/max-switch-cases": "error",
595
+ "sonar/max-union-size": "error",
596
+ "sonar/media-has-caption": "error",
597
+ "sonar/misplaced-loop-counter": "error",
598
+ "sonar/mouse-events-a11y": "error",
599
+ "sonar/nested-control-flow": "error",
600
+ "sonar/new-cap": "error",
601
+ "sonar/new-operator-misuse": "error",
602
+ "sonar/no-accessor-field-mismatch": "error",
502
603
  "sonar/no-all-duplicated-branches": "error",
604
+ "sonar/no-alphabetical-sort": "error",
605
+ "sonar/no-angular-bypass-sanitization": "error",
606
+ "sonar/no-array-delete": "error",
607
+ "sonar/no-array-index-key": "error",
608
+ "sonar/no-associative-arrays": "error",
609
+ "sonar/no-base-to-string": "error",
610
+ "sonar/no-built-in-override": "error",
611
+ "sonar/no-case-label-in-switch": "error",
612
+ "sonar/no-clear-text-protocols": "error",
613
+ "sonar/no-code-after-done": "error",
503
614
  "sonar/no-collapsible-if": "error",
504
615
  "sonar/no-collection-size-mischeck": "error",
616
+ "sonar/no-commented-code": "error",
617
+ "sonar/no-dead-store": "error",
618
+ "sonar/no-delete-var": "error",
619
+ "sonar/no-deprecated-react": "error",
505
620
  "sonar/no-duplicate-string": "error",
621
+ "sonar/no-duplicate-in-composite": "error",
506
622
  "sonar/no-duplicated-branches": "error",
507
623
  "sonar/no-element-overwrite": "error",
624
+ "sonar/no-empty-after-reluctant": "error",
625
+ "sonar/no-empty-alternatives": "error",
508
626
  "sonar/no-empty-collection": "error",
627
+ "sonar/no-empty-function": "error",
628
+ "sonar/no-empty-group": "error",
629
+ "sonar/no-empty-interface": "error",
630
+ "sonar/no-empty-test-file": "error",
631
+ "sonar/no-equals-in-for-termination": "error",
632
+ "sonar/no-exclusive-tests": "error",
633
+ "sonar/no-extend-native": "error",
509
634
  "sonar/no-extra-arguments": "error",
635
+ "sonar/no-find-dom-node": "error",
636
+ "sonar/no-for-in-iterable": "error",
637
+ "sonar/no-function-declaration-in-block": "error",
638
+ "sonar/no-global-this": "error",
639
+ "sonar/no-globals-shadowing": "error",
510
640
  "sonar/no-gratuitous-expressions": "error",
641
+ "sonar/no-hardcoded-credentials": "error",
642
+ "sonar/no-hardcoded-ip": "error",
643
+ "sonar/no-hook-setter-in-body": "error",
644
+ "sonar/no-ignored-exceptions": "error",
511
645
  "sonar/no-identical-conditions": "error",
512
646
  "sonar/no-identical-expressions": "error",
513
647
  "sonar/no-identical-functions": "error",
514
648
  "sonar/no-ignored-return": "error",
649
+ "sonar/no-implicit-dependencies": "off", // doesn't seem to work well, n/ can handle this
650
+ "sonar/no-implicit-global": "error",
651
+ "sonar/no-in-misuse": "error",
652
+ "sonar/no-incomplete-assertions": "error",
653
+ "sonar/no-inconsistent-returns": "off", // TODO v9 compatibility?
654
+ "sonar/no-incorrect-string-concat": "error",
655
+ "sonar/no-infinite-loop": "error",
656
+ "sonar/no-intrusive-permissions": "error",
657
+ "sonar/no-invalid-await": "error",
658
+ "sonar/no-invariant-returns": "error",
515
659
  "sonar/no-inverted-boolean-check": "error",
660
+ "sonar/no-ip-forward": "error",
661
+ "sonar/no-labels": "error",
662
+ "sonar/no-literal-call": "error",
663
+ "sonar/no-lonely-if": "error",
664
+ "sonar/no-mime-sniff": "error",
665
+ "sonar/no-misleading-array-reverse": "error",
666
+ "sonar/no-misused-promises": "error",
667
+ "sonar/no-mixed-content": "error",
668
+ "sonar/no-nested-assignment": "error",
669
+ "sonar/no-nested-conditional": "error",
670
+ "sonar/no-nested-functions": "error",
671
+ "sonar/no-nested-incdec": "error",
516
672
  "sonar/no-nested-switch": "error",
517
673
  "sonar/no-nested-template-literals": "error",
518
674
  "sonar/no-one-iteration-loop": "error",
675
+ "sonar/no-os-command-from-path": "error",
676
+ "sonar/no-parameter-reassignment": "error",
677
+ "sonar/no-primitive-wrappers": "error",
678
+ "sonar/no-redeclare": "error",
679
+ "sonar/no-redundant-assignments": "error",
519
680
  "sonar/no-redundant-boolean": "error",
520
681
  "sonar/no-redundant-jump": "error",
682
+ "sonar/no-redundant-optional": "error",
683
+ "sonar/no-redundant-type-constituents": "error",
684
+ "sonar/no-reference-error": "off", // Not working correctly, TS can handle this
685
+ "sonar/no-referrer-policy": "error",
686
+ "sonar/no-require-or-define": "error",
687
+ "sonar/no-return-type-any": "error",
688
+ "sonar/no-same-argument-assert": "error",
521
689
  "sonar/no-same-line-conditional": "error",
690
+ "sonar/no-self-compare": "error",
522
691
  "sonar/no-small-switch": "error",
692
+ "sonar/no-table-as-layout": "error",
693
+ "sonar/no-this-alias": "error",
694
+ "sonar/no-throw-literal": "error",
695
+ "sonar/no-try-promise": "error",
696
+ "sonar/no-undefined-argument": "error",
697
+ "sonar/no-undefined-assignment": "error",
698
+ "sonar/no-unenclosed-multiline-block": "error",
699
+ "sonar/no-uniq-key": "error",
700
+ "sonar/no-unknown-property": "error",
701
+ "sonar/no-unreachable": "error",
702
+ "sonar/no-unsafe": "error",
703
+ "sonar/no-unsafe-unzip": "error",
704
+ "sonar/no-unstable-nested-components": "error",
705
+ "sonar/no-unthrown-error": "error",
523
706
  "sonar/no-unused-collection": "error",
707
+ "sonar/no-unused-expressions": "error",
708
+ "sonar/no-unused-function-argument": "error",
709
+ "sonar/no-unused-private-class-members": "error",
524
710
  "sonar/no-use-of-empty-return-value": "error",
711
+ "sonar/no-useless-call": "error",
525
712
  "sonar/no-useless-catch": "error",
713
+ "sonar/no-useless-constructor": "error",
714
+ "sonar/no-useless-increment": "error",
715
+ "sonar/no-useless-intersection": "error",
716
+ "sonar/no-useless-react-setstate": "error",
717
+ "sonar/no-var": "error",
718
+ "sonar/no-variable-usage-before-declaration": "error",
719
+ "sonar/no-vue-bypass-sanitization": "error",
720
+ "sonar/no-weak-cipher": "error",
721
+ "sonar/no-weak-keys": "error",
722
+ "sonar/no-wildcard-import": "error",
526
723
  "sonar/non-existent-operator": "error",
724
+ "sonar/non-number-in-arithmetic-expression": "error",
725
+ "sonar/null-dereference": "error",
726
+ "sonar/object-alt-content": "error",
727
+ "sonar/object-shorthand": "error",
728
+ "sonar/operation-returning-nan": "error",
729
+ "sonar/os-command": "error",
730
+ "sonar/post-message": "error",
731
+ "sonar/prefer-default-last": "error",
732
+ "sonar/prefer-enum-initializers": "error",
733
+ "sonar/prefer-for-of": "error",
734
+ "sonar/prefer-function-type": "error",
527
735
  "sonar/prefer-immediate-return": "error",
736
+ "sonar/prefer-namespace-keyword": "error",
737
+ "sonar/prefer-nullish-coalescing": "error",
528
738
  "sonar/prefer-object-literal": "error",
739
+ "sonar/prefer-object-spread": "error",
740
+ "sonar/prefer-promise-shorthand": "error",
529
741
  "sonar/prefer-single-boolean-return": "error",
742
+ "sonar/prefer-spread": "error",
743
+ "sonar/prefer-string-starts-ends-with": "error",
744
+ "sonar/prefer-template": "error",
745
+ "sonar/prefer-type-guard": "error",
530
746
  "sonar/prefer-while": "error",
747
+ "sonar/production-debug": "error",
748
+ "sonar/pseudo-random": "error",
749
+ "sonar/public-static-readonly": "error",
750
+ "sonar/publicly-writable-directories": "error",
751
+ "sonar/reduce-initial-value": "error",
752
+ "sonar/redundant-type-aliases": "error",
753
+ "sonar/regex-complexity": "error",
754
+ "sonar/rules-of-hooks": "error",
755
+ "sonar/session-regeneration": "error",
756
+ "sonar/shorthand-property-grouping": "off", // Conflicts with perfectionist sorting
757
+ "sonar/single-char-in-character-classes": "error",
758
+ "sonar/single-character-alternation": "error",
759
+ "sonar/slow-regex": "error",
760
+ "sonar/sonar-block-scoped-var": "error",
761
+ "sonar/sonar-jsx-no-leaked-render": "error",
762
+ "sonar/sonar-max-lines": "error",
763
+ "sonar/sonar-max-lines-per-function": "error",
764
+ "sonar/sonar-max-params": "error",
765
+ "sonar/sonar-no-control-regex": "error",
766
+ "sonar/sonar-no-dupe-keys": "error",
767
+ "sonar/sonar-no-empty-character-class": "error",
768
+ "sonar/sonar-no-fallthrough": "off", // TODO v9 compatibility?
769
+ "sonar/sonar-no-invalid-regexp": "error",
770
+ "sonar/sonar-no-magic-numbers": "error",
771
+ "sonar/sonar-no-misleading-character-class": "error",
772
+ "sonar/sonar-no-regex-spaces": "error",
773
+ "sonar/sonar-no-unused-class-component-methods": "error",
774
+ "sonar/sonar-no-unused-vars": "error",
775
+ "sonar/sonar-prefer-optional-chain": "error",
776
+ "sonar/sonar-prefer-read-only-props": "error",
777
+ "sonar/sonar-prefer-regexp-exec": "error",
778
+ "sonar/sql-queries": "error",
779
+ "sonar/stable-tests": "error",
780
+ "sonar/stateful-regex": "error",
781
+ "sonar/strict-transport-security": "error",
782
+ "sonar/strings-comparison": "error",
783
+ "sonar/super-invocation": "error",
784
+ "sonar/switch-without-default": "off", // @typescript-eslint/switch-exhaustiveness-check works better
785
+ "sonar/table-header": "error",
786
+ "sonar/table-header-reference": "error",
787
+ "sonar/test-check-exception": "error",
788
+ "sonar/todo-tag": "error",
789
+ "sonar/too-many-break-or-continue-in-loop": "error",
790
+ "sonar/unicode-aware-regex": "error",
791
+ "sonar/unnecessary-character-escapes": "error",
792
+ "sonar/unused-import": "error",
793
+ "sonar/unused-named-groups": "error",
794
+ "sonar/unverified-certificate": "error",
795
+ "sonar/unverified-hostname": "error",
796
+ "sonar/updated-const-var": "error",
797
+ "sonar/updated-loop-counter": "error",
798
+ "sonar/use-isnan": "error",
799
+ "sonar/use-type-alias": "error",
800
+ "sonar/values-not-convertible-to-numbers": "error",
801
+ "sonar/variable-name": "error",
802
+ "sonar/void-use": "error",
803
+ "sonar/weak-ssl": "error",
804
+ "sonar/x-powered-by": "error",
805
+ "sonar/xml-parser-xxe": "error",
531
806
 
532
807
  "@tanstack/query/exhaustive-deps": "error",
533
808
  "@tanstack/query/no-rest-destructuring": "error",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ethang/eslint-config",
3
- "version": "18.4.21",
3
+ "version": "19.0.1",
4
4
  "repository": {
5
5
  "url": "git+https://github.com/eglove/eslint-config-ethang.git"
6
6
  },
@@ -16,7 +16,7 @@
16
16
  "author": "Ethan Glover",
17
17
  "license": "ISC",
18
18
  "peerDependencies": {
19
- "@eslint-react/eslint-plugin": "^1.12.0",
19
+ "@eslint-react/eslint-plugin": "^1.12.1",
20
20
  "@eslint/js": "^9.9.0",
21
21
  "@stylistic/eslint-plugin": "^2.6.4",
22
22
  "@tanstack/eslint-plugin-query": "^5.52.0",
@@ -32,14 +32,14 @@
32
32
  "eslint-plugin-perfectionist": "^3.2.0",
33
33
  "eslint-plugin-react-hooks": "^4.6.2",
34
34
  "eslint-plugin-solid": "^0.14.2",
35
- "eslint-plugin-sonarjs": "1.0.4",
35
+ "eslint-plugin-sonarjs": "2.0.0",
36
36
  "eslint-plugin-tailwindcss": "^3.17.4",
37
37
  "eslint-plugin-unicorn": "^55.0.0",
38
38
  "typescript": "^5.5.4",
39
39
  "typescript-eslint": "^8.2.0"
40
40
  },
41
41
  "dependencies": {
42
- "@eslint-react/eslint-plugin": "^1.12.0",
42
+ "@eslint-react/eslint-plugin": "^1.12.1",
43
43
  "@eslint/js": "^9.9.0",
44
44
  "@stylistic/eslint-plugin": "^2.6.4",
45
45
  "@tanstack/eslint-plugin-query": "^5.52.0",
@@ -55,7 +55,7 @@
55
55
  "eslint-plugin-perfectionist": "^3.2.0",
56
56
  "eslint-plugin-react-hooks": "^4.6.2",
57
57
  "eslint-plugin-solid": "^0.14.2",
58
- "eslint-plugin-sonarjs": "1.0.4",
58
+ "eslint-plugin-sonarjs": "2.0.0",
59
59
  "eslint-plugin-tailwindcss": "^3.17.4",
60
60
  "eslint-plugin-unicorn": "^55.0.0",
61
61
  "typescript": "^5.5.4",