eslint 9.22.0 → 9.23.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.
- package/README.md +47 -45
- package/bin/eslint.js +92 -90
- package/conf/default-cli-options.js +22 -22
- package/conf/ecma-version.js +1 -1
- package/conf/globals.js +97 -98
- package/conf/replacements.json +24 -20
- package/conf/rule-type-list.json +88 -92
- package/lib/api.js +12 -12
- package/lib/cli-engine/cli-engine.js +828 -808
- package/lib/cli-engine/file-enumerator.js +381 -387
- package/lib/cli-engine/formatters/formatters-meta.json +16 -16
- package/lib/cli-engine/formatters/html.js +107 -99
- package/lib/cli-engine/formatters/json-with-metadata.js +5 -5
- package/lib/cli-engine/formatters/json.js +2 -2
- package/lib/cli-engine/formatters/stylish.js +96 -75
- package/lib/cli-engine/hash.js +1 -1
- package/lib/cli-engine/index.js +1 -1
- package/lib/cli-engine/lint-result-cache.js +144 -145
- package/lib/cli-engine/load-rules.js +16 -16
- package/lib/cli.js +541 -457
- package/lib/config/config-loader.js +648 -618
- package/lib/config/config.js +247 -221
- package/lib/config/default-config.js +54 -45
- package/lib/config/flat-config-array.js +167 -172
- package/lib/config/flat-config-helpers.js +65 -68
- package/lib/config/flat-config-schema.js +375 -368
- package/lib/config/rule-validator.js +139 -144
- package/lib/config-api.js +2 -2
- package/lib/eslint/eslint-helpers.js +709 -679
- package/lib/eslint/eslint.js +944 -886
- package/lib/eslint/index.js +2 -2
- package/lib/eslint/legacy-eslint.js +576 -532
- package/lib/languages/js/index.js +263 -264
- package/lib/languages/js/source-code/index.js +1 -1
- package/lib/languages/js/source-code/source-code.js +1128 -1057
- package/lib/languages/js/source-code/token-store/backward-token-comment-cursor.js +39 -35
- package/lib/languages/js/source-code/token-store/backward-token-cursor.js +35 -36
- package/lib/languages/js/source-code/token-store/cursor.js +36 -36
- package/lib/languages/js/source-code/token-store/cursors.js +80 -52
- package/lib/languages/js/source-code/token-store/decorative-cursor.js +17 -18
- package/lib/languages/js/source-code/token-store/filter-cursor.js +19 -20
- package/lib/languages/js/source-code/token-store/forward-token-comment-cursor.js +40 -32
- package/lib/languages/js/source-code/token-store/forward-token-cursor.js +40 -41
- package/lib/languages/js/source-code/token-store/index.js +592 -498
- package/lib/languages/js/source-code/token-store/limit-cursor.js +17 -18
- package/lib/languages/js/source-code/token-store/padded-token-cursor.js +23 -16
- package/lib/languages/js/source-code/token-store/skip-cursor.js +19 -20
- package/lib/languages/js/source-code/token-store/utils.js +63 -60
- package/lib/languages/js/validate-language-options.js +104 -89
- package/lib/linter/apply-disable-directives.js +467 -383
- package/lib/linter/code-path-analysis/code-path-analyzer.js +650 -672
- package/lib/linter/code-path-analysis/code-path-segment.js +215 -216
- package/lib/linter/code-path-analysis/code-path-state.js +2118 -2096
- package/lib/linter/code-path-analysis/code-path.js +307 -319
- package/lib/linter/code-path-analysis/debug-helpers.js +183 -163
- package/lib/linter/code-path-analysis/fork-context.js +296 -271
- package/lib/linter/code-path-analysis/id-generator.js +22 -23
- package/lib/linter/file-context.js +119 -120
- package/lib/linter/index.js +3 -3
- package/lib/linter/interpolate.js +16 -16
- package/lib/linter/linter.js +2402 -2044
- package/lib/linter/node-event-generator.js +284 -225
- package/lib/linter/report-translator.js +256 -219
- package/lib/linter/rule-fixer.js +122 -124
- package/lib/linter/rules.js +35 -35
- package/lib/linter/safe-emitter.js +18 -18
- package/lib/linter/source-code-fixer.js +94 -92
- package/lib/linter/timing.js +104 -101
- package/lib/linter/vfile.js +70 -73
- package/lib/options.js +375 -361
- package/lib/rule-tester/index.js +1 -1
- package/lib/rule-tester/rule-tester.js +1307 -1045
- package/lib/rules/accessor-pairs.js +297 -262
- package/lib/rules/array-bracket-newline.js +249 -237
- package/lib/rules/array-bracket-spacing.js +262 -223
- package/lib/rules/array-callback-return.js +401 -355
- package/lib/rules/array-element-newline.js +357 -312
- package/lib/rules/arrow-body-style.js +399 -280
- package/lib/rules/arrow-parens.js +205 -172
- package/lib/rules/arrow-spacing.js +168 -162
- package/lib/rules/block-scoped-var.js +124 -122
- package/lib/rules/block-spacing.js +185 -175
- package/lib/rules/brace-style.js +261 -198
- package/lib/rules/callback-return.js +202 -189
- package/lib/rules/camelcase.js +402 -391
- package/lib/rules/capitalized-comments.js +252 -231
- package/lib/rules/class-methods-use-this.js +179 -171
- package/lib/rules/comma-dangle.js +378 -345
- package/lib/rules/comma-spacing.js +192 -194
- package/lib/rules/comma-style.js +374 -315
- package/lib/rules/complexity.js +172 -168
- package/lib/rules/computed-property-spacing.js +235 -210
- package/lib/rules/consistent-return.js +180 -169
- package/lib/rules/consistent-this.js +166 -146
- package/lib/rules/constructor-super.js +411 -403
- package/lib/rules/curly.js +406 -331
- package/lib/rules/default-case-last.js +37 -30
- package/lib/rules/default-case.js +88 -84
- package/lib/rules/default-param-last.js +68 -53
- package/lib/rules/dot-location.js +121 -109
- package/lib/rules/dot-notation.js +191 -155
- package/lib/rules/eol-last.js +121 -119
- package/lib/rules/eqeqeq.js +167 -154
- package/lib/rules/for-direction.js +145 -120
- package/lib/rules/func-call-spacing.js +260 -230
- package/lib/rules/func-name-matching.js +292 -208
- package/lib/rules/func-names.js +164 -163
- package/lib/rules/func-style.js +158 -126
- package/lib/rules/function-call-argument-newline.js +151 -128
- package/lib/rules/function-paren-newline.js +348 -290
- package/lib/rules/generator-star-spacing.js +228 -209
- package/lib/rules/getter-return.js +207 -171
- package/lib/rules/global-require.js +84 -73
- package/lib/rules/grouped-accessor-pairs.js +169 -149
- package/lib/rules/guard-for-in.js +71 -62
- package/lib/rules/handle-callback-err.js +107 -102
- package/lib/rules/id-blacklist.js +181 -198
- package/lib/rules/id-denylist.js +167 -186
- package/lib/rules/id-length.js +196 -170
- package/lib/rules/id-match.js +343 -288
- package/lib/rules/implicit-arrow-linebreak.js +101 -78
- package/lib/rules/indent-legacy.js +1343 -1117
- package/lib/rules/indent.js +2271 -1758
- package/lib/rules/index.js +317 -292
- package/lib/rules/init-declarations.js +115 -106
- package/lib/rules/jsx-quotes.js +93 -81
- package/lib/rules/key-spacing.js +749 -632
- package/lib/rules/keyword-spacing.js +647 -604
- package/lib/rules/line-comment-position.js +141 -127
- package/lib/rules/linebreak-style.js +106 -105
- package/lib/rules/lines-around-comment.js +539 -447
- package/lib/rules/lines-around-directive.js +232 -202
- package/lib/rules/lines-between-class-members.js +304 -233
- package/lib/rules/logical-assignment-operators.js +581 -398
- package/lib/rules/max-classes-per-file.js +68 -67
- package/lib/rules/max-depth.js +145 -142
- package/lib/rules/max-len.js +472 -433
- package/lib/rules/max-lines-per-function.js +200 -175
- package/lib/rules/max-lines.js +157 -161
- package/lib/rules/max-nested-callbacks.js +101 -103
- package/lib/rules/max-params.js +77 -75
- package/lib/rules/max-statements-per-line.js +204 -197
- package/lib/rules/max-statements.js +167 -163
- package/lib/rules/multiline-comment-style.js +636 -478
- package/lib/rules/multiline-ternary.js +240 -175
- package/lib/rules/new-cap.js +232 -212
- package/lib/rules/new-parens.js +87 -78
- package/lib/rules/newline-after-var.js +286 -249
- package/lib/rules/newline-before-return.js +228 -221
- package/lib/rules/newline-per-chained-call.js +141 -126
- package/lib/rules/no-alert.js +89 -78
- package/lib/rules/no-array-constructor.js +121 -112
- package/lib/rules/no-async-promise-executor.js +29 -23
- package/lib/rules/no-await-in-loop.js +68 -70
- package/lib/rules/no-bitwise.js +123 -99
- package/lib/rules/no-buffer-constructor.js +54 -46
- package/lib/rules/no-caller.js +38 -32
- package/lib/rules/no-case-declarations.js +60 -56
- package/lib/rules/no-catch-shadow.js +75 -72
- package/lib/rules/no-class-assign.js +50 -47
- package/lib/rules/no-compare-neg-zero.js +61 -47
- package/lib/rules/no-cond-assign.js +147 -131
- package/lib/rules/no-confusing-arrow.js +97 -80
- package/lib/rules/no-console.js +201 -198
- package/lib/rules/no-const-assign.js +46 -40
- package/lib/rules/no-constant-binary-expression.js +499 -404
- package/lib/rules/no-constant-condition.js +157 -142
- package/lib/rules/no-constructor-return.js +48 -48
- package/lib/rules/no-continue.js +24 -26
- package/lib/rules/no-control-regex.js +124 -120
- package/lib/rules/no-debugger.js +27 -29
- package/lib/rules/no-delete-var.js +28 -28
- package/lib/rules/no-div-regex.js +46 -40
- package/lib/rules/no-dupe-args.js +67 -68
- package/lib/rules/no-dupe-class-members.js +92 -88
- package/lib/rules/no-dupe-else-if.js +99 -76
- package/lib/rules/no-dupe-keys.js +132 -109
- package/lib/rules/no-duplicate-case.js +49 -42
- package/lib/rules/no-duplicate-imports.js +178 -175
- package/lib/rules/no-else-return.js +429 -384
- package/lib/rules/no-empty-character-class.js +56 -49
- package/lib/rules/no-empty-function.js +126 -127
- package/lib/rules/no-empty-pattern.js +62 -57
- package/lib/rules/no-empty-static-block.js +36 -34
- package/lib/rules/no-empty.js +97 -85
- package/lib/rules/no-eq-null.js +36 -31
- package/lib/rules/no-eval.js +255 -249
- package/lib/rules/no-ex-assign.js +41 -38
- package/lib/rules/no-extend-native.js +160 -158
- package/lib/rules/no-extra-bind.js +200 -189
- package/lib/rules/no-extra-boolean-cast.js +397 -347
- package/lib/rules/no-extra-label.js +149 -130
- package/lib/rules/no-extra-parens.js +1653 -1324
- package/lib/rules/no-extra-semi.js +145 -143
- package/lib/rules/no-fallthrough.js +198 -156
- package/lib/rules/no-floating-decimal.js +73 -65
- package/lib/rules/no-func-assign.js +53 -54
- package/lib/rules/no-global-assign.js +77 -72
- package/lib/rules/no-implicit-coercion.js +348 -292
- package/lib/rules/no-implicit-globals.js +157 -134
- package/lib/rules/no-implied-eval.js +139 -111
- package/lib/rules/no-import-assign.js +144 -158
- package/lib/rules/no-inline-comments.js +100 -94
- package/lib/rules/no-inner-declarations.js +114 -100
- package/lib/rules/no-invalid-regexp.js +221 -189
- package/lib/rules/no-invalid-this.js +122 -116
- package/lib/rules/no-irregular-whitespace.js +265 -251
- package/lib/rules/no-iterator.js +28 -32
- package/lib/rules/no-label-var.js +58 -61
- package/lib/rules/no-labels.js +137 -132
- package/lib/rules/no-lone-blocks.js +126 -122
- package/lib/rules/no-lonely-if.js +107 -76
- package/lib/rules/no-loop-func.js +233 -212
- package/lib/rules/no-loss-of-precision.js +215 -200
- package/lib/rules/no-magic-numbers.js +245 -217
- package/lib/rules/no-misleading-character-class.js +498 -445
- package/lib/rules/no-mixed-operators.js +187 -181
- package/lib/rules/no-mixed-requires.js +252 -239
- package/lib/rules/no-mixed-spaces-and-tabs.js +133 -120
- package/lib/rules/no-multi-assign.js +45 -43
- package/lib/rules/no-multi-spaces.js +162 -142
- package/lib/rules/no-multi-str.js +41 -40
- package/lib/rules/no-multiple-empty-lines.js +195 -157
- package/lib/rules/no-native-reassign.js +89 -84
- package/lib/rules/no-negated-condition.js +78 -74
- package/lib/rules/no-negated-in-lhs.js +44 -42
- package/lib/rules/no-nested-ternary.js +32 -31
- package/lib/rules/no-new-func.js +70 -61
- package/lib/rules/no-new-native-nonconstructor.js +42 -38
- package/lib/rules/no-new-object.js +47 -47
- package/lib/rules/no-new-require.js +47 -46
- package/lib/rules/no-new-symbol.js +51 -49
- package/lib/rules/no-new-wrappers.js +42 -40
- package/lib/rules/no-new.js +27 -28
- package/lib/rules/no-nonoctal-decimal-escape.js +140 -120
- package/lib/rules/no-obj-calls.js +65 -52
- package/lib/rules/no-object-constructor.js +103 -96
- package/lib/rules/no-octal-escape.js +39 -42
- package/lib/rules/no-octal.js +31 -31
- package/lib/rules/no-param-reassign.js +234 -216
- package/lib/rules/no-path-concat.js +65 -66
- package/lib/rules/no-plusplus.js +59 -60
- package/lib/rules/no-process-env.js +48 -47
- package/lib/rules/no-process-exit.js +53 -49
- package/lib/rules/no-promise-executor-return.js +213 -181
- package/lib/rules/no-proto.js +25 -28
- package/lib/rules/no-prototype-builtins.js +145 -123
- package/lib/rules/no-redeclare.js +153 -151
- package/lib/rules/no-regex-spaces.js +182 -160
- package/lib/rules/no-restricted-exports.js +207 -184
- package/lib/rules/no-restricted-globals.js +110 -111
- package/lib/rules/no-restricted-imports.js +656 -536
- package/lib/rules/no-restricted-modules.js +221 -201
- package/lib/rules/no-restricted-properties.js +180 -152
- package/lib/rules/no-restricted-syntax.js +55 -51
- package/lib/rules/no-return-assign.js +54 -49
- package/lib/rules/no-return-await.js +147 -123
- package/lib/rules/no-script-url.js +51 -44
- package/lib/rules/no-self-assign.js +147 -145
- package/lib/rules/no-self-compare.js +62 -45
- package/lib/rules/no-sequences.js +134 -115
- package/lib/rules/no-setter-return.js +184 -151
- package/lib/rules/no-shadow-restricted-names.js +60 -45
- package/lib/rules/no-shadow.js +341 -315
- package/lib/rules/no-spaced-func.js +81 -76
- package/lib/rules/no-sparse-arrays.js +53 -58
- package/lib/rules/no-sync.js +60 -59
- package/lib/rules/no-tabs.js +82 -71
- package/lib/rules/no-template-curly-in-string.js +32 -31
- package/lib/rules/no-ternary.js +24 -28
- package/lib/rules/no-this-before-super.js +320 -318
- package/lib/rules/no-throw-literal.js +30 -35
- package/lib/rules/no-trailing-spaces.js +198 -190
- package/lib/rules/no-undef-init.js +75 -60
- package/lib/rules/no-undef.js +50 -47
- package/lib/rules/no-undefined.js +72 -74
- package/lib/rules/no-underscore-dangle.js +369 -326
- package/lib/rules/no-unexpected-multiline.js +111 -101
- package/lib/rules/no-unmodified-loop-condition.js +253 -253
- package/lib/rules/no-unneeded-ternary.js +211 -146
- package/lib/rules/no-unreachable-loop.js +144 -141
- package/lib/rules/no-unreachable.js +254 -247
- package/lib/rules/no-unsafe-finally.js +92 -84
- package/lib/rules/no-unsafe-negation.js +104 -82
- package/lib/rules/no-unsafe-optional-chaining.js +191 -177
- package/lib/rules/no-unused-expressions.js +177 -161
- package/lib/rules/no-unused-labels.js +138 -123
- package/lib/rules/no-unused-private-class-members.js +205 -181
- package/lib/rules/no-unused-vars.js +1668 -1448
- package/lib/rules/no-use-before-define.js +228 -230
- package/lib/rules/no-useless-assignment.js +589 -510
- package/lib/rules/no-useless-backreference.js +211 -192
- package/lib/rules/no-useless-call.js +57 -52
- package/lib/rules/no-useless-catch.js +39 -39
- package/lib/rules/no-useless-computed-key.js +143 -114
- package/lib/rules/no-useless-concat.js +64 -59
- package/lib/rules/no-useless-constructor.js +157 -110
- package/lib/rules/no-useless-escape.js +341 -290
- package/lib/rules/no-useless-rename.js +182 -155
- package/lib/rules/no-useless-return.js +343 -311
- package/lib/rules/no-var.js +232 -211
- package/lib/rules/no-void.js +49 -47
- package/lib/rules/no-warning-comments.js +190 -185
- package/lib/rules/no-whitespace-before-property.js +130 -114
- package/lib/rules/no-with.js +23 -25
- package/lib/rules/nonblock-statement-body-position.js +148 -129
- package/lib/rules/object-curly-newline.js +305 -264
- package/lib/rules/object-curly-spacing.js +359 -313
- package/lib/rules/object-property-newline.js +136 -105
- package/lib/rules/object-shorthand.js +606 -501
- package/lib/rules/one-var-declaration-per-line.js +103 -99
- package/lib/rules/one-var.js +652 -536
- package/lib/rules/operator-assignment.js +218 -160
- package/lib/rules/operator-linebreak.js +294 -250
- package/lib/rules/padded-blocks.js +345 -307
- package/lib/rules/padding-line-between-statements.js +442 -438
- package/lib/rules/prefer-arrow-callback.js +361 -312
- package/lib/rules/prefer-const.js +417 -376
- package/lib/rules/prefer-destructuring.js +300 -278
- package/lib/rules/prefer-exponentiation-operator.js +175 -132
- package/lib/rules/prefer-named-capture-group.js +152 -139
- package/lib/rules/prefer-numeric-literals.js +120 -112
- package/lib/rules/prefer-object-has-own.js +115 -81
- package/lib/rules/prefer-object-spread.js +212 -192
- package/lib/rules/prefer-promise-reject-errors.js +139 -121
- package/lib/rules/prefer-reflect.js +126 -106
- package/lib/rules/prefer-regex-literals.js +577 -465
- package/lib/rules/prefer-rest-params.js +78 -79
- package/lib/rules/prefer-spread.js +46 -43
- package/lib/rules/prefer-template.js +265 -194
- package/lib/rules/quote-props.js +372 -306
- package/lib/rules/quotes.js +373 -325
- package/lib/rules/radix.js +151 -135
- package/lib/rules/require-atomic-updates.js +315 -284
- package/lib/rules/require-await.js +143 -115
- package/lib/rules/require-unicode-regexp.js +281 -176
- package/lib/rules/require-yield.js +52 -53
- package/lib/rules/rest-spread-spacing.js +127 -115
- package/lib/rules/semi-spacing.js +280 -249
- package/lib/rules/semi-style.js +175 -133
- package/lib/rules/semi.js +455 -435
- package/lib/rules/sort-imports.js +305 -232
- package/lib/rules/sort-keys.js +218 -187
- package/lib/rules/sort-vars.js +126 -92
- package/lib/rules/space-before-blocks.js +198 -188
- package/lib/rules/space-before-function-paren.js +185 -165
- package/lib/rules/space-in-parens.js +358 -287
- package/lib/rules/space-infix-ops.js +236 -200
- package/lib/rules/space-unary-ops.js +355 -297
- package/lib/rules/spaced-comment.js +362 -318
- package/lib/rules/strict.js +264 -229
- package/lib/rules/switch-colon-spacing.js +129 -121
- package/lib/rules/symbol-description.js +44 -47
- package/lib/rules/template-curly-spacing.js +147 -141
- package/lib/rules/template-tag-spacing.js +97 -87
- package/lib/rules/unicode-bom.js +53 -55
- package/lib/rules/use-isnan.js +236 -205
- package/lib/rules/utils/ast-utils.js +2039 -1860
- package/lib/rules/utils/char-source.js +162 -155
- package/lib/rules/utils/fix-tracker.js +83 -80
- package/lib/rules/utils/keywords.js +59 -59
- package/lib/rules/utils/lazy-loading-rule-map.js +79 -76
- package/lib/rules/utils/regular-expressions.js +32 -24
- package/lib/rules/utils/unicode/index.js +4 -4
- package/lib/rules/utils/unicode/is-combining-character.js +1 -1
- package/lib/rules/utils/unicode/is-emoji-modifier.js +1 -1
- package/lib/rules/utils/unicode/is-regional-indicator-symbol.js +1 -1
- package/lib/rules/utils/unicode/is-surrogate-pair.js +1 -1
- package/lib/rules/valid-typeof.js +152 -110
- package/lib/rules/vars-on-top.js +151 -144
- package/lib/rules/wrap-iife.js +203 -190
- package/lib/rules/wrap-regex.js +69 -57
- package/lib/rules/yield-star-spacing.js +144 -133
- package/lib/rules/yoda.js +282 -271
- package/lib/services/parser-service.js +35 -35
- package/lib/services/processor-service.js +66 -73
- package/lib/shared/ajv.js +14 -14
- package/lib/shared/assert.js +3 -4
- package/lib/shared/ast-utils.js +7 -6
- package/lib/shared/deep-merge-arrays.js +24 -22
- package/lib/shared/directives.js +3 -2
- package/lib/shared/flags.js +46 -17
- package/lib/shared/logging.js +24 -25
- package/lib/shared/option-utils.js +43 -36
- package/lib/shared/runtime-info.js +136 -127
- package/lib/shared/serialization.js +27 -27
- package/lib/shared/severity.js +22 -22
- package/lib/shared/stats.js +5 -5
- package/lib/shared/string-utils.js +16 -16
- package/lib/shared/text-table.js +28 -27
- package/lib/shared/traverser.js +153 -146
- package/lib/types/index.d.ts +2010 -1559
- package/lib/types/rules.d.ts +5253 -5140
- package/lib/types/use-at-your-own-risk.d.ts +32 -30
- package/lib/unsupported-api.js +5 -5
- package/messages/all-files-ignored.js +3 -3
- package/messages/all-matched-files-ignored.js +3 -3
- package/messages/config-file-missing.js +2 -2
- package/messages/config-plugin-missing.js +3 -3
- package/messages/config-serialize-function.js +9 -7
- package/messages/eslintrc-incompat.js +13 -15
- package/messages/eslintrc-plugins.js +3 -4
- package/messages/extend-config-missing.js +3 -3
- package/messages/failed-to-read-json.js +3 -3
- package/messages/file-not-found.js +3 -3
- package/messages/invalid-rule-options.js +2 -2
- package/messages/invalid-rule-severity.js +2 -2
- package/messages/no-config-found.js +3 -3
- package/messages/plugin-conflict.js +8 -8
- package/messages/plugin-invalid.js +3 -3
- package/messages/plugin-missing.js +3 -3
- package/messages/print-config-with-directory-path.js +2 -2
- package/messages/shared.js +6 -1
- package/messages/whitespace-found.js +3 -3
- package/package.json +11 -17
@@ -31,43 +31,41 @@ const META_FIELDS = new Set(["name"]);
|
|
31
31
|
* @returns {TypeError} The new error with details.
|
32
32
|
*/
|
33
33
|
function wrapConfigErrorWithDetails(error, originalLength, baseLength) {
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
);
|
34
|
+
let location = "user-defined";
|
35
|
+
let configIndex = error.index;
|
36
|
+
|
37
|
+
/*
|
38
|
+
* A config array is set up in this order:
|
39
|
+
* 1. Base config
|
40
|
+
* 2. Original configs
|
41
|
+
* 3. User-defined configs
|
42
|
+
* 4. CLI-defined configs
|
43
|
+
*
|
44
|
+
* So we need to adjust the index to account for the base config.
|
45
|
+
*
|
46
|
+
* - If the index is less than the base length, it's in the base config
|
47
|
+
* (as specified by `baseConfig` argument to `FlatConfigArray` constructor).
|
48
|
+
* - If the index is greater than the base length but less than the original
|
49
|
+
* length + base length, it's in the original config. The original config
|
50
|
+
* is passed to the `FlatConfigArray` constructor as the first argument.
|
51
|
+
* - Otherwise, it's in the user-defined config, which is loaded from the
|
52
|
+
* config file and merged with any command-line options.
|
53
|
+
*/
|
54
|
+
if (error.index < baseLength) {
|
55
|
+
location = "base";
|
56
|
+
} else if (error.index < originalLength + baseLength) {
|
57
|
+
location = "original";
|
58
|
+
configIndex = error.index - baseLength;
|
59
|
+
} else {
|
60
|
+
configIndex = error.index - originalLength - baseLength;
|
61
|
+
}
|
62
|
+
|
63
|
+
return new TypeError(
|
64
|
+
`${error.message.slice(0, -1)} at ${location} index ${configIndex}.`,
|
65
|
+
{ cause: error },
|
66
|
+
);
|
68
67
|
}
|
69
68
|
|
70
|
-
|
71
69
|
const originalBaseConfig = Symbol("originalBaseConfig");
|
72
70
|
const originalLength = Symbol("originalLength");
|
73
71
|
const baseLength = Symbol("baseLength");
|
@@ -80,143 +78,140 @@ const baseLength = Symbol("baseLength");
|
|
80
78
|
* Represents an array containing configuration information for ESLint.
|
81
79
|
*/
|
82
80
|
class FlatConfigArray extends ConfigArray {
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
}
|
218
|
-
/* eslint-enable class-methods-use-this -- Desired as instance method */
|
219
|
-
|
81
|
+
/**
|
82
|
+
* Creates a new instance.
|
83
|
+
* @param {*[]} configs An array of configuration information.
|
84
|
+
* @param {{basePath: string, shouldIgnore: boolean, baseConfig: FlatConfig}} options The options
|
85
|
+
* to use for the config array instance.
|
86
|
+
*/
|
87
|
+
constructor(
|
88
|
+
configs,
|
89
|
+
{ basePath, shouldIgnore = true, baseConfig = defaultConfig } = {},
|
90
|
+
) {
|
91
|
+
super(configs, {
|
92
|
+
basePath,
|
93
|
+
schema: flatConfigSchema,
|
94
|
+
});
|
95
|
+
|
96
|
+
/**
|
97
|
+
* The original length of the array before any modifications.
|
98
|
+
* @type {number}
|
99
|
+
*/
|
100
|
+
this[originalLength] = this.length;
|
101
|
+
|
102
|
+
if (baseConfig[Symbol.iterator]) {
|
103
|
+
this.unshift(...baseConfig);
|
104
|
+
} else {
|
105
|
+
this.unshift(baseConfig);
|
106
|
+
}
|
107
|
+
|
108
|
+
/**
|
109
|
+
* The length of the array after applying the base config.
|
110
|
+
* @type {number}
|
111
|
+
*/
|
112
|
+
this[baseLength] = this.length - this[originalLength];
|
113
|
+
|
114
|
+
/**
|
115
|
+
* The base config used to build the config array.
|
116
|
+
* @type {Array<FlatConfig>}
|
117
|
+
*/
|
118
|
+
this[originalBaseConfig] = baseConfig;
|
119
|
+
Object.defineProperty(this, originalBaseConfig, { writable: false });
|
120
|
+
|
121
|
+
/**
|
122
|
+
* Determines if `ignores` fields should be honored.
|
123
|
+
* If true, then all `ignores` fields are honored.
|
124
|
+
* if false, then only `ignores` fields in the baseConfig are honored.
|
125
|
+
* @type {boolean}
|
126
|
+
*/
|
127
|
+
this.shouldIgnore = shouldIgnore;
|
128
|
+
Object.defineProperty(this, "shouldIgnore", { writable: false });
|
129
|
+
}
|
130
|
+
|
131
|
+
/**
|
132
|
+
* Normalizes the array by calling the superclass method and catching/rethrowing
|
133
|
+
* any ConfigError exceptions with additional details.
|
134
|
+
* @param {any} [context] The context to use to normalize the array.
|
135
|
+
* @returns {Promise<FlatConfigArray>} A promise that resolves when the array is normalized.
|
136
|
+
*/
|
137
|
+
normalize(context) {
|
138
|
+
return super.normalize(context).catch(error => {
|
139
|
+
if (error.name === "ConfigError") {
|
140
|
+
throw wrapConfigErrorWithDetails(
|
141
|
+
error,
|
142
|
+
this[originalLength],
|
143
|
+
this[baseLength],
|
144
|
+
);
|
145
|
+
}
|
146
|
+
|
147
|
+
throw error;
|
148
|
+
});
|
149
|
+
}
|
150
|
+
|
151
|
+
/**
|
152
|
+
* Normalizes the array by calling the superclass method and catching/rethrowing
|
153
|
+
* any ConfigError exceptions with additional details.
|
154
|
+
* @param {any} [context] The context to use to normalize the array.
|
155
|
+
* @returns {FlatConfigArray} The current instance.
|
156
|
+
* @throws {TypeError} If the config is invalid.
|
157
|
+
*/
|
158
|
+
normalizeSync(context) {
|
159
|
+
try {
|
160
|
+
return super.normalizeSync(context);
|
161
|
+
} catch (error) {
|
162
|
+
if (error.name === "ConfigError") {
|
163
|
+
throw wrapConfigErrorWithDetails(
|
164
|
+
error,
|
165
|
+
this[originalLength],
|
166
|
+
this[baseLength],
|
167
|
+
);
|
168
|
+
}
|
169
|
+
|
170
|
+
throw error;
|
171
|
+
}
|
172
|
+
}
|
173
|
+
|
174
|
+
/* eslint-disable class-methods-use-this -- Desired as instance method */
|
175
|
+
/**
|
176
|
+
* Replaces a config with another config to allow us to put strings
|
177
|
+
* in the config array that will be replaced by objects before
|
178
|
+
* normalization.
|
179
|
+
* @param {Object} config The config to preprocess.
|
180
|
+
* @returns {Object} The preprocessed config.
|
181
|
+
*/
|
182
|
+
[ConfigArraySymbol.preprocessConfig](config) {
|
183
|
+
/*
|
184
|
+
* If a config object has `ignores` and no other non-meta fields, then it's an object
|
185
|
+
* for global ignores. If `shouldIgnore` is false, that object shouldn't apply,
|
186
|
+
* so we'll remove its `ignores`.
|
187
|
+
*/
|
188
|
+
if (
|
189
|
+
!this.shouldIgnore &&
|
190
|
+
!this[originalBaseConfig].includes(config) &&
|
191
|
+
config.ignores &&
|
192
|
+
Object.keys(config).filter(key => !META_FIELDS.has(key)).length ===
|
193
|
+
1
|
194
|
+
) {
|
195
|
+
/* eslint-disable-next-line no-unused-vars -- need to strip off other keys */
|
196
|
+
const { ignores, ...otherKeys } = config;
|
197
|
+
|
198
|
+
return otherKeys;
|
199
|
+
}
|
200
|
+
|
201
|
+
return config;
|
202
|
+
}
|
203
|
+
|
204
|
+
/**
|
205
|
+
* Finalizes the config by replacing plugin references with their objects
|
206
|
+
* and validating rule option schemas.
|
207
|
+
* @param {Object} config The config to finalize.
|
208
|
+
* @returns {Object} The finalized config.
|
209
|
+
* @throws {TypeError} If the config is invalid.
|
210
|
+
*/
|
211
|
+
[ConfigArraySymbol.finalizeConfig](config) {
|
212
|
+
return new Config(config);
|
213
|
+
}
|
214
|
+
/* eslint-enable class-methods-use-this -- Desired as instance method */
|
220
215
|
}
|
221
216
|
|
222
217
|
exports.FlatConfigArray = FlatConfigArray;
|
@@ -17,9 +17,9 @@
|
|
17
17
|
|
18
18
|
// JSON schema that disallows passing any options
|
19
19
|
const noOptionsSchema = Object.freeze({
|
20
|
-
|
21
|
-
|
22
|
-
|
20
|
+
type: "array",
|
21
|
+
minItems: 0,
|
22
|
+
maxItems: 0,
|
23
23
|
});
|
24
24
|
|
25
25
|
//-----------------------------------------------------------------------------
|
@@ -33,28 +33,27 @@ const noOptionsSchema = Object.freeze({
|
|
33
33
|
* parts of the ruleId;
|
34
34
|
*/
|
35
35
|
function parseRuleId(ruleId) {
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
};
|
36
|
+
let pluginName, ruleName;
|
37
|
+
|
38
|
+
// distinguish between core rules and plugin rules
|
39
|
+
if (ruleId.includes("/")) {
|
40
|
+
// mimic scoped npm packages
|
41
|
+
if (ruleId.startsWith("@")) {
|
42
|
+
pluginName = ruleId.slice(0, ruleId.lastIndexOf("/"));
|
43
|
+
} else {
|
44
|
+
pluginName = ruleId.slice(0, ruleId.indexOf("/"));
|
45
|
+
}
|
46
|
+
|
47
|
+
ruleName = ruleId.slice(pluginName.length + 1);
|
48
|
+
} else {
|
49
|
+
pluginName = "@";
|
50
|
+
ruleName = ruleId;
|
51
|
+
}
|
52
|
+
|
53
|
+
return {
|
54
|
+
pluginName,
|
55
|
+
ruleName,
|
56
|
+
};
|
58
57
|
}
|
59
58
|
|
60
59
|
/**
|
@@ -65,9 +64,9 @@ function parseRuleId(ruleId) {
|
|
65
64
|
* or undefined if not.
|
66
65
|
*/
|
67
66
|
function getRuleFromConfig(ruleId, config) {
|
68
|
-
|
67
|
+
const { pluginName, ruleName } = parseRuleId(ruleId);
|
69
68
|
|
70
|
-
|
69
|
+
return config.plugins?.[pluginName]?.rules?.[ruleName];
|
71
70
|
}
|
72
71
|
|
73
72
|
/**
|
@@ -77,52 +76,50 @@ function getRuleFromConfig(ruleId, config) {
|
|
77
76
|
* @returns {Object|null} JSON Schema for the rule's options. `null` if `meta.schema` is `false`.
|
78
77
|
*/
|
79
78
|
function getRuleOptionsSchema(rule) {
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
return schema;
|
79
|
+
if (!rule.meta) {
|
80
|
+
return { ...noOptionsSchema }; // default if `meta.schema` is not specified
|
81
|
+
}
|
82
|
+
|
83
|
+
const schema = rule.meta.schema;
|
84
|
+
|
85
|
+
if (typeof schema === "undefined") {
|
86
|
+
return { ...noOptionsSchema }; // default if `meta.schema` is not specified
|
87
|
+
}
|
88
|
+
|
89
|
+
// `schema:false` is an allowed explicit opt-out of options validation for the rule
|
90
|
+
if (schema === false) {
|
91
|
+
return null;
|
92
|
+
}
|
93
|
+
|
94
|
+
if (typeof schema !== "object" || schema === null) {
|
95
|
+
throw new TypeError("Rule's `meta.schema` must be an array or object");
|
96
|
+
}
|
97
|
+
|
98
|
+
// ESLint-specific array form needs to be converted into a valid JSON Schema definition
|
99
|
+
if (Array.isArray(schema)) {
|
100
|
+
if (schema.length) {
|
101
|
+
return {
|
102
|
+
type: "array",
|
103
|
+
items: schema,
|
104
|
+
minItems: 0,
|
105
|
+
maxItems: schema.length,
|
106
|
+
};
|
107
|
+
}
|
108
|
+
|
109
|
+
// `schema:[]` is an explicit way to specify that the rule does not accept any options
|
110
|
+
return { ...noOptionsSchema };
|
111
|
+
}
|
112
|
+
|
113
|
+
// `schema:<object>` is assumed to be a valid JSON Schema definition
|
114
|
+
return schema;
|
117
115
|
}
|
118
116
|
|
119
|
-
|
120
117
|
//-----------------------------------------------------------------------------
|
121
118
|
// Exports
|
122
119
|
//-----------------------------------------------------------------------------
|
123
120
|
|
124
121
|
module.exports = {
|
125
|
-
|
126
|
-
|
127
|
-
|
122
|
+
parseRuleId,
|
123
|
+
getRuleFromConfig,
|
124
|
+
getRuleOptionsSchema,
|
128
125
|
};
|