eslint 9.22.0 → 9.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +47 -45
- package/bin/eslint.js +92 -90
- package/conf/default-cli-options.js +22 -22
- package/conf/ecma-version.js +1 -1
- package/conf/globals.js +97 -98
- package/conf/replacements.json +24 -20
- package/conf/rule-type-list.json +88 -92
- package/lib/api.js +12 -12
- package/lib/cli-engine/cli-engine.js +828 -808
- package/lib/cli-engine/file-enumerator.js +381 -387
- package/lib/cli-engine/formatters/formatters-meta.json +16 -16
- package/lib/cli-engine/formatters/html.js +107 -99
- package/lib/cli-engine/formatters/json-with-metadata.js +5 -5
- package/lib/cli-engine/formatters/json.js +2 -2
- package/lib/cli-engine/formatters/stylish.js +96 -75
- package/lib/cli-engine/hash.js +1 -1
- package/lib/cli-engine/index.js +1 -1
- package/lib/cli-engine/lint-result-cache.js +144 -145
- package/lib/cli-engine/load-rules.js +16 -16
- package/lib/cli.js +541 -457
- package/lib/config/config-loader.js +648 -618
- package/lib/config/config.js +247 -221
- package/lib/config/default-config.js +54 -45
- package/lib/config/flat-config-array.js +167 -172
- package/lib/config/flat-config-helpers.js +65 -68
- package/lib/config/flat-config-schema.js +375 -368
- package/lib/config/rule-validator.js +139 -144
- package/lib/config-api.js +2 -2
- package/lib/eslint/eslint-helpers.js +709 -679
- package/lib/eslint/eslint.js +944 -886
- package/lib/eslint/index.js +2 -2
- package/lib/eslint/legacy-eslint.js +576 -532
- package/lib/languages/js/index.js +263 -264
- package/lib/languages/js/source-code/index.js +1 -1
- package/lib/languages/js/source-code/source-code.js +1128 -1057
- package/lib/languages/js/source-code/token-store/backward-token-comment-cursor.js +39 -35
- package/lib/languages/js/source-code/token-store/backward-token-cursor.js +35 -36
- package/lib/languages/js/source-code/token-store/cursor.js +36 -36
- package/lib/languages/js/source-code/token-store/cursors.js +80 -52
- package/lib/languages/js/source-code/token-store/decorative-cursor.js +17 -18
- package/lib/languages/js/source-code/token-store/filter-cursor.js +19 -20
- package/lib/languages/js/source-code/token-store/forward-token-comment-cursor.js +40 -32
- package/lib/languages/js/source-code/token-store/forward-token-cursor.js +40 -41
- package/lib/languages/js/source-code/token-store/index.js +592 -498
- package/lib/languages/js/source-code/token-store/limit-cursor.js +17 -18
- package/lib/languages/js/source-code/token-store/padded-token-cursor.js +23 -16
- package/lib/languages/js/source-code/token-store/skip-cursor.js +19 -20
- package/lib/languages/js/source-code/token-store/utils.js +63 -60
- package/lib/languages/js/validate-language-options.js +104 -89
- package/lib/linter/apply-disable-directives.js +467 -383
- package/lib/linter/code-path-analysis/code-path-analyzer.js +650 -672
- package/lib/linter/code-path-analysis/code-path-segment.js +215 -216
- package/lib/linter/code-path-analysis/code-path-state.js +2118 -2096
- package/lib/linter/code-path-analysis/code-path.js +307 -319
- package/lib/linter/code-path-analysis/debug-helpers.js +183 -163
- package/lib/linter/code-path-analysis/fork-context.js +296 -271
- package/lib/linter/code-path-analysis/id-generator.js +22 -23
- package/lib/linter/file-context.js +119 -120
- package/lib/linter/index.js +3 -3
- package/lib/linter/interpolate.js +16 -16
- package/lib/linter/linter.js +2402 -2044
- package/lib/linter/node-event-generator.js +284 -225
- package/lib/linter/report-translator.js +256 -219
- package/lib/linter/rule-fixer.js +122 -124
- package/lib/linter/rules.js +35 -35
- package/lib/linter/safe-emitter.js +18 -18
- package/lib/linter/source-code-fixer.js +94 -92
- package/lib/linter/timing.js +104 -101
- package/lib/linter/vfile.js +70 -73
- package/lib/options.js +375 -361
- package/lib/rule-tester/index.js +1 -1
- package/lib/rule-tester/rule-tester.js +1307 -1045
- package/lib/rules/accessor-pairs.js +297 -262
- package/lib/rules/array-bracket-newline.js +249 -237
- package/lib/rules/array-bracket-spacing.js +262 -223
- package/lib/rules/array-callback-return.js +401 -355
- package/lib/rules/array-element-newline.js +357 -312
- package/lib/rules/arrow-body-style.js +399 -280
- package/lib/rules/arrow-parens.js +205 -172
- package/lib/rules/arrow-spacing.js +168 -162
- package/lib/rules/block-scoped-var.js +124 -122
- package/lib/rules/block-spacing.js +185 -175
- package/lib/rules/brace-style.js +261 -198
- package/lib/rules/callback-return.js +202 -189
- package/lib/rules/camelcase.js +402 -391
- package/lib/rules/capitalized-comments.js +252 -231
- package/lib/rules/class-methods-use-this.js +179 -171
- package/lib/rules/comma-dangle.js +378 -345
- package/lib/rules/comma-spacing.js +192 -194
- package/lib/rules/comma-style.js +374 -315
- package/lib/rules/complexity.js +172 -168
- package/lib/rules/computed-property-spacing.js +235 -210
- package/lib/rules/consistent-return.js +180 -169
- package/lib/rules/consistent-this.js +166 -146
- package/lib/rules/constructor-super.js +411 -403
- package/lib/rules/curly.js +406 -331
- package/lib/rules/default-case-last.js +37 -30
- package/lib/rules/default-case.js +88 -84
- package/lib/rules/default-param-last.js +68 -53
- package/lib/rules/dot-location.js +121 -109
- package/lib/rules/dot-notation.js +191 -155
- package/lib/rules/eol-last.js +121 -119
- package/lib/rules/eqeqeq.js +167 -154
- package/lib/rules/for-direction.js +145 -120
- package/lib/rules/func-call-spacing.js +260 -230
- package/lib/rules/func-name-matching.js +292 -208
- package/lib/rules/func-names.js +164 -163
- package/lib/rules/func-style.js +158 -126
- package/lib/rules/function-call-argument-newline.js +151 -128
- package/lib/rules/function-paren-newline.js +348 -290
- package/lib/rules/generator-star-spacing.js +228 -209
- package/lib/rules/getter-return.js +207 -171
- package/lib/rules/global-require.js +84 -73
- package/lib/rules/grouped-accessor-pairs.js +169 -149
- package/lib/rules/guard-for-in.js +71 -62
- package/lib/rules/handle-callback-err.js +107 -102
- package/lib/rules/id-blacklist.js +181 -198
- package/lib/rules/id-denylist.js +167 -186
- package/lib/rules/id-length.js +196 -170
- package/lib/rules/id-match.js +343 -288
- package/lib/rules/implicit-arrow-linebreak.js +101 -78
- package/lib/rules/indent-legacy.js +1343 -1117
- package/lib/rules/indent.js +2271 -1758
- package/lib/rules/index.js +317 -292
- package/lib/rules/init-declarations.js +115 -106
- package/lib/rules/jsx-quotes.js +93 -81
- package/lib/rules/key-spacing.js +749 -632
- package/lib/rules/keyword-spacing.js +647 -604
- package/lib/rules/line-comment-position.js +141 -127
- package/lib/rules/linebreak-style.js +106 -105
- package/lib/rules/lines-around-comment.js +539 -447
- package/lib/rules/lines-around-directive.js +232 -202
- package/lib/rules/lines-between-class-members.js +304 -233
- package/lib/rules/logical-assignment-operators.js +581 -398
- package/lib/rules/max-classes-per-file.js +68 -67
- package/lib/rules/max-depth.js +145 -142
- package/lib/rules/max-len.js +472 -433
- package/lib/rules/max-lines-per-function.js +200 -175
- package/lib/rules/max-lines.js +157 -161
- package/lib/rules/max-nested-callbacks.js +101 -103
- package/lib/rules/max-params.js +77 -75
- package/lib/rules/max-statements-per-line.js +204 -197
- package/lib/rules/max-statements.js +167 -163
- package/lib/rules/multiline-comment-style.js +636 -478
- package/lib/rules/multiline-ternary.js +240 -175
- package/lib/rules/new-cap.js +232 -212
- package/lib/rules/new-parens.js +87 -78
- package/lib/rules/newline-after-var.js +286 -249
- package/lib/rules/newline-before-return.js +228 -221
- package/lib/rules/newline-per-chained-call.js +141 -126
- package/lib/rules/no-alert.js +89 -78
- package/lib/rules/no-array-constructor.js +121 -112
- package/lib/rules/no-async-promise-executor.js +29 -23
- package/lib/rules/no-await-in-loop.js +68 -70
- package/lib/rules/no-bitwise.js +123 -99
- package/lib/rules/no-buffer-constructor.js +54 -46
- package/lib/rules/no-caller.js +38 -32
- package/lib/rules/no-case-declarations.js +60 -56
- package/lib/rules/no-catch-shadow.js +75 -72
- package/lib/rules/no-class-assign.js +50 -47
- package/lib/rules/no-compare-neg-zero.js +61 -47
- package/lib/rules/no-cond-assign.js +147 -131
- package/lib/rules/no-confusing-arrow.js +97 -80
- package/lib/rules/no-console.js +201 -198
- package/lib/rules/no-const-assign.js +46 -40
- package/lib/rules/no-constant-binary-expression.js +499 -404
- package/lib/rules/no-constant-condition.js +157 -142
- package/lib/rules/no-constructor-return.js +48 -48
- package/lib/rules/no-continue.js +24 -26
- package/lib/rules/no-control-regex.js +124 -120
- package/lib/rules/no-debugger.js +27 -29
- package/lib/rules/no-delete-var.js +28 -28
- package/lib/rules/no-div-regex.js +46 -40
- package/lib/rules/no-dupe-args.js +67 -68
- package/lib/rules/no-dupe-class-members.js +92 -88
- package/lib/rules/no-dupe-else-if.js +99 -76
- package/lib/rules/no-dupe-keys.js +132 -109
- package/lib/rules/no-duplicate-case.js +49 -42
- package/lib/rules/no-duplicate-imports.js +178 -175
- package/lib/rules/no-else-return.js +429 -384
- package/lib/rules/no-empty-character-class.js +56 -49
- package/lib/rules/no-empty-function.js +126 -127
- package/lib/rules/no-empty-pattern.js +62 -57
- package/lib/rules/no-empty-static-block.js +36 -34
- package/lib/rules/no-empty.js +97 -85
- package/lib/rules/no-eq-null.js +36 -31
- package/lib/rules/no-eval.js +255 -249
- package/lib/rules/no-ex-assign.js +41 -38
- package/lib/rules/no-extend-native.js +160 -158
- package/lib/rules/no-extra-bind.js +200 -189
- package/lib/rules/no-extra-boolean-cast.js +397 -347
- package/lib/rules/no-extra-label.js +149 -130
- package/lib/rules/no-extra-parens.js +1653 -1324
- package/lib/rules/no-extra-semi.js +145 -143
- package/lib/rules/no-fallthrough.js +198 -156
- package/lib/rules/no-floating-decimal.js +73 -65
- package/lib/rules/no-func-assign.js +53 -54
- package/lib/rules/no-global-assign.js +77 -72
- package/lib/rules/no-implicit-coercion.js +348 -292
- package/lib/rules/no-implicit-globals.js +157 -134
- package/lib/rules/no-implied-eval.js +139 -111
- package/lib/rules/no-import-assign.js +144 -158
- package/lib/rules/no-inline-comments.js +100 -94
- package/lib/rules/no-inner-declarations.js +114 -100
- package/lib/rules/no-invalid-regexp.js +221 -189
- package/lib/rules/no-invalid-this.js +122 -116
- package/lib/rules/no-irregular-whitespace.js +265 -251
- package/lib/rules/no-iterator.js +28 -32
- package/lib/rules/no-label-var.js +58 -61
- package/lib/rules/no-labels.js +137 -132
- package/lib/rules/no-lone-blocks.js +126 -122
- package/lib/rules/no-lonely-if.js +107 -76
- package/lib/rules/no-loop-func.js +233 -212
- package/lib/rules/no-loss-of-precision.js +215 -200
- package/lib/rules/no-magic-numbers.js +245 -217
- package/lib/rules/no-misleading-character-class.js +498 -445
- package/lib/rules/no-mixed-operators.js +187 -181
- package/lib/rules/no-mixed-requires.js +252 -239
- package/lib/rules/no-mixed-spaces-and-tabs.js +133 -120
- package/lib/rules/no-multi-assign.js +45 -43
- package/lib/rules/no-multi-spaces.js +162 -142
- package/lib/rules/no-multi-str.js +41 -40
- package/lib/rules/no-multiple-empty-lines.js +195 -157
- package/lib/rules/no-native-reassign.js +89 -84
- package/lib/rules/no-negated-condition.js +78 -74
- package/lib/rules/no-negated-in-lhs.js +44 -42
- package/lib/rules/no-nested-ternary.js +32 -31
- package/lib/rules/no-new-func.js +70 -61
- package/lib/rules/no-new-native-nonconstructor.js +42 -38
- package/lib/rules/no-new-object.js +47 -47
- package/lib/rules/no-new-require.js +47 -46
- package/lib/rules/no-new-symbol.js +51 -49
- package/lib/rules/no-new-wrappers.js +42 -40
- package/lib/rules/no-new.js +27 -28
- package/lib/rules/no-nonoctal-decimal-escape.js +140 -120
- package/lib/rules/no-obj-calls.js +65 -52
- package/lib/rules/no-object-constructor.js +103 -96
- package/lib/rules/no-octal-escape.js +39 -42
- package/lib/rules/no-octal.js +31 -31
- package/lib/rules/no-param-reassign.js +234 -216
- package/lib/rules/no-path-concat.js +65 -66
- package/lib/rules/no-plusplus.js +59 -60
- package/lib/rules/no-process-env.js +48 -47
- package/lib/rules/no-process-exit.js +53 -49
- package/lib/rules/no-promise-executor-return.js +213 -181
- package/lib/rules/no-proto.js +25 -28
- package/lib/rules/no-prototype-builtins.js +145 -123
- package/lib/rules/no-redeclare.js +153 -151
- package/lib/rules/no-regex-spaces.js +182 -160
- package/lib/rules/no-restricted-exports.js +207 -184
- package/lib/rules/no-restricted-globals.js +110 -111
- package/lib/rules/no-restricted-imports.js +656 -536
- package/lib/rules/no-restricted-modules.js +221 -201
- package/lib/rules/no-restricted-properties.js +180 -152
- package/lib/rules/no-restricted-syntax.js +55 -51
- package/lib/rules/no-return-assign.js +54 -49
- package/lib/rules/no-return-await.js +147 -123
- package/lib/rules/no-script-url.js +51 -44
- package/lib/rules/no-self-assign.js +147 -145
- package/lib/rules/no-self-compare.js +62 -45
- package/lib/rules/no-sequences.js +134 -115
- package/lib/rules/no-setter-return.js +184 -151
- package/lib/rules/no-shadow-restricted-names.js +60 -45
- package/lib/rules/no-shadow.js +341 -315
- package/lib/rules/no-spaced-func.js +81 -76
- package/lib/rules/no-sparse-arrays.js +53 -58
- package/lib/rules/no-sync.js +60 -59
- package/lib/rules/no-tabs.js +82 -71
- package/lib/rules/no-template-curly-in-string.js +32 -31
- package/lib/rules/no-ternary.js +24 -28
- package/lib/rules/no-this-before-super.js +320 -318
- package/lib/rules/no-throw-literal.js +30 -35
- package/lib/rules/no-trailing-spaces.js +198 -190
- package/lib/rules/no-undef-init.js +75 -60
- package/lib/rules/no-undef.js +50 -47
- package/lib/rules/no-undefined.js +72 -74
- package/lib/rules/no-underscore-dangle.js +369 -326
- package/lib/rules/no-unexpected-multiline.js +111 -101
- package/lib/rules/no-unmodified-loop-condition.js +253 -253
- package/lib/rules/no-unneeded-ternary.js +211 -146
- package/lib/rules/no-unreachable-loop.js +144 -141
- package/lib/rules/no-unreachable.js +254 -247
- package/lib/rules/no-unsafe-finally.js +92 -84
- package/lib/rules/no-unsafe-negation.js +104 -82
- package/lib/rules/no-unsafe-optional-chaining.js +191 -177
- package/lib/rules/no-unused-expressions.js +177 -161
- package/lib/rules/no-unused-labels.js +138 -123
- package/lib/rules/no-unused-private-class-members.js +205 -181
- package/lib/rules/no-unused-vars.js +1668 -1448
- package/lib/rules/no-use-before-define.js +228 -230
- package/lib/rules/no-useless-assignment.js +589 -510
- package/lib/rules/no-useless-backreference.js +211 -192
- package/lib/rules/no-useless-call.js +57 -52
- package/lib/rules/no-useless-catch.js +39 -39
- package/lib/rules/no-useless-computed-key.js +143 -114
- package/lib/rules/no-useless-concat.js +64 -59
- package/lib/rules/no-useless-constructor.js +157 -110
- package/lib/rules/no-useless-escape.js +341 -290
- package/lib/rules/no-useless-rename.js +182 -155
- package/lib/rules/no-useless-return.js +343 -311
- package/lib/rules/no-var.js +232 -211
- package/lib/rules/no-void.js +49 -47
- package/lib/rules/no-warning-comments.js +190 -185
- package/lib/rules/no-whitespace-before-property.js +130 -114
- package/lib/rules/no-with.js +23 -25
- package/lib/rules/nonblock-statement-body-position.js +148 -129
- package/lib/rules/object-curly-newline.js +305 -264
- package/lib/rules/object-curly-spacing.js +359 -313
- package/lib/rules/object-property-newline.js +136 -105
- package/lib/rules/object-shorthand.js +606 -501
- package/lib/rules/one-var-declaration-per-line.js +103 -99
- package/lib/rules/one-var.js +652 -536
- package/lib/rules/operator-assignment.js +218 -160
- package/lib/rules/operator-linebreak.js +294 -250
- package/lib/rules/padded-blocks.js +345 -307
- package/lib/rules/padding-line-between-statements.js +442 -438
- package/lib/rules/prefer-arrow-callback.js +361 -312
- package/lib/rules/prefer-const.js +417 -376
- package/lib/rules/prefer-destructuring.js +300 -278
- package/lib/rules/prefer-exponentiation-operator.js +175 -132
- package/lib/rules/prefer-named-capture-group.js +152 -139
- package/lib/rules/prefer-numeric-literals.js +120 -112
- package/lib/rules/prefer-object-has-own.js +115 -81
- package/lib/rules/prefer-object-spread.js +212 -192
- package/lib/rules/prefer-promise-reject-errors.js +139 -121
- package/lib/rules/prefer-reflect.js +126 -106
- package/lib/rules/prefer-regex-literals.js +577 -465
- package/lib/rules/prefer-rest-params.js +78 -79
- package/lib/rules/prefer-spread.js +46 -43
- package/lib/rules/prefer-template.js +265 -194
- package/lib/rules/quote-props.js +372 -306
- package/lib/rules/quotes.js +373 -325
- package/lib/rules/radix.js +151 -135
- package/lib/rules/require-atomic-updates.js +315 -284
- package/lib/rules/require-await.js +143 -115
- package/lib/rules/require-unicode-regexp.js +281 -176
- package/lib/rules/require-yield.js +52 -53
- package/lib/rules/rest-spread-spacing.js +127 -115
- package/lib/rules/semi-spacing.js +280 -249
- package/lib/rules/semi-style.js +175 -133
- package/lib/rules/semi.js +455 -435
- package/lib/rules/sort-imports.js +305 -232
- package/lib/rules/sort-keys.js +218 -187
- package/lib/rules/sort-vars.js +126 -92
- package/lib/rules/space-before-blocks.js +198 -188
- package/lib/rules/space-before-function-paren.js +185 -165
- package/lib/rules/space-in-parens.js +358 -287
- package/lib/rules/space-infix-ops.js +236 -200
- package/lib/rules/space-unary-ops.js +355 -297
- package/lib/rules/spaced-comment.js +362 -318
- package/lib/rules/strict.js +264 -229
- package/lib/rules/switch-colon-spacing.js +129 -121
- package/lib/rules/symbol-description.js +44 -47
- package/lib/rules/template-curly-spacing.js +147 -141
- package/lib/rules/template-tag-spacing.js +97 -87
- package/lib/rules/unicode-bom.js +53 -55
- package/lib/rules/use-isnan.js +236 -205
- package/lib/rules/utils/ast-utils.js +2039 -1860
- package/lib/rules/utils/char-source.js +162 -155
- package/lib/rules/utils/fix-tracker.js +83 -80
- package/lib/rules/utils/keywords.js +59 -59
- package/lib/rules/utils/lazy-loading-rule-map.js +79 -76
- package/lib/rules/utils/regular-expressions.js +32 -24
- package/lib/rules/utils/unicode/index.js +4 -4
- package/lib/rules/utils/unicode/is-combining-character.js +1 -1
- package/lib/rules/utils/unicode/is-emoji-modifier.js +1 -1
- package/lib/rules/utils/unicode/is-regional-indicator-symbol.js +1 -1
- package/lib/rules/utils/unicode/is-surrogate-pair.js +1 -1
- package/lib/rules/valid-typeof.js +152 -110
- package/lib/rules/vars-on-top.js +151 -144
- package/lib/rules/wrap-iife.js +203 -190
- package/lib/rules/wrap-regex.js +69 -57
- package/lib/rules/yield-star-spacing.js +144 -133
- package/lib/rules/yoda.js +282 -271
- package/lib/services/parser-service.js +35 -35
- package/lib/services/processor-service.js +66 -73
- package/lib/shared/ajv.js +14 -14
- package/lib/shared/assert.js +3 -4
- package/lib/shared/ast-utils.js +7 -6
- package/lib/shared/deep-merge-arrays.js +24 -22
- package/lib/shared/directives.js +3 -2
- package/lib/shared/flags.js +46 -17
- package/lib/shared/logging.js +24 -25
- package/lib/shared/option-utils.js +43 -36
- package/lib/shared/runtime-info.js +136 -127
- package/lib/shared/serialization.js +27 -27
- package/lib/shared/severity.js +22 -22
- package/lib/shared/stats.js +5 -5
- package/lib/shared/string-utils.js +16 -16
- package/lib/shared/text-table.js +28 -27
- package/lib/shared/traverser.js +153 -146
- package/lib/types/index.d.ts +2010 -1559
- package/lib/types/rules.d.ts +5253 -5140
- package/lib/types/use-at-your-own-risk.d.ts +32 -30
- package/lib/unsupported-api.js +5 -5
- package/messages/all-files-ignored.js +3 -3
- package/messages/all-matched-files-ignored.js +3 -3
- package/messages/config-file-missing.js +2 -2
- package/messages/config-plugin-missing.js +3 -3
- package/messages/config-serialize-function.js +9 -7
- package/messages/eslintrc-incompat.js +13 -15
- package/messages/eslintrc-plugins.js +3 -4
- package/messages/extend-config-missing.js +3 -3
- package/messages/failed-to-read-json.js +3 -3
- package/messages/file-not-found.js +3 -3
- package/messages/invalid-rule-options.js +2 -2
- package/messages/invalid-rule-severity.js +2 -2
- package/messages/no-config-found.js +3 -3
- package/messages/plugin-conflict.js +8 -8
- package/messages/plugin-invalid.js +3 -3
- package/messages/plugin-missing.js +3 -3
- package/messages/print-config-with-directory-path.js +2 -2
- package/messages/shared.js +6 -1
- package/messages/whitespace-found.js +3 -3
- package/package.json +11 -17
@@ -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
|
};
|
@@ -19,20 +19,27 @@ const ForwardTokenCursor = require("./forward-token-cursor");
|
|
19
19
|
* This is for the backward compatibility of padding options.
|
20
20
|
*/
|
21
21
|
module.exports = class PaddedTokenCursor extends ForwardTokenCursor {
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
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
|
+
}
|
38
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
|
};
|
@@ -16,28 +16,31 @@
|
|
16
16
|
* @returns {number} The found index or `tokens.length`.
|
17
17
|
*/
|
18
18
|
exports.search = function search(tokens, location) {
|
19
|
-
|
19
|
+
for (
|
20
|
+
let minIndex = 0, maxIndex = tokens.length - 1;
|
21
|
+
minIndex <= maxIndex;
|
20
22
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
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];
|
30
33
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
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;
|
41
44
|
};
|
42
45
|
|
43
46
|
/**
|
@@ -49,28 +52,28 @@ exports.search = function search(tokens, location) {
|
|
49
52
|
* @returns {number} The index.
|
50
53
|
*/
|
51
54
|
exports.getFirstIndex = function getFirstIndex(tokens, indexMap, startLoc) {
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
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];
|
58
61
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
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
|
+
}
|
63
66
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
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;
|
74
77
|
};
|
75
78
|
|
76
79
|
/**
|
@@ -82,26 +85,26 @@ exports.getFirstIndex = function getFirstIndex(tokens, indexMap, startLoc) {
|
|
82
85
|
* @returns {number} The index.
|
83
86
|
*/
|
84
87
|
exports.getLastIndex = function getLastIndex(tokens, indexMap, endLoc) {
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
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];
|
91
94
|
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
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
|
+
}
|
96
99
|
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
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;
|
107
110
|
};
|
@@ -10,9 +10,16 @@
|
|
10
10
|
//-----------------------------------------------------------------------------
|
11
11
|
|
12
12
|
const globalVariablesValues = new Set([
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
true,
|
14
|
+
"true",
|
15
|
+
"writable",
|
16
|
+
"writeable",
|
17
|
+
false,
|
18
|
+
"false",
|
19
|
+
"readonly",
|
20
|
+
"readable",
|
21
|
+
null,
|
22
|
+
"off",
|
16
23
|
]);
|
17
24
|
|
18
25
|
//------------------------------------------------------------------------------
|
@@ -25,7 +32,7 @@ const globalVariablesValues = new Set([
|
|
25
32
|
* @returns {boolean} `true` if the value is a non-null object.
|
26
33
|
*/
|
27
34
|
function isNonNullObject(value) {
|
28
|
-
|
35
|
+
return typeof value === "object" && value !== null;
|
29
36
|
}
|
30
37
|
|
31
38
|
/**
|
@@ -34,7 +41,7 @@ function isNonNullObject(value) {
|
|
34
41
|
* @returns {boolean} `true` if the value is a non-null non-array object.
|
35
42
|
*/
|
36
43
|
function isNonArrayObject(value) {
|
37
|
-
|
44
|
+
return isNonNullObject(value) && !Array.isArray(value);
|
38
45
|
}
|
39
46
|
|
40
47
|
/**
|
@@ -43,7 +50,7 @@ function isNonArrayObject(value) {
|
|
43
50
|
* @returns {boolean} `true` if the value is undefined.
|
44
51
|
*/
|
45
52
|
function isUndefined(value) {
|
46
|
-
|
53
|
+
return typeof value === "undefined";
|
47
54
|
}
|
48
55
|
|
49
56
|
//-----------------------------------------------------------------------------
|
@@ -57,15 +64,17 @@ function isUndefined(value) {
|
|
57
64
|
* @throws {TypeError} If the value is invalid.
|
58
65
|
*/
|
59
66
|
function validateEcmaVersion(ecmaVersion) {
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
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
|
+
}
|
69
78
|
}
|
70
79
|
|
71
80
|
/**
|
@@ -75,11 +84,14 @@ function validateEcmaVersion(ecmaVersion) {
|
|
75
84
|
* @throws {TypeError} If the value is invalid.
|
76
85
|
*/
|
77
86
|
function validateSourceType(sourceType) {
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
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
|
+
}
|
83
95
|
}
|
84
96
|
|
85
97
|
/**
|
@@ -89,26 +101,28 @@ function validateSourceType(sourceType) {
|
|
89
101
|
* @throws {TypeError} If the value is invalid.
|
90
102
|
*/
|
91
103
|
function validateGlobals(globals) {
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
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
|
+
}
|
112
126
|
}
|
113
127
|
|
114
128
|
/**
|
@@ -118,13 +132,16 @@ function validateGlobals(globals) {
|
|
118
132
|
* @throws {TypeError} If the value is invalid.
|
119
133
|
*/
|
120
134
|
function validateParser(parser) {
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
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
|
+
}
|
128
145
|
}
|
129
146
|
|
130
147
|
/**
|
@@ -134,48 +151,46 @@ function validateParser(parser) {
|
|
134
151
|
* @throws {TypeError} If the language options are invalid.
|
135
152
|
*/
|
136
153
|
function validateLanguageOptions(languageOptions) {
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
}
|
178
|
-
|
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
|
+
}
|
179
194
|
}
|
180
195
|
|
181
196
|
module.exports = { validateLanguageOptions };
|