@pumpn/eslint-config 11.2.0 → 12.1.0

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.
Files changed (68) hide show
  1. package/.ls-lint.yml +6 -0
  2. package/.tool-versions +1 -0
  3. package/.vscode/settings.json +7 -0
  4. package/config.js +85 -65
  5. package/deno.json +43 -0
  6. package/deno.lock +3117 -0
  7. package/eslint.config.js +13 -0
  8. package/import-map.json +25 -0
  9. package/jsdoc.json +51 -0
  10. package/package.json +28 -19
  11. package/plugins.js +40 -0
  12. package/rules/_exports.js +21 -0
  13. package/rules/eslint-comments/_exports.js +2 -0
  14. package/rules/eslint-comments/best-practices.js +10 -0
  15. package/rules/eslint-comments/stylistic-issues.js +12 -0
  16. package/rules/eslint-comments.js +12 -0
  17. package/rules/github.js +27 -0
  18. package/rules/import/_exports.js +4 -0
  19. package/rules/import/helpful-warnings.js +18 -0
  20. package/rules/import/module-systems.js +9 -0
  21. package/rules/import/static-analysis.js +71 -0
  22. package/rules/import/style-guide.js +86 -0
  23. package/rules/import.js +12 -0
  24. package/rules/jsdoc.js +255 -54
  25. package/rules/jsx-a11y.js +139 -0
  26. package/rules/layout-and-formatting.js +4 -260
  27. package/rules/no-secrets.js +18 -0
  28. package/rules/no-unsanitized.js +6 -0
  29. package/rules/perfectionist.js +267 -0
  30. package/rules/possible-problems.js +66 -15
  31. package/rules/promise.js +25 -0
  32. package/rules/react.js +105 -2
  33. package/rules/redos.js +15 -0
  34. package/rules/regexp/_exports.js +3 -0
  35. package/rules/regexp/best-practices.js +43 -0
  36. package/rules/regexp/possible-errors.js +26 -0
  37. package/rules/regexp/stylistic-issues.js +62 -0
  38. package/rules/regexp.js +12 -0
  39. package/rules/security.js +18 -0
  40. package/rules/sonarjs/_exports.js +2 -0
  41. package/rules/sonarjs/bug-detection.js +14 -0
  42. package/rules/sonarjs/code-smell-detection.js +37 -0
  43. package/rules/sonarjs.js +12 -0
  44. package/rules/stylistic/_common/_exports.js +3 -0
  45. package/rules/stylistic/_common/min-items-for-array-newline.js +3 -0
  46. package/rules/stylistic/_exports.js +13 -0
  47. package/rules/stylistic/brackets.js +79 -0
  48. package/rules/stylistic/commas.js +13 -0
  49. package/rules/stylistic/comments.js +23 -0
  50. package/rules/stylistic/disallow.js +31 -0
  51. package/rules/stylistic/indent.js +12 -0
  52. package/rules/stylistic/jsx.js +35 -0
  53. package/rules/stylistic/linebreaks.js +74 -0
  54. package/rules/stylistic/misc.js +32 -0
  55. package/rules/stylistic/operators.js +26 -0
  56. package/rules/stylistic/quotes.js +7 -0
  57. package/rules/stylistic/semis.js +14 -0
  58. package/rules/stylistic/spacing.js +53 -0
  59. package/rules/stylistic/types.js +7 -0
  60. package/rules/stylistic.js +12 -0
  61. package/rules/suggestions.js +152 -135
  62. package/rules/tailwindcss.js +11 -0
  63. package/rules/unicorn.js +200 -0
  64. package/rules.js +11 -14
  65. package/.np-config.cjs +0 -1
  66. package/addons/deno.js +0 -15
  67. package/addons.js +0 -1
  68. package/rules/imports.js +0 -135
package/.ls-lint.yml ADDED
@@ -0,0 +1,6 @@
1
+ ls:
2
+ .js: kebab-case
3
+
4
+ ignore:
5
+ - .git
6
+ - node_modules
package/.tool-versions ADDED
@@ -0,0 +1 @@
1
+ nodejs 21.6.2
@@ -0,0 +1,7 @@
1
+ {
2
+ "deno.enable": true,
3
+ "deno.lint": false,
4
+ "deno.unstable": true,
5
+ "eslint.experimental.useFlatConfig": true,
6
+ "eslint.useESLintClass": true
7
+ }
package/config.js CHANGED
@@ -1,80 +1,64 @@
1
- import babelParser from "@babel/eslint-parser";
2
- import js from "@eslint/js";
3
- import eslintPluginImport from "eslint-plugin-import";
4
- import eslintPluginJsdoc from "eslint-plugin-jsdoc";
5
- import reactJsxRuntime from "eslint-plugin-react/configs/jsx-runtime.js";
6
- import reactRecommended from "eslint-plugin-react/configs/recommended.js";
7
- import eslintPluginSortKeysPlus from "eslint-plugin-sort-keys-plus";
8
1
  import globals from "globals";
9
2
 
3
+ import plugins from "./plugins.js";
10
4
  import rules from "./rules.js";
11
5
 
6
+ const cssFilesRefreshRate = 5_000;
7
+
12
8
  const convertedGlobals = Object.fromEntries(
13
9
  Object.entries({
14
- ...globals.node,
15
- ...globals.browser
10
+ ...globals.browser,
11
+ ...globals.builtin
16
12
  })
17
- .map(([global, isWritable]) => [global, isWritable ? "writable" : "readonly"])
13
+ .map(([global, isWritable]) => [
14
+ global,
15
+ isWritable
16
+ ? "writable"
17
+ : "readonly"
18
+ ])
18
19
  );
19
20
 
20
- export * from "./addons.js";
21
-
22
- export default [
23
- js.configs.recommended,
21
+ const config = [
24
22
  {
25
- files: ["**/*.{js,mjs,cjs,jsx,mjsx,ts,tsx,mtsx}"],
26
- ...reactRecommended,
27
- ...reactJsxRuntime
23
+ ignores: [
24
+ "_fresh/**",
25
+ "documentation/**",
26
+ "patches/**"
27
+ ]
28
28
  },
29
29
  {
30
30
  files: ["**/*.{js,mjs,cjs,jsx,mjsx,ts,tsx,mtsx}"],
31
31
  languageOptions: {
32
32
  ecmaVersion: "latest",
33
- sourceType: "module",
34
33
  globals: {
34
+ Deno: "readonly",
35
35
  ...convertedGlobals
36
36
  },
37
- parser: babelParser,
38
37
  parserOptions: {
39
- ecmaVersion: "latest",
40
- sourceType: "module",
41
- requireConfigFile: false,
42
38
  ecmaFeatures: {
43
39
  jsx: true
44
40
  },
45
- babelOptions: {
46
- babelrc: false,
47
- configFile: false,
48
- presets: [
49
- [
50
- "@babel/preset-react",
51
- {
52
- bugfixes: true,
53
- shippedProposals: true
54
- }
55
- ]
56
- ],
57
- plugins: ["@babel/plugin-proposal-export-default-from"]
58
- }
59
- }
41
+ ecmaVersion: "latest",
42
+ jsxPragma: null,
43
+ requireConfigFile: false,
44
+ sourceType: "module"
45
+ },
46
+ sourceType: "module"
60
47
  },
61
- plugins: {
62
- "sort-keys-plus": eslintPluginSortKeysPlus,
63
- jsdoc: eslintPluginJsdoc,
64
- import: eslintPluginImport
48
+ linterOptions: {
49
+ noInlineConfig: false,
50
+ reportUnusedDisableDirectives: "error"
65
51
  },
52
+ plugins,
53
+ rules,
66
54
  settings: {
67
- jsdoc: {
68
- ignorePrivate: true,
69
- mode: "permissive"
70
- },
55
+ formComponents: ["Form"],
71
56
  "import/core-modules": [],
72
57
  "import/extensions": [
73
58
  ".js",
74
59
  ".mjs",
75
60
  ".jsx"
76
61
  ],
77
- "import/ignore": ["node_modules", "\\.(coffee|scss|css|less|hbs|svg|json|cjs)$"],
78
62
  "import/parsers": {
79
63
  espree: [
80
64
  ".js",
@@ -83,39 +67,75 @@ export default [
83
67
  ".jsx"
84
68
  ]
85
69
  },
86
- "import/resolver": {
87
- node: true
88
- },
89
- react: {
90
- version: "detect"
70
+ jsdoc: {
71
+ mode: "typescript",
72
+ tagNamePreference: {
73
+ augments: "extends",
74
+ extends: "extends",
75
+ function: "method",
76
+ method: "method"
77
+ }
91
78
  },
92
- formComponents: ["Form"],
93
79
  linkComponents: [
94
80
  {
95
- name: "Link",
96
- linkAttribute: "to"
81
+ linkAttribute: "to",
82
+ name: "Link"
97
83
  }
98
- ]
99
- },
100
- rules
84
+ ],
85
+ react: {
86
+ pragma: "h",
87
+ version: "18"
88
+ },
89
+ regexp: {
90
+ allowedCharacterRanges: ["alphanumeric"]
91
+ },
92
+ tailwindcss: {
93
+ callees: [
94
+ "classnames",
95
+ "clsx",
96
+ "ctl"
97
+ ],
98
+ classRegex: "^class(Name)?$",
99
+ config: "tailwind.config.js",
100
+ cssFiles: [
101
+ "**/*.css",
102
+ "!**/node_modules",
103
+ "!**/.*",
104
+ "!**/dist",
105
+ "!**/build"
106
+ ],
107
+ cssFilesRefreshRate,
108
+ removeDuplicates: true,
109
+ skipClassAttribute: false,
110
+ tags: [],
111
+ whitelist: []
112
+ }
113
+ }
101
114
  },
102
115
  {
103
- files: ["jsdoc-example.js"],
116
+ files: ["**/*.{jsx,mjsx,tsx,mtsx}"],
104
117
  rules: {
105
- "import/no-unused-modules": "off"
118
+ "jsdoc/require-param": ["warn", { unnamedRootBase: ["props"] }]
106
119
  }
107
120
  },
108
121
  {
109
- files: ["**/**.cjs"],
122
+ files: ["**/_exports.?(*.)js"],
110
123
  rules: {
111
- "import/no-commonjs": ["off"],
112
- "import/no-unused-modules": "off"
124
+ "import/max-dependencies": "off",
125
+ "import/prefer-default-export": "off"
113
126
  }
114
127
  },
115
128
  {
116
- languageOptions: {
117
- ecmaVersion: "latest",
118
- sourceType: "module"
129
+ files: [
130
+ "benchmarks/**/*",
131
+ "tests/**/*",
132
+ "scripts/**/*"
133
+ ],
134
+ rules: {
135
+ "import/no-unused-modules": "off",
136
+ "import/unambiguous": "off"
119
137
  }
120
138
  }
121
139
  ];
140
+
141
+ export default config;
package/deno.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "@pumpn/eslint-config",
3
+ "version": "12.1.0",
4
+ "exports": "./config.js",
5
+ "tasks": {
6
+ "lint": "deno run -A npm:eslint .",
7
+ "docs": "jsdoc --configure jsdoc.json"
8
+ },
9
+ "compilerOptions": {
10
+ "allowJs": true,
11
+ "allowUnreachableCode": false,
12
+ "allowUnusedLabels": false,
13
+ "alwaysStrict": true,
14
+ "checkJs": true,
15
+ "exactOptionalPropertyTypes": true,
16
+ "jsx": "react-jsx",
17
+ "jsxImportSource": "preact",
18
+ "noErrorTruncation": true,
19
+ "noFallthroughCasesInSwitch": false,
20
+ "noImplicitAny": true,
21
+ "noImplicitOverride": true,
22
+ "noImplicitReturns": true,
23
+ "noImplicitThis": true,
24
+ "noPropertyAccessFromIndexSignature": false,
25
+ "noUncheckedIndexedAccess": false,
26
+ "noUnusedLocals": false,
27
+ "noUnusedParameters": false,
28
+ "strict": true,
29
+ "lib": [
30
+ "dom",
31
+ "dom.iterable",
32
+ "dom.asynciterable",
33
+ "deno.ns",
34
+ "deno.unstable",
35
+ "esnext"
36
+ ]
37
+ },
38
+ "loader": "native",
39
+ "importMap": "./import-map.json",
40
+ "exclude": [
41
+ "**/_fresh/*"
42
+ ]
43
+ }