@darksheep/eslint 5.3.0 → 5.3.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.
Files changed (37) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/package.json +3 -3
  3. package/src/configs/eslint-base.js +103 -103
  4. package/src/configs/eslint-complexity.js +24 -24
  5. package/src/configs/eslint-ignores.js +32 -32
  6. package/src/configs/eslint-recommended.js +4 -4
  7. package/src/configs/eslint-style.js +12 -12
  8. package/src/custom/index.js +5 -5
  9. package/src/custom/instance-of-array.js +44 -44
  10. package/src/custom/loose-types.js +128 -128
  11. package/src/custom/no-useless-expression.js +19 -19
  12. package/src/custom/sequence-expression.js +15 -15
  13. package/src/index.js +38 -38
  14. package/src/plugins/eslint-comments.js +19 -19
  15. package/src/plugins/jsdoc.js +57 -57
  16. package/src/plugins/json.js +43 -43
  17. package/src/plugins/node.js +108 -108
  18. package/src/plugins/package-json.js +25 -25
  19. package/src/plugins/perfectionist.js +200 -200
  20. package/src/plugins/promise.js +9 -9
  21. package/src/plugins/react.js +111 -111
  22. package/src/plugins/regexp.js +6 -6
  23. package/src/plugins/sca.js +32 -32
  24. package/src/plugins/security.js +14 -14
  25. package/src/plugins/sonarjs.js +11 -11
  26. package/src/plugins/style.js +236 -236
  27. package/src/plugins/typescript.js +65 -65
  28. package/src/plugins/unicorn.js +40 -40
  29. package/src/plugins/unused-imports.js +25 -25
  30. package/src/plugins/yml.js +32 -32
  31. package/src/types.d.ts +80 -80
  32. package/src/utilities/editorconfig.js +150 -150
  33. package/src/utilities/eslint-files.js +20 -20
  34. package/src/utilities/expand-glob.js +33 -33
  35. package/src/utilities/filesystem.js +30 -30
  36. package/src/utilities/make-compat.js +6 -6
  37. package/src/utilities/package.js +29 -29
@@ -9,64 +9,64 @@ import { getPackageJson } from '../utilities/package.js';
9
9
  * @returns {Promise<import('eslint').Linter.FlatConfig[]>}
10
10
  */
11
11
  export async function createEslintJSDocConfig(root) {
12
- const tsPackage = await getPackageJson(root, 'typescript');
13
- const typeChecks = tsPackage == null ? 'warn' : 'off';
12
+ const tsPackage = await getPackageJson(root, 'typescript');
13
+ const typeChecks = tsPackage == null ? 'warn' : 'off';
14
14
 
15
- return [
16
- {
17
- name: 'jsdoc/javascript',
18
- plugins: { jsdoc },
19
- settings: {
20
- jsdoc: {
21
- mode: 'typescript',
22
- // Prefer 'Object' over 'object'
23
- preferredTypes: { object: 'Object' },
24
- },
25
- },
26
- rules: {
27
- 'jsdoc/check-access': 'warn',
28
- 'jsdoc/check-alignment': 'warn',
29
- 'jsdoc/check-param-names': 'warn',
30
- 'jsdoc/check-property-names': 'warn',
31
- 'jsdoc/check-tag-names': 'warn',
32
- 'jsdoc/check-values': 'warn',
33
- 'jsdoc/empty-tags': 'warn',
34
- 'jsdoc/implements-on-classes': 'error',
35
- 'jsdoc/informative-docs': 'warn',
36
- 'jsdoc/no-defaults': 'warn',
37
- 'jsdoc/no-multi-asterisks': 'warn',
38
- 'jsdoc/require-jsdoc': [ 1, { publicOnly: true } ],
39
- 'jsdoc/require-param': 'warn',
40
- 'jsdoc/require-param-description': 'warn',
41
- 'jsdoc/require-param-name': 'warn',
42
- 'jsdoc/require-param-type': 'warn',
43
- 'jsdoc/require-property': 'warn',
44
- 'jsdoc/require-property-description': 'warn',
45
- 'jsdoc/require-property-name': 'warn',
46
- 'jsdoc/require-property-type': 'warn',
47
- 'jsdoc/require-returns': 'warn',
48
- 'jsdoc/require-returns-check': 'warn',
49
- 'jsdoc/require-returns-type': 'warn',
50
-
51
- 'jsdoc/check-types': typeChecks,
52
- 'jsdoc/no-undefined-types': typeChecks,
53
- 'jsdoc/valid-types': typeChecks,
54
- },
15
+ return [
16
+ {
17
+ name: 'jsdoc/javascript',
18
+ plugins: { jsdoc },
19
+ settings: {
20
+ jsdoc: {
21
+ mode: 'typescript',
22
+ // Prefer 'Object' over 'object'
23
+ preferredTypes: { object: 'Object' },
55
24
  },
56
- {
57
- name: 'jsdoc/typescript',
58
- files: getTypescriptFiles(),
59
- rules: {
60
- 'jsdoc/no-types': 'warn',
61
- 'jsdoc/check-types': 'off',
62
- 'jsdoc/no-undefined-types': 'off',
63
- 'jsdoc/valid-types': 'off',
64
- 'jsdoc/require-returns': 'off',
65
- 'jsdoc/require-param-type': 'off',
66
- 'jsdoc/require-property-type': 'off',
67
- 'jsdoc/require-returns-type': 'off',
25
+ },
26
+ rules: {
27
+ 'jsdoc/check-access': 'warn',
28
+ 'jsdoc/check-alignment': 'warn',
29
+ 'jsdoc/check-param-names': 'warn',
30
+ 'jsdoc/check-property-names': 'warn',
31
+ 'jsdoc/check-tag-names': 'warn',
32
+ 'jsdoc/check-values': 'warn',
33
+ 'jsdoc/empty-tags': 'warn',
34
+ 'jsdoc/implements-on-classes': 'error',
35
+ 'jsdoc/informative-docs': 'warn',
36
+ 'jsdoc/no-defaults': 'warn',
37
+ 'jsdoc/no-multi-asterisks': 'warn',
38
+ 'jsdoc/require-jsdoc': [ 1, { publicOnly: true } ],
39
+ 'jsdoc/require-param': 'warn',
40
+ 'jsdoc/require-param-description': 'warn',
41
+ 'jsdoc/require-param-name': 'warn',
42
+ 'jsdoc/require-param-type': 'warn',
43
+ 'jsdoc/require-property': 'warn',
44
+ 'jsdoc/require-property-description': 'warn',
45
+ 'jsdoc/require-property-name': 'warn',
46
+ 'jsdoc/require-property-type': 'warn',
47
+ 'jsdoc/require-returns': 'warn',
48
+ 'jsdoc/require-returns-check': 'warn',
49
+ 'jsdoc/require-returns-type': 'warn',
68
50
 
69
- },
70
- },
71
- ];
51
+ 'jsdoc/check-types': typeChecks,
52
+ 'jsdoc/no-undefined-types': typeChecks,
53
+ 'jsdoc/valid-types': typeChecks,
54
+ },
55
+ },
56
+ {
57
+ name: 'jsdoc/typescript',
58
+ files: getTypescriptFiles(),
59
+ rules: {
60
+ 'jsdoc/no-types': 'warn',
61
+ 'jsdoc/check-types': 'off',
62
+ 'jsdoc/no-undefined-types': 'off',
63
+ 'jsdoc/valid-types': 'off',
64
+ 'jsdoc/require-returns': 'off',
65
+ 'jsdoc/require-param-type': 'off',
66
+ 'jsdoc/require-property-type': 'off',
67
+ 'jsdoc/require-returns-type': 'off',
68
+
69
+ },
70
+ },
71
+ ];
72
72
  }
@@ -6,47 +6,47 @@ import parser from 'jsonc-eslint-parser';
6
6
  * @returns {Promise<import('eslint').Linter.FlatConfig[]>}
7
7
  */
8
8
  export async function createEslintJsonConfig() {
9
- return [
10
- {
11
- name: 'json/core',
12
- files: [ '**/*.json', '**/*.jsonc', '**/*.json5' ],
13
- languageOptions: { parser },
14
- // @ts-expect-error jsonc does not match the plugin interface
15
- plugins: { jsonc },
16
- rules: {
17
- 'jsonc/array-bracket-newline': [ 'error', 'consistent' ],
18
- 'jsonc/array-bracket-spacing': [ 'error', 'always' ],
19
- 'jsonc/array-element-newline': [ 'error', 'consistent' ],
20
- 'jsonc/key-spacing': [ 'error' ],
21
- 'jsonc/object-curly-newline': [ 'error', { consistent: true } ],
22
- 'jsonc/object-curly-spacing': [ 'error', 'always' ],
23
- 'jsonc/object-property-newline': [ 'error', { allowAllPropertiesOnSameLine: true } ],
24
- 'max-lines': 'off',
25
- },
26
- },
27
- {
28
- name: 'json/.json',
29
- files: [ '**/*.json' ],
30
- // @ts-expect-error Record<string, string> vs Record<string, 'error'>
31
- rules: jsonc.configs['recommended-with-json'].rules,
32
- },
33
- {
34
- name: 'json/.jsonc',
35
- files: [ '**/*.jsonc' ],
36
- // @ts-expect-error Record<string, string> vs Record<string, 'error'>
37
- rules: jsonc.configs['recommended-with-jsonc'].rules,
38
- },
39
- {
40
- name: 'json/.json5',
41
- files: [ '**/*.json5' ],
42
- // @ts-expect-error Record<string, string> vs Record<string, 'error'>
43
- rules: jsonc.configs['recommended-with-json5'].rules,
44
- },
45
- {
46
- name: 'json/tsconfig.json',
47
- files: [ '**/tsconfig.json' ],
48
- rules: { 'jsonc/no-comments': 'off' },
49
- },
50
- { ignores: [ '.github/release-please/manifest.json' ] },
51
- ];
9
+ return [
10
+ {
11
+ name: 'json/core',
12
+ files: [ '**/*.json', '**/*.jsonc', '**/*.json5' ],
13
+ languageOptions: { parser },
14
+ // @ts-expect-error jsonc does not match the plugin interface
15
+ plugins: { jsonc },
16
+ rules: {
17
+ 'jsonc/array-bracket-newline': [ 'error', 'consistent' ],
18
+ 'jsonc/array-bracket-spacing': [ 'error', 'always' ],
19
+ 'jsonc/array-element-newline': [ 'error', 'consistent' ],
20
+ 'jsonc/key-spacing': [ 'error' ],
21
+ 'jsonc/object-curly-newline': [ 'error', { consistent: true } ],
22
+ 'jsonc/object-curly-spacing': [ 'error', 'always' ],
23
+ 'jsonc/object-property-newline': [ 'error', { allowAllPropertiesOnSameLine: true } ],
24
+ 'max-lines': 'off',
25
+ },
26
+ },
27
+ {
28
+ name: 'json/.json',
29
+ files: [ '**/*.json' ],
30
+ // @ts-expect-error Record<string, string> vs Record<string, 'error'>
31
+ rules: jsonc.configs['recommended-with-json'].rules,
32
+ },
33
+ {
34
+ name: 'json/.jsonc',
35
+ files: [ '**/*.jsonc' ],
36
+ // @ts-expect-error Record<string, string> vs Record<string, 'error'>
37
+ rules: jsonc.configs['recommended-with-jsonc'].rules,
38
+ },
39
+ {
40
+ name: 'json/.json5',
41
+ files: [ '**/*.json5' ],
42
+ // @ts-expect-error Record<string, string> vs Record<string, 'error'>
43
+ rules: jsonc.configs['recommended-with-json5'].rules,
44
+ },
45
+ {
46
+ name: 'json/tsconfig.json',
47
+ files: [ '**/tsconfig.json' ],
48
+ rules: { 'jsonc/no-comments': 'off' },
49
+ },
50
+ { ignores: [ '.github/release-please/manifest.json' ] },
51
+ ];
52
52
  }
@@ -4,11 +4,11 @@ import { fileURLToPath } from 'node:url';
4
4
  import n from 'eslint-plugin-n';
5
5
 
6
6
  import {
7
- getCommonFiles,
8
- getExampleFiles,
9
- getModuleFiles,
10
- getTestFiles,
11
- getTypescriptFiles,
7
+ getCommonFiles,
8
+ getExampleFiles,
9
+ getModuleFiles,
10
+ getTestFiles,
11
+ getTypescriptFiles,
12
12
  } from '../utilities/eslint-files.js';
13
13
 
14
14
  const script = n.configs['flat/recommended-script'];
@@ -16,44 +16,44 @@ const module = n.configs['flat/recommended-module'];
16
16
 
17
17
  /** @type {import('eslint').Linter.RulesRecord} */
18
18
  const commonRules = {
19
- 'n/no-new-require': 'error',
20
- 'n/no-mixed-requires': 'error',
21
-
22
- 'n/callback-return': 'error',
23
- 'n/handle-callback-err': 'error',
24
- 'n/no-process-exit': 'warn',
25
- 'n/no-process-env': 'warn',
26
- 'n/no-path-concat': 'error',
27
-
28
- 'n/no-callback-literal': 'off',
29
- 'n/no-exports-assign': 'off',
30
-
31
- 'n/global-require': [ 'error' ],
32
- 'n/no-unpublished-bin': 'error',
33
- 'n/no-unpublished-import': [ 'error', { ignoreTypeImport: true } ],
34
- 'n/no-unpublished-require': 'error',
35
-
36
- 'n/no-unsupported-features/es-builtins': 'error',
37
- 'n/no-unsupported-features/es-syntax': [ 'error', { ignores: [ 'modules' ] } ],
38
- 'n/no-unsupported-features/node-builtins': 'error',
39
-
40
- 'n/process-exit-as-throw': 'error',
41
- 'n/hashbang': 'error',
42
-
43
- 'n/no-deprecated-api': 'error',
44
-
45
- 'n/exports-style': [ 'error', 'module.exports' ],
46
- 'n/file-extension-in-import': [ 'error', 'always' ],
47
-
48
- 'n/prefer-global/buffer': [ 'warn', 'always' ],
49
- 'n/prefer-global/console': [ 'warn', 'always' ],
50
- 'n/prefer-global/process': [ 'warn', 'always' ],
51
- 'n/prefer-global/text-decoder': [ 'warn', 'never' ],
52
- 'n/prefer-global/text-encoder': [ 'warn', 'never' ],
53
- 'n/prefer-global/url-search-params': [ 'warn', 'never' ],
54
- 'n/prefer-global/url': [ 'warn', 'never' ],
55
- 'n/prefer-promises/dns': 'warn',
56
- 'n/prefer-promises/fs': 'warn',
19
+ 'n/no-new-require': 'error',
20
+ 'n/no-mixed-requires': 'error',
21
+
22
+ 'n/callback-return': 'error',
23
+ 'n/handle-callback-err': 'error',
24
+ 'n/no-process-exit': 'warn',
25
+ 'n/no-process-env': 'warn',
26
+ 'n/no-path-concat': 'error',
27
+
28
+ 'n/no-callback-literal': 'off',
29
+ 'n/no-exports-assign': 'off',
30
+
31
+ 'n/global-require': [ 'error' ],
32
+ 'n/no-unpublished-bin': 'error',
33
+ 'n/no-unpublished-import': [ 'error', { ignoreTypeImport: true } ],
34
+ 'n/no-unpublished-require': 'error',
35
+
36
+ 'n/no-unsupported-features/es-builtins': 'error',
37
+ 'n/no-unsupported-features/es-syntax': [ 'error', { ignores: [ 'modules' ] } ],
38
+ 'n/no-unsupported-features/node-builtins': 'error',
39
+
40
+ 'n/process-exit-as-throw': 'error',
41
+ 'n/hashbang': 'error',
42
+
43
+ 'n/no-deprecated-api': 'error',
44
+
45
+ 'n/exports-style': [ 'error', 'module.exports' ],
46
+ 'n/file-extension-in-import': [ 'error', 'always' ],
47
+
48
+ 'n/prefer-global/buffer': [ 'warn', 'always' ],
49
+ 'n/prefer-global/console': [ 'warn', 'always' ],
50
+ 'n/prefer-global/process': [ 'warn', 'always' ],
51
+ 'n/prefer-global/text-decoder': [ 'warn', 'never' ],
52
+ 'n/prefer-global/text-encoder': [ 'warn', 'never' ],
53
+ 'n/prefer-global/url-search-params': [ 'warn', 'never' ],
54
+ 'n/prefer-global/url': [ 'warn', 'never' ],
55
+ 'n/prefer-promises/dns': 'warn',
56
+ 'n/prefer-promises/fs': 'warn',
57
57
  };
58
58
 
59
59
  /**
@@ -61,7 +61,7 @@ const commonRules = {
61
61
  * @returns {string[]}
62
62
  */
63
63
  function toExt(globs) {
64
- return globs.map((glob) => glob.slice(glob.lastIndexOf('.')));
64
+ return globs.map((glob) => glob.slice(glob.lastIndexOf('.')));
65
65
  }
66
66
 
67
67
  /**
@@ -70,71 +70,71 @@ function toExt(globs) {
70
70
  * @returns {Promise<import('eslint').Linter.FlatConfig[]>}
71
71
  */
72
72
  export async function createEslintNodeConfig(root) {
73
- const commonFiles = await getCommonFiles(root);
74
- const moduleFiles = await getModuleFiles(root);
75
- const typescriptFiles = getTypescriptFiles();
76
- const exampleFiles = getExampleFiles();
77
- const rootDirectory = dirname(fileURLToPath(root));
78
-
79
- return [
80
- {
81
- name: 'node/common',
82
- files: commonFiles,
83
- ignores: exampleFiles,
84
- plugins: { n },
85
- languageOptions: {
86
- globals: script?.languageOptions?.globals,
87
- parserOptions: {
88
- sourceType: 'script',
89
- ecmaVersion: 2022,
90
- },
91
- },
92
- settings: {
93
- node: {
94
- tryExtensions: toExt(commonFiles),
95
- resolvePaths: rootDirectory,
96
- },
97
- },
98
- rules: {
99
- ...commonRules,
100
- 'n/no-sync': [ 'error', { allowAtRootLevel: true } ],
101
- 'n/no-extraneous-require': 'error',
102
- 'n/no-missing-require': 'error',
103
-
104
- 'n/no-unsupported-features/es-syntax': [ 'error', { ignores: [] } ],
105
- },
73
+ const commonFiles = await getCommonFiles(root);
74
+ const moduleFiles = await getModuleFiles(root);
75
+ const typescriptFiles = getTypescriptFiles();
76
+ const exampleFiles = getExampleFiles();
77
+ const rootDirectory = dirname(fileURLToPath(root));
78
+
79
+ return [
80
+ {
81
+ name: 'node/common',
82
+ files: commonFiles,
83
+ ignores: exampleFiles,
84
+ plugins: { n },
85
+ languageOptions: {
86
+ globals: script?.languageOptions?.globals,
87
+ parserOptions: {
88
+ sourceType: 'script',
89
+ ecmaVersion: 2022,
106
90
  },
107
- {
108
- name: 'node/module-and-typescript',
109
- files: [ ...typescriptFiles, ...moduleFiles ],
110
- ignores: exampleFiles,
111
- plugins: { n },
112
- languageOptions: {
113
- globals: module?.languageOptions?.globals,
114
- parserOptions: {
115
- sourceType: 'module',
116
- ecmaVersion: 2022,
117
- },
118
- },
119
- settings: {
120
- node: {
121
- tryExtensions: toExt([ ...typescriptFiles, ...moduleFiles ]),
122
- resolvePaths: rootDirectory,
123
- },
124
- },
125
- rules: {
126
- ...commonRules,
127
- 'n/no-extraneous-import': 'error',
128
- 'n/no-missing-import': 'error',
129
- 'n/no-sync': [ 'error', { allowAtRootLevel: false } ],
130
- 'n/no-unsupported-features/es-syntax': [ 'error', { ignores: [ 'modules' ] } ],
131
- },
91
+ },
92
+ settings: {
93
+ node: {
94
+ tryExtensions: toExt(commonFiles),
95
+ resolvePaths: rootDirectory,
132
96
  },
133
- {
134
- name: 'node/test-files',
135
- files: getTestFiles(),
136
- plugins: { n },
137
- rules: { 'n/no-sync': 'off' },
97
+ },
98
+ rules: {
99
+ ...commonRules,
100
+ 'n/no-sync': [ 'error', { allowAtRootLevel: true } ],
101
+ 'n/no-extraneous-require': 'error',
102
+ 'n/no-missing-require': 'error',
103
+
104
+ 'n/no-unsupported-features/es-syntax': [ 'error', { ignores: [] } ],
105
+ },
106
+ },
107
+ {
108
+ name: 'node/module-and-typescript',
109
+ files: [ ...typescriptFiles, ...moduleFiles ],
110
+ ignores: exampleFiles,
111
+ plugins: { n },
112
+ languageOptions: {
113
+ globals: module?.languageOptions?.globals,
114
+ parserOptions: {
115
+ sourceType: 'module',
116
+ ecmaVersion: 2022,
138
117
  },
139
- ];
118
+ },
119
+ settings: {
120
+ node: {
121
+ tryExtensions: toExt([ ...typescriptFiles, ...moduleFiles ]),
122
+ resolvePaths: rootDirectory,
123
+ },
124
+ },
125
+ rules: {
126
+ ...commonRules,
127
+ 'n/no-extraneous-import': 'error',
128
+ 'n/no-missing-import': 'error',
129
+ 'n/no-sync': [ 'error', { allowAtRootLevel: false } ],
130
+ 'n/no-unsupported-features/es-syntax': [ 'error', { ignores: [ 'modules' ] } ],
131
+ },
132
+ },
133
+ {
134
+ name: 'node/test-files',
135
+ files: getTestFiles(),
136
+ plugins: { n },
137
+ rules: { 'n/no-sync': 'off' },
138
+ },
139
+ ];
140
140
  }
@@ -6,31 +6,31 @@ import jsoncParser from 'jsonc-eslint-parser';
6
6
  * @returns {Promise<import('eslint').Linter.FlatConfig[]>}
7
7
  */
8
8
  export async function createEslintPackageJsonConfig() {
9
- return [
10
- {
11
- name: 'package-json/custom',
12
- // @ts-expect-error
13
- plugins: { 'package-json': plugin },
14
- languageOptions: {
15
- parser: jsoncParser,
16
- },
17
- files: [ 'package.json', '**/package.json' ],
18
- rules: {
19
- 'package-json/order-properties': [ 'error', { order: 'sort-package-json' } ],
20
- 'package-json/sort-collections': 'error',
9
+ return [
10
+ {
11
+ name: 'package-json/custom',
12
+ // @ts-expect-error
13
+ plugins: { 'package-json': plugin },
14
+ languageOptions: {
15
+ parser: jsoncParser,
16
+ },
17
+ files: [ 'package.json', '**/package.json' ],
18
+ rules: {
19
+ 'package-json/order-properties': [ 'error', { order: 'sort-package-json' } ],
20
+ 'package-json/sort-collections': 'error',
21
21
 
22
- // Seems to break renovate finding changelogs
23
- 'package-json/prefer-repository-shorthand': 'off',
24
- // Breaks workspace dependency linking
25
- // Invalid version range for dependency @darksheep/clone: workspace:~
26
- 'package-json/valid-package-def': 'warn',
22
+ // Seems to break renovate finding changelogs
23
+ 'package-json/prefer-repository-shorthand': 'off',
24
+ // Breaks workspace dependency linking
25
+ // Invalid version range for dependency @darksheep/clone: workspace:~
26
+ 'package-json/valid-package-def': 'warn',
27
27
 
28
- 'package-json/unique-dependencies': 'error',
29
- 'package-json/valid-local-dependency': 'error',
30
- 'package-json/valid-name': 'error',
31
- 'package-json/valid-repository-directory': 'error',
32
- 'package-json/valid-version': 'error',
33
- },
34
- },
35
- ];
28
+ 'package-json/unique-dependencies': 'error',
29
+ 'package-json/valid-local-dependency': 'error',
30
+ 'package-json/valid-name': 'error',
31
+ 'package-json/valid-repository-directory': 'error',
32
+ 'package-json/valid-version': 'error',
33
+ },
34
+ },
35
+ ];
36
36
  }