bahlint 28.58.6934
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/LICENSE +19 -0
- package/README.md +370 -0
- package/bin/eslint.js +195 -0
- package/conf/ecma-version.js +16 -0
- package/conf/globals.js +169 -0
- package/conf/replacements.json +26 -0
- package/conf/rule-type-list.json +91 -0
- package/lib/api.js +39 -0
- package/lib/cli-engine/formatters/formatters-meta.json +22 -0
- package/lib/cli-engine/formatters/gasoline.js +168 -0
- package/lib/cli-engine/formatters/html.js +359 -0
- package/lib/cli-engine/formatters/json-with-metadata.js +16 -0
- package/lib/cli-engine/formatters/json.js +13 -0
- package/lib/cli-engine/formatters/stylish.js +153 -0
- package/lib/cli-engine/hash.js +35 -0
- package/lib/cli-engine/lint-result-cache.js +220 -0
- package/lib/cli.js +607 -0
- package/lib/config/config-loader.js +683 -0
- package/lib/config/config.js +674 -0
- package/lib/config/default-config.js +78 -0
- package/lib/config/flat-config-array.js +217 -0
- package/lib/config/flat-config-schema.js +598 -0
- package/lib/config-api.js +12 -0
- package/lib/eslint/eslint-helpers.js +1462 -0
- package/lib/eslint/eslint.js +1364 -0
- package/lib/eslint/index.js +7 -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 +1178 -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/languages/js/source-code/token-store/cursor.js +76 -0
- package/lib/languages/js/source-code/token-store/cursors.js +120 -0
- package/lib/languages/js/source-code/token-store/decorative-cursor.js +38 -0
- package/lib/languages/js/source-code/token-store/filter-cursor.js +42 -0
- 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 +695 -0
- package/lib/languages/js/source-code/token-store/limit-cursor.js +39 -0
- package/lib/languages/js/source-code/token-store/padded-token-cursor.js +45 -0
- package/lib/languages/js/source-code/token-store/skip-cursor.js +41 -0
- package/lib/languages/js/source-code/token-store/utils.js +131 -0
- package/lib/languages/js/validate-language-options.js +196 -0
- package/lib/linter/apply-disable-directives.js +583 -0
- package/lib/linter/code-path-analysis/code-path-analyzer.js +828 -0
- package/lib/linter/code-path-analysis/code-path-segment.js +262 -0
- package/lib/linter/code-path-analysis/code-path-state.js +2370 -0
- package/lib/linter/code-path-analysis/code-path.js +332 -0
- package/lib/linter/code-path-analysis/debug-helpers.js +223 -0
- package/lib/linter/code-path-analysis/fork-context.js +374 -0
- package/lib/linter/code-path-analysis/id-generator.js +44 -0
- package/lib/linter/esquery.js +332 -0
- package/lib/linter/file-context.js +88 -0
- package/lib/linter/file-report.js +604 -0
- package/lib/linter/index.js +11 -0
- package/lib/linter/interpolate.js +50 -0
- package/lib/linter/linter.js +1614 -0
- package/lib/linter/rule-fixer.js +199 -0
- package/lib/linter/source-code-fixer.js +154 -0
- package/lib/linter/source-code-traverser.js +333 -0
- package/lib/linter/source-code-visitor.js +81 -0
- package/lib/linter/timing.js +209 -0
- package/lib/linter/vfile.js +115 -0
- package/lib/options.js +416 -0
- package/lib/rule-tester/index.js +7 -0
- package/lib/rule-tester/rule-tester.js +1817 -0
- package/lib/rules/accessor-pairs.js +420 -0
- package/lib/rules/array-bracket-newline.js +291 -0
- package/lib/rules/array-bracket-spacing.js +301 -0
- package/lib/rules/array-callback-return.js +493 -0
- package/lib/rules/array-element-newline.js +374 -0
- package/lib/rules/arrow-body-style.js +418 -0
- package/lib/rules/arrow-parens.js +237 -0
- package/lib/rules/arrow-spacing.js +188 -0
- package/lib/rules/block-scoped-var.js +137 -0
- package/lib/rules/block-spacing.js +202 -0
- package/lib/rules/brace-style.js +278 -0
- package/lib/rules/callback-return.js +216 -0
- package/lib/rules/camelcase.js +422 -0
- package/lib/rules/capitalized-comments.js +325 -0
- package/lib/rules/class-methods-use-this.js +250 -0
- package/lib/rules/comma-dangle.js +424 -0
- package/lib/rules/comma-spacing.js +205 -0
- package/lib/rules/comma-style.js +391 -0
- package/lib/rules/complexity.js +201 -0
- package/lib/rules/computed-property-spacing.js +251 -0
- package/lib/rules/consistent-return.js +221 -0
- package/lib/rules/consistent-this.js +179 -0
- package/lib/rules/constructor-super.js +453 -0
- package/lib/rules/curly.js +425 -0
- package/lib/rules/default-case-last.js +51 -0
- package/lib/rules/default-case.js +103 -0
- package/lib/rules/default-param-last.js +78 -0
- package/lib/rules/dot-location.js +138 -0
- package/lib/rules/dot-notation.js +216 -0
- package/lib/rules/eol-last.js +135 -0
- package/lib/rules/eqeqeq.js +210 -0
- package/lib/rules/for-direction.js +168 -0
- package/lib/rules/func-call-spacing.js +281 -0
- package/lib/rules/func-name-matching.js +338 -0
- package/lib/rules/func-names.js +194 -0
- package/lib/rules/func-style.js +221 -0
- package/lib/rules/function-call-argument-newline.js +166 -0
- package/lib/rules/function-paren-newline.js +368 -0
- package/lib/rules/generator-star-spacing.js +246 -0
- package/lib/rules/getter-return.js +242 -0
- package/lib/rules/global-require.js +117 -0
- package/lib/rules/grouped-accessor-pairs.js +268 -0
- package/lib/rules/guard-for-in.js +85 -0
- package/lib/rules/handle-callback-err.js +122 -0
- package/lib/rules/id-blacklist.js +241 -0
- package/lib/rules/id-denylist.js +223 -0
- package/lib/rules/id-length.js +217 -0
- package/lib/rules/id-match.js +363 -0
- package/lib/rules/implicit-arrow-linebreak.js +125 -0
- package/lib/rules/indent-legacy.js +1369 -0
- package/lib/rules/indent.js +2334 -0
- package/lib/rules/index.js +332 -0
- package/lib/rules/init-declarations.js +172 -0
- package/lib/rules/jsx-quotes.js +128 -0
- package/lib/rules/key-spacing.js +822 -0
- package/lib/rules/keyword-spacing.js +701 -0
- package/lib/rules/line-comment-position.js +157 -0
- package/lib/rules/linebreak-style.js +135 -0
- package/lib/rules/lines-around-comment.js +581 -0
- package/lib/rules/lines-around-directive.js +249 -0
- package/lib/rules/lines-between-class-members.js +358 -0
- package/lib/rules/logical-assignment-operators.js +688 -0
- package/lib/rules/max-classes-per-file.js +90 -0
- package/lib/rules/max-depth.js +159 -0
- package/lib/rules/max-len.js +497 -0
- package/lib/rules/max-lines-per-function.js +238 -0
- package/lib/rules/max-lines.js +189 -0
- package/lib/rules/max-nested-callbacks.js +115 -0
- package/lib/rules/max-params.js +148 -0
- package/lib/rules/max-statements-per-line.js +224 -0
- package/lib/rules/max-statements.js +188 -0
- package/lib/rules/multiline-comment-style.js +652 -0
- package/lib/rules/multiline-ternary.js +257 -0
- package/lib/rules/new-cap.js +277 -0
- package/lib/rules/new-parens.js +120 -0
- package/lib/rules/newline-after-var.js +307 -0
- package/lib/rules/newline-before-return.js +242 -0
- package/lib/rules/newline-per-chained-call.js +159 -0
- package/lib/rules/no-alert.js +149 -0
- package/lib/rules/no-array-constructor.js +195 -0
- package/lib/rules/no-async-promise-executor.js +45 -0
- package/lib/rules/no-await-in-loop.js +115 -0
- package/lib/rules/no-bitwise.js +145 -0
- package/lib/rules/no-buffer-constructor.js +74 -0
- package/lib/rules/no-caller.js +52 -0
- package/lib/rules/no-case-declarations.js +80 -0
- package/lib/rules/no-catch-shadow.js +96 -0
- package/lib/rules/no-class-assign.js +66 -0
- package/lib/rules/no-compare-neg-zero.js +74 -0
- package/lib/rules/no-cond-assign.js +175 -0
- package/lib/rules/no-confusing-arrow.js +127 -0
- package/lib/rules/no-console.js +221 -0
- package/lib/rules/no-const-assign.js +73 -0
- package/lib/rules/no-constant-binary-expression.js +603 -0
- package/lib/rules/no-constant-condition.js +177 -0
- package/lib/rules/no-constructor-return.js +62 -0
- package/lib/rules/no-continue.js +38 -0
- package/lib/rules/no-control-regex.js +142 -0
- package/lib/rules/no-debugger.js +41 -0
- package/lib/rules/no-delete-var.js +42 -0
- package/lib/rules/no-div-regex.js +60 -0
- package/lib/rules/no-dupe-args.js +92 -0
- package/lib/rules/no-dupe-class-members.js +117 -0
- package/lib/rules/no-dupe-else-if.js +145 -0
- package/lib/rules/no-dupe-keys.js +165 -0
- package/lib/rules/no-duplicate-case.js +78 -0
- package/lib/rules/no-duplicate-imports.js +368 -0
- package/lib/rules/no-else-return.js +450 -0
- package/lib/rules/no-empty-character-class.js +83 -0
- package/lib/rules/no-empty-function.js +236 -0
- package/lib/rules/no-empty-pattern.js +85 -0
- package/lib/rules/no-empty-static-block.js +73 -0
- package/lib/rules/no-empty.js +153 -0
- package/lib/rules/no-eq-null.js +51 -0
- package/lib/rules/no-eval.js +295 -0
- package/lib/rules/no-ex-assign.js +57 -0
- package/lib/rules/no-extend-native.js +180 -0
- package/lib/rules/no-extra-bind.js +224 -0
- package/lib/rules/no-extra-boolean-cast.js +420 -0
- package/lib/rules/no-extra-label.js +169 -0
- package/lib/rules/no-extra-parens.js +1669 -0
- package/lib/rules/no-extra-semi.js +167 -0
- package/lib/rules/no-fallthrough.js +260 -0
- package/lib/rules/no-floating-decimal.js +99 -0
- package/lib/rules/no-func-assign.js +77 -0
- package/lib/rules/no-global-assign.js +101 -0
- package/lib/rules/no-implicit-coercion.js +468 -0
- package/lib/rules/no-implicit-globals.js +187 -0
- package/lib/rules/no-implied-eval.js +170 -0
- package/lib/rules/no-import-assign.js +227 -0
- package/lib/rules/no-inline-comments.js +115 -0
- package/lib/rules/no-inner-declarations.js +147 -0
- package/lib/rules/no-invalid-regexp.js +244 -0
- package/lib/rules/no-invalid-this.js +178 -0
- package/lib/rules/no-irregular-whitespace.js +292 -0
- package/lib/rules/no-iterator.js +48 -0
- package/lib/rules/no-label-var.js +78 -0
- package/lib/rules/no-labels.js +156 -0
- package/lib/rules/no-lone-blocks.js +140 -0
- package/lib/rules/no-lonely-if.js +126 -0
- package/lib/rules/no-loop-func.js +267 -0
- package/lib/rules/no-loss-of-precision.js +249 -0
- package/lib/rules/no-magic-numbers.js +365 -0
- package/lib/rules/no-misleading-character-class.js +595 -0
- package/lib/rules/no-mixed-operators.js +253 -0
- package/lib/rules/no-mixed-requires.js +267 -0
- package/lib/rules/no-mixed-spaces-and-tabs.js +148 -0
- package/lib/rules/no-multi-assign.js +66 -0
- package/lib/rules/no-multi-spaces.js +179 -0
- package/lib/rules/no-multi-str.js +67 -0
- package/lib/rules/no-multiple-empty-lines.js +210 -0
- package/lib/rules/no-native-reassign.js +114 -0
- package/lib/rules/no-negated-condition.js +100 -0
- package/lib/rules/no-negated-in-lhs.js +59 -0
- package/lib/rules/no-nested-ternary.js +46 -0
- package/lib/rules/no-new-func.js +96 -0
- package/lib/rules/no-new-native-nonconstructor.js +70 -0
- package/lib/rules/no-new-object.js +76 -0
- package/lib/rules/no-new-require.js +67 -0
- package/lib/rules/no-new-symbol.js +74 -0
- package/lib/rules/no-new-wrappers.js +62 -0
- package/lib/rules/no-new.js +42 -0
- package/lib/rules/no-nonoctal-decimal-escape.js +176 -0
- package/lib/rules/no-obj-calls.js +99 -0
- package/lib/rules/no-object-constructor.js +124 -0
- package/lib/rules/no-octal-escape.js +53 -0
- package/lib/rules/no-octal.js +42 -0
- package/lib/rules/no-param-reassign.js +248 -0
- package/lib/rules/no-path-concat.js +79 -0
- package/lib/rules/no-plusplus.js +102 -0
- package/lib/rules/no-process-env.js +68 -0
- package/lib/rules/no-process-exit.js +67 -0
- package/lib/rules/no-promise-executor-return.js +264 -0
- package/lib/rules/no-proto.js +45 -0
- package/lib/rules/no-prototype-builtins.js +181 -0
- package/lib/rules/no-redeclare.js +173 -0
- package/lib/rules/no-regex-spaces.js +219 -0
- package/lib/rules/no-restricted-exports.js +227 -0
- package/lib/rules/no-restricted-globals.js +266 -0
- package/lib/rules/no-restricted-imports.js +892 -0
- package/lib/rules/no-restricted-modules.js +249 -0
- package/lib/rules/no-restricted-properties.js +233 -0
- package/lib/rules/no-restricted-syntax.js +74 -0
- package/lib/rules/no-return-assign.js +87 -0
- package/lib/rules/no-return-await.js +162 -0
- package/lib/rules/no-script-url.js +68 -0
- package/lib/rules/no-self-assign.js +186 -0
- package/lib/rules/no-self-compare.js +77 -0
- package/lib/rules/no-sequences.js +158 -0
- package/lib/rules/no-setter-return.js +224 -0
- package/lib/rules/no-shadow-restricted-names.js +113 -0
- package/lib/rules/no-shadow.js +624 -0
- package/lib/rules/no-spaced-func.js +105 -0
- package/lib/rules/no-sparse-arrays.js +68 -0
- package/lib/rules/no-sync.js +81 -0
- package/lib/rules/no-tabs.js +110 -0
- package/lib/rules/no-template-curly-in-string.js +45 -0
- package/lib/rules/no-ternary.js +38 -0
- package/lib/rules/no-this-before-super.js +365 -0
- package/lib/rules/no-throw-literal.js +46 -0
- package/lib/rules/no-trailing-spaces.js +227 -0
- package/lib/rules/no-unassigned-vars.js +80 -0
- package/lib/rules/no-undef-init.js +101 -0
- package/lib/rules/no-undef.js +84 -0
- package/lib/rules/no-undefined.js +85 -0
- package/lib/rules/no-underscore-dangle.js +383 -0
- package/lib/rules/no-unexpected-multiline.js +130 -0
- package/lib/rules/no-unmodified-loop-condition.js +360 -0
- package/lib/rules/no-unneeded-ternary.js +232 -0
- package/lib/rules/no-unreachable-loop.js +190 -0
- package/lib/rules/no-unreachable.js +300 -0
- package/lib/rules/no-unsafe-finally.js +119 -0
- package/lib/rules/no-unsafe-negation.js +152 -0
- package/lib/rules/no-unsafe-optional-chaining.js +221 -0
- package/lib/rules/no-unused-expressions.js +227 -0
- package/lib/rules/no-unused-labels.js +158 -0
- package/lib/rules/no-unused-private-class-members.js +219 -0
- package/lib/rules/no-unused-vars.js +1739 -0
- package/lib/rules/no-use-before-define.js +446 -0
- package/lib/rules/no-useless-assignment.js +657 -0
- package/lib/rules/no-useless-backreference.js +263 -0
- package/lib/rules/no-useless-call.js +95 -0
- package/lib/rules/no-useless-catch.js +57 -0
- package/lib/rules/no-useless-computed-key.js +204 -0
- package/lib/rules/no-useless-concat.js +121 -0
- package/lib/rules/no-useless-constructor.js +262 -0
- package/lib/rules/no-useless-escape.js +406 -0
- package/lib/rules/no-useless-rename.js +202 -0
- package/lib/rules/no-useless-return.js +401 -0
- package/lib/rules/no-var.js +367 -0
- package/lib/rules/no-void.js +69 -0
- package/lib/rules/no-warning-comments.js +209 -0
- package/lib/rules/no-whitespace-before-property.js +150 -0
- package/lib/rules/no-with.js +37 -0
- package/lib/rules/nonblock-statement-body-position.js +164 -0
- package/lib/rules/object-curly-newline.js +383 -0
- package/lib/rules/object-curly-spacing.js +369 -0
- package/lib/rules/object-property-newline.js +151 -0
- package/lib/rules/object-shorthand.js +652 -0
- package/lib/rules/one-var-declaration-per-line.js +117 -0
- package/lib/rules/one-var.js +717 -0
- package/lib/rules/operator-assignment.js +270 -0
- package/lib/rules/operator-linebreak.js +315 -0
- package/lib/rules/padded-blocks.js +366 -0
- package/lib/rules/padding-line-between-statements.js +612 -0
- package/lib/rules/prefer-arrow-callback.js +437 -0
- package/lib/rules/prefer-const.js +546 -0
- package/lib/rules/prefer-destructuring.js +332 -0
- package/lib/rules/prefer-exponentiation-operator.js +235 -0
- package/lib/rules/prefer-named-capture-group.js +197 -0
- package/lib/rules/prefer-numeric-literals.js +157 -0
- package/lib/rules/prefer-object-has-own.js +148 -0
- package/lib/rules/prefer-object-spread.js +319 -0
- package/lib/rules/prefer-promise-reject-errors.js +154 -0
- package/lib/rules/prefer-reflect.js +150 -0
- package/lib/rules/prefer-regex-literals.js +605 -0
- package/lib/rules/prefer-rest-params.js +117 -0
- package/lib/rules/prefer-spread.js +91 -0
- package/lib/rules/prefer-template.js +347 -0
- package/lib/rules/preserve-caught-error.js +535 -0
- package/lib/rules/quote-props.js +394 -0
- package/lib/rules/quotes.js +416 -0
- package/lib/rules/radix.js +193 -0
- package/lib/rules/require-atomic-updates.js +365 -0
- package/lib/rules/require-await.js +184 -0
- package/lib/rules/require-unicode-regexp.js +317 -0
- package/lib/rules/require-yield.js +86 -0
- package/lib/rules/rest-spread-spacing.js +150 -0
- package/lib/rules/semi-spacing.js +297 -0
- package/lib/rules/semi-style.js +218 -0
- package/lib/rules/semi.js +476 -0
- package/lib/rules/sort-imports.js +319 -0
- package/lib/rules/sort-keys.js +268 -0
- package/lib/rules/sort-vars.js +140 -0
- package/lib/rules/space-before-blocks.js +232 -0
- package/lib/rules/space-before-function-paren.js +202 -0
- package/lib/rules/space-in-parens.js +374 -0
- package/lib/rules/space-infix-ops.js +249 -0
- package/lib/rules/space-unary-ops.js +400 -0
- package/lib/rules/spaced-comment.js +447 -0
- package/lib/rules/strict.js +314 -0
- package/lib/rules/switch-colon-spacing.js +158 -0
- package/lib/rules/symbol-description.js +70 -0
- package/lib/rules/template-curly-spacing.js +168 -0
- package/lib/rules/template-tag-spacing.js +121 -0
- package/lib/rules/unicode-bom.js +73 -0
- package/lib/rules/use-isnan.js +268 -0
- package/lib/rules/utils/ast-utils.js +2828 -0
- package/lib/rules/utils/char-source.js +247 -0
- package/lib/rules/utils/fix-tracker.js +125 -0
- package/lib/rules/utils/keywords.js +67 -0
- package/lib/rules/utils/lazy-loading-rule-map.js +118 -0
- package/lib/rules/utils/regular-expressions.js +58 -0
- package/lib/rules/utils/unicode/index.js +16 -0
- package/lib/rules/utils/unicode/is-combining-character.js +13 -0
- package/lib/rules/utils/unicode/is-emoji-modifier.js +13 -0
- package/lib/rules/utils/unicode/is-regional-indicator-symbol.js +13 -0
- package/lib/rules/utils/unicode/is-surrogate-pair.js +14 -0
- package/lib/rules/valid-typeof.js +171 -0
- package/lib/rules/vars-on-top.js +165 -0
- package/lib/rules/wrap-iife.js +238 -0
- package/lib/rules/wrap-regex.js +91 -0
- package/lib/rules/yield-star-spacing.js +158 -0
- package/lib/rules/yoda.js +362 -0
- package/lib/services/parser-service.js +64 -0
- package/lib/services/processor-service.js +100 -0
- package/lib/services/suppressions-service.js +302 -0
- package/lib/services/warning-service.js +87 -0
- package/lib/shared/ajv.js +34 -0
- package/lib/shared/assert.js +21 -0
- package/lib/shared/ast-utils.js +30 -0
- package/lib/shared/deep-merge-arrays.js +62 -0
- package/lib/shared/directives.js +16 -0
- package/lib/shared/flags.js +89 -0
- package/lib/shared/logging.js +38 -0
- package/lib/shared/naming.js +109 -0
- package/lib/shared/option-utils.js +63 -0
- package/lib/shared/relative-module-resolver.js +28 -0
- package/lib/shared/runtime-info.js +177 -0
- package/lib/shared/serialization.js +78 -0
- package/lib/shared/severity.js +49 -0
- package/lib/shared/stats.js +30 -0
- package/lib/shared/string-utils.js +58 -0
- package/lib/shared/text-table.js +68 -0
- package/lib/shared/translate-cli-options.js +223 -0
- package/lib/shared/traverser.js +202 -0
- package/lib/types/config-api.d.ts +12 -0
- package/lib/types/index.d.ts +1482 -0
- package/lib/types/rules.d.ts +5603 -0
- package/lib/types/universal.d.ts +6 -0
- package/lib/types/use-at-your-own-risk.d.ts +34 -0
- package/lib/universal.js +10 -0
- package/lib/unsupported-api.js +26 -0
- package/messages/all-files-ignored.js +16 -0
- 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 +117 -0
- package/messages/eslintrc-plugins.js +27 -0
- package/messages/extend-config-missing.js +13 -0
- package/messages/failed-to-read-json.js +11 -0
- package/messages/file-not-found.js +10 -0
- package/messages/invalid-rule-options.js +17 -0
- package/messages/invalid-rule-severity.js +13 -0
- package/messages/no-config-found.js +15 -0
- package/messages/plugin-conflict.js +22 -0
- package/messages/plugin-invalid.js +16 -0
- package/messages/plugin-missing.js +19 -0
- package/messages/print-config-with-directory-path.js +8 -0
- package/messages/shared.js +23 -0
- package/messages/whitespace-found.js +11 -0
- package/package.json +220 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview SourceCodeVisitor class
|
|
3
|
+
* @author Nicholas C. Zakas
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
//-----------------------------------------------------------------------------
|
|
9
|
+
// Helpers
|
|
10
|
+
//-----------------------------------------------------------------------------
|
|
11
|
+
|
|
12
|
+
const emptyArray = Object.freeze([]);
|
|
13
|
+
|
|
14
|
+
//------------------------------------------------------------------------------
|
|
15
|
+
// Exports
|
|
16
|
+
//------------------------------------------------------------------------------
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* A structure to hold a list of functions to call for a given name.
|
|
20
|
+
* This is used to allow multiple rules to register functions for a given name
|
|
21
|
+
* without having to know about each other.
|
|
22
|
+
*/
|
|
23
|
+
class SourceCodeVisitor {
|
|
24
|
+
/**
|
|
25
|
+
* The functions to call for a given name.
|
|
26
|
+
* @type {Map<string, Function[]>}
|
|
27
|
+
*/
|
|
28
|
+
#functions = new Map();
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Adds a function to the list of functions to call for a given name.
|
|
32
|
+
* @param {string} name The name of the function to call.
|
|
33
|
+
* @param {Function} func The function to call.
|
|
34
|
+
* @returns {void}
|
|
35
|
+
*/
|
|
36
|
+
add(name, func) {
|
|
37
|
+
if (this.#functions.has(name)) {
|
|
38
|
+
this.#functions.get(name).push(func);
|
|
39
|
+
} else {
|
|
40
|
+
this.#functions.set(name, [func]);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Gets the list of functions to call for a given name.
|
|
46
|
+
* @param {string} name The name of the function to call.
|
|
47
|
+
* @returns {Function[]} The list of functions to call.
|
|
48
|
+
*/
|
|
49
|
+
get(name) {
|
|
50
|
+
if (this.#functions.has(name)) {
|
|
51
|
+
return this.#functions.get(name);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return emptyArray;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Iterates over all names and calls the callback with the name.
|
|
59
|
+
* @param {(name:string) => void} callback The callback to call for each name.
|
|
60
|
+
* @returns {void}
|
|
61
|
+
*/
|
|
62
|
+
forEachName(callback) {
|
|
63
|
+
this.#functions.forEach((funcs, name) => {
|
|
64
|
+
callback(name);
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Calls the functions for a given name with the given arguments.
|
|
70
|
+
* @param {string} name The name of the function to call.
|
|
71
|
+
* @param {any[]} args The arguments to pass to the function.
|
|
72
|
+
* @returns {void}
|
|
73
|
+
*/
|
|
74
|
+
callSync(name, ...args) {
|
|
75
|
+
if (this.#functions.has(name)) {
|
|
76
|
+
this.#functions.get(name).forEach(func => func(...args));
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
module.exports = { SourceCodeVisitor };
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Tracks performance of individual rules.
|
|
3
|
+
* @author Brandon Mills
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
const { startTime, endTime } = require("../shared/stats");
|
|
9
|
+
|
|
10
|
+
//------------------------------------------------------------------------------
|
|
11
|
+
// Helpers
|
|
12
|
+
//------------------------------------------------------------------------------
|
|
13
|
+
|
|
14
|
+
/* c8 ignore next */
|
|
15
|
+
/**
|
|
16
|
+
* Align the string to left
|
|
17
|
+
* @param {string} str string to evaluate
|
|
18
|
+
* @param {number} len length of the string
|
|
19
|
+
* @param {string} ch delimiter character
|
|
20
|
+
* @returns {string} modified string
|
|
21
|
+
* @private
|
|
22
|
+
*/
|
|
23
|
+
function alignLeft(str, len, ch) {
|
|
24
|
+
return str + new Array(len - str.length + 1).join(ch || " ");
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/* c8 ignore next */
|
|
28
|
+
/**
|
|
29
|
+
* Align the string to right
|
|
30
|
+
* @param {string} str string to evaluate
|
|
31
|
+
* @param {number} len length of the string
|
|
32
|
+
* @param {string} ch delimiter character
|
|
33
|
+
* @returns {string} modified string
|
|
34
|
+
* @private
|
|
35
|
+
*/
|
|
36
|
+
function alignRight(str, len, ch) {
|
|
37
|
+
return new Array(len - str.length + 1).join(ch || " ") + str;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
//------------------------------------------------------------------------------
|
|
41
|
+
// Module definition
|
|
42
|
+
//------------------------------------------------------------------------------
|
|
43
|
+
|
|
44
|
+
const enabled = !!process.env.TIMING;
|
|
45
|
+
|
|
46
|
+
const HEADERS = ["Rule", "Time (ms)", "Relative"];
|
|
47
|
+
const ALIGN = [alignLeft, alignRight, alignRight];
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Decide how many rules to show in the output list.
|
|
51
|
+
* @returns {number} the number of rules to show
|
|
52
|
+
*/
|
|
53
|
+
function getListSize() {
|
|
54
|
+
const MINIMUM_SIZE = 10;
|
|
55
|
+
|
|
56
|
+
if (typeof process.env.TIMING !== "string") {
|
|
57
|
+
return MINIMUM_SIZE;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (process.env.TIMING.toLowerCase() === "all") {
|
|
61
|
+
return Number.POSITIVE_INFINITY;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const TIMING_ENV_VAR_AS_INTEGER = Number.parseInt(process.env.TIMING, 10);
|
|
65
|
+
|
|
66
|
+
return TIMING_ENV_VAR_AS_INTEGER > 10
|
|
67
|
+
? TIMING_ENV_VAR_AS_INTEGER
|
|
68
|
+
: MINIMUM_SIZE;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/* c8 ignore next */
|
|
72
|
+
/**
|
|
73
|
+
* display the data
|
|
74
|
+
* @param {Object} data Data object to be displayed
|
|
75
|
+
* @returns {void} prints modified string with console.log
|
|
76
|
+
* @private
|
|
77
|
+
*/
|
|
78
|
+
function display(data) {
|
|
79
|
+
let total = 0;
|
|
80
|
+
const rows = Object.keys(data)
|
|
81
|
+
.map(key => {
|
|
82
|
+
const time = data[key];
|
|
83
|
+
|
|
84
|
+
total += time;
|
|
85
|
+
return [key, time];
|
|
86
|
+
})
|
|
87
|
+
.sort((a, b) => b[1] - a[1])
|
|
88
|
+
.slice(0, getListSize());
|
|
89
|
+
|
|
90
|
+
rows.forEach(row => {
|
|
91
|
+
row.push(`${((row[1] * 100) / total).toFixed(1)}%`);
|
|
92
|
+
row[1] = row[1].toFixed(3);
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
rows.unshift(HEADERS);
|
|
96
|
+
|
|
97
|
+
const widths = [];
|
|
98
|
+
|
|
99
|
+
rows.forEach(row => {
|
|
100
|
+
const len = row.length;
|
|
101
|
+
|
|
102
|
+
for (let i = 0; i < len; i++) {
|
|
103
|
+
const n = row[i].length;
|
|
104
|
+
|
|
105
|
+
if (!widths[i] || n > widths[i]) {
|
|
106
|
+
widths[i] = n;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
const table = rows.map(row =>
|
|
112
|
+
row.map((cell, index) => ALIGN[index](cell, widths[index])).join(" | "),
|
|
113
|
+
);
|
|
114
|
+
|
|
115
|
+
table.splice(
|
|
116
|
+
1,
|
|
117
|
+
0,
|
|
118
|
+
widths
|
|
119
|
+
.map((width, index) => {
|
|
120
|
+
const extraAlignment =
|
|
121
|
+
index !== 0 && index !== widths.length - 1 ? 2 : 1;
|
|
122
|
+
|
|
123
|
+
return ALIGN[index](":", width + extraAlignment, "-");
|
|
124
|
+
})
|
|
125
|
+
.join("|"),
|
|
126
|
+
);
|
|
127
|
+
|
|
128
|
+
console.log(table.join("\n")); // eslint-disable-line no-console -- Debugging function
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/* c8 ignore next */
|
|
132
|
+
module.exports = (function () {
|
|
133
|
+
const data = Object.create(null);
|
|
134
|
+
let displayEnabled = true;
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Time the run
|
|
138
|
+
* @param {any} key key from the data object
|
|
139
|
+
* @param {Function} fn function to be called
|
|
140
|
+
* @param {boolean} stats if 'stats' is true, return the result and the time difference
|
|
141
|
+
* @returns {Function} function to be executed
|
|
142
|
+
* @private
|
|
143
|
+
*/
|
|
144
|
+
function time(key, fn, stats) {
|
|
145
|
+
return function (...args) {
|
|
146
|
+
const t = startTime();
|
|
147
|
+
const result = fn(...args);
|
|
148
|
+
const tdiff = endTime(t);
|
|
149
|
+
|
|
150
|
+
if (enabled) {
|
|
151
|
+
if (typeof data[key] === "undefined") {
|
|
152
|
+
data[key] = 0;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
data[key] += tdiff;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
return stats ? { result, tdiff } : result;
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Returns a shallow copy of the collected timings data.
|
|
164
|
+
* @returns {Record<string, number>} mapping of ruleId to total time in ms
|
|
165
|
+
*/
|
|
166
|
+
function getData() {
|
|
167
|
+
return { ...data };
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Merges rule timing totals collected elsewhere into this process' totals.
|
|
172
|
+
* @param {Record<string, number>} dataToMerge mapping of ruleId to total time in ms
|
|
173
|
+
* @returns {void}
|
|
174
|
+
*/
|
|
175
|
+
function mergeData(dataToMerge) {
|
|
176
|
+
for (const [key, value] of Object.entries(dataToMerge)) {
|
|
177
|
+
if (typeof data[key] === "undefined") {
|
|
178
|
+
data[key] = 0;
|
|
179
|
+
}
|
|
180
|
+
data[key] += value;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Disables printing of timing data on process exit.
|
|
186
|
+
* Intended for worker threads or non-main contexts.
|
|
187
|
+
* @returns {void}
|
|
188
|
+
*/
|
|
189
|
+
function disableDisplay() {
|
|
190
|
+
displayEnabled = false;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
if (enabled) {
|
|
194
|
+
process.on("exit", () => {
|
|
195
|
+
if (displayEnabled && Object.keys(data).length > 0) {
|
|
196
|
+
display(data);
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
return {
|
|
202
|
+
time,
|
|
203
|
+
enabled,
|
|
204
|
+
getListSize,
|
|
205
|
+
getData,
|
|
206
|
+
mergeData,
|
|
207
|
+
disableDisplay,
|
|
208
|
+
};
|
|
209
|
+
})();
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Virtual file
|
|
3
|
+
* @author Nicholas C. Zakas
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
//-----------------------------------------------------------------------------
|
|
9
|
+
// Type Definitions
|
|
10
|
+
//-----------------------------------------------------------------------------
|
|
11
|
+
|
|
12
|
+
/** @typedef {import("@eslint/core").File} File */
|
|
13
|
+
|
|
14
|
+
//------------------------------------------------------------------------------
|
|
15
|
+
// Helpers
|
|
16
|
+
//------------------------------------------------------------------------------
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Determines if a given value has a byte order mark (BOM).
|
|
20
|
+
* @param {string|Uint8Array} value The value to check.
|
|
21
|
+
* @returns {boolean} `true` if the value has a BOM, `false` otherwise.
|
|
22
|
+
*/
|
|
23
|
+
function hasUnicodeBOM(value) {
|
|
24
|
+
return typeof value === "string"
|
|
25
|
+
? value.charCodeAt(0) === 0xfeff
|
|
26
|
+
: value[0] === 0xef && value[1] === 0xbb && value[2] === 0xbf;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Strips Unicode BOM from the given value.
|
|
31
|
+
* @param {string|Uint8Array} value The value to remove the BOM from.
|
|
32
|
+
* @returns {string|Uint8Array} The stripped value.
|
|
33
|
+
*/
|
|
34
|
+
function stripUnicodeBOM(value) {
|
|
35
|
+
if (!hasUnicodeBOM(value)) {
|
|
36
|
+
return value;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
if (typeof value === "string") {
|
|
40
|
+
/*
|
|
41
|
+
* Check Unicode BOM.
|
|
42
|
+
* In JavaScript, string data is stored as UTF-16, so BOM is 0xFEFF.
|
|
43
|
+
* http://www.ecma-international.org/ecma-262/6.0/#sec-unicode-format-control-characters
|
|
44
|
+
*/
|
|
45
|
+
return value.slice(1);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/*
|
|
49
|
+
* In a Uint8Array, the BOM is represented by three bytes: 0xEF, 0xBB, and 0xBF,
|
|
50
|
+
* so we can just remove the first three bytes.
|
|
51
|
+
*/
|
|
52
|
+
return value.slice(3);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
//------------------------------------------------------------------------------
|
|
56
|
+
// Exports
|
|
57
|
+
//------------------------------------------------------------------------------
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Represents a virtual file inside of ESLint.
|
|
61
|
+
* @implements {File}
|
|
62
|
+
*/
|
|
63
|
+
class VFile {
|
|
64
|
+
/**
|
|
65
|
+
* The file path including any processor-created virtual path.
|
|
66
|
+
* @type {string}
|
|
67
|
+
* @readonly
|
|
68
|
+
*/
|
|
69
|
+
path;
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* The file path on disk.
|
|
73
|
+
* @type {string}
|
|
74
|
+
* @readonly
|
|
75
|
+
*/
|
|
76
|
+
physicalPath;
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* The file contents.
|
|
80
|
+
* @type {string|Uint8Array}
|
|
81
|
+
* @readonly
|
|
82
|
+
*/
|
|
83
|
+
body;
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* The raw body of the file, including a BOM if present.
|
|
87
|
+
* @type {string|Uint8Array}
|
|
88
|
+
* @readonly
|
|
89
|
+
*/
|
|
90
|
+
rawBody;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Indicates whether the file has a byte order mark (BOM).
|
|
94
|
+
* @type {boolean}
|
|
95
|
+
* @readonly
|
|
96
|
+
*/
|
|
97
|
+
bom;
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Creates a new instance.
|
|
101
|
+
* @param {string} path The file path.
|
|
102
|
+
* @param {string|Uint8Array} body The file contents.
|
|
103
|
+
* @param {Object} [options] Additional options.
|
|
104
|
+
* @param {string} [options.physicalPath] The file path on disk.
|
|
105
|
+
*/
|
|
106
|
+
constructor(path, body, { physicalPath } = {}) {
|
|
107
|
+
this.path = path;
|
|
108
|
+
this.physicalPath = physicalPath ?? path;
|
|
109
|
+
this.bom = hasUnicodeBOM(body);
|
|
110
|
+
this.body = stripUnicodeBOM(body);
|
|
111
|
+
this.rawBody = body;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
module.exports = { VFile };
|