eslint 9.22.0 → 9.24.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 +48 -46
- 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 +830 -810
- 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 +638 -457
- package/lib/config/config-loader.js +726 -622
- 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 +72 -72
- 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 +756 -681
- package/lib/eslint/eslint.js +934 -912
- package/lib/eslint/index.js +2 -2
- package/lib/eslint/legacy-eslint.js +577 -533
- 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 +2403 -2045
- 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 +36 -36
- 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 +404 -361
- package/lib/rule-tester/index.js +1 -1
- package/lib/rule-tester/rule-tester.js +1308 -1046
- package/lib/rules/accessor-pairs.js +298 -263
- package/lib/rules/array-bracket-newline.js +250 -238
- package/lib/rules/array-bracket-spacing.js +263 -224
- package/lib/rules/array-callback-return.js +402 -356
- package/lib/rules/array-element-newline.js +358 -313
- package/lib/rules/arrow-body-style.js +400 -281
- package/lib/rules/arrow-parens.js +206 -173
- package/lib/rules/arrow-spacing.js +169 -163
- package/lib/rules/block-scoped-var.js +125 -123
- package/lib/rules/block-spacing.js +186 -176
- package/lib/rules/brace-style.js +262 -199
- package/lib/rules/callback-return.js +203 -190
- package/lib/rules/camelcase.js +403 -392
- package/lib/rules/capitalized-comments.js +253 -232
- package/lib/rules/class-methods-use-this.js +224 -172
- package/lib/rules/comma-dangle.js +379 -346
- package/lib/rules/comma-spacing.js +193 -195
- package/lib/rules/comma-style.js +375 -316
- package/lib/rules/complexity.js +173 -169
- package/lib/rules/computed-property-spacing.js +236 -211
- package/lib/rules/consistent-return.js +181 -170
- package/lib/rules/consistent-this.js +167 -147
- package/lib/rules/constructor-super.js +412 -404
- package/lib/rules/curly.js +407 -332
- package/lib/rules/default-case-last.js +38 -31
- package/lib/rules/default-case.js +89 -85
- package/lib/rules/default-param-last.js +69 -54
- package/lib/rules/dot-location.js +122 -110
- package/lib/rules/dot-notation.js +192 -156
- package/lib/rules/eol-last.js +122 -120
- package/lib/rules/eqeqeq.js +168 -155
- package/lib/rules/for-direction.js +146 -121
- package/lib/rules/func-call-spacing.js +261 -231
- package/lib/rules/func-name-matching.js +293 -209
- package/lib/rules/func-names.js +165 -164
- package/lib/rules/func-style.js +159 -127
- package/lib/rules/function-call-argument-newline.js +152 -129
- package/lib/rules/function-paren-newline.js +349 -291
- package/lib/rules/generator-star-spacing.js +229 -210
- package/lib/rules/getter-return.js +208 -172
- package/lib/rules/global-require.js +85 -74
- package/lib/rules/grouped-accessor-pairs.js +170 -150
- package/lib/rules/guard-for-in.js +72 -63
- package/lib/rules/handle-callback-err.js +108 -103
- package/lib/rules/id-blacklist.js +182 -199
- package/lib/rules/id-denylist.js +168 -187
- package/lib/rules/id-length.js +197 -171
- package/lib/rules/id-match.js +344 -289
- package/lib/rules/implicit-arrow-linebreak.js +102 -79
- package/lib/rules/indent-legacy.js +1344 -1118
- package/lib/rules/indent.js +2272 -1759
- package/lib/rules/index.js +317 -292
- package/lib/rules/init-declarations.js +137 -107
- package/lib/rules/jsx-quotes.js +94 -82
- package/lib/rules/key-spacing.js +750 -633
- package/lib/rules/keyword-spacing.js +648 -605
- package/lib/rules/line-comment-position.js +142 -128
- package/lib/rules/linebreak-style.js +107 -106
- package/lib/rules/lines-around-comment.js +540 -448
- package/lib/rules/lines-around-directive.js +233 -203
- package/lib/rules/lines-between-class-members.js +305 -234
- package/lib/rules/logical-assignment-operators.js +582 -399
- 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 -434
- 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 +78 -76
- package/lib/rules/max-statements-per-line.js +205 -198
- package/lib/rules/max-statements.js +168 -164
- package/lib/rules/multiline-comment-style.js +637 -479
- package/lib/rules/multiline-ternary.js +241 -176
- package/lib/rules/new-cap.js +233 -213
- package/lib/rules/new-parens.js +88 -79
- package/lib/rules/newline-after-var.js +287 -250
- package/lib/rules/newline-before-return.js +229 -222
- package/lib/rules/newline-per-chained-call.js +142 -127
- package/lib/rules/no-alert.js +90 -79
- package/lib/rules/no-array-constructor.js +125 -113
- package/lib/rules/no-async-promise-executor.js +30 -24
- package/lib/rules/no-await-in-loop.js +69 -71
- package/lib/rules/no-bitwise.js +124 -100
- package/lib/rules/no-buffer-constructor.js +55 -47
- package/lib/rules/no-caller.js +39 -33
- package/lib/rules/no-case-declarations.js +61 -57
- package/lib/rules/no-catch-shadow.js +76 -73
- 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 -81
- package/lib/rules/no-console.js +202 -199
- package/lib/rules/no-const-assign.js +47 -41
- package/lib/rules/no-constant-binary-expression.js +500 -405
- package/lib/rules/no-constant-condition.js +158 -143
- package/lib/rules/no-constructor-return.js +49 -49
- package/lib/rules/no-continue.js +25 -27
- 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 -41
- package/lib/rules/no-dupe-args.js +68 -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 +179 -176
- 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 +127 -128
- package/lib/rules/no-empty-pattern.js +63 -58
- package/lib/rules/no-empty-static-block.js +37 -35
- package/lib/rules/no-empty.js +98 -86
- package/lib/rules/no-eq-null.js +37 -32
- package/lib/rules/no-eval.js +256 -250
- package/lib/rules/no-ex-assign.js +42 -39
- package/lib/rules/no-extend-native.js +161 -159
- package/lib/rules/no-extra-bind.js +201 -190
- package/lib/rules/no-extra-boolean-cast.js +398 -348
- package/lib/rules/no-extra-label.js +150 -131
- package/lib/rules/no-extra-parens.js +1654 -1325
- package/lib/rules/no-extra-semi.js +146 -144
- package/lib/rules/no-fallthrough.js +199 -157
- package/lib/rules/no-floating-decimal.js +74 -66
- package/lib/rules/no-func-assign.js +54 -55
- package/lib/rules/no-global-assign.js +78 -73
- package/lib/rules/no-implicit-coercion.js +349 -293
- package/lib/rules/no-implicit-globals.js +158 -135
- package/lib/rules/no-implied-eval.js +140 -112
- package/lib/rules/no-import-assign.js +145 -159
- package/lib/rules/no-inline-comments.js +101 -95
- package/lib/rules/no-inner-declarations.js +115 -101
- package/lib/rules/no-invalid-regexp.js +222 -190
- package/lib/rules/no-invalid-this.js +123 -117
- package/lib/rules/no-irregular-whitespace.js +266 -252
- package/lib/rules/no-iterator.js +29 -33
- package/lib/rules/no-label-var.js +59 -62
- package/lib/rules/no-labels.js +138 -133
- package/lib/rules/no-lone-blocks.js +127 -123
- package/lib/rules/no-lonely-if.js +108 -77
- package/lib/rules/no-loop-func.js +238 -213
- package/lib/rules/no-loss-of-precision.js +218 -201
- package/lib/rules/no-magic-numbers.js +246 -218
- package/lib/rules/no-misleading-character-class.js +499 -446
- package/lib/rules/no-mixed-operators.js +188 -182
- package/lib/rules/no-mixed-requires.js +253 -240
- package/lib/rules/no-mixed-spaces-and-tabs.js +134 -121
- package/lib/rules/no-multi-assign.js +46 -44
- package/lib/rules/no-multi-spaces.js +163 -143
- package/lib/rules/no-multi-str.js +42 -41
- package/lib/rules/no-multiple-empty-lines.js +196 -158
- package/lib/rules/no-native-reassign.js +90 -85
- package/lib/rules/no-negated-condition.js +79 -75
- package/lib/rules/no-negated-in-lhs.js +45 -43
- package/lib/rules/no-nested-ternary.js +33 -32
- 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 -48
- package/lib/rules/no-new-require.js +48 -47
- package/lib/rules/no-new-symbol.js +52 -50
- 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 +141 -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 +32 -32
- package/lib/rules/no-param-reassign.js +235 -217
- package/lib/rules/no-path-concat.js +66 -67
- package/lib/rules/no-plusplus.js +60 -61
- package/lib/rules/no-process-env.js +49 -48
- package/lib/rules/no-process-exit.js +54 -50
- package/lib/rules/no-promise-executor-return.js +214 -182
- package/lib/rules/no-proto.js +26 -29
- package/lib/rules/no-prototype-builtins.js +146 -124
- package/lib/rules/no-redeclare.js +154 -152
- package/lib/rules/no-regex-spaces.js +183 -161
- package/lib/rules/no-restricted-exports.js +208 -185
- package/lib/rules/no-restricted-globals.js +111 -112
- package/lib/rules/no-restricted-imports.js +657 -537
- package/lib/rules/no-restricted-modules.js +222 -202
- package/lib/rules/no-restricted-properties.js +181 -153
- package/lib/rules/no-restricted-syntax.js +56 -52
- package/lib/rules/no-return-assign.js +55 -50
- package/lib/rules/no-return-await.js +148 -124
- package/lib/rules/no-script-url.js +52 -45
- package/lib/rules/no-self-assign.js +148 -146
- package/lib/rules/no-self-compare.js +63 -46
- package/lib/rules/no-sequences.js +135 -116
- package/lib/rules/no-setter-return.js +185 -152
- package/lib/rules/no-shadow-restricted-names.js +61 -46
- package/lib/rules/no-shadow.js +342 -316
- package/lib/rules/no-spaced-func.js +82 -77
- package/lib/rules/no-sparse-arrays.js +54 -59
- package/lib/rules/no-sync.js +61 -60
- package/lib/rules/no-tabs.js +83 -72
- package/lib/rules/no-template-curly-in-string.js +33 -32
- package/lib/rules/no-ternary.js +25 -29
- package/lib/rules/no-this-before-super.js +321 -319
- package/lib/rules/no-throw-literal.js +31 -36
- package/lib/rules/no-trailing-spaces.js +199 -191
- package/lib/rules/no-undef-init.js +76 -61
- package/lib/rules/no-undef.js +51 -48
- package/lib/rules/no-undefined.js +73 -75
- package/lib/rules/no-underscore-dangle.js +370 -327
- 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 -147
- package/lib/rules/no-unreachable-loop.js +145 -142
- 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 -83
- package/lib/rules/no-unsafe-optional-chaining.js +192 -178
- package/lib/rules/no-unused-expressions.js +178 -162
- 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 +1669 -1449
- package/lib/rules/no-use-before-define.js +229 -231
- package/lib/rules/no-useless-assignment.js +590 -511
- package/lib/rules/no-useless-backreference.js +212 -193
- 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 -115
- package/lib/rules/no-useless-concat.js +65 -60
- package/lib/rules/no-useless-constructor.js +158 -111
- package/lib/rules/no-useless-escape.js +342 -291
- package/lib/rules/no-useless-rename.js +183 -156
- package/lib/rules/no-useless-return.js +344 -312
- package/lib/rules/no-var.js +233 -212
- package/lib/rules/no-void.js +50 -48
- package/lib/rules/no-warning-comments.js +191 -186
- package/lib/rules/no-whitespace-before-property.js +131 -115
- package/lib/rules/no-with.js +24 -26
- package/lib/rules/nonblock-statement-body-position.js +149 -130
- package/lib/rules/object-curly-newline.js +306 -265
- package/lib/rules/object-curly-spacing.js +360 -314
- package/lib/rules/object-property-newline.js +137 -106
- package/lib/rules/object-shorthand.js +607 -502
- package/lib/rules/one-var-declaration-per-line.js +104 -100
- package/lib/rules/one-var.js +653 -537
- package/lib/rules/operator-assignment.js +219 -161
- package/lib/rules/operator-linebreak.js +295 -251
- package/lib/rules/padded-blocks.js +346 -308
- package/lib/rules/padding-line-between-statements.js +443 -439
- package/lib/rules/prefer-arrow-callback.js +362 -313
- package/lib/rules/prefer-const.js +418 -377
- package/lib/rules/prefer-destructuring.js +301 -279
- package/lib/rules/prefer-exponentiation-operator.js +176 -133
- package/lib/rules/prefer-named-capture-group.js +153 -140
- package/lib/rules/prefer-numeric-literals.js +121 -113
- package/lib/rules/prefer-object-has-own.js +116 -82
- package/lib/rules/prefer-object-spread.js +213 -193
- package/lib/rules/prefer-promise-reject-errors.js +140 -122
- package/lib/rules/prefer-reflect.js +127 -107
- package/lib/rules/prefer-regex-literals.js +578 -466
- package/lib/rules/prefer-rest-params.js +79 -80
- package/lib/rules/prefer-spread.js +47 -44
- package/lib/rules/prefer-template.js +266 -195
- package/lib/rules/quote-props.js +373 -307
- package/lib/rules/quotes.js +374 -326
- package/lib/rules/radix.js +152 -136
- package/lib/rules/require-atomic-updates.js +316 -285
- package/lib/rules/require-await.js +144 -116
- package/lib/rules/require-unicode-regexp.js +282 -177
- package/lib/rules/require-yield.js +53 -54
- package/lib/rules/rest-spread-spacing.js +128 -116
- package/lib/rules/semi-spacing.js +281 -250
- package/lib/rules/semi-style.js +176 -134
- package/lib/rules/semi.js +456 -436
- package/lib/rules/sort-imports.js +306 -233
- package/lib/rules/sort-keys.js +219 -188
- package/lib/rules/sort-vars.js +127 -93
- package/lib/rules/space-before-blocks.js +199 -189
- package/lib/rules/space-before-function-paren.js +186 -166
- package/lib/rules/space-in-parens.js +359 -288
- package/lib/rules/space-infix-ops.js +237 -201
- package/lib/rules/space-unary-ops.js +356 -298
- package/lib/rules/spaced-comment.js +363 -319
- package/lib/rules/strict.js +265 -230
- package/lib/rules/switch-colon-spacing.js +130 -122
- package/lib/rules/symbol-description.js +45 -48
- package/lib/rules/template-curly-spacing.js +148 -142
- package/lib/rules/template-tag-spacing.js +98 -88
- package/lib/rules/unicode-bom.js +54 -56
- package/lib/rules/use-isnan.js +237 -206
- 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 +153 -111
- package/lib/rules/vars-on-top.js +152 -145
- package/lib/rules/wrap-iife.js +204 -191
- package/lib/rules/wrap-regex.js +70 -58
- package/lib/rules/yield-star-spacing.js +145 -134
- package/lib/rules/yoda.js +283 -272
- package/lib/services/parser-service.js +35 -35
- package/lib/services/processor-service.js +66 -73
- package/lib/services/suppressions-service.js +289 -0
- 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 +50 -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/shared/types.js +4 -27
- 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 +14 -20
package/lib/shared/flags.js
CHANGED
@@ -26,8 +26,15 @@
|
|
26
26
|
* @type {Map<string, string>}
|
27
27
|
*/
|
28
28
|
const activeFlags = new Map([
|
29
|
-
|
30
|
-
|
29
|
+
["test_only", "Used only for testing."],
|
30
|
+
[
|
31
|
+
"unstable_config_lookup_from_file",
|
32
|
+
"Look up `eslint.config.js` from the file being linted.",
|
33
|
+
],
|
34
|
+
[
|
35
|
+
"unstable_native_nodejs_ts_config",
|
36
|
+
"Use native Node.js to load TypeScript configuration.",
|
37
|
+
],
|
31
38
|
]);
|
32
39
|
|
33
40
|
/**
|
@@ -35,10 +42,36 @@ const activeFlags = new Map([
|
|
35
42
|
* @type {Map<string, InactiveFlagData>}
|
36
43
|
*/
|
37
44
|
const inactiveFlags = new Map([
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
45
|
+
[
|
46
|
+
"test_only_replaced",
|
47
|
+
{
|
48
|
+
description:
|
49
|
+
"Used only for testing flags that have been replaced by other flags.",
|
50
|
+
replacedBy: "test_only",
|
51
|
+
},
|
52
|
+
],
|
53
|
+
[
|
54
|
+
"test_only_enabled_by_default",
|
55
|
+
{
|
56
|
+
description:
|
57
|
+
"Used only for testing flags whose features have been enabled by default.",
|
58
|
+
replacedBy: null,
|
59
|
+
},
|
60
|
+
],
|
61
|
+
[
|
62
|
+
"test_only_abandoned",
|
63
|
+
{
|
64
|
+
description:
|
65
|
+
"Used only for testing flags whose features have been abandoned.",
|
66
|
+
},
|
67
|
+
],
|
68
|
+
[
|
69
|
+
"unstable_ts_config",
|
70
|
+
{
|
71
|
+
description: "Enable TypeScript configuration files.",
|
72
|
+
replacedBy: null,
|
73
|
+
},
|
74
|
+
],
|
42
75
|
]);
|
43
76
|
|
44
77
|
/**
|
@@ -47,20 +80,20 @@ const inactiveFlags = new Map([
|
|
47
80
|
* @returns {string} Message describing the reason the flag is inactive.
|
48
81
|
*/
|
49
82
|
function getInactivityReasonMessage({ replacedBy }) {
|
50
|
-
|
51
|
-
|
52
|
-
|
83
|
+
if (typeof replacedBy === "undefined") {
|
84
|
+
return "This feature has been abandoned.";
|
85
|
+
}
|
53
86
|
|
54
|
-
|
55
|
-
|
56
|
-
|
87
|
+
if (typeof replacedBy === "string") {
|
88
|
+
return `This flag has been renamed '${replacedBy}' to reflect its stabilization. Please use '${replacedBy}' instead.`;
|
89
|
+
}
|
57
90
|
|
58
|
-
|
59
|
-
|
91
|
+
// null
|
92
|
+
return "This feature is now enabled by default.";
|
60
93
|
}
|
61
94
|
|
62
95
|
module.exports = {
|
63
|
-
|
64
|
-
|
65
|
-
|
96
|
+
activeFlags,
|
97
|
+
inactiveFlags,
|
98
|
+
getInactivityReasonMessage,
|
66
99
|
};
|
package/lib/shared/logging.js
CHANGED
@@ -9,31 +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
|
-
/**
|
32
|
-
* Cover for console.error
|
33
|
-
* @param {...any} args The elements to log.
|
34
|
-
* @returns {void}
|
35
|
-
*/
|
36
|
-
error(...args) {
|
37
|
-
console.error(...args);
|
38
|
-
}
|
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
|
+
},
|
39
38
|
};
|
@@ -14,43 +14,50 @@
|
|
14
14
|
* @returns {boolean} Whether input includes an explicit difference.
|
15
15
|
*/
|
16
16
|
function containsDifferentProperty(input, original) {
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
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;
|
52
59
|
}
|
53
60
|
|
54
61
|
module.exports = {
|
55
|
-
|
62
|
+
containsDifferentProperty,
|
56
63
|
};
|
@@ -24,129 +24,138 @@ const packageJson = require("../../package.json");
|
|
24
24
|
* @returns {string} A string that contains execution environment information.
|
25
25
|
*/
|
26
26
|
function environment() {
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
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
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
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
|
-
|
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
|
-
|
27
|
+
const cache = new Map();
|
28
|
+
|
29
|
+
/**
|
30
|
+
* Checks if a path is a child of a directory.
|
31
|
+
* @param {string} parentPath The parent path to check.
|
32
|
+
* @param {string} childPath The path to check.
|
33
|
+
* @returns {boolean} Whether or not the given path is a child of a directory.
|
34
|
+
*/
|
35
|
+
function isChildOfDirectory(parentPath, childPath) {
|
36
|
+
return !path.relative(parentPath, childPath).startsWith("..");
|
37
|
+
}
|
38
|
+
|
39
|
+
/**
|
40
|
+
* Synchronously executes a shell command and formats the result.
|
41
|
+
* @param {string} cmd The command to execute.
|
42
|
+
* @param {Array} args The arguments to be executed with the command.
|
43
|
+
* @throws {Error} As may be collected by `cross-spawn.sync`.
|
44
|
+
* @returns {string} The version returned by the command.
|
45
|
+
*/
|
46
|
+
function execCommand(cmd, args) {
|
47
|
+
const key = [cmd, ...args].join(" ");
|
48
|
+
|
49
|
+
if (cache.has(key)) {
|
50
|
+
return cache.get(key);
|
51
|
+
}
|
52
|
+
|
53
|
+
const process = spawn.sync(cmd, args, { encoding: "utf8" });
|
54
|
+
|
55
|
+
if (process.error) {
|
56
|
+
throw process.error;
|
57
|
+
}
|
58
|
+
|
59
|
+
const result = process.stdout.trim();
|
60
|
+
|
61
|
+
cache.set(key, result);
|
62
|
+
return result;
|
63
|
+
}
|
64
|
+
|
65
|
+
/**
|
66
|
+
* Normalizes a version number.
|
67
|
+
* @param {string} versionStr The string to normalize.
|
68
|
+
* @returns {string} The normalized version number.
|
69
|
+
*/
|
70
|
+
function normalizeVersionStr(versionStr) {
|
71
|
+
return versionStr.startsWith("v") ? versionStr : `v${versionStr}`;
|
72
|
+
}
|
73
|
+
|
74
|
+
/**
|
75
|
+
* Gets bin version.
|
76
|
+
* @param {string} bin The bin to check.
|
77
|
+
* @throws {Error} As may be collected by `cross-spawn.sync`.
|
78
|
+
* @returns {string} The normalized version returned by the command.
|
79
|
+
*/
|
80
|
+
function getBinVersion(bin) {
|
81
|
+
const binArgs = ["--version"];
|
82
|
+
|
83
|
+
try {
|
84
|
+
return normalizeVersionStr(execCommand(bin, binArgs));
|
85
|
+
} catch (e) {
|
86
|
+
log.error(
|
87
|
+
`Error finding ${bin} version running the command \`${bin} ${binArgs.join(" ")}\``,
|
88
|
+
);
|
89
|
+
throw e;
|
90
|
+
}
|
91
|
+
}
|
92
|
+
|
93
|
+
/**
|
94
|
+
* Gets installed npm package version.
|
95
|
+
* @param {string} pkg The package to check.
|
96
|
+
* @param {boolean} global Whether to check globally or not.
|
97
|
+
* @throws {Error} As may be collected by `cross-spawn.sync`.
|
98
|
+
* @returns {string} The normalized version returned by the command.
|
99
|
+
*/
|
100
|
+
function getNpmPackageVersion(pkg, { global = false } = {}) {
|
101
|
+
const npmBinArgs = ["bin", "-g"];
|
102
|
+
const npmLsArgs = ["ls", "--depth=0", "--json", pkg];
|
103
|
+
|
104
|
+
if (global) {
|
105
|
+
npmLsArgs.push("-g");
|
106
|
+
}
|
107
|
+
|
108
|
+
try {
|
109
|
+
const parsedStdout = JSON.parse(execCommand("npm", npmLsArgs));
|
110
|
+
|
111
|
+
/*
|
112
|
+
* Checking globally returns an empty JSON object, while local checks
|
113
|
+
* include the name and version of the local project.
|
114
|
+
*/
|
115
|
+
if (
|
116
|
+
Object.keys(parsedStdout).length === 0 ||
|
117
|
+
!(parsedStdout.dependencies && parsedStdout.dependencies.eslint)
|
118
|
+
) {
|
119
|
+
return "Not found";
|
120
|
+
}
|
121
|
+
|
122
|
+
const [, processBinPath] = process.argv;
|
123
|
+
let npmBinPath;
|
124
|
+
|
125
|
+
try {
|
126
|
+
npmBinPath = execCommand("npm", npmBinArgs);
|
127
|
+
} catch (e) {
|
128
|
+
log.error(
|
129
|
+
`Error finding npm binary path when running command \`npm ${npmBinArgs.join(" ")}\``,
|
130
|
+
);
|
131
|
+
throw e;
|
132
|
+
}
|
133
|
+
|
134
|
+
const isGlobal = isChildOfDirectory(npmBinPath, processBinPath);
|
135
|
+
let pkgVersion = parsedStdout.dependencies.eslint.version;
|
136
|
+
|
137
|
+
if ((global && isGlobal) || (!global && !isGlobal)) {
|
138
|
+
pkgVersion += " (Currently used)";
|
139
|
+
}
|
140
|
+
|
141
|
+
return normalizeVersionStr(pkgVersion);
|
142
|
+
} catch (e) {
|
143
|
+
log.error(
|
144
|
+
`Error finding ${pkg} version running the command \`npm ${npmLsArgs.join(" ")}\``,
|
145
|
+
);
|
146
|
+
throw e;
|
147
|
+
}
|
148
|
+
}
|
149
|
+
|
150
|
+
return [
|
151
|
+
"Environment Info:",
|
152
|
+
"",
|
153
|
+
`Node version: ${getBinVersion("node")}`,
|
154
|
+
`npm version: ${getBinVersion("npm")}`,
|
155
|
+
`Local ESLint version: ${getNpmPackageVersion("eslint", { global: false })}`,
|
156
|
+
`Global ESLint version: ${getNpmPackageVersion("eslint", { global: true })}`,
|
157
|
+
`Operating System: ${os.platform()} ${os.release()}`,
|
158
|
+
].join("\n");
|
150
159
|
}
|
151
160
|
|
152
161
|
/**
|
@@ -154,7 +163,7 @@ function environment() {
|
|
154
163
|
* @returns {string} The version from the currently executing ESLint's package.json.
|
155
164
|
*/
|
156
165
|
function version() {
|
157
|
-
|
166
|
+
return `v${packageJson.version}`;
|
158
167
|
}
|
159
168
|
|
160
169
|
//------------------------------------------------------------------------------
|
@@ -162,7 +171,7 @@ function version() {
|
|
162
171
|
//------------------------------------------------------------------------------
|
163
172
|
|
164
173
|
module.exports = {
|
165
|
-
|
166
|
-
|
167
|
-
|
174
|
+
__esModule: true, // Indicate intent for imports, remove ambiguity for Knip (see: https://github.com/eslint/eslint/pull/18005#discussion_r1484422616)
|
175
|
+
environment,
|
176
|
+
version,
|
168
177
|
};
|
@@ -12,14 +12,14 @@
|
|
12
12
|
* @private
|
13
13
|
*/
|
14
14
|
function isSerializablePrimitiveOrPlainObject(val) {
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
15
|
+
return (
|
16
|
+
val === null ||
|
17
|
+
typeof val === "string" ||
|
18
|
+
typeof val === "boolean" ||
|
19
|
+
typeof val === "number" ||
|
20
|
+
(typeof val === "object" && val.constructor === Object) ||
|
21
|
+
Array.isArray(val)
|
22
|
+
);
|
23
23
|
}
|
24
24
|
|
25
25
|
/**
|
@@ -30,26 +30,26 @@ function isSerializablePrimitiveOrPlainObject(val) {
|
|
30
30
|
* @returns {boolean} true if the value is serializable
|
31
31
|
*/
|
32
32
|
function isSerializable(val) {
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
33
|
+
if (!isSerializablePrimitiveOrPlainObject(val)) {
|
34
|
+
return false;
|
35
|
+
}
|
36
|
+
if (typeof val === "object") {
|
37
|
+
for (const property in val) {
|
38
|
+
if (Object.hasOwn(val, property)) {
|
39
|
+
if (!isSerializablePrimitiveOrPlainObject(val[property])) {
|
40
|
+
return false;
|
41
|
+
}
|
42
|
+
if (typeof val[property] === "object") {
|
43
|
+
if (!isSerializable(val[property])) {
|
44
|
+
return false;
|
45
|
+
}
|
46
|
+
}
|
47
|
+
}
|
48
|
+
}
|
49
|
+
}
|
50
|
+
return true;
|
51
51
|
}
|
52
52
|
|
53
53
|
module.exports = {
|
54
|
-
|
54
|
+
isSerializable,
|
55
55
|
};
|
package/lib/shared/severity.js
CHANGED
@@ -12,16 +12,16 @@
|
|
12
12
|
* @returns {string} severity string
|
13
13
|
*/
|
14
14
|
function normalizeSeverityToString(severity) {
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
15
|
+
if ([2, "2", "error"].includes(severity)) {
|
16
|
+
return "error";
|
17
|
+
}
|
18
|
+
if ([1, "1", "warn"].includes(severity)) {
|
19
|
+
return "warn";
|
20
|
+
}
|
21
|
+
if ([0, "0", "off"].includes(severity)) {
|
22
|
+
return "off";
|
23
|
+
}
|
24
|
+
throw new Error(`Invalid severity value: ${severity}`);
|
25
25
|
}
|
26
26
|
|
27
27
|
/**
|
@@ -31,19 +31,19 @@ function normalizeSeverityToString(severity) {
|
|
31
31
|
* @returns {number} severity number
|
32
32
|
*/
|
33
33
|
function normalizeSeverityToNumber(severity) {
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
34
|
+
if ([2, "2", "error"].includes(severity)) {
|
35
|
+
return 2;
|
36
|
+
}
|
37
|
+
if ([1, "1", "warn"].includes(severity)) {
|
38
|
+
return 1;
|
39
|
+
}
|
40
|
+
if ([0, "0", "off"].includes(severity)) {
|
41
|
+
return 0;
|
42
|
+
}
|
43
|
+
throw new Error(`Invalid severity value: ${severity}`);
|
44
44
|
}
|
45
45
|
|
46
46
|
module.exports = {
|
47
|
-
|
48
|
-
|
47
|
+
normalizeSeverityToString,
|
48
|
+
normalizeSeverityToNumber,
|
49
49
|
};
|