eslint 8.57.1 → 9.39.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 +165 -115
- package/bin/eslint.js +112 -89
- package/conf/default-cli-options.js +22 -22
- package/conf/ecma-version.js +16 -0
- package/conf/globals.js +109 -94
- package/conf/replacements.json +24 -20
- package/conf/rule-type-list.json +89 -26
- package/lib/api.js +16 -20
- package/lib/cli-engine/cli-engine.js +841 -810
- package/lib/cli-engine/file-enumerator.js +384 -390
- package/lib/cli-engine/formatters/formatters-meta.json +17 -45
- package/lib/cli-engine/formatters/html.js +110 -102
- 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 +97 -76
- package/lib/cli-engine/hash.js +1 -1
- package/lib/cli-engine/index.js +1 -1
- package/lib/cli-engine/lint-result-cache.js +165 -148
- package/lib/cli-engine/load-rules.js +17 -17
- package/lib/cli.js +481 -399
- package/lib/config/config-loader.js +816 -0
- package/lib/config/config.js +674 -0
- package/lib/config/default-config.js +57 -46
- package/lib/config/flat-config-array.js +170 -333
- package/lib/config/flat-config-schema.js +389 -389
- package/lib/config-api.js +12 -0
- package/lib/eslint/eslint-helpers.js +1196 -663
- package/lib/eslint/eslint.js +1262 -607
- package/lib/eslint/index.js +3 -3
- package/lib/eslint/legacy-eslint.js +786 -0
- package/lib/eslint/worker.js +173 -0
- package/lib/languages/js/index.js +336 -0
- package/lib/languages/js/source-code/index.js +7 -0
- package/lib/languages/js/source-code/source-code.js +1364 -0
- package/lib/languages/js/source-code/token-store/backward-token-comment-cursor.js +61 -0
- package/lib/languages/js/source-code/token-store/backward-token-cursor.js +57 -0
- package/lib/{source-code → languages/js/source-code}/token-store/cursor.js +36 -36
- package/lib/languages/js/source-code/token-store/cursors.js +120 -0
- package/lib/{source-code → languages/js/source-code}/token-store/decorative-cursor.js +17 -18
- package/lib/{source-code → languages/js/source-code}/token-store/filter-cursor.js +19 -20
- package/lib/languages/js/source-code/token-store/forward-token-comment-cursor.js +65 -0
- package/lib/languages/js/source-code/token-store/forward-token-cursor.js +62 -0
- package/lib/languages/js/source-code/token-store/index.js +721 -0
- package/lib/{source-code → languages/js/source-code}/token-store/limit-cursor.js +17 -18
- package/lib/languages/js/source-code/token-store/padded-token-cursor.js +45 -0
- package/lib/{source-code → languages/js/source-code}/token-store/skip-cursor.js +19 -20
- package/lib/languages/js/source-code/token-store/utils.js +110 -0
- package/lib/languages/js/validate-language-options.js +196 -0
- package/lib/linter/apply-disable-directives.js +490 -371
- package/lib/linter/code-path-analysis/code-path-analyzer.js +650 -674
- 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 -317
- package/lib/linter/code-path-analysis/debug-helpers.js +183 -163
- package/lib/linter/code-path-analysis/fork-context.js +297 -272
- package/lib/linter/code-path-analysis/id-generator.js +22 -23
- package/lib/linter/esquery.js +332 -0
- package/lib/linter/file-context.js +144 -0
- package/lib/linter/file-report.js +608 -0
- package/lib/linter/index.js +3 -5
- package/lib/linter/interpolate.js +38 -16
- package/lib/linter/linter.js +2328 -1785
- package/lib/linter/rule-fixer.js +136 -107
- package/lib/linter/rules.js +37 -46
- package/lib/linter/source-code-fixer.js +96 -94
- package/lib/linter/source-code-traverser.js +333 -0
- package/lib/linter/source-code-visitor.js +81 -0
- package/lib/linter/timing.js +145 -97
- package/lib/linter/vfile.js +115 -0
- package/lib/options.js +464 -326
- package/lib/rule-tester/index.js +3 -1
- package/lib/rule-tester/rule-tester.js +1371 -998
- package/lib/rules/accessor-pairs.js +333 -259
- package/lib/rules/array-bracket-newline.js +250 -220
- package/lib/rules/array-bracket-spacing.js +286 -229
- package/lib/rules/array-callback-return.js +401 -354
- package/lib/rules/array-element-newline.js +358 -295
- package/lib/rules/arrow-body-style.js +400 -278
- package/lib/rules/arrow-parens.js +206 -155
- package/lib/rules/arrow-spacing.js +169 -145
- package/lib/rules/block-scoped-var.js +125 -123
- package/lib/rules/block-spacing.js +186 -158
- package/lib/rules/brace-style.js +262 -181
- package/lib/rules/callback-return.js +203 -174
- package/lib/rules/camelcase.js +403 -380
- package/lib/rules/capitalized-comments.js +253 -228
- package/lib/rules/class-methods-use-this.js +231 -168
- package/lib/rules/comma-dangle.js +379 -328
- package/lib/rules/comma-spacing.js +193 -177
- package/lib/rules/comma-style.js +375 -298
- package/lib/rules/complexity.js +180 -144
- package/lib/rules/computed-property-spacing.js +236 -193
- package/lib/rules/consistent-return.js +181 -170
- package/lib/rules/consistent-this.js +167 -141
- package/lib/rules/constructor-super.js +418 -411
- package/lib/rules/curly.js +407 -468
- package/lib/rules/default-case-last.js +39 -32
- package/lib/rules/default-case.js +89 -83
- package/lib/rules/default-param-last.js +69 -53
- package/lib/rules/dot-location.js +122 -92
- package/lib/rules/dot-notation.js +193 -153
- package/lib/rules/eol-last.js +122 -102
- package/lib/rules/eqeqeq.js +191 -155
- package/lib/rules/for-direction.js +150 -122
- package/lib/rules/func-call-spacing.js +261 -213
- package/lib/rules/func-name-matching.js +294 -209
- package/lib/rules/func-names.js +165 -164
- package/lib/rules/func-style.js +209 -86
- package/lib/rules/function-call-argument-newline.js +152 -111
- package/lib/rules/function-paren-newline.js +349 -273
- package/lib/rules/generator-star-spacing.js +229 -192
- package/lib/rules/getter-return.js +208 -170
- package/lib/rules/global-require.js +85 -58
- package/lib/rules/grouped-accessor-pairs.js +201 -148
- package/lib/rules/guard-for-in.js +72 -63
- package/lib/rules/handle-callback-err.js +108 -87
- package/lib/rules/id-blacklist.js +182 -187
- package/lib/rules/id-denylist.js +174 -179
- package/lib/rules/id-length.js +197 -157
- package/lib/rules/id-match.js +350 -286
- package/lib/rules/implicit-arrow-linebreak.js +102 -61
- package/lib/rules/indent-legacy.js +1345 -1102
- package/lib/rules/indent.js +2272 -1741
- package/lib/rules/index.js +320 -294
- package/lib/rules/init-declarations.js +139 -106
- package/lib/rules/jsx-quotes.js +94 -64
- package/lib/rules/key-spacing.js +750 -615
- package/lib/rules/keyword-spacing.js +648 -587
- package/lib/rules/line-comment-position.js +143 -108
- package/lib/rules/linebreak-style.js +115 -88
- package/lib/rules/lines-around-comment.js +540 -430
- package/lib/rules/lines-around-directive.js +233 -185
- package/lib/rules/lines-between-class-members.js +305 -216
- package/lib/rules/logical-assignment-operators.js +582 -398
- package/lib/rules/max-classes-per-file.js +69 -68
- package/lib/rules/max-depth.js +146 -143
- package/lib/rules/max-len.js +473 -416
- package/lib/rules/max-lines-per-function.js +201 -176
- package/lib/rules/max-lines.js +158 -162
- package/lib/rules/max-nested-callbacks.js +102 -104
- package/lib/rules/max-params.js +102 -75
- package/lib/rules/max-statements-per-line.js +205 -180
- package/lib/rules/max-statements.js +168 -164
- package/lib/rules/multiline-comment-style.js +638 -460
- package/lib/rules/multiline-ternary.js +241 -158
- package/lib/rules/new-cap.js +233 -232
- package/lib/rules/new-parens.js +88 -61
- package/lib/rules/newline-after-var.js +287 -233
- package/lib/rules/newline-before-return.js +229 -204
- package/lib/rules/newline-per-chained-call.js +142 -109
- package/lib/rules/no-alert.js +90 -79
- package/lib/rules/no-array-constructor.js +175 -113
- package/lib/rules/no-async-promise-executor.js +30 -24
- package/lib/rules/no-await-in-loop.js +79 -70
- package/lib/rules/no-bitwise.js +113 -87
- package/lib/rules/no-buffer-constructor.js +61 -37
- package/lib/rules/no-caller.js +39 -33
- package/lib/rules/no-case-declarations.js +61 -45
- package/lib/rules/no-catch-shadow.js +76 -62
- package/lib/rules/no-class-assign.js +51 -48
- package/lib/rules/no-compare-neg-zero.js +62 -48
- package/lib/rules/no-cond-assign.js +148 -132
- package/lib/rules/no-confusing-arrow.js +98 -63
- package/lib/rules/no-console.js +202 -188
- package/lib/rules/no-const-assign.js +58 -41
- package/lib/rules/no-constant-binary-expression.js +501 -407
- package/lib/rules/no-constant-condition.js +158 -131
- package/lib/rules/no-constructor-return.js +49 -49
- package/lib/rules/no-continue.js +25 -26
- package/lib/rules/no-control-regex.js +125 -121
- package/lib/rules/no-debugger.js +28 -30
- package/lib/rules/no-delete-var.js +29 -29
- package/lib/rules/no-div-regex.js +47 -40
- package/lib/rules/no-dupe-args.js +79 -69
- package/lib/rules/no-dupe-class-members.js +102 -89
- package/lib/rules/no-dupe-else-if.js +100 -77
- package/lib/rules/no-dupe-keys.js +133 -110
- package/lib/rules/no-duplicate-case.js +50 -43
- package/lib/rules/no-duplicate-imports.js +266 -188
- package/lib/rules/no-else-return.js +430 -385
- package/lib/rules/no-empty-character-class.js +57 -50
- package/lib/rules/no-empty-function.js +197 -128
- package/lib/rules/no-empty-pattern.js +63 -56
- package/lib/rules/no-empty-static-block.js +61 -35
- package/lib/rules/no-empty.js +135 -85
- package/lib/rules/no-eq-null.js +37 -32
- package/lib/rules/no-eval.js +258 -249
- package/lib/rules/no-ex-assign.js +42 -39
- package/lib/rules/no-extend-native.js +161 -160
- package/lib/rules/no-extra-bind.js +201 -190
- package/lib/rules/no-extra-boolean-cast.js +398 -295
- package/lib/rules/no-extra-label.js +150 -130
- package/lib/rules/no-extra-parens.js +1654 -1307
- package/lib/rules/no-extra-semi.js +146 -126
- package/lib/rules/no-fallthrough.js +200 -136
- package/lib/rules/no-floating-decimal.js +74 -48
- package/lib/rules/no-func-assign.js +54 -55
- package/lib/rules/no-global-assign.js +78 -72
- package/lib/rules/no-implicit-coercion.js +350 -262
- package/lib/rules/no-implicit-globals.js +174 -133
- package/lib/rules/no-implied-eval.js +150 -112
- package/lib/rules/no-import-assign.js +145 -159
- package/lib/rules/no-inline-comments.js +101 -96
- package/lib/rules/no-inner-declarations.js +115 -78
- package/lib/rules/no-invalid-regexp.js +223 -174
- package/lib/rules/no-invalid-this.js +145 -117
- package/lib/rules/no-irregular-whitespace.js +266 -250
- package/lib/rules/no-iterator.js +29 -33
- package/lib/rules/no-label-var.js +59 -61
- package/lib/rules/no-labels.js +138 -131
- package/lib/rules/no-lone-blocks.js +127 -123
- package/lib/rules/no-lonely-if.js +105 -67
- package/lib/rules/no-loop-func.js +245 -184
- package/lib/rules/no-loss-of-precision.js +236 -201
- package/lib/rules/no-magic-numbers.js +339 -217
- package/lib/rules/no-misleading-character-class.js +548 -253
- package/lib/rules/no-mixed-operators.js +188 -164
- package/lib/rules/no-mixed-requires.js +253 -224
- package/lib/rules/no-mixed-spaces-and-tabs.js +135 -103
- package/lib/rules/no-multi-assign.js +46 -47
- package/lib/rules/no-multi-spaces.js +163 -125
- package/lib/rules/no-multi-str.js +42 -40
- package/lib/rules/no-multiple-empty-lines.js +196 -140
- package/lib/rules/no-native-reassign.js +90 -74
- package/lib/rules/no-negated-condition.js +79 -74
- package/lib/rules/no-negated-in-lhs.js +45 -32
- package/lib/rules/no-nested-ternary.js +33 -31
- package/lib/rules/no-new-func.js +71 -62
- package/lib/rules/no-new-native-nonconstructor.js +43 -39
- package/lib/rules/no-new-object.js +48 -39
- package/lib/rules/no-new-require.js +48 -31
- package/lib/rules/no-new-symbol.js +61 -43
- package/lib/rules/no-new-wrappers.js +43 -41
- package/lib/rules/no-new.js +28 -29
- package/lib/rules/no-nonoctal-decimal-escape.js +149 -121
- package/lib/rules/no-obj-calls.js +66 -53
- package/lib/rules/no-object-constructor.js +104 -97
- package/lib/rules/no-octal-escape.js +40 -43
- package/lib/rules/no-octal.js +29 -32
- package/lib/rules/no-param-reassign.js +236 -218
- package/lib/rules/no-path-concat.js +66 -51
- package/lib/rules/no-plusplus.js +60 -63
- package/lib/rules/no-process-env.js +49 -32
- package/lib/rules/no-process-exit.js +48 -28
- package/lib/rules/no-promise-executor-return.js +205 -204
- package/lib/rules/no-proto.js +26 -29
- package/lib/rules/no-prototype-builtins.js +146 -124
- package/lib/rules/no-redeclare.js +154 -155
- package/lib/rules/no-regex-spaces.js +183 -161
- package/lib/rules/no-restricted-exports.js +208 -174
- package/lib/rules/no-restricted-globals.js +254 -112
- package/lib/rules/no-restricted-imports.js +824 -384
- package/lib/rules/no-restricted-modules.js +222 -186
- package/lib/rules/no-restricted-properties.js +218 -153
- package/lib/rules/no-restricted-syntax.js +56 -52
- package/lib/rules/no-return-assign.js +56 -49
- package/lib/rules/no-return-await.js +147 -120
- package/lib/rules/no-script-url.js +53 -46
- package/lib/rules/no-self-assign.js +148 -145
- package/lib/rules/no-self-compare.js +63 -46
- package/lib/rules/no-sequences.js +135 -115
- package/lib/rules/no-setter-return.js +176 -178
- package/lib/rules/no-shadow-restricted-names.js +84 -36
- package/lib/rules/no-shadow.js +598 -310
- package/lib/rules/no-spaced-func.js +82 -60
- package/lib/rules/no-sparse-arrays.js +46 -28
- package/lib/rules/no-sync.js +61 -44
- package/lib/rules/no-tabs.js +83 -54
- package/lib/rules/no-template-curly-in-string.js +33 -32
- package/lib/rules/no-ternary.js +25 -28
- package/lib/rules/no-this-before-super.js +332 -298
- package/lib/rules/no-throw-literal.js +31 -36
- package/lib/rules/no-trailing-spaces.js +208 -174
- package/lib/rules/no-unassigned-vars.js +80 -0
- package/lib/rules/no-undef-init.js +86 -60
- package/lib/rules/no-undef.js +52 -47
- package/lib/rules/no-undefined.js +73 -74
- package/lib/rules/no-underscore-dangle.js +370 -322
- package/lib/rules/no-unexpected-multiline.js +112 -102
- package/lib/rules/no-unmodified-loop-condition.js +254 -254
- package/lib/rules/no-unneeded-ternary.js +212 -146
- package/lib/rules/no-unreachable-loop.js +145 -140
- package/lib/rules/no-unreachable.js +255 -248
- package/lib/rules/no-unsafe-finally.js +93 -85
- package/lib/rules/no-unsafe-negation.js +105 -81
- package/lib/rules/no-unsafe-optional-chaining.js +193 -177
- package/lib/rules/no-unused-expressions.js +199 -158
- package/lib/rules/no-unused-labels.js +139 -124
- package/lib/rules/no-unused-private-class-members.js +206 -182
- package/lib/rules/no-unused-vars.js +1708 -687
- package/lib/rules/no-use-before-define.js +327 -229
- package/lib/rules/no-useless-assignment.js +654 -0
- package/lib/rules/no-useless-backreference.js +212 -143
- package/lib/rules/no-useless-call.js +58 -53
- package/lib/rules/no-useless-catch.js +40 -40
- package/lib/rules/no-useless-computed-key.js +144 -108
- package/lib/rules/no-useless-concat.js +65 -59
- package/lib/rules/no-useless-constructor.js +160 -97
- package/lib/rules/no-useless-escape.js +364 -291
- package/lib/rules/no-useless-rename.js +183 -153
- package/lib/rules/no-useless-return.js +344 -307
- package/lib/rules/no-var.js +245 -212
- package/lib/rules/no-void.js +51 -46
- package/lib/rules/no-warning-comments.js +191 -183
- package/lib/rules/no-whitespace-before-property.js +131 -97
- package/lib/rules/no-with.js +24 -26
- package/lib/rules/nonblock-statement-body-position.js +149 -112
- package/lib/rules/object-curly-newline.js +306 -247
- package/lib/rules/object-curly-spacing.js +360 -296
- package/lib/rules/object-property-newline.js +137 -88
- package/lib/rules/object-shorthand.js +632 -500
- package/lib/rules/one-var-declaration-per-line.js +104 -82
- package/lib/rules/one-var.js +686 -536
- package/lib/rules/operator-assignment.js +219 -158
- package/lib/rules/operator-linebreak.js +295 -233
- package/lib/rules/padded-blocks.js +346 -290
- package/lib/rules/padding-line-between-statements.js +443 -421
- package/lib/rules/prefer-arrow-callback.js +371 -315
- package/lib/rules/prefer-const.js +418 -373
- package/lib/rules/prefer-destructuring.js +309 -278
- package/lib/rules/prefer-exponentiation-operator.js +176 -132
- package/lib/rules/prefer-named-capture-group.js +160 -141
- package/lib/rules/prefer-numeric-literals.js +121 -112
- package/lib/rules/prefer-object-has-own.js +116 -82
- package/lib/rules/prefer-object-spread.js +214 -193
- package/lib/rules/prefer-promise-reject-errors.js +140 -118
- package/lib/rules/prefer-reflect.js +126 -103
- package/lib/rules/prefer-regex-literals.js +561 -463
- package/lib/rules/prefer-rest-params.js +79 -80
- package/lib/rules/prefer-spread.js +47 -43
- package/lib/rules/prefer-template.js +266 -194
- package/lib/rules/preserve-caught-error.js +535 -0
- package/lib/rules/quote-props.js +373 -289
- package/lib/rules/quotes.js +374 -308
- package/lib/rules/radix.js +152 -134
- package/lib/rules/require-atomic-updates.js +316 -282
- package/lib/rules/require-await.js +153 -82
- package/lib/rules/require-unicode-regexp.js +296 -108
- package/lib/rules/require-yield.js +53 -54
- package/lib/rules/rest-spread-spacing.js +128 -98
- package/lib/rules/semi-spacing.js +281 -232
- package/lib/rules/semi-style.js +176 -116
- package/lib/rules/semi.js +456 -418
- package/lib/rules/sort-imports.js +307 -229
- package/lib/rules/sort-keys.js +219 -181
- package/lib/rules/sort-vars.js +127 -91
- package/lib/rules/space-before-blocks.js +199 -171
- package/lib/rules/space-before-function-paren.js +186 -148
- package/lib/rules/space-in-parens.js +359 -270
- package/lib/rules/space-infix-ops.js +237 -183
- package/lib/rules/space-unary-ops.js +356 -280
- package/lib/rules/spaced-comment.js +363 -301
- package/lib/rules/strict.js +266 -229
- package/lib/rules/switch-colon-spacing.js +130 -104
- package/lib/rules/symbol-description.js +45 -48
- package/lib/rules/template-curly-spacing.js +148 -124
- package/lib/rules/template-tag-spacing.js +98 -70
- package/lib/rules/unicode-bom.js +54 -54
- package/lib/rules/use-isnan.js +237 -110
- package/lib/rules/utils/ast-utils.js +2139 -1688
- package/lib/rules/utils/char-source.js +247 -0
- package/lib/rules/utils/fix-tracker.js +99 -88
- package/lib/rules/utils/keywords.js +59 -59
- package/lib/rules/utils/lazy-loading-rule-map.js +81 -78
- package/lib/rules/utils/regular-expressions.js +35 -19
- package/lib/rules/utils/unicode/index.js +9 -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 +153 -109
- package/lib/rules/vars-on-top.js +152 -144
- package/lib/rules/wrap-iife.js +204 -173
- package/lib/rules/wrap-regex.js +77 -47
- package/lib/rules/yield-star-spacing.js +145 -116
- package/lib/rules/yoda.js +283 -274
- package/lib/services/parser-service.js +65 -0
- package/lib/services/processor-service.js +101 -0
- package/lib/services/suppressions-service.js +302 -0
- package/lib/services/warning-service.js +98 -0
- package/lib/shared/ajv.js +14 -14
- package/lib/shared/assert.js +21 -0
- package/lib/shared/ast-utils.js +7 -6
- package/lib/shared/deep-merge-arrays.js +62 -0
- package/lib/shared/directives.js +3 -2
- package/lib/shared/flags.js +108 -0
- package/lib/shared/logging.js +24 -16
- package/lib/shared/naming.js +109 -0
- package/lib/shared/option-utils.js +63 -0
- package/lib/shared/relative-module-resolver.js +18 -40
- package/lib/shared/runtime-info.js +138 -128
- package/lib/shared/serialization.js +78 -0
- package/lib/shared/severity.js +22 -22
- package/lib/shared/stats.js +30 -0
- package/lib/shared/string-utils.js +19 -21
- package/lib/shared/text-table.js +68 -0
- package/lib/shared/translate-cli-options.js +281 -0
- package/lib/shared/traverser.js +153 -146
- package/lib/types/config-api.d.ts +12 -0
- package/lib/types/index.d.ts +1473 -0
- package/lib/types/rules.d.ts +5589 -0
- package/lib/types/universal.d.ts +6 -0
- package/lib/types/use-at-your-own-risk.d.ts +87 -0
- package/lib/universal.js +10 -0
- package/lib/unsupported-api.js +8 -9
- package/messages/all-files-ignored.js +3 -3
- package/messages/all-matched-files-ignored.js +21 -0
- package/messages/config-file-missing.js +16 -0
- package/messages/config-plugin-missing.js +14 -0
- package/messages/config-serialize-function.js +30 -0
- package/messages/eslintrc-incompat.js +35 -16
- package/messages/eslintrc-plugins.js +8 -5
- 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 +4 -4
- package/messages/plugin-conflict.js +9 -9
- package/messages/plugin-invalid.js +4 -4
- package/messages/plugin-missing.js +4 -4
- 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 +105 -60
- package/conf/config-schema.js +0 -93
- package/lib/cli-engine/formatters/checkstyle.js +0 -60
- package/lib/cli-engine/formatters/compact.js +0 -60
- package/lib/cli-engine/formatters/jslint-xml.js +0 -41
- package/lib/cli-engine/formatters/junit.js +0 -82
- package/lib/cli-engine/formatters/tap.js +0 -95
- package/lib/cli-engine/formatters/unix.js +0 -58
- package/lib/cli-engine/formatters/visualstudio.js +0 -63
- package/lib/cli-engine/xml-escape.js +0 -34
- package/lib/config/flat-config-helpers.js +0 -111
- package/lib/config/rule-validator.js +0 -158
- package/lib/eslint/flat-eslint.js +0 -1159
- package/lib/linter/config-comment-parser.js +0 -185
- package/lib/linter/node-event-generator.js +0 -354
- package/lib/linter/report-translator.js +0 -369
- package/lib/linter/safe-emitter.js +0 -52
- package/lib/rule-tester/flat-rule-tester.js +0 -1131
- package/lib/rules/require-jsdoc.js +0 -122
- package/lib/rules/utils/patterns/letters.js +0 -36
- package/lib/rules/valid-jsdoc.js +0 -516
- package/lib/shared/config-validator.js +0 -347
- package/lib/shared/deprecation-warnings.js +0 -58
- package/lib/shared/types.js +0 -216
- package/lib/source-code/index.js +0 -5
- package/lib/source-code/source-code.js +0 -1055
- package/lib/source-code/token-store/backward-token-comment-cursor.js +0 -57
- package/lib/source-code/token-store/backward-token-cursor.js +0 -58
- package/lib/source-code/token-store/cursors.js +0 -90
- package/lib/source-code/token-store/forward-token-comment-cursor.js +0 -57
- package/lib/source-code/token-store/forward-token-cursor.js +0 -63
- package/lib/source-code/token-store/index.js +0 -627
- package/lib/source-code/token-store/padded-token-cursor.js +0 -38
- package/lib/source-code/token-store/utils.js +0 -107
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Applies default rule options
|
|
3
|
+
* @author JoshuaKGoldberg
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Check if the variable contains an object strictly rejecting arrays
|
|
10
|
+
* @param {unknown} value an object
|
|
11
|
+
* @returns {boolean} Whether value is an object
|
|
12
|
+
*/
|
|
13
|
+
function isObjectNotArray(value) {
|
|
14
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Deeply merges second on top of first, creating a new {} object if needed.
|
|
19
|
+
* @param {T} first Base, default value.
|
|
20
|
+
* @param {U} second User-specified value.
|
|
21
|
+
* @returns {T | U | (T & U)} Merged equivalent of second on top of first.
|
|
22
|
+
*/
|
|
23
|
+
function deepMergeObjects(first, second) {
|
|
24
|
+
if (second === void 0) {
|
|
25
|
+
return first;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
if (!isObjectNotArray(first) || !isObjectNotArray(second)) {
|
|
29
|
+
return second;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const result = { ...first, ...second };
|
|
33
|
+
|
|
34
|
+
for (const key of Object.keys(second)) {
|
|
35
|
+
if (Object.prototype.propertyIsEnumerable.call(first, key)) {
|
|
36
|
+
result[key] = deepMergeObjects(first[key], second[key]);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
return result;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Deeply merges second on top of first, creating a new [] array if needed.
|
|
45
|
+
* @param {T[]} first Base, default values.
|
|
46
|
+
* @param {U[]} second User-specified values.
|
|
47
|
+
* @returns {(T | U | (T & U))[]} Merged equivalent of second on top of first.
|
|
48
|
+
*/
|
|
49
|
+
function deepMergeArrays(first, second) {
|
|
50
|
+
if (!first || !second) {
|
|
51
|
+
return second || first || [];
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return [
|
|
55
|
+
...first.map((value, i) =>
|
|
56
|
+
deepMergeObjects(value, i < second.length ? second[i] : void 0),
|
|
57
|
+
),
|
|
58
|
+
...second.slice(first.length),
|
|
59
|
+
];
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
module.exports = { deepMergeArrays };
|
package/lib/shared/directives.js
CHANGED
|
@@ -8,8 +8,9 @@
|
|
|
8
8
|
*/
|
|
9
9
|
"use strict";
|
|
10
10
|
|
|
11
|
-
const directivesPattern =
|
|
11
|
+
const directivesPattern =
|
|
12
|
+
/^(eslint(?:-env|-enable|-disable(?:(?:-next)?-line)?)?|exported|globals?)(?:\s|$)/u;
|
|
12
13
|
|
|
13
14
|
module.exports = {
|
|
14
|
-
|
|
15
|
+
directivesPattern,
|
|
15
16
|
};
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Shared flags for ESLint.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
"use strict";
|
|
6
|
+
|
|
7
|
+
//------------------------------------------------------------------------------
|
|
8
|
+
// Typedefs
|
|
9
|
+
//------------------------------------------------------------------------------
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @typedef {Object} InactiveFlagData
|
|
13
|
+
* @property {string} description Flag description
|
|
14
|
+
* @property {string | null} [replacedBy] Can be either:
|
|
15
|
+
* - An active flag (string) that enables the same feature.
|
|
16
|
+
* - `null` if the feature is now enabled by default.
|
|
17
|
+
* - Omitted if the feature has been abandoned.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
//-----------------------------------------------------------------------------
|
|
21
|
+
// Exports
|
|
22
|
+
//-----------------------------------------------------------------------------
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* The set of flags that change ESLint behavior with a description.
|
|
26
|
+
* @type {Map<string, string>}
|
|
27
|
+
*/
|
|
28
|
+
const activeFlags = new Map([
|
|
29
|
+
["test_only", "Used only for testing."],
|
|
30
|
+
["test_only_2", "Used only for testing."],
|
|
31
|
+
[
|
|
32
|
+
"v10_config_lookup_from_file",
|
|
33
|
+
"Look up `eslint.config.js` from the file being linted.",
|
|
34
|
+
],
|
|
35
|
+
[
|
|
36
|
+
"unstable_native_nodejs_ts_config",
|
|
37
|
+
"Use native Node.js to load TypeScript configuration.",
|
|
38
|
+
],
|
|
39
|
+
]);
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* The set of flags that used to be active.
|
|
43
|
+
* @type {Map<string, InactiveFlagData>}
|
|
44
|
+
*/
|
|
45
|
+
const inactiveFlags = new Map([
|
|
46
|
+
[
|
|
47
|
+
"test_only_replaced",
|
|
48
|
+
{
|
|
49
|
+
description:
|
|
50
|
+
"Used only for testing flags that have been replaced by other flags.",
|
|
51
|
+
replacedBy: "test_only",
|
|
52
|
+
},
|
|
53
|
+
],
|
|
54
|
+
[
|
|
55
|
+
"test_only_enabled_by_default",
|
|
56
|
+
{
|
|
57
|
+
description:
|
|
58
|
+
"Used only for testing flags whose features have been enabled by default.",
|
|
59
|
+
replacedBy: null,
|
|
60
|
+
},
|
|
61
|
+
],
|
|
62
|
+
[
|
|
63
|
+
"test_only_abandoned",
|
|
64
|
+
{
|
|
65
|
+
description:
|
|
66
|
+
"Used only for testing flags whose features have been abandoned.",
|
|
67
|
+
},
|
|
68
|
+
],
|
|
69
|
+
[
|
|
70
|
+
"unstable_ts_config",
|
|
71
|
+
{
|
|
72
|
+
description: "Enable TypeScript configuration files.",
|
|
73
|
+
replacedBy: null,
|
|
74
|
+
},
|
|
75
|
+
],
|
|
76
|
+
[
|
|
77
|
+
"unstable_config_lookup_from_file",
|
|
78
|
+
{
|
|
79
|
+
description:
|
|
80
|
+
"Look up `eslint.config.js` from the file being linted.",
|
|
81
|
+
replacedBy: "v10_config_lookup_from_file",
|
|
82
|
+
},
|
|
83
|
+
],
|
|
84
|
+
]);
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Creates a message that describes the reason the flag is inactive.
|
|
88
|
+
* @param {InactiveFlagData} inactiveFlagData Data for the inactive flag.
|
|
89
|
+
* @returns {string} Message describing the reason the flag is inactive.
|
|
90
|
+
*/
|
|
91
|
+
function getInactivityReasonMessage({ replacedBy }) {
|
|
92
|
+
if (typeof replacedBy === "undefined") {
|
|
93
|
+
return "This feature has been abandoned.";
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
if (typeof replacedBy === "string") {
|
|
97
|
+
return `This flag has been renamed '${replacedBy}' to reflect its stabilization. Please use '${replacedBy}' instead.`;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// null
|
|
101
|
+
return "This feature is now enabled by default.";
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
module.exports = {
|
|
105
|
+
activeFlags,
|
|
106
|
+
inactiveFlags,
|
|
107
|
+
getInactivityReasonMessage,
|
|
108
|
+
};
|
package/lib/shared/logging.js
CHANGED
|
@@ -9,22 +9,30 @@
|
|
|
9
9
|
|
|
10
10
|
/* c8 ignore next */
|
|
11
11
|
module.exports = {
|
|
12
|
+
/**
|
|
13
|
+
* Cover for console.info
|
|
14
|
+
* @param {...any} args The elements to log.
|
|
15
|
+
* @returns {void}
|
|
16
|
+
*/
|
|
17
|
+
info(...args) {
|
|
18
|
+
console.log(...args);
|
|
19
|
+
},
|
|
12
20
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
+
/**
|
|
22
|
+
* Cover for console.warn
|
|
23
|
+
* @param {...any} args The elements to log.
|
|
24
|
+
* @returns {void}
|
|
25
|
+
*/
|
|
26
|
+
warn(...args) {
|
|
27
|
+
console.warn(...args);
|
|
28
|
+
},
|
|
21
29
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
+
/**
|
|
31
|
+
* Cover for console.error
|
|
32
|
+
* @param {...any} args The elements to log.
|
|
33
|
+
* @returns {void}
|
|
34
|
+
*/
|
|
35
|
+
error(...args) {
|
|
36
|
+
console.error(...args);
|
|
37
|
+
},
|
|
30
38
|
};
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Common helpers for naming of plugins, formatters and configs
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
"use strict";
|
|
6
|
+
|
|
7
|
+
const NAMESPACE_REGEX = /^@.*\//u;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Brings package name to correct format based on prefix
|
|
11
|
+
* @param {string} name The name of the package.
|
|
12
|
+
* @param {string} prefix Can be either "eslint-plugin", "eslint-config" or "eslint-formatter"
|
|
13
|
+
* @returns {string} Normalized name of the package
|
|
14
|
+
* @private
|
|
15
|
+
*/
|
|
16
|
+
function normalizePackageName(name, prefix) {
|
|
17
|
+
let normalizedName = name;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* On Windows, name can come in with Windows slashes instead of Unix slashes.
|
|
21
|
+
* Normalize to Unix first to avoid errors later on.
|
|
22
|
+
* https://github.com/eslint/eslint/issues/5644
|
|
23
|
+
*/
|
|
24
|
+
if (normalizedName.includes("\\")) {
|
|
25
|
+
normalizedName = normalizedName.replace(/\\/gu, "/");
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
if (normalizedName.charAt(0) === "@") {
|
|
29
|
+
/**
|
|
30
|
+
* it's a scoped package
|
|
31
|
+
* package name is the prefix, or just a username
|
|
32
|
+
*/
|
|
33
|
+
const scopedPackageShortcutRegex = new RegExp(
|
|
34
|
+
`^(@[^/]+)(?:/(?:${prefix})?)?$`,
|
|
35
|
+
"u",
|
|
36
|
+
),
|
|
37
|
+
scopedPackageNameRegex = new RegExp(`^${prefix}(-|$)`, "u");
|
|
38
|
+
|
|
39
|
+
if (scopedPackageShortcutRegex.test(normalizedName)) {
|
|
40
|
+
normalizedName = normalizedName.replace(
|
|
41
|
+
scopedPackageShortcutRegex,
|
|
42
|
+
`$1/${prefix}`,
|
|
43
|
+
);
|
|
44
|
+
} else if (!scopedPackageNameRegex.test(normalizedName.split("/")[1])) {
|
|
45
|
+
/**
|
|
46
|
+
* for scoped packages, insert the prefix after the first / unless
|
|
47
|
+
* the path is already @scope/eslint or @scope/eslint-xxx-yyy
|
|
48
|
+
*/
|
|
49
|
+
normalizedName = normalizedName.replace(
|
|
50
|
+
/^@([^/]+)\/(.*)$/u,
|
|
51
|
+
`@$1/${prefix}-$2`,
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
} else if (!normalizedName.startsWith(`${prefix}-`)) {
|
|
55
|
+
normalizedName = `${prefix}-${normalizedName}`;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return normalizedName;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Removes the prefix from a fullname.
|
|
63
|
+
* @param {string} fullname The term which may have the prefix.
|
|
64
|
+
* @param {string} prefix The prefix to remove.
|
|
65
|
+
* @returns {string} The term without prefix.
|
|
66
|
+
*/
|
|
67
|
+
function getShorthandName(fullname, prefix) {
|
|
68
|
+
if (fullname[0] === "@") {
|
|
69
|
+
let matchResult = new RegExp(`^(@[^/]+)/${prefix}$`, "u").exec(
|
|
70
|
+
fullname,
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
if (matchResult) {
|
|
74
|
+
return matchResult[1];
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
matchResult = new RegExp(`^(@[^/]+)/${prefix}-(.+)$`, "u").exec(
|
|
78
|
+
fullname,
|
|
79
|
+
);
|
|
80
|
+
if (matchResult) {
|
|
81
|
+
return `${matchResult[1]}/${matchResult[2]}`;
|
|
82
|
+
}
|
|
83
|
+
} else if (fullname.startsWith(`${prefix}-`)) {
|
|
84
|
+
return fullname.slice(prefix.length + 1);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return fullname;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Gets the scope (namespace) of a term.
|
|
92
|
+
* @param {string} term The term which may have the namespace.
|
|
93
|
+
* @returns {string} The namespace of the term if it has one.
|
|
94
|
+
*/
|
|
95
|
+
function getNamespaceFromTerm(term) {
|
|
96
|
+
const match = term.match(NAMESPACE_REGEX);
|
|
97
|
+
|
|
98
|
+
return match ? match[0] : "";
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
//------------------------------------------------------------------------------
|
|
102
|
+
// Public Interface
|
|
103
|
+
//------------------------------------------------------------------------------
|
|
104
|
+
|
|
105
|
+
module.exports = {
|
|
106
|
+
normalizePackageName,
|
|
107
|
+
getShorthandName,
|
|
108
|
+
getNamespaceFromTerm,
|
|
109
|
+
};
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Utilities to operate on option objects.
|
|
3
|
+
* @author Josh Goldberg
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Determines whether any of input's properties are different
|
|
10
|
+
* from values that already exist in original.
|
|
11
|
+
* @template T
|
|
12
|
+
* @param {Partial<T>} input New value.
|
|
13
|
+
* @param {T} original Original value.
|
|
14
|
+
* @returns {boolean} Whether input includes an explicit difference.
|
|
15
|
+
*/
|
|
16
|
+
function containsDifferentProperty(input, original) {
|
|
17
|
+
if (input === original) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
if (
|
|
22
|
+
typeof input !== typeof original ||
|
|
23
|
+
Array.isArray(input) !== Array.isArray(original)
|
|
24
|
+
) {
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
if (Array.isArray(input)) {
|
|
29
|
+
return (
|
|
30
|
+
input.length !== original.length ||
|
|
31
|
+
input.some((value, i) =>
|
|
32
|
+
containsDifferentProperty(value, original[i]),
|
|
33
|
+
)
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
if (typeof input === "object") {
|
|
38
|
+
if (input === null || original === null) {
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const inputKeys = Object.keys(input);
|
|
43
|
+
const originalKeys = Object.keys(original);
|
|
44
|
+
|
|
45
|
+
return (
|
|
46
|
+
inputKeys.length !== originalKeys.length ||
|
|
47
|
+
inputKeys.some(
|
|
48
|
+
inputKey =>
|
|
49
|
+
!Object.hasOwn(original, inputKey) ||
|
|
50
|
+
containsDifferentProperty(
|
|
51
|
+
input[inputKey],
|
|
52
|
+
original[inputKey],
|
|
53
|
+
),
|
|
54
|
+
)
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
module.exports = {
|
|
62
|
+
containsDifferentProperty,
|
|
63
|
+
};
|
|
@@ -1,15 +1,3 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* STOP!!! DO NOT MODIFY.
|
|
3
|
-
*
|
|
4
|
-
* This file is part of the ongoing work to move the eslintrc-style config
|
|
5
|
-
* system into the @eslint/eslintrc package. This file needs to remain
|
|
6
|
-
* unchanged in order for this work to proceed.
|
|
7
|
-
*
|
|
8
|
-
* If you think you need to change this file, please contact @nzakas first.
|
|
9
|
-
*
|
|
10
|
-
* Thanks in advance for your cooperation.
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
1
|
/**
|
|
14
2
|
* Utility for resolving a module relative to another module
|
|
15
3
|
* @author Teddy Katz
|
|
@@ -17,34 +5,24 @@
|
|
|
17
5
|
|
|
18
6
|
"use strict";
|
|
19
7
|
|
|
20
|
-
const
|
|
8
|
+
const Module = require("node:module");
|
|
21
9
|
|
|
22
|
-
|
|
10
|
+
/*
|
|
11
|
+
* `Module.createRequire` is added in v12.2.0. It supports URL as well.
|
|
12
|
+
* We only support the case where the argument is a filepath, not a URL.
|
|
13
|
+
*/
|
|
14
|
+
const createRequire = Module.createRequire;
|
|
23
15
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
} catch (error) {
|
|
16
|
+
/**
|
|
17
|
+
* Resolves a Node module relative to another module
|
|
18
|
+
* @param {string} moduleName The name of a Node module, or a path to a Node module.
|
|
19
|
+
* @param {string} relativeToPath An absolute path indicating the module that `moduleName` should be resolved relative to. This must be
|
|
20
|
+
* a file rather than a directory, but the file need not actually exist.
|
|
21
|
+
* @returns {string} The absolute path that would result from calling `require.resolve(moduleName)` in a file located at `relativeToPath`
|
|
22
|
+
* @throws {Error} When the module cannot be resolved.
|
|
23
|
+
*/
|
|
24
|
+
function resolve(moduleName, relativeToPath) {
|
|
25
|
+
return createRequire(relativeToPath).resolve(moduleName);
|
|
26
|
+
}
|
|
36
27
|
|
|
37
|
-
|
|
38
|
-
if (
|
|
39
|
-
typeof error === "object" &&
|
|
40
|
-
error !== null &&
|
|
41
|
-
error.code === "MODULE_NOT_FOUND" &&
|
|
42
|
-
!error.requireStack &&
|
|
43
|
-
error.message.includes(moduleName)
|
|
44
|
-
) {
|
|
45
|
-
error.message += `\nRequire stack:\n- ${relativeToPath}`;
|
|
46
|
-
}
|
|
47
|
-
throw error;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
};
|
|
28
|
+
exports.resolve = resolve;
|