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,359 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview HTML reporter
|
|
3
|
+
* @author Julian Laval
|
|
4
|
+
*/
|
|
5
|
+
"use strict";
|
|
6
|
+
|
|
7
|
+
//------------------------------------------------------------------------------
|
|
8
|
+
// Helpers
|
|
9
|
+
//------------------------------------------------------------------------------
|
|
10
|
+
|
|
11
|
+
const encodeHTML = (function () {
|
|
12
|
+
const encodeHTMLRules = {
|
|
13
|
+
"&": "&",
|
|
14
|
+
"<": "<",
|
|
15
|
+
">": ">",
|
|
16
|
+
'"': """,
|
|
17
|
+
"'": "'",
|
|
18
|
+
};
|
|
19
|
+
const matchHTML = /[&<>"']/gu;
|
|
20
|
+
|
|
21
|
+
return function (code) {
|
|
22
|
+
return code
|
|
23
|
+
? code.toString().replace(matchHTML, m => encodeHTMLRules[m] || m)
|
|
24
|
+
: "";
|
|
25
|
+
};
|
|
26
|
+
})();
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Get the final HTML document.
|
|
30
|
+
* @param {Object} it data for the document.
|
|
31
|
+
* @returns {string} HTML document.
|
|
32
|
+
*/
|
|
33
|
+
function pageTemplate(it) {
|
|
34
|
+
const { reportColor, reportSummary, date, results } = it;
|
|
35
|
+
|
|
36
|
+
return `
|
|
37
|
+
<!DOCTYPE html>
|
|
38
|
+
<html>
|
|
39
|
+
<head>
|
|
40
|
+
<meta charset="UTF-8">
|
|
41
|
+
<title>ESLint Report</title>
|
|
42
|
+
<link rel="icon" type="image/png" sizes="any" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAHaAAAB2gGFomX7AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAABD1JREFUWMPFl11sk2UUx3/nbYtjxS1MF7MLMTECMgSTtSSyrQkLhAj7UBPnDSEGoxegGzMwojhXVpmTAA5iYpSoMQa8GBhFOrMFk03buei6yRAlcmOM0SEmU9d90b19jxcM1o5+sGnsc/e+z/l6ztf/HFFVMnns6QieeOCHBePGsHM+wrOtvLG2C4WRVDSSygNV7sCjlspxwDnPB44aols/DXk+mbMBmx/6OseITF1CuOtfevkPh2Uu+/jbdX8lujSScRlT5r7/QDlAfsRmfzmpnkQ/H3H13gf6bBrBn1uqK8WylgEnU8eZmk1repbfchJG1TyKyIKEwuBHFd3lD3naY3O1siiwXsVoBV2VgM1ht/QQUJk2ByqKghsQziYQ8ifKgexIXmuyzC4r67Y7R+xPAfuB/Nn3Cpva+0s7khpQVtZtd4bt51BWxtBYAiciprG7c7D4SixzU9PYalDL6110Ifb/w8W9eY7JqFeFHbO8fPGyLHwwFHJNJTSgwtVTB9oaw9BlQ+tO93vOxypoaQnfEYlI43SeCHDC4TDq9+51/h5fxr33q0ZfV9g04wat9Q943rjJgCp3952W2i8Bi6eDvdsfKj0cK/DYMRyXL4/sUJUmIHd2zYMezsvLaamp4WpcWN3BXSiHpuMwbGbZlnZ8tXY4rgosy+G7oRwQ0cAsd28YGgqfU5UjCZQDLALxDg+Hv/P5Rqvj4hwrS8izXzWb4spwc1GgENFnkpWRzxeuB+ssUHgLdb9UVdt8vpGdKQpze7n7y1U3DBChNRUuqOo9c+0+qpKKxyZqtAIYla7gY4JszAAQri93BSsMRZoyBcUC+w3Q3AyOA4sNhAOZ0q7Iq0b2vUNvK5zPgP+/H8+Zetdoa6uOikhdGurxebwvJY8Iz3V1rTMNAH+opEuQj5KTT/qA1yC+wyUjBm12OidaUtCcPNNX2h0Hx2JG69VulANZAJZJwfU7rzd/FHixuXniTdM0m4GtSQT7bTartqEh9yfImUEzkwKZmTwmo5a5JwkYBfcDL01/RkR5y8iWhtPBknB8ZxwtU9UjwOrrKCeizzc25nTGg1F/turEHoU9wMLpDvWKf8DTmNCAKnd/tqUTF4ElMXJ+A5rWDJS+41WsGWzALhJ+ErBWrLj9g+pqojHxlXJX8HGUg0BsR/x1yhxf3jm4cSzpQFLp6tmi6PEE7g1ZhtZ91ufpSZUAFa6gC+UoQslNaSmypT1U8mHKiUgEKS8KfgF4EpYunFI16tsHin+OG0LcgQK7yj7g6cSzpva2D3hKVNG0Y3mVO1BkqfSlmJrHBQ4uvM12gJHc6ETW8HZVfMRmXvyxxNC1Z/o839zyXlDuCr4nsC11J+MXueaVJWn6yPv+/pJtc9oLTNN4AeTvNGByd3rlhE2x9s5pLwDoHCy+grDzWmOZ95lUtLYj5Bma126Y8eX0/zj/ADxGyViSg4BXAAAAAElFTkSuQmCC">
|
|
43
|
+
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PScwIDAgMjk0LjgyNSAyNTguOTgyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnPg0KPHBhdGggZmlsbD0nIzgwODBGMicgZD0nTTk3LjAyMSw5OS4wMTZsNDguNDMyLTI3Ljk2MmMxLjIxMi0wLjcsMi43MDYtMC43LDMuOTE4LDBsNDguNDMzLDI3Ljk2MiBjMS4yMTEsMC43LDEuOTU5LDEuOTkzLDEuOTU5LDMuMzkzdjU1LjkyNGMwLDEuMzk5LTAuNzQ4LDIuNjkzLTEuOTU5LDMuMzk0bC00OC40MzMsMjcuOTYyYy0xLjIxMiwwLjctMi43MDYsMC43LTMuOTE4LDAgbC00OC40MzItMjcuOTYyYy0xLjIxMi0wLjctMS45NTktMS45OTQtMS45NTktMy4zOTR2LTU1LjkyNEM5NS4wNjMsMTAxLjAwOSw5NS44MSw5OS43MTYsOTcuMDIxLDk5LjAxNicvPg0KPHBhdGggZmlsbD0nIzRCMzJDMycgZD0nTTI3My4zMzYsMTI0LjQ4OEwyMTUuNDY5LDIzLjgxNmMtMi4xMDItMy42NC01Ljk4NS02LjMyNS0xMC4xODgtNi4zMjVIODkuNTQ1IGMtNC4yMDQsMC04LjA4OCwyLjY4NS0xMC4xOSw2LjMyNWwtNTcuODY3LDEwMC40NWMtMi4xMDIsMy42NDEtMi4xMDIsOC4yMzYsMCwxMS44NzdsNTcuODY3LDk5Ljg0NyBjMi4xMDIsMy42NCw1Ljk4Niw1LjUwMSwxMC4xOSw1LjUwMWgxMTUuNzM1YzQuMjAzLDAsOC4wODctMS44MDUsMTAuMTg4LTUuNDQ2bDU3Ljg2Ny0xMDAuMDEgQzI3NS40MzksMTMyLjM5NiwyNzUuNDM5LDEyOC4xMjgsMjczLjMzNiwxMjQuNDg4IE0yMjUuNDE5LDE3Mi44OThjMCwxLjQ4LTAuODkxLDIuODQ5LTIuMTc0LDMuNTlsLTczLjcxLDQyLjUyNyBjLTEuMjgyLDAuNzQtMi44ODgsMC43NC00LjE3LDBsLTczLjc2Ny00Mi41MjdjLTEuMjgyLTAuNzQxLTIuMTc5LTIuMTA5LTIuMTc5LTMuNTlWODcuODQzYzAtMS40ODEsMC44ODQtMi44NDksMi4xNjctMy41OSBsNzMuNzA3LTQyLjUyN2MxLjI4Mi0wLjc0MSwyLjg4Ni0wLjc0MSw0LjE2OCwwbDczLjc3Miw0Mi41MjdjMS4yODMsMC43NDEsMi4xODYsMi4xMDksMi4xODYsMy41OVYxNzIuODk4eicvPg0KPC9zdmc+">
|
|
44
|
+
<style>
|
|
45
|
+
body {
|
|
46
|
+
font-family: Arial, "Helvetica Neue", Helvetica, sans-serif;
|
|
47
|
+
font-size: 16px;
|
|
48
|
+
font-weight: normal;
|
|
49
|
+
margin: 0;
|
|
50
|
+
padding: 0;
|
|
51
|
+
color: #333;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
#overview {
|
|
55
|
+
padding: 20px 30px;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
td,
|
|
59
|
+
th {
|
|
60
|
+
padding: 5px 10px;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
h1 {
|
|
64
|
+
margin: 0;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
table {
|
|
68
|
+
margin: 30px;
|
|
69
|
+
width: calc(100% - 60px);
|
|
70
|
+
max-width: 1000px;
|
|
71
|
+
border-radius: 5px;
|
|
72
|
+
border: 1px solid #ddd;
|
|
73
|
+
border-spacing: 0;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
th {
|
|
77
|
+
font-weight: 400;
|
|
78
|
+
font-size: medium;
|
|
79
|
+
text-align: left;
|
|
80
|
+
cursor: pointer;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
td.clr-1,
|
|
84
|
+
td.clr-2,
|
|
85
|
+
th span {
|
|
86
|
+
font-weight: 700;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
th span {
|
|
90
|
+
float: right;
|
|
91
|
+
margin-left: 20px;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
th span::after {
|
|
95
|
+
content: "";
|
|
96
|
+
clear: both;
|
|
97
|
+
display: block;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
tr:last-child td {
|
|
101
|
+
border-bottom: none;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
tr td:first-child,
|
|
105
|
+
tr td:last-child {
|
|
106
|
+
color: #9da0a4;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
#overview.bg-0,
|
|
110
|
+
tr.bg-0 th {
|
|
111
|
+
color: #468847;
|
|
112
|
+
background: #dff0d8;
|
|
113
|
+
border-bottom: 1px solid #d6e9c6;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
#overview.bg-1,
|
|
117
|
+
tr.bg-1 th {
|
|
118
|
+
color: #f0ad4e;
|
|
119
|
+
background: #fcf8e3;
|
|
120
|
+
border-bottom: 1px solid #fbeed5;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
#overview.bg-2,
|
|
124
|
+
tr.bg-2 th {
|
|
125
|
+
color: #b94a48;
|
|
126
|
+
background: #f2dede;
|
|
127
|
+
border-bottom: 1px solid #eed3d7;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
td {
|
|
131
|
+
border-bottom: 1px solid #ddd;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
td.clr-1 {
|
|
135
|
+
color: #f0ad4e;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
td.clr-2 {
|
|
139
|
+
color: #b94a48;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
td a {
|
|
143
|
+
color: #3a33d1;
|
|
144
|
+
text-decoration: none;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
td a:hover {
|
|
148
|
+
color: #272296;
|
|
149
|
+
text-decoration: underline;
|
|
150
|
+
}
|
|
151
|
+
</style>
|
|
152
|
+
</head>
|
|
153
|
+
<body>
|
|
154
|
+
<div id="overview" class="bg-${reportColor}">
|
|
155
|
+
<h1>ESLint Report</h1>
|
|
156
|
+
<div>
|
|
157
|
+
<span>${reportSummary}</span> - Generated on ${date}
|
|
158
|
+
</div>
|
|
159
|
+
</div>
|
|
160
|
+
<table>
|
|
161
|
+
<tbody>
|
|
162
|
+
${results}
|
|
163
|
+
</tbody>
|
|
164
|
+
</table>
|
|
165
|
+
<script type="text/javascript">
|
|
166
|
+
var groups = document.querySelectorAll("tr[data-group]");
|
|
167
|
+
for (i = 0; i < groups.length; i++) {
|
|
168
|
+
groups[i].addEventListener("click", function() {
|
|
169
|
+
var inGroup = document.getElementsByClassName(this.getAttribute("data-group"));
|
|
170
|
+
this.innerHTML = (this.innerHTML.indexOf("+") > -1) ? this.innerHTML.replace("+", "-") : this.innerHTML.replace("-", "+");
|
|
171
|
+
for (var j = 0; j < inGroup.length; j++) {
|
|
172
|
+
inGroup[j].style.display = (inGroup[j].style.display !== "none") ? "none" : "table-row";
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
</script>
|
|
177
|
+
</body>
|
|
178
|
+
</html>
|
|
179
|
+
`.trimStart();
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Given a word and a count, append an s if count is not one.
|
|
184
|
+
* @param {string} word A word in its singular form.
|
|
185
|
+
* @param {number} count A number controlling whether word should be pluralized.
|
|
186
|
+
* @returns {string} The original word with an s on the end if count is not one.
|
|
187
|
+
*/
|
|
188
|
+
function pluralize(word, count) {
|
|
189
|
+
return count === 1 ? word : `${word}s`;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* Renders text along the template of x problems (x errors, x warnings)
|
|
194
|
+
* @param {string} totalErrors Total errors
|
|
195
|
+
* @param {string} totalWarnings Total warnings
|
|
196
|
+
* @returns {string} The formatted string, pluralized where necessary
|
|
197
|
+
*/
|
|
198
|
+
function renderSummary(totalErrors, totalWarnings) {
|
|
199
|
+
const totalProblems = totalErrors + totalWarnings;
|
|
200
|
+
let renderedText = `${totalProblems} ${pluralize("problem", totalProblems)}`;
|
|
201
|
+
|
|
202
|
+
if (totalProblems !== 0) {
|
|
203
|
+
renderedText += ` (${totalErrors} ${pluralize("error", totalErrors)}, ${totalWarnings} ${pluralize("warning", totalWarnings)})`;
|
|
204
|
+
}
|
|
205
|
+
return renderedText;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* Get the color based on whether there are errors/warnings...
|
|
210
|
+
* @param {string} totalErrors Total errors
|
|
211
|
+
* @param {string} totalWarnings Total warnings
|
|
212
|
+
* @returns {number} The color code (0 = green, 1 = yellow, 2 = red)
|
|
213
|
+
*/
|
|
214
|
+
function renderColor(totalErrors, totalWarnings) {
|
|
215
|
+
if (totalErrors !== 0) {
|
|
216
|
+
return 2;
|
|
217
|
+
}
|
|
218
|
+
if (totalWarnings !== 0) {
|
|
219
|
+
return 1;
|
|
220
|
+
}
|
|
221
|
+
return 0;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Get HTML (table row) describing a single message.
|
|
226
|
+
* @param {Object} it data for the message.
|
|
227
|
+
* @returns {string} HTML (table row) describing the message.
|
|
228
|
+
*/
|
|
229
|
+
function messageTemplate(it) {
|
|
230
|
+
const {
|
|
231
|
+
parentIndex,
|
|
232
|
+
lineNumber,
|
|
233
|
+
columnNumber,
|
|
234
|
+
severityNumber,
|
|
235
|
+
severityName,
|
|
236
|
+
message,
|
|
237
|
+
ruleUrl,
|
|
238
|
+
ruleId,
|
|
239
|
+
} = it;
|
|
240
|
+
|
|
241
|
+
return `
|
|
242
|
+
<tr style="display: none;" class="f-${parentIndex}">
|
|
243
|
+
<td>${lineNumber}:${columnNumber}</td>
|
|
244
|
+
<td class="clr-${severityNumber}">${severityName}</td>
|
|
245
|
+
<td>${encodeHTML(message)}</td>
|
|
246
|
+
<td>
|
|
247
|
+
<a href="${ruleUrl ? ruleUrl : ""}" target="_blank" rel="noopener noreferrer">${ruleId ? ruleId : ""}</a>
|
|
248
|
+
</td>
|
|
249
|
+
</tr>
|
|
250
|
+
`.trimStart();
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* Get HTML (table rows) describing the messages.
|
|
255
|
+
* @param {Array} messages Messages.
|
|
256
|
+
* @param {number} parentIndex Index of the parent HTML row.
|
|
257
|
+
* @param {Object} rulesMeta Dictionary containing metadata for each rule executed by the analysis.
|
|
258
|
+
* @returns {string} HTML (table rows) describing the messages.
|
|
259
|
+
*/
|
|
260
|
+
function renderMessages(messages, parentIndex, rulesMeta) {
|
|
261
|
+
/**
|
|
262
|
+
* Get HTML (table row) describing a message.
|
|
263
|
+
* @param {Object} message Message.
|
|
264
|
+
* @returns {string} HTML (table row) describing a message.
|
|
265
|
+
*/
|
|
266
|
+
return messages
|
|
267
|
+
.map(message => {
|
|
268
|
+
const lineNumber = message.line || 0;
|
|
269
|
+
const columnNumber = message.column || 0;
|
|
270
|
+
let ruleUrl;
|
|
271
|
+
|
|
272
|
+
if (rulesMeta) {
|
|
273
|
+
const meta = rulesMeta[message.ruleId];
|
|
274
|
+
|
|
275
|
+
if (meta && meta.docs && meta.docs.url) {
|
|
276
|
+
ruleUrl = meta.docs.url;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
return messageTemplate({
|
|
281
|
+
parentIndex,
|
|
282
|
+
lineNumber,
|
|
283
|
+
columnNumber,
|
|
284
|
+
severityNumber: message.severity,
|
|
285
|
+
severityName: message.severity === 1 ? "Warning" : "Error",
|
|
286
|
+
message: message.message,
|
|
287
|
+
ruleId: message.ruleId,
|
|
288
|
+
ruleUrl,
|
|
289
|
+
});
|
|
290
|
+
})
|
|
291
|
+
.join("\n");
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
/**
|
|
295
|
+
* Get HTML (table row) describing the result for a single file.
|
|
296
|
+
* @param {Object} it data for the file.
|
|
297
|
+
* @returns {string} HTML (table row) describing the result for the file.
|
|
298
|
+
*/
|
|
299
|
+
function resultTemplate(it) {
|
|
300
|
+
const { color, index, filePath, summary } = it;
|
|
301
|
+
|
|
302
|
+
return `
|
|
303
|
+
<tr class="bg-${color}" data-group="f-${index}">
|
|
304
|
+
<th colspan="4">
|
|
305
|
+
[+] ${encodeHTML(filePath)}
|
|
306
|
+
<span>${encodeHTML(summary)}</span>
|
|
307
|
+
</th>
|
|
308
|
+
</tr>
|
|
309
|
+
`.trimStart();
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
/**
|
|
313
|
+
* Render the results.
|
|
314
|
+
* @param {Array} results Test results.
|
|
315
|
+
* @param {Object} rulesMeta Dictionary containing metadata for each rule executed by the analysis.
|
|
316
|
+
* @returns {string} HTML string describing the results.
|
|
317
|
+
*/
|
|
318
|
+
function renderResults(results, rulesMeta) {
|
|
319
|
+
return results
|
|
320
|
+
.map(
|
|
321
|
+
(result, index) =>
|
|
322
|
+
resultTemplate({
|
|
323
|
+
index,
|
|
324
|
+
color: renderColor(result.errorCount, result.warningCount),
|
|
325
|
+
filePath: result.filePath,
|
|
326
|
+
summary: renderSummary(
|
|
327
|
+
result.errorCount,
|
|
328
|
+
result.warningCount,
|
|
329
|
+
),
|
|
330
|
+
}) + renderMessages(result.messages, index, rulesMeta),
|
|
331
|
+
)
|
|
332
|
+
.join("\n");
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
//------------------------------------------------------------------------------
|
|
336
|
+
// Public Interface
|
|
337
|
+
//------------------------------------------------------------------------------
|
|
338
|
+
|
|
339
|
+
module.exports = function (results, data) {
|
|
340
|
+
let totalErrors, totalWarnings;
|
|
341
|
+
|
|
342
|
+
const metaData = data ? data.rulesMeta : {};
|
|
343
|
+
|
|
344
|
+
totalErrors = 0;
|
|
345
|
+
totalWarnings = 0;
|
|
346
|
+
|
|
347
|
+
// Iterate over results to get totals
|
|
348
|
+
results.forEach(result => {
|
|
349
|
+
totalErrors += result.errorCount;
|
|
350
|
+
totalWarnings += result.warningCount;
|
|
351
|
+
});
|
|
352
|
+
|
|
353
|
+
return pageTemplate({
|
|
354
|
+
date: new Date(),
|
|
355
|
+
reportColor: renderColor(totalErrors, totalWarnings),
|
|
356
|
+
reportSummary: renderSummary(totalErrors, totalWarnings),
|
|
357
|
+
results: renderResults(results, metaData),
|
|
358
|
+
});
|
|
359
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview JSON reporter, including rules metadata
|
|
3
|
+
* @author Chris Meyer
|
|
4
|
+
*/
|
|
5
|
+
"use strict";
|
|
6
|
+
|
|
7
|
+
//------------------------------------------------------------------------------
|
|
8
|
+
// Public Interface
|
|
9
|
+
//------------------------------------------------------------------------------
|
|
10
|
+
|
|
11
|
+
module.exports = function (results, data) {
|
|
12
|
+
return JSON.stringify({
|
|
13
|
+
results,
|
|
14
|
+
metadata: data,
|
|
15
|
+
});
|
|
16
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview JSON reporter
|
|
3
|
+
* @author Burak Yigit Kaya aka BYK
|
|
4
|
+
*/
|
|
5
|
+
"use strict";
|
|
6
|
+
|
|
7
|
+
//------------------------------------------------------------------------------
|
|
8
|
+
// Public Interface
|
|
9
|
+
//------------------------------------------------------------------------------
|
|
10
|
+
|
|
11
|
+
module.exports = function (results) {
|
|
12
|
+
return JSON.stringify(results);
|
|
13
|
+
};
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Stylish reporter
|
|
3
|
+
* @author Sindre Sorhus
|
|
4
|
+
*/
|
|
5
|
+
"use strict";
|
|
6
|
+
|
|
7
|
+
const util = require("node:util"),
|
|
8
|
+
table = require("../../shared/text-table");
|
|
9
|
+
|
|
10
|
+
//------------------------------------------------------------------------------
|
|
11
|
+
// Helpers
|
|
12
|
+
//------------------------------------------------------------------------------
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Returns a styling function based on the color option.
|
|
16
|
+
* @param {boolean|undefined} color Indicates whether to use colors.
|
|
17
|
+
* @returns {Function} A function that styles text.
|
|
18
|
+
*/
|
|
19
|
+
function getStyleText(color) {
|
|
20
|
+
if (typeof color === "undefined") {
|
|
21
|
+
return (format, text) =>
|
|
22
|
+
util.styleText(format, text, { validateStream: true });
|
|
23
|
+
}
|
|
24
|
+
if (color) {
|
|
25
|
+
return (format, text) =>
|
|
26
|
+
util.styleText(format, text, { validateStream: false });
|
|
27
|
+
}
|
|
28
|
+
return (_, text) => text;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Given a word and a count, append an s if count is not one.
|
|
33
|
+
* @param {string} word A word in its singular form.
|
|
34
|
+
* @param {number} count A number controlling whether word should be pluralized.
|
|
35
|
+
* @returns {string} The original word with an s on the end if count is not one.
|
|
36
|
+
*/
|
|
37
|
+
function pluralize(word, count) {
|
|
38
|
+
return count === 1 ? word : `${word}s`;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
//------------------------------------------------------------------------------
|
|
42
|
+
// Public Interface
|
|
43
|
+
//------------------------------------------------------------------------------
|
|
44
|
+
|
|
45
|
+
module.exports = function (results, data) {
|
|
46
|
+
const styleText = getStyleText(data?.color);
|
|
47
|
+
|
|
48
|
+
let output = "\n",
|
|
49
|
+
errorCount = 0,
|
|
50
|
+
warningCount = 0,
|
|
51
|
+
fixableErrorCount = 0,
|
|
52
|
+
fixableWarningCount = 0,
|
|
53
|
+
summaryColor = "yellow";
|
|
54
|
+
|
|
55
|
+
results.forEach(result => {
|
|
56
|
+
const messages = result.messages;
|
|
57
|
+
|
|
58
|
+
if (messages.length === 0) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
errorCount += result.errorCount;
|
|
63
|
+
warningCount += result.warningCount;
|
|
64
|
+
fixableErrorCount += result.fixableErrorCount;
|
|
65
|
+
fixableWarningCount += result.fixableWarningCount;
|
|
66
|
+
|
|
67
|
+
output += `${styleText("underline", result.filePath)}\n`;
|
|
68
|
+
|
|
69
|
+
output += `${table(
|
|
70
|
+
messages.map(message => {
|
|
71
|
+
let messageType;
|
|
72
|
+
|
|
73
|
+
if (message.fatal || message.severity === 2) {
|
|
74
|
+
messageType = styleText("red", "error");
|
|
75
|
+
summaryColor = "red";
|
|
76
|
+
} else {
|
|
77
|
+
messageType = styleText("yellow", "warning");
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
return [
|
|
81
|
+
"",
|
|
82
|
+
String(message.line || 0),
|
|
83
|
+
String(message.column || 0),
|
|
84
|
+
messageType,
|
|
85
|
+
message.message.replace(/([^ ])\.$/u, "$1"),
|
|
86
|
+
message.ruleId ? styleText("dim", message.ruleId) : "",
|
|
87
|
+
];
|
|
88
|
+
}),
|
|
89
|
+
{
|
|
90
|
+
align: ["", "r", "l"],
|
|
91
|
+
stringLength(str) {
|
|
92
|
+
return util.stripVTControlCharacters(str).length;
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
)
|
|
96
|
+
.split("\n")
|
|
97
|
+
.map(el =>
|
|
98
|
+
el.replace(/(\d+)\s+(\d+)/u, (m, p1, p2) =>
|
|
99
|
+
styleText("dim", `${p1}:${p2}`),
|
|
100
|
+
),
|
|
101
|
+
)
|
|
102
|
+
.join("\n")}\n\n`;
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
const total = errorCount + warningCount;
|
|
106
|
+
|
|
107
|
+
/*
|
|
108
|
+
* We can't use a single `styleText` call like `styleText([summaryColor, "bold"], text)` here.
|
|
109
|
+
* This is a bug in `util.styleText` in Node.js versions earlier than v22.15.0 (https://github.com/nodejs/node/issues/56717).
|
|
110
|
+
* As a workaround, we use nested `styleText` calls.
|
|
111
|
+
*/
|
|
112
|
+
if (total > 0) {
|
|
113
|
+
output += `${styleText(
|
|
114
|
+
summaryColor,
|
|
115
|
+
styleText(
|
|
116
|
+
"bold",
|
|
117
|
+
[
|
|
118
|
+
"\u2716 ",
|
|
119
|
+
total,
|
|
120
|
+
pluralize(" problem", total),
|
|
121
|
+
" (",
|
|
122
|
+
errorCount,
|
|
123
|
+
pluralize(" error", errorCount),
|
|
124
|
+
", ",
|
|
125
|
+
warningCount,
|
|
126
|
+
pluralize(" warning", warningCount),
|
|
127
|
+
")",
|
|
128
|
+
].join(""),
|
|
129
|
+
),
|
|
130
|
+
)}\n`;
|
|
131
|
+
|
|
132
|
+
if (fixableErrorCount > 0 || fixableWarningCount > 0) {
|
|
133
|
+
output += `${styleText(
|
|
134
|
+
summaryColor,
|
|
135
|
+
styleText(
|
|
136
|
+
"bold",
|
|
137
|
+
[
|
|
138
|
+
" ",
|
|
139
|
+
fixableErrorCount,
|
|
140
|
+
pluralize(" error", fixableErrorCount),
|
|
141
|
+
" and ",
|
|
142
|
+
fixableWarningCount,
|
|
143
|
+
pluralize(" warning", fixableWarningCount),
|
|
144
|
+
" potentially fixable with the `--fix` option.",
|
|
145
|
+
].join(""),
|
|
146
|
+
),
|
|
147
|
+
)}\n`;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// Resets output color, for prevent change on top level
|
|
152
|
+
return total > 0 ? styleText("reset", output) : "";
|
|
153
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Defining the hashing function in one place.
|
|
3
|
+
* @author Michael Ficarra
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
//------------------------------------------------------------------------------
|
|
9
|
+
// Requirements
|
|
10
|
+
//------------------------------------------------------------------------------
|
|
11
|
+
|
|
12
|
+
const murmur = require("imurmurhash");
|
|
13
|
+
|
|
14
|
+
//------------------------------------------------------------------------------
|
|
15
|
+
// Helpers
|
|
16
|
+
//------------------------------------------------------------------------------
|
|
17
|
+
|
|
18
|
+
//------------------------------------------------------------------------------
|
|
19
|
+
// Private
|
|
20
|
+
//------------------------------------------------------------------------------
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* hash the given string
|
|
24
|
+
* @param {string} str the string to hash
|
|
25
|
+
* @returns {string} the hash
|
|
26
|
+
*/
|
|
27
|
+
function hash(str) {
|
|
28
|
+
return murmur(str).result().toString(36);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
//------------------------------------------------------------------------------
|
|
32
|
+
// Public Interface
|
|
33
|
+
//------------------------------------------------------------------------------
|
|
34
|
+
|
|
35
|
+
module.exports = hash;
|