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
|
@@ -18,23 +18,22 @@ const DecorativeCursor = require("./decorative-cursor");
|
|
|
18
18
|
* The decorative cursor which limits the number of tokens.
|
|
19
19
|
*/
|
|
20
20
|
module.exports = class LimitCursor extends DecorativeCursor {
|
|
21
|
+
/**
|
|
22
|
+
* Initializes this cursor.
|
|
23
|
+
* @param {Cursor} cursor The cursor to be decorated.
|
|
24
|
+
* @param {number} count The count of tokens this cursor iterates.
|
|
25
|
+
*/
|
|
26
|
+
constructor(cursor, count) {
|
|
27
|
+
super(cursor);
|
|
28
|
+
this.count = count;
|
|
29
|
+
}
|
|
21
30
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/** @inheritdoc */
|
|
33
|
-
moveNext() {
|
|
34
|
-
if (this.count > 0) {
|
|
35
|
-
this.count -= 1;
|
|
36
|
-
return super.moveNext();
|
|
37
|
-
}
|
|
38
|
-
return false;
|
|
39
|
-
}
|
|
31
|
+
/** @inheritdoc */
|
|
32
|
+
moveNext() {
|
|
33
|
+
if (this.count > 0) {
|
|
34
|
+
this.count -= 1;
|
|
35
|
+
return super.moveNext();
|
|
36
|
+
}
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
40
39
|
};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Define the cursor which iterates tokens only, with inflated range.
|
|
3
|
+
* @author Toru Nagashima
|
|
4
|
+
*/
|
|
5
|
+
"use strict";
|
|
6
|
+
|
|
7
|
+
//------------------------------------------------------------------------------
|
|
8
|
+
// Requirements
|
|
9
|
+
//------------------------------------------------------------------------------
|
|
10
|
+
|
|
11
|
+
const ForwardTokenCursor = require("./forward-token-cursor");
|
|
12
|
+
|
|
13
|
+
//------------------------------------------------------------------------------
|
|
14
|
+
// Exports
|
|
15
|
+
//------------------------------------------------------------------------------
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* The cursor which iterates tokens only, with inflated range.
|
|
19
|
+
* This is for the backward compatibility of padding options.
|
|
20
|
+
*/
|
|
21
|
+
module.exports = class PaddedTokenCursor extends ForwardTokenCursor {
|
|
22
|
+
/**
|
|
23
|
+
* Initializes this cursor.
|
|
24
|
+
* @param {Token[]} tokens The array of tokens.
|
|
25
|
+
* @param {Comment[]} comments The array of comments.
|
|
26
|
+
* @param {Object} indexMap The map from locations to indices in `tokens`.
|
|
27
|
+
* @param {number} startLoc The start location of the iteration range.
|
|
28
|
+
* @param {number} endLoc The end location of the iteration range.
|
|
29
|
+
* @param {number} beforeCount The number of tokens this cursor iterates before start.
|
|
30
|
+
* @param {number} afterCount The number of tokens this cursor iterates after end.
|
|
31
|
+
*/
|
|
32
|
+
constructor(
|
|
33
|
+
tokens,
|
|
34
|
+
comments,
|
|
35
|
+
indexMap,
|
|
36
|
+
startLoc,
|
|
37
|
+
endLoc,
|
|
38
|
+
beforeCount,
|
|
39
|
+
afterCount,
|
|
40
|
+
) {
|
|
41
|
+
super(tokens, comments, indexMap, startLoc, endLoc);
|
|
42
|
+
this.index = Math.max(0, this.index - beforeCount);
|
|
43
|
+
this.indexEnd = Math.min(tokens.length - 1, this.indexEnd + afterCount);
|
|
44
|
+
}
|
|
45
|
+
};
|
|
@@ -18,25 +18,24 @@ const DecorativeCursor = require("./decorative-cursor");
|
|
|
18
18
|
* The decorative cursor which ignores the first few tokens.
|
|
19
19
|
*/
|
|
20
20
|
module.exports = class SkipCursor extends DecorativeCursor {
|
|
21
|
+
/**
|
|
22
|
+
* Initializes this cursor.
|
|
23
|
+
* @param {Cursor} cursor The cursor to be decorated.
|
|
24
|
+
* @param {number} count The count of tokens this cursor skips.
|
|
25
|
+
*/
|
|
26
|
+
constructor(cursor, count) {
|
|
27
|
+
super(cursor);
|
|
28
|
+
this.count = count;
|
|
29
|
+
}
|
|
21
30
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
/** @inheritdoc */
|
|
33
|
-
moveNext() {
|
|
34
|
-
while (this.count > 0) {
|
|
35
|
-
this.count -= 1;
|
|
36
|
-
if (!super.moveNext()) {
|
|
37
|
-
return false;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
return super.moveNext();
|
|
41
|
-
}
|
|
31
|
+
/** @inheritdoc */
|
|
32
|
+
moveNext() {
|
|
33
|
+
while (this.count > 0) {
|
|
34
|
+
this.count -= 1;
|
|
35
|
+
if (!super.moveNext()) {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return super.moveNext();
|
|
40
|
+
}
|
|
42
41
|
};
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Define utility functions for token store.
|
|
3
|
+
* @author Toru Nagashima
|
|
4
|
+
*/
|
|
5
|
+
"use strict";
|
|
6
|
+
|
|
7
|
+
//------------------------------------------------------------------------------
|
|
8
|
+
// Exports
|
|
9
|
+
//------------------------------------------------------------------------------
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Finds the index of the first token which is after the given location.
|
|
13
|
+
* If it was not found, this returns `tokens.length`.
|
|
14
|
+
* @param {(Token|Comment)[]} tokens It searches the token in this list.
|
|
15
|
+
* @param {number} location The location to search.
|
|
16
|
+
* @returns {number} The found index or `tokens.length`.
|
|
17
|
+
*/
|
|
18
|
+
exports.search = function search(tokens, location) {
|
|
19
|
+
for (
|
|
20
|
+
let minIndex = 0, maxIndex = tokens.length - 1;
|
|
21
|
+
minIndex <= maxIndex;
|
|
22
|
+
|
|
23
|
+
) {
|
|
24
|
+
/*
|
|
25
|
+
* Calculate the index in the middle between minIndex and maxIndex.
|
|
26
|
+
* `| 0` is used to round a fractional value down to the nearest integer: this is similar to
|
|
27
|
+
* using `Math.trunc()` or `Math.floor()`, but performance tests have shown this method to
|
|
28
|
+
* be faster.
|
|
29
|
+
*/
|
|
30
|
+
const index = ((minIndex + maxIndex) / 2) | 0;
|
|
31
|
+
const token = tokens[index];
|
|
32
|
+
const tokenStartLocation = token.range[0];
|
|
33
|
+
|
|
34
|
+
if (location <= tokenStartLocation) {
|
|
35
|
+
if (index === minIndex) {
|
|
36
|
+
return index;
|
|
37
|
+
}
|
|
38
|
+
maxIndex = index;
|
|
39
|
+
} else {
|
|
40
|
+
minIndex = index + 1;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return tokens.length;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Gets the index of the `startLoc` in `tokens`.
|
|
48
|
+
* `startLoc` can be the value of `node.range[1]`, so this checks about `startLoc - 1` as well.
|
|
49
|
+
* @param {(Token|Comment)[]} tokens The tokens to find an index.
|
|
50
|
+
* @param {Object} indexMap The map from locations to indices.
|
|
51
|
+
* @param {number} startLoc The location to get an index.
|
|
52
|
+
* @returns {number} The index.
|
|
53
|
+
*/
|
|
54
|
+
exports.getFirstIndex = function getFirstIndex(tokens, indexMap, startLoc) {
|
|
55
|
+
if (startLoc in indexMap) {
|
|
56
|
+
return indexMap[startLoc];
|
|
57
|
+
}
|
|
58
|
+
if (startLoc - 1 in indexMap) {
|
|
59
|
+
const index = indexMap[startLoc - 1];
|
|
60
|
+
const token = tokens[index];
|
|
61
|
+
|
|
62
|
+
// If the mapped index is out of bounds, the returned cursor index will point after the end of the tokens array.
|
|
63
|
+
if (!token) {
|
|
64
|
+
return tokens.length;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/*
|
|
68
|
+
* For the map of "comment's location -> token's index", it points the next token of a comment.
|
|
69
|
+
* In that case, +1 is unnecessary.
|
|
70
|
+
*/
|
|
71
|
+
if (token.range[0] >= startLoc) {
|
|
72
|
+
return index;
|
|
73
|
+
}
|
|
74
|
+
return index + 1;
|
|
75
|
+
}
|
|
76
|
+
return 0;
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Gets the index of the `endLoc` in `tokens`.
|
|
81
|
+
* The information of end locations are recorded at `endLoc - 1` in `indexMap`, so this checks about `endLoc - 1` as well.
|
|
82
|
+
* @param {(Token|Comment)[]} tokens The tokens to find an index.
|
|
83
|
+
* @param {Object} indexMap The map from locations to indices.
|
|
84
|
+
* @param {number} endLoc The location to get an index.
|
|
85
|
+
* @returns {number} The index.
|
|
86
|
+
*/
|
|
87
|
+
exports.getLastIndex = function getLastIndex(tokens, indexMap, endLoc) {
|
|
88
|
+
if (endLoc in indexMap) {
|
|
89
|
+
return indexMap[endLoc] - 1;
|
|
90
|
+
}
|
|
91
|
+
if (endLoc - 1 in indexMap) {
|
|
92
|
+
const index = indexMap[endLoc - 1];
|
|
93
|
+
const token = tokens[index];
|
|
94
|
+
|
|
95
|
+
// If the mapped index is out of bounds, the returned cursor index will point before the end of the tokens array.
|
|
96
|
+
if (!token) {
|
|
97
|
+
return tokens.length - 1;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/*
|
|
101
|
+
* For the map of "comment's location -> token's index", it points the next token of a comment.
|
|
102
|
+
* In that case, -1 is necessary.
|
|
103
|
+
*/
|
|
104
|
+
if (token.range[1] > endLoc) {
|
|
105
|
+
return index - 1;
|
|
106
|
+
}
|
|
107
|
+
return index;
|
|
108
|
+
}
|
|
109
|
+
return tokens.length - 1;
|
|
110
|
+
};
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview The schema to validate language options
|
|
3
|
+
* @author Nicholas C. Zakas
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
//-----------------------------------------------------------------------------
|
|
9
|
+
// Data
|
|
10
|
+
//-----------------------------------------------------------------------------
|
|
11
|
+
|
|
12
|
+
const globalVariablesValues = new Set([
|
|
13
|
+
true,
|
|
14
|
+
"true",
|
|
15
|
+
"writable",
|
|
16
|
+
"writeable",
|
|
17
|
+
false,
|
|
18
|
+
"false",
|
|
19
|
+
"readonly",
|
|
20
|
+
"readable",
|
|
21
|
+
null,
|
|
22
|
+
"off",
|
|
23
|
+
]);
|
|
24
|
+
|
|
25
|
+
//------------------------------------------------------------------------------
|
|
26
|
+
// Helpers
|
|
27
|
+
//------------------------------------------------------------------------------
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Check if a value is a non-null object.
|
|
31
|
+
* @param {any} value The value to check.
|
|
32
|
+
* @returns {boolean} `true` if the value is a non-null object.
|
|
33
|
+
*/
|
|
34
|
+
function isNonNullObject(value) {
|
|
35
|
+
return typeof value === "object" && value !== null;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Check if a value is a non-null non-array object.
|
|
40
|
+
* @param {any} value The value to check.
|
|
41
|
+
* @returns {boolean} `true` if the value is a non-null non-array object.
|
|
42
|
+
*/
|
|
43
|
+
function isNonArrayObject(value) {
|
|
44
|
+
return isNonNullObject(value) && !Array.isArray(value);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Check if a value is undefined.
|
|
49
|
+
* @param {any} value The value to check.
|
|
50
|
+
* @returns {boolean} `true` if the value is undefined.
|
|
51
|
+
*/
|
|
52
|
+
function isUndefined(value) {
|
|
53
|
+
return typeof value === "undefined";
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
//-----------------------------------------------------------------------------
|
|
57
|
+
// Schemas
|
|
58
|
+
//-----------------------------------------------------------------------------
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Validates the ecmaVersion property.
|
|
62
|
+
* @param {string|number} ecmaVersion The value to check.
|
|
63
|
+
* @returns {void}
|
|
64
|
+
* @throws {TypeError} If the value is invalid.
|
|
65
|
+
*/
|
|
66
|
+
function validateEcmaVersion(ecmaVersion) {
|
|
67
|
+
if (isUndefined(ecmaVersion)) {
|
|
68
|
+
throw new TypeError(
|
|
69
|
+
'Key "ecmaVersion": Expected an "ecmaVersion" property.',
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (typeof ecmaVersion !== "number" && ecmaVersion !== "latest") {
|
|
74
|
+
throw new TypeError(
|
|
75
|
+
'Key "ecmaVersion": Expected a number or "latest".',
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Validates the sourceType property.
|
|
82
|
+
* @param {string} sourceType The value to check.
|
|
83
|
+
* @returns {void}
|
|
84
|
+
* @throws {TypeError} If the value is invalid.
|
|
85
|
+
*/
|
|
86
|
+
function validateSourceType(sourceType) {
|
|
87
|
+
if (
|
|
88
|
+
typeof sourceType !== "string" ||
|
|
89
|
+
!/^(?:script|module|commonjs)$/u.test(sourceType)
|
|
90
|
+
) {
|
|
91
|
+
throw new TypeError(
|
|
92
|
+
'Key "sourceType": Expected "script", "module", or "commonjs".',
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Validates the globals property.
|
|
99
|
+
* @param {Object} globals The value to check.
|
|
100
|
+
* @returns {void}
|
|
101
|
+
* @throws {TypeError} If the value is invalid.
|
|
102
|
+
*/
|
|
103
|
+
function validateGlobals(globals) {
|
|
104
|
+
if (!isNonArrayObject(globals)) {
|
|
105
|
+
throw new TypeError('Key "globals": Expected an object.');
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
for (const key of Object.keys(globals)) {
|
|
109
|
+
// avoid hairy edge case
|
|
110
|
+
if (key === "__proto__") {
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
if (key !== key.trim()) {
|
|
115
|
+
throw new TypeError(
|
|
116
|
+
`Key "globals": Global "${key}" has leading or trailing whitespace.`,
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
if (!globalVariablesValues.has(globals[key])) {
|
|
121
|
+
throw new TypeError(
|
|
122
|
+
`Key "globals": Key "${key}": Expected "readonly", "writable", or "off".`,
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Validates the parser property.
|
|
130
|
+
* @param {Object} parser The value to check.
|
|
131
|
+
* @returns {void}
|
|
132
|
+
* @throws {TypeError} If the value is invalid.
|
|
133
|
+
*/
|
|
134
|
+
function validateParser(parser) {
|
|
135
|
+
if (
|
|
136
|
+
!parser ||
|
|
137
|
+
typeof parser !== "object" ||
|
|
138
|
+
(typeof parser.parse !== "function" &&
|
|
139
|
+
typeof parser.parseForESLint !== "function")
|
|
140
|
+
) {
|
|
141
|
+
throw new TypeError(
|
|
142
|
+
'Key "parser": Expected object with parse() or parseForESLint() method.',
|
|
143
|
+
);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Validates the language options.
|
|
149
|
+
* @param {Object} languageOptions The language options to validate.
|
|
150
|
+
* @returns {void}
|
|
151
|
+
* @throws {TypeError} If the language options are invalid.
|
|
152
|
+
*/
|
|
153
|
+
function validateLanguageOptions(languageOptions) {
|
|
154
|
+
if (!isNonArrayObject(languageOptions)) {
|
|
155
|
+
throw new TypeError("Expected an object.");
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
const {
|
|
159
|
+
ecmaVersion,
|
|
160
|
+
sourceType,
|
|
161
|
+
globals,
|
|
162
|
+
parser,
|
|
163
|
+
parserOptions,
|
|
164
|
+
...otherOptions
|
|
165
|
+
} = languageOptions;
|
|
166
|
+
|
|
167
|
+
if ("ecmaVersion" in languageOptions) {
|
|
168
|
+
validateEcmaVersion(ecmaVersion);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
if ("sourceType" in languageOptions) {
|
|
172
|
+
validateSourceType(sourceType);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
if ("globals" in languageOptions) {
|
|
176
|
+
validateGlobals(globals);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
if ("parser" in languageOptions) {
|
|
180
|
+
validateParser(parser);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
if ("parserOptions" in languageOptions) {
|
|
184
|
+
if (!isNonArrayObject(parserOptions)) {
|
|
185
|
+
throw new TypeError('Key "parserOptions": Expected an object.');
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
const otherOptionKeys = Object.keys(otherOptions);
|
|
190
|
+
|
|
191
|
+
if (otherOptionKeys.length > 0) {
|
|
192
|
+
throw new TypeError(`Unexpected key "${otherOptionKeys[0]}" found.`);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
module.exports = { validateLanguageOptions };
|