eslint 9.21.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 +52 -48
- 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 +12 -0
- 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 +1129 -1054
- 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 -190
- 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/config-api.d.ts +8 -0
- package/lib/types/index.d.ts +2010 -1559
- package/lib/types/rules.d.ts +5312 -0
- 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 +22 -20
- package/lib/types/rules/best-practices.d.ts +0 -1143
- package/lib/types/rules/deprecated.d.ts +0 -252
- package/lib/types/rules/ecmascript-6.d.ts +0 -647
- package/lib/types/rules/index.d.ts +0 -50
- package/lib/types/rules/node-commonjs.d.ts +0 -171
- package/lib/types/rules/possible-errors.d.ts +0 -685
- package/lib/types/rules/strict-mode.d.ts +0 -38
- package/lib/types/rules/stylistic-issues.d.ts +0 -2043
- package/lib/types/rules/variables.d.ts +0 -234
@@ -19,39 +19,43 @@ const utils = require("./utils");
|
|
19
19
|
* The cursor which iterates tokens and comments in reverse.
|
20
20
|
*/
|
21
21
|
module.exports = class BackwardTokenCommentCursor extends Cursor {
|
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
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
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
|
+
*/
|
30
|
+
constructor(tokens, comments, indexMap, startLoc, endLoc) {
|
31
|
+
super();
|
32
|
+
this.tokens = tokens;
|
33
|
+
this.comments = comments;
|
34
|
+
this.tokenIndex = utils.getLastIndex(tokens, indexMap, endLoc);
|
35
|
+
this.commentIndex = utils.search(comments, endLoc) - 1;
|
36
|
+
this.border = startLoc;
|
37
|
+
}
|
38
|
+
|
39
|
+
/** @inheritdoc */
|
40
|
+
moveNext() {
|
41
|
+
const token =
|
42
|
+
this.tokenIndex >= 0 ? this.tokens[this.tokenIndex] : null;
|
43
|
+
const comment =
|
44
|
+
this.commentIndex >= 0 ? this.comments[this.commentIndex] : null;
|
45
|
+
|
46
|
+
if (token && (!comment || token.range[1] > comment.range[1])) {
|
47
|
+
this.current = token;
|
48
|
+
this.tokenIndex -= 1;
|
49
|
+
} else if (comment) {
|
50
|
+
this.current = comment;
|
51
|
+
this.commentIndex -= 1;
|
52
|
+
} else {
|
53
|
+
this.current = null;
|
54
|
+
}
|
55
|
+
|
56
|
+
return (
|
57
|
+
Boolean(this.current) &&
|
58
|
+
(this.border === -1 || this.current.range[0] >= this.border)
|
59
|
+
);
|
60
|
+
}
|
57
61
|
};
|
@@ -19,40 +19,39 @@ const { getLastIndex, getFirstIndex } = require("./utils");
|
|
19
19
|
* The cursor which iterates tokens only in reverse.
|
20
20
|
*/
|
21
21
|
module.exports = class BackwardTokenCursor extends Cursor {
|
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
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
}
|
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
|
+
*/
|
30
|
+
constructor(tokens, comments, indexMap, startLoc, endLoc) {
|
31
|
+
super();
|
32
|
+
this.tokens = tokens;
|
33
|
+
this.index = getLastIndex(tokens, indexMap, endLoc);
|
34
|
+
this.indexEnd = getFirstIndex(tokens, indexMap, startLoc);
|
35
|
+
}
|
36
|
+
|
37
|
+
/** @inheritdoc */
|
38
|
+
moveNext() {
|
39
|
+
if (this.index >= this.indexEnd) {
|
40
|
+
this.current = this.tokens[this.index];
|
41
|
+
this.index -= 1;
|
42
|
+
return true;
|
43
|
+
}
|
44
|
+
return false;
|
45
|
+
}
|
46
|
+
|
47
|
+
/*
|
48
|
+
*
|
49
|
+
* Shorthand for performance.
|
50
|
+
*
|
51
|
+
*/
|
52
|
+
|
53
|
+
/** @inheritdoc */
|
54
|
+
getOneToken() {
|
55
|
+
return this.index >= this.indexEnd ? this.tokens[this.index] : null;
|
56
|
+
}
|
58
57
|
};
|
@@ -32,45 +32,45 @@
|
|
32
32
|
*
|
33
33
|
*/
|
34
34
|
module.exports = class Cursor {
|
35
|
+
/**
|
36
|
+
* Initializes this cursor.
|
37
|
+
*/
|
38
|
+
constructor() {
|
39
|
+
this.current = null;
|
40
|
+
}
|
35
41
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
+
/**
|
43
|
+
* Gets the first token.
|
44
|
+
* This consumes this cursor.
|
45
|
+
* @returns {Token|Comment} The first token or null.
|
46
|
+
*/
|
47
|
+
getOneToken() {
|
48
|
+
return this.moveNext() ? this.current : null;
|
49
|
+
}
|
42
50
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
}
|
51
|
+
/**
|
52
|
+
* Gets the first tokens.
|
53
|
+
* This consumes this cursor.
|
54
|
+
* @returns {(Token|Comment)[]} All tokens.
|
55
|
+
*/
|
56
|
+
getAllTokens() {
|
57
|
+
const tokens = [];
|
51
58
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
* @returns {(Token|Comment)[]} All tokens.
|
56
|
-
*/
|
57
|
-
getAllTokens() {
|
58
|
-
const tokens = [];
|
59
|
+
while (this.moveNext()) {
|
60
|
+
tokens.push(this.current);
|
61
|
+
}
|
59
62
|
|
60
|
-
|
61
|
-
|
62
|
-
}
|
63
|
+
return tokens;
|
64
|
+
}
|
63
65
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
throw new Error("Not implemented.");
|
75
|
-
}
|
66
|
+
/**
|
67
|
+
* Moves this cursor to the next token.
|
68
|
+
* @returns {boolean} `true` if the next token exists.
|
69
|
+
* @abstract
|
70
|
+
*/
|
71
|
+
/* c8 ignore next */
|
72
|
+
// eslint-disable-next-line class-methods-use-this -- Unused
|
73
|
+
moveNext() {
|
74
|
+
throw new Error("Not implemented.");
|
75
|
+
}
|
76
76
|
};
|
@@ -25,61 +25,86 @@ const SkipCursor = require("./skip-cursor");
|
|
25
25
|
* @private
|
26
26
|
*/
|
27
27
|
class CursorFactory {
|
28
|
+
/**
|
29
|
+
* Initializes this cursor.
|
30
|
+
* @param {Function} TokenCursor The class of the cursor which iterates tokens only.
|
31
|
+
* @param {Function} TokenCommentCursor The class of the cursor which iterates the mix of tokens and comments.
|
32
|
+
*/
|
33
|
+
constructor(TokenCursor, TokenCommentCursor) {
|
34
|
+
this.TokenCursor = TokenCursor;
|
35
|
+
this.TokenCommentCursor = TokenCommentCursor;
|
36
|
+
}
|
28
37
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
+
/**
|
39
|
+
* Creates a base cursor instance that can be decorated by createCursor.
|
40
|
+
* @param {Token[]} tokens The array of tokens.
|
41
|
+
* @param {Comment[]} comments The array of comments.
|
42
|
+
* @param {Object} indexMap The map from locations to indices in `tokens`.
|
43
|
+
* @param {number} startLoc The start location of the iteration range.
|
44
|
+
* @param {number} endLoc The end location of the iteration range.
|
45
|
+
* @param {boolean} includeComments The flag to iterate comments as well.
|
46
|
+
* @returns {Cursor} The created base cursor.
|
47
|
+
*/
|
48
|
+
createBaseCursor(
|
49
|
+
tokens,
|
50
|
+
comments,
|
51
|
+
indexMap,
|
52
|
+
startLoc,
|
53
|
+
endLoc,
|
54
|
+
includeComments,
|
55
|
+
) {
|
56
|
+
const Cursor = includeComments
|
57
|
+
? this.TokenCommentCursor
|
58
|
+
: this.TokenCursor;
|
38
59
|
|
39
|
-
|
40
|
-
|
41
|
-
* @param {Token[]} tokens The array of tokens.
|
42
|
-
* @param {Comment[]} comments The array of comments.
|
43
|
-
* @param {Object} indexMap The map from locations to indices in `tokens`.
|
44
|
-
* @param {number} startLoc The start location of the iteration range.
|
45
|
-
* @param {number} endLoc The end location of the iteration range.
|
46
|
-
* @param {boolean} includeComments The flag to iterate comments as well.
|
47
|
-
* @returns {Cursor} The created base cursor.
|
48
|
-
*/
|
49
|
-
createBaseCursor(tokens, comments, indexMap, startLoc, endLoc, includeComments) {
|
50
|
-
const Cursor = includeComments ? this.TokenCommentCursor : this.TokenCursor;
|
60
|
+
return new Cursor(tokens, comments, indexMap, startLoc, endLoc);
|
61
|
+
}
|
51
62
|
|
52
|
-
|
53
|
-
|
63
|
+
/**
|
64
|
+
* Creates a cursor that iterates tokens with normalized options.
|
65
|
+
* @param {Token[]} tokens The array of tokens.
|
66
|
+
* @param {Comment[]} comments The array of comments.
|
67
|
+
* @param {Object} indexMap The map from locations to indices in `tokens`.
|
68
|
+
* @param {number} startLoc The start location of the iteration range.
|
69
|
+
* @param {number} endLoc The end location of the iteration range.
|
70
|
+
* @param {boolean} includeComments The flag to iterate comments as well.
|
71
|
+
* @param {Function|null} filter The predicate function to choose tokens.
|
72
|
+
* @param {number} skip The count of tokens the cursor skips.
|
73
|
+
* @param {number} count The maximum count of tokens the cursor iterates. Zero is no iteration for backward compatibility.
|
74
|
+
* @returns {Cursor} The created cursor.
|
75
|
+
*/
|
76
|
+
createCursor(
|
77
|
+
tokens,
|
78
|
+
comments,
|
79
|
+
indexMap,
|
80
|
+
startLoc,
|
81
|
+
endLoc,
|
82
|
+
includeComments,
|
83
|
+
filter,
|
84
|
+
skip,
|
85
|
+
count,
|
86
|
+
) {
|
87
|
+
let cursor = this.createBaseCursor(
|
88
|
+
tokens,
|
89
|
+
comments,
|
90
|
+
indexMap,
|
91
|
+
startLoc,
|
92
|
+
endLoc,
|
93
|
+
includeComments,
|
94
|
+
);
|
54
95
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
* @param {number} skip The count of tokens the cursor skips.
|
65
|
-
* @param {number} count The maximum count of tokens the cursor iterates. Zero is no iteration for backward compatibility.
|
66
|
-
* @returns {Cursor} The created cursor.
|
67
|
-
*/
|
68
|
-
createCursor(tokens, comments, indexMap, startLoc, endLoc, includeComments, filter, skip, count) {
|
69
|
-
let cursor = this.createBaseCursor(tokens, comments, indexMap, startLoc, endLoc, includeComments);
|
96
|
+
if (filter) {
|
97
|
+
cursor = new FilterCursor(cursor, filter);
|
98
|
+
}
|
99
|
+
if (skip >= 1) {
|
100
|
+
cursor = new SkipCursor(cursor, skip);
|
101
|
+
}
|
102
|
+
if (count >= 0) {
|
103
|
+
cursor = new LimitCursor(cursor, count);
|
104
|
+
}
|
70
105
|
|
71
|
-
|
72
|
-
|
73
|
-
}
|
74
|
-
if (skip >= 1) {
|
75
|
-
cursor = new SkipCursor(cursor, skip);
|
76
|
-
}
|
77
|
-
if (count >= 0) {
|
78
|
-
cursor = new LimitCursor(cursor, count);
|
79
|
-
}
|
80
|
-
|
81
|
-
return cursor;
|
82
|
-
}
|
106
|
+
return cursor;
|
107
|
+
}
|
83
108
|
}
|
84
109
|
|
85
110
|
//------------------------------------------------------------------------------
|
@@ -87,6 +112,9 @@ class CursorFactory {
|
|
87
112
|
//------------------------------------------------------------------------------
|
88
113
|
|
89
114
|
module.exports = {
|
90
|
-
|
91
|
-
|
115
|
+
forward: new CursorFactory(ForwardTokenCursor, ForwardTokenCommentCursor),
|
116
|
+
backward: new CursorFactory(
|
117
|
+
BackwardTokenCursor,
|
118
|
+
BackwardTokenCommentCursor,
|
119
|
+
),
|
92
120
|
};
|
@@ -18,22 +18,21 @@ const Cursor = require("./cursor");
|
|
18
18
|
* The abstract class about cursors which manipulate another cursor.
|
19
19
|
*/
|
20
20
|
module.exports = class DecorativeCursor extends Cursor {
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
}
|
21
|
+
/**
|
22
|
+
* Initializes this cursor.
|
23
|
+
* @param {Cursor} cursor The cursor to be decorated.
|
24
|
+
*/
|
25
|
+
constructor(cursor) {
|
26
|
+
super();
|
27
|
+
this.cursor = cursor;
|
28
|
+
}
|
29
|
+
|
30
|
+
/** @inheritdoc */
|
31
|
+
moveNext() {
|
32
|
+
const retv = this.cursor.moveNext();
|
33
|
+
|
34
|
+
this.current = this.cursor.current;
|
35
|
+
|
36
|
+
return retv;
|
37
|
+
}
|
39
38
|
};
|
@@ -18,26 +18,25 @@ const DecorativeCursor = require("./decorative-cursor");
|
|
18
18
|
* The decorative cursor which ignores specified tokens.
|
19
19
|
*/
|
20
20
|
module.exports = class FilterCursor extends DecorativeCursor {
|
21
|
+
/**
|
22
|
+
* Initializes this cursor.
|
23
|
+
* @param {Cursor} cursor The cursor to be decorated.
|
24
|
+
* @param {Function} predicate The predicate function to decide tokens this cursor iterates.
|
25
|
+
*/
|
26
|
+
constructor(cursor, predicate) {
|
27
|
+
super(cursor);
|
28
|
+
this.predicate = predicate;
|
29
|
+
}
|
21
30
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
* @param {Function} predicate The predicate function to decide tokens this cursor iterates.
|
26
|
-
*/
|
27
|
-
constructor(cursor, predicate) {
|
28
|
-
super(cursor);
|
29
|
-
this.predicate = predicate;
|
30
|
-
}
|
31
|
+
/** @inheritdoc */
|
32
|
+
moveNext() {
|
33
|
+
const predicate = this.predicate;
|
31
34
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
}
|
40
|
-
}
|
41
|
-
return false;
|
42
|
-
}
|
35
|
+
while (super.moveNext()) {
|
36
|
+
if (predicate(this.current)) {
|
37
|
+
return true;
|
38
|
+
}
|
39
|
+
}
|
40
|
+
return false;
|
41
|
+
}
|
43
42
|
};
|
@@ -19,39 +19,47 @@ const { getFirstIndex, search } = require("./utils");
|
|
19
19
|
* The cursor which iterates tokens and comments.
|
20
20
|
*/
|
21
21
|
module.exports = class ForwardTokenCommentCursor extends Cursor {
|
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
|
+
*/
|
30
|
+
constructor(tokens, comments, indexMap, startLoc, endLoc) {
|
31
|
+
super();
|
32
|
+
this.tokens = tokens;
|
33
|
+
this.comments = comments;
|
34
|
+
this.tokenIndex = getFirstIndex(tokens, indexMap, startLoc);
|
35
|
+
this.commentIndex = search(comments, startLoc);
|
36
|
+
this.border = endLoc;
|
37
|
+
}
|
22
38
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
this.tokens = tokens;
|
34
|
-
this.comments = comments;
|
35
|
-
this.tokenIndex = getFirstIndex(tokens, indexMap, startLoc);
|
36
|
-
this.commentIndex = search(comments, startLoc);
|
37
|
-
this.border = endLoc;
|
38
|
-
}
|
39
|
+
/** @inheritdoc */
|
40
|
+
moveNext() {
|
41
|
+
const token =
|
42
|
+
this.tokenIndex < this.tokens.length
|
43
|
+
? this.tokens[this.tokenIndex]
|
44
|
+
: null;
|
45
|
+
const comment =
|
46
|
+
this.commentIndex < this.comments.length
|
47
|
+
? this.comments[this.commentIndex]
|
48
|
+
: null;
|
39
49
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
50
|
+
if (token && (!comment || token.range[0] < comment.range[0])) {
|
51
|
+
this.current = token;
|
52
|
+
this.tokenIndex += 1;
|
53
|
+
} else if (comment) {
|
54
|
+
this.current = comment;
|
55
|
+
this.commentIndex += 1;
|
56
|
+
} else {
|
57
|
+
this.current = null;
|
58
|
+
}
|
44
59
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
this.commentIndex += 1;
|
51
|
-
} else {
|
52
|
-
this.current = null;
|
53
|
-
}
|
54
|
-
|
55
|
-
return Boolean(this.current) && (this.border === -1 || this.current.range[1] <= this.border);
|
56
|
-
}
|
60
|
+
return (
|
61
|
+
Boolean(this.current) &&
|
62
|
+
(this.border === -1 || this.current.range[1] <= this.border)
|
63
|
+
);
|
64
|
+
}
|
57
65
|
};
|
@@ -19,45 +19,44 @@ const { getFirstIndex, getLastIndex } = require("./utils");
|
|
19
19
|
* The cursor which iterates tokens only.
|
20
20
|
*/
|
21
21
|
module.exports = class ForwardTokenCursor extends Cursor {
|
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
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
}
|
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
|
+
*/
|
30
|
+
constructor(tokens, comments, indexMap, startLoc, endLoc) {
|
31
|
+
super();
|
32
|
+
this.tokens = tokens;
|
33
|
+
this.index = getFirstIndex(tokens, indexMap, startLoc);
|
34
|
+
this.indexEnd = getLastIndex(tokens, indexMap, endLoc);
|
35
|
+
}
|
36
|
+
|
37
|
+
/** @inheritdoc */
|
38
|
+
moveNext() {
|
39
|
+
if (this.index <= this.indexEnd) {
|
40
|
+
this.current = this.tokens[this.index];
|
41
|
+
this.index += 1;
|
42
|
+
return true;
|
43
|
+
}
|
44
|
+
return false;
|
45
|
+
}
|
46
|
+
|
47
|
+
/*
|
48
|
+
*
|
49
|
+
* Shorthand for performance.
|
50
|
+
*
|
51
|
+
*/
|
52
|
+
|
53
|
+
/** @inheritdoc */
|
54
|
+
getOneToken() {
|
55
|
+
return this.index <= this.indexEnd ? this.tokens[this.index] : null;
|
56
|
+
}
|
57
|
+
|
58
|
+
/** @inheritdoc */
|
59
|
+
getAllTokens() {
|
60
|
+
return this.tokens.slice(this.index, this.indexEnd + 1);
|
61
|
+
}
|
63
62
|
};
|