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.
Files changed (420) hide show
  1. package/LICENSE +19 -0
  2. package/README.md +370 -0
  3. package/bin/eslint.js +195 -0
  4. package/conf/ecma-version.js +16 -0
  5. package/conf/globals.js +169 -0
  6. package/conf/replacements.json +26 -0
  7. package/conf/rule-type-list.json +91 -0
  8. package/lib/api.js +39 -0
  9. package/lib/cli-engine/formatters/formatters-meta.json +22 -0
  10. package/lib/cli-engine/formatters/gasoline.js +168 -0
  11. package/lib/cli-engine/formatters/html.js +359 -0
  12. package/lib/cli-engine/formatters/json-with-metadata.js +16 -0
  13. package/lib/cli-engine/formatters/json.js +13 -0
  14. package/lib/cli-engine/formatters/stylish.js +153 -0
  15. package/lib/cli-engine/hash.js +35 -0
  16. package/lib/cli-engine/lint-result-cache.js +220 -0
  17. package/lib/cli.js +607 -0
  18. package/lib/config/config-loader.js +683 -0
  19. package/lib/config/config.js +674 -0
  20. package/lib/config/default-config.js +78 -0
  21. package/lib/config/flat-config-array.js +217 -0
  22. package/lib/config/flat-config-schema.js +598 -0
  23. package/lib/config-api.js +12 -0
  24. package/lib/eslint/eslint-helpers.js +1462 -0
  25. package/lib/eslint/eslint.js +1364 -0
  26. package/lib/eslint/index.js +7 -0
  27. package/lib/eslint/worker.js +173 -0
  28. package/lib/languages/js/index.js +336 -0
  29. package/lib/languages/js/source-code/index.js +7 -0
  30. package/lib/languages/js/source-code/source-code.js +1178 -0
  31. package/lib/languages/js/source-code/token-store/backward-token-comment-cursor.js +61 -0
  32. package/lib/languages/js/source-code/token-store/backward-token-cursor.js +57 -0
  33. package/lib/languages/js/source-code/token-store/cursor.js +76 -0
  34. package/lib/languages/js/source-code/token-store/cursors.js +120 -0
  35. package/lib/languages/js/source-code/token-store/decorative-cursor.js +38 -0
  36. package/lib/languages/js/source-code/token-store/filter-cursor.js +42 -0
  37. package/lib/languages/js/source-code/token-store/forward-token-comment-cursor.js +65 -0
  38. package/lib/languages/js/source-code/token-store/forward-token-cursor.js +62 -0
  39. package/lib/languages/js/source-code/token-store/index.js +695 -0
  40. package/lib/languages/js/source-code/token-store/limit-cursor.js +39 -0
  41. package/lib/languages/js/source-code/token-store/padded-token-cursor.js +45 -0
  42. package/lib/languages/js/source-code/token-store/skip-cursor.js +41 -0
  43. package/lib/languages/js/source-code/token-store/utils.js +131 -0
  44. package/lib/languages/js/validate-language-options.js +196 -0
  45. package/lib/linter/apply-disable-directives.js +583 -0
  46. package/lib/linter/code-path-analysis/code-path-analyzer.js +828 -0
  47. package/lib/linter/code-path-analysis/code-path-segment.js +262 -0
  48. package/lib/linter/code-path-analysis/code-path-state.js +2370 -0
  49. package/lib/linter/code-path-analysis/code-path.js +332 -0
  50. package/lib/linter/code-path-analysis/debug-helpers.js +223 -0
  51. package/lib/linter/code-path-analysis/fork-context.js +374 -0
  52. package/lib/linter/code-path-analysis/id-generator.js +44 -0
  53. package/lib/linter/esquery.js +332 -0
  54. package/lib/linter/file-context.js +88 -0
  55. package/lib/linter/file-report.js +604 -0
  56. package/lib/linter/index.js +11 -0
  57. package/lib/linter/interpolate.js +50 -0
  58. package/lib/linter/linter.js +1614 -0
  59. package/lib/linter/rule-fixer.js +199 -0
  60. package/lib/linter/source-code-fixer.js +154 -0
  61. package/lib/linter/source-code-traverser.js +333 -0
  62. package/lib/linter/source-code-visitor.js +81 -0
  63. package/lib/linter/timing.js +209 -0
  64. package/lib/linter/vfile.js +115 -0
  65. package/lib/options.js +416 -0
  66. package/lib/rule-tester/index.js +7 -0
  67. package/lib/rule-tester/rule-tester.js +1817 -0
  68. package/lib/rules/accessor-pairs.js +420 -0
  69. package/lib/rules/array-bracket-newline.js +291 -0
  70. package/lib/rules/array-bracket-spacing.js +301 -0
  71. package/lib/rules/array-callback-return.js +493 -0
  72. package/lib/rules/array-element-newline.js +374 -0
  73. package/lib/rules/arrow-body-style.js +418 -0
  74. package/lib/rules/arrow-parens.js +237 -0
  75. package/lib/rules/arrow-spacing.js +188 -0
  76. package/lib/rules/block-scoped-var.js +137 -0
  77. package/lib/rules/block-spacing.js +202 -0
  78. package/lib/rules/brace-style.js +278 -0
  79. package/lib/rules/callback-return.js +216 -0
  80. package/lib/rules/camelcase.js +422 -0
  81. package/lib/rules/capitalized-comments.js +325 -0
  82. package/lib/rules/class-methods-use-this.js +250 -0
  83. package/lib/rules/comma-dangle.js +424 -0
  84. package/lib/rules/comma-spacing.js +205 -0
  85. package/lib/rules/comma-style.js +391 -0
  86. package/lib/rules/complexity.js +201 -0
  87. package/lib/rules/computed-property-spacing.js +251 -0
  88. package/lib/rules/consistent-return.js +221 -0
  89. package/lib/rules/consistent-this.js +179 -0
  90. package/lib/rules/constructor-super.js +453 -0
  91. package/lib/rules/curly.js +425 -0
  92. package/lib/rules/default-case-last.js +51 -0
  93. package/lib/rules/default-case.js +103 -0
  94. package/lib/rules/default-param-last.js +78 -0
  95. package/lib/rules/dot-location.js +138 -0
  96. package/lib/rules/dot-notation.js +216 -0
  97. package/lib/rules/eol-last.js +135 -0
  98. package/lib/rules/eqeqeq.js +210 -0
  99. package/lib/rules/for-direction.js +168 -0
  100. package/lib/rules/func-call-spacing.js +281 -0
  101. package/lib/rules/func-name-matching.js +338 -0
  102. package/lib/rules/func-names.js +194 -0
  103. package/lib/rules/func-style.js +221 -0
  104. package/lib/rules/function-call-argument-newline.js +166 -0
  105. package/lib/rules/function-paren-newline.js +368 -0
  106. package/lib/rules/generator-star-spacing.js +246 -0
  107. package/lib/rules/getter-return.js +242 -0
  108. package/lib/rules/global-require.js +117 -0
  109. package/lib/rules/grouped-accessor-pairs.js +268 -0
  110. package/lib/rules/guard-for-in.js +85 -0
  111. package/lib/rules/handle-callback-err.js +122 -0
  112. package/lib/rules/id-blacklist.js +241 -0
  113. package/lib/rules/id-denylist.js +223 -0
  114. package/lib/rules/id-length.js +217 -0
  115. package/lib/rules/id-match.js +363 -0
  116. package/lib/rules/implicit-arrow-linebreak.js +125 -0
  117. package/lib/rules/indent-legacy.js +1369 -0
  118. package/lib/rules/indent.js +2334 -0
  119. package/lib/rules/index.js +332 -0
  120. package/lib/rules/init-declarations.js +172 -0
  121. package/lib/rules/jsx-quotes.js +128 -0
  122. package/lib/rules/key-spacing.js +822 -0
  123. package/lib/rules/keyword-spacing.js +701 -0
  124. package/lib/rules/line-comment-position.js +157 -0
  125. package/lib/rules/linebreak-style.js +135 -0
  126. package/lib/rules/lines-around-comment.js +581 -0
  127. package/lib/rules/lines-around-directive.js +249 -0
  128. package/lib/rules/lines-between-class-members.js +358 -0
  129. package/lib/rules/logical-assignment-operators.js +688 -0
  130. package/lib/rules/max-classes-per-file.js +90 -0
  131. package/lib/rules/max-depth.js +159 -0
  132. package/lib/rules/max-len.js +497 -0
  133. package/lib/rules/max-lines-per-function.js +238 -0
  134. package/lib/rules/max-lines.js +189 -0
  135. package/lib/rules/max-nested-callbacks.js +115 -0
  136. package/lib/rules/max-params.js +148 -0
  137. package/lib/rules/max-statements-per-line.js +224 -0
  138. package/lib/rules/max-statements.js +188 -0
  139. package/lib/rules/multiline-comment-style.js +652 -0
  140. package/lib/rules/multiline-ternary.js +257 -0
  141. package/lib/rules/new-cap.js +277 -0
  142. package/lib/rules/new-parens.js +120 -0
  143. package/lib/rules/newline-after-var.js +307 -0
  144. package/lib/rules/newline-before-return.js +242 -0
  145. package/lib/rules/newline-per-chained-call.js +159 -0
  146. package/lib/rules/no-alert.js +149 -0
  147. package/lib/rules/no-array-constructor.js +195 -0
  148. package/lib/rules/no-async-promise-executor.js +45 -0
  149. package/lib/rules/no-await-in-loop.js +115 -0
  150. package/lib/rules/no-bitwise.js +145 -0
  151. package/lib/rules/no-buffer-constructor.js +74 -0
  152. package/lib/rules/no-caller.js +52 -0
  153. package/lib/rules/no-case-declarations.js +80 -0
  154. package/lib/rules/no-catch-shadow.js +96 -0
  155. package/lib/rules/no-class-assign.js +66 -0
  156. package/lib/rules/no-compare-neg-zero.js +74 -0
  157. package/lib/rules/no-cond-assign.js +175 -0
  158. package/lib/rules/no-confusing-arrow.js +127 -0
  159. package/lib/rules/no-console.js +221 -0
  160. package/lib/rules/no-const-assign.js +73 -0
  161. package/lib/rules/no-constant-binary-expression.js +603 -0
  162. package/lib/rules/no-constant-condition.js +177 -0
  163. package/lib/rules/no-constructor-return.js +62 -0
  164. package/lib/rules/no-continue.js +38 -0
  165. package/lib/rules/no-control-regex.js +142 -0
  166. package/lib/rules/no-debugger.js +41 -0
  167. package/lib/rules/no-delete-var.js +42 -0
  168. package/lib/rules/no-div-regex.js +60 -0
  169. package/lib/rules/no-dupe-args.js +92 -0
  170. package/lib/rules/no-dupe-class-members.js +117 -0
  171. package/lib/rules/no-dupe-else-if.js +145 -0
  172. package/lib/rules/no-dupe-keys.js +165 -0
  173. package/lib/rules/no-duplicate-case.js +78 -0
  174. package/lib/rules/no-duplicate-imports.js +368 -0
  175. package/lib/rules/no-else-return.js +450 -0
  176. package/lib/rules/no-empty-character-class.js +83 -0
  177. package/lib/rules/no-empty-function.js +236 -0
  178. package/lib/rules/no-empty-pattern.js +85 -0
  179. package/lib/rules/no-empty-static-block.js +73 -0
  180. package/lib/rules/no-empty.js +153 -0
  181. package/lib/rules/no-eq-null.js +51 -0
  182. package/lib/rules/no-eval.js +295 -0
  183. package/lib/rules/no-ex-assign.js +57 -0
  184. package/lib/rules/no-extend-native.js +180 -0
  185. package/lib/rules/no-extra-bind.js +224 -0
  186. package/lib/rules/no-extra-boolean-cast.js +420 -0
  187. package/lib/rules/no-extra-label.js +169 -0
  188. package/lib/rules/no-extra-parens.js +1669 -0
  189. package/lib/rules/no-extra-semi.js +167 -0
  190. package/lib/rules/no-fallthrough.js +260 -0
  191. package/lib/rules/no-floating-decimal.js +99 -0
  192. package/lib/rules/no-func-assign.js +77 -0
  193. package/lib/rules/no-global-assign.js +101 -0
  194. package/lib/rules/no-implicit-coercion.js +468 -0
  195. package/lib/rules/no-implicit-globals.js +187 -0
  196. package/lib/rules/no-implied-eval.js +170 -0
  197. package/lib/rules/no-import-assign.js +227 -0
  198. package/lib/rules/no-inline-comments.js +115 -0
  199. package/lib/rules/no-inner-declarations.js +147 -0
  200. package/lib/rules/no-invalid-regexp.js +244 -0
  201. package/lib/rules/no-invalid-this.js +178 -0
  202. package/lib/rules/no-irregular-whitespace.js +292 -0
  203. package/lib/rules/no-iterator.js +48 -0
  204. package/lib/rules/no-label-var.js +78 -0
  205. package/lib/rules/no-labels.js +156 -0
  206. package/lib/rules/no-lone-blocks.js +140 -0
  207. package/lib/rules/no-lonely-if.js +126 -0
  208. package/lib/rules/no-loop-func.js +267 -0
  209. package/lib/rules/no-loss-of-precision.js +249 -0
  210. package/lib/rules/no-magic-numbers.js +365 -0
  211. package/lib/rules/no-misleading-character-class.js +595 -0
  212. package/lib/rules/no-mixed-operators.js +253 -0
  213. package/lib/rules/no-mixed-requires.js +267 -0
  214. package/lib/rules/no-mixed-spaces-and-tabs.js +148 -0
  215. package/lib/rules/no-multi-assign.js +66 -0
  216. package/lib/rules/no-multi-spaces.js +179 -0
  217. package/lib/rules/no-multi-str.js +67 -0
  218. package/lib/rules/no-multiple-empty-lines.js +210 -0
  219. package/lib/rules/no-native-reassign.js +114 -0
  220. package/lib/rules/no-negated-condition.js +100 -0
  221. package/lib/rules/no-negated-in-lhs.js +59 -0
  222. package/lib/rules/no-nested-ternary.js +46 -0
  223. package/lib/rules/no-new-func.js +96 -0
  224. package/lib/rules/no-new-native-nonconstructor.js +70 -0
  225. package/lib/rules/no-new-object.js +76 -0
  226. package/lib/rules/no-new-require.js +67 -0
  227. package/lib/rules/no-new-symbol.js +74 -0
  228. package/lib/rules/no-new-wrappers.js +62 -0
  229. package/lib/rules/no-new.js +42 -0
  230. package/lib/rules/no-nonoctal-decimal-escape.js +176 -0
  231. package/lib/rules/no-obj-calls.js +99 -0
  232. package/lib/rules/no-object-constructor.js +124 -0
  233. package/lib/rules/no-octal-escape.js +53 -0
  234. package/lib/rules/no-octal.js +42 -0
  235. package/lib/rules/no-param-reassign.js +248 -0
  236. package/lib/rules/no-path-concat.js +79 -0
  237. package/lib/rules/no-plusplus.js +102 -0
  238. package/lib/rules/no-process-env.js +68 -0
  239. package/lib/rules/no-process-exit.js +67 -0
  240. package/lib/rules/no-promise-executor-return.js +264 -0
  241. package/lib/rules/no-proto.js +45 -0
  242. package/lib/rules/no-prototype-builtins.js +181 -0
  243. package/lib/rules/no-redeclare.js +173 -0
  244. package/lib/rules/no-regex-spaces.js +219 -0
  245. package/lib/rules/no-restricted-exports.js +227 -0
  246. package/lib/rules/no-restricted-globals.js +266 -0
  247. package/lib/rules/no-restricted-imports.js +892 -0
  248. package/lib/rules/no-restricted-modules.js +249 -0
  249. package/lib/rules/no-restricted-properties.js +233 -0
  250. package/lib/rules/no-restricted-syntax.js +74 -0
  251. package/lib/rules/no-return-assign.js +87 -0
  252. package/lib/rules/no-return-await.js +162 -0
  253. package/lib/rules/no-script-url.js +68 -0
  254. package/lib/rules/no-self-assign.js +186 -0
  255. package/lib/rules/no-self-compare.js +77 -0
  256. package/lib/rules/no-sequences.js +158 -0
  257. package/lib/rules/no-setter-return.js +224 -0
  258. package/lib/rules/no-shadow-restricted-names.js +113 -0
  259. package/lib/rules/no-shadow.js +624 -0
  260. package/lib/rules/no-spaced-func.js +105 -0
  261. package/lib/rules/no-sparse-arrays.js +68 -0
  262. package/lib/rules/no-sync.js +81 -0
  263. package/lib/rules/no-tabs.js +110 -0
  264. package/lib/rules/no-template-curly-in-string.js +45 -0
  265. package/lib/rules/no-ternary.js +38 -0
  266. package/lib/rules/no-this-before-super.js +365 -0
  267. package/lib/rules/no-throw-literal.js +46 -0
  268. package/lib/rules/no-trailing-spaces.js +227 -0
  269. package/lib/rules/no-unassigned-vars.js +80 -0
  270. package/lib/rules/no-undef-init.js +101 -0
  271. package/lib/rules/no-undef.js +84 -0
  272. package/lib/rules/no-undefined.js +85 -0
  273. package/lib/rules/no-underscore-dangle.js +383 -0
  274. package/lib/rules/no-unexpected-multiline.js +130 -0
  275. package/lib/rules/no-unmodified-loop-condition.js +360 -0
  276. package/lib/rules/no-unneeded-ternary.js +232 -0
  277. package/lib/rules/no-unreachable-loop.js +190 -0
  278. package/lib/rules/no-unreachable.js +300 -0
  279. package/lib/rules/no-unsafe-finally.js +119 -0
  280. package/lib/rules/no-unsafe-negation.js +152 -0
  281. package/lib/rules/no-unsafe-optional-chaining.js +221 -0
  282. package/lib/rules/no-unused-expressions.js +227 -0
  283. package/lib/rules/no-unused-labels.js +158 -0
  284. package/lib/rules/no-unused-private-class-members.js +219 -0
  285. package/lib/rules/no-unused-vars.js +1739 -0
  286. package/lib/rules/no-use-before-define.js +446 -0
  287. package/lib/rules/no-useless-assignment.js +657 -0
  288. package/lib/rules/no-useless-backreference.js +263 -0
  289. package/lib/rules/no-useless-call.js +95 -0
  290. package/lib/rules/no-useless-catch.js +57 -0
  291. package/lib/rules/no-useless-computed-key.js +204 -0
  292. package/lib/rules/no-useless-concat.js +121 -0
  293. package/lib/rules/no-useless-constructor.js +262 -0
  294. package/lib/rules/no-useless-escape.js +406 -0
  295. package/lib/rules/no-useless-rename.js +202 -0
  296. package/lib/rules/no-useless-return.js +401 -0
  297. package/lib/rules/no-var.js +367 -0
  298. package/lib/rules/no-void.js +69 -0
  299. package/lib/rules/no-warning-comments.js +209 -0
  300. package/lib/rules/no-whitespace-before-property.js +150 -0
  301. package/lib/rules/no-with.js +37 -0
  302. package/lib/rules/nonblock-statement-body-position.js +164 -0
  303. package/lib/rules/object-curly-newline.js +383 -0
  304. package/lib/rules/object-curly-spacing.js +369 -0
  305. package/lib/rules/object-property-newline.js +151 -0
  306. package/lib/rules/object-shorthand.js +652 -0
  307. package/lib/rules/one-var-declaration-per-line.js +117 -0
  308. package/lib/rules/one-var.js +717 -0
  309. package/lib/rules/operator-assignment.js +270 -0
  310. package/lib/rules/operator-linebreak.js +315 -0
  311. package/lib/rules/padded-blocks.js +366 -0
  312. package/lib/rules/padding-line-between-statements.js +612 -0
  313. package/lib/rules/prefer-arrow-callback.js +437 -0
  314. package/lib/rules/prefer-const.js +546 -0
  315. package/lib/rules/prefer-destructuring.js +332 -0
  316. package/lib/rules/prefer-exponentiation-operator.js +235 -0
  317. package/lib/rules/prefer-named-capture-group.js +197 -0
  318. package/lib/rules/prefer-numeric-literals.js +157 -0
  319. package/lib/rules/prefer-object-has-own.js +148 -0
  320. package/lib/rules/prefer-object-spread.js +319 -0
  321. package/lib/rules/prefer-promise-reject-errors.js +154 -0
  322. package/lib/rules/prefer-reflect.js +150 -0
  323. package/lib/rules/prefer-regex-literals.js +605 -0
  324. package/lib/rules/prefer-rest-params.js +117 -0
  325. package/lib/rules/prefer-spread.js +91 -0
  326. package/lib/rules/prefer-template.js +347 -0
  327. package/lib/rules/preserve-caught-error.js +535 -0
  328. package/lib/rules/quote-props.js +394 -0
  329. package/lib/rules/quotes.js +416 -0
  330. package/lib/rules/radix.js +193 -0
  331. package/lib/rules/require-atomic-updates.js +365 -0
  332. package/lib/rules/require-await.js +184 -0
  333. package/lib/rules/require-unicode-regexp.js +317 -0
  334. package/lib/rules/require-yield.js +86 -0
  335. package/lib/rules/rest-spread-spacing.js +150 -0
  336. package/lib/rules/semi-spacing.js +297 -0
  337. package/lib/rules/semi-style.js +218 -0
  338. package/lib/rules/semi.js +476 -0
  339. package/lib/rules/sort-imports.js +319 -0
  340. package/lib/rules/sort-keys.js +268 -0
  341. package/lib/rules/sort-vars.js +140 -0
  342. package/lib/rules/space-before-blocks.js +232 -0
  343. package/lib/rules/space-before-function-paren.js +202 -0
  344. package/lib/rules/space-in-parens.js +374 -0
  345. package/lib/rules/space-infix-ops.js +249 -0
  346. package/lib/rules/space-unary-ops.js +400 -0
  347. package/lib/rules/spaced-comment.js +447 -0
  348. package/lib/rules/strict.js +314 -0
  349. package/lib/rules/switch-colon-spacing.js +158 -0
  350. package/lib/rules/symbol-description.js +70 -0
  351. package/lib/rules/template-curly-spacing.js +168 -0
  352. package/lib/rules/template-tag-spacing.js +121 -0
  353. package/lib/rules/unicode-bom.js +73 -0
  354. package/lib/rules/use-isnan.js +268 -0
  355. package/lib/rules/utils/ast-utils.js +2828 -0
  356. package/lib/rules/utils/char-source.js +247 -0
  357. package/lib/rules/utils/fix-tracker.js +125 -0
  358. package/lib/rules/utils/keywords.js +67 -0
  359. package/lib/rules/utils/lazy-loading-rule-map.js +118 -0
  360. package/lib/rules/utils/regular-expressions.js +58 -0
  361. package/lib/rules/utils/unicode/index.js +16 -0
  362. package/lib/rules/utils/unicode/is-combining-character.js +13 -0
  363. package/lib/rules/utils/unicode/is-emoji-modifier.js +13 -0
  364. package/lib/rules/utils/unicode/is-regional-indicator-symbol.js +13 -0
  365. package/lib/rules/utils/unicode/is-surrogate-pair.js +14 -0
  366. package/lib/rules/valid-typeof.js +171 -0
  367. package/lib/rules/vars-on-top.js +165 -0
  368. package/lib/rules/wrap-iife.js +238 -0
  369. package/lib/rules/wrap-regex.js +91 -0
  370. package/lib/rules/yield-star-spacing.js +158 -0
  371. package/lib/rules/yoda.js +362 -0
  372. package/lib/services/parser-service.js +64 -0
  373. package/lib/services/processor-service.js +100 -0
  374. package/lib/services/suppressions-service.js +302 -0
  375. package/lib/services/warning-service.js +87 -0
  376. package/lib/shared/ajv.js +34 -0
  377. package/lib/shared/assert.js +21 -0
  378. package/lib/shared/ast-utils.js +30 -0
  379. package/lib/shared/deep-merge-arrays.js +62 -0
  380. package/lib/shared/directives.js +16 -0
  381. package/lib/shared/flags.js +89 -0
  382. package/lib/shared/logging.js +38 -0
  383. package/lib/shared/naming.js +109 -0
  384. package/lib/shared/option-utils.js +63 -0
  385. package/lib/shared/relative-module-resolver.js +28 -0
  386. package/lib/shared/runtime-info.js +177 -0
  387. package/lib/shared/serialization.js +78 -0
  388. package/lib/shared/severity.js +49 -0
  389. package/lib/shared/stats.js +30 -0
  390. package/lib/shared/string-utils.js +58 -0
  391. package/lib/shared/text-table.js +68 -0
  392. package/lib/shared/translate-cli-options.js +223 -0
  393. package/lib/shared/traverser.js +202 -0
  394. package/lib/types/config-api.d.ts +12 -0
  395. package/lib/types/index.d.ts +1482 -0
  396. package/lib/types/rules.d.ts +5603 -0
  397. package/lib/types/universal.d.ts +6 -0
  398. package/lib/types/use-at-your-own-risk.d.ts +34 -0
  399. package/lib/universal.js +10 -0
  400. package/lib/unsupported-api.js +26 -0
  401. package/messages/all-files-ignored.js +16 -0
  402. package/messages/all-matched-files-ignored.js +21 -0
  403. package/messages/config-file-missing.js +16 -0
  404. package/messages/config-plugin-missing.js +14 -0
  405. package/messages/config-serialize-function.js +30 -0
  406. package/messages/eslintrc-incompat.js +117 -0
  407. package/messages/eslintrc-plugins.js +27 -0
  408. package/messages/extend-config-missing.js +13 -0
  409. package/messages/failed-to-read-json.js +11 -0
  410. package/messages/file-not-found.js +10 -0
  411. package/messages/invalid-rule-options.js +17 -0
  412. package/messages/invalid-rule-severity.js +13 -0
  413. package/messages/no-config-found.js +15 -0
  414. package/messages/plugin-conflict.js +22 -0
  415. package/messages/plugin-invalid.js +16 -0
  416. package/messages/plugin-missing.js +19 -0
  417. package/messages/print-config-with-directory-path.js +8 -0
  418. package/messages/shared.js +23 -0
  419. package/messages/whitespace-found.js +11 -0
  420. 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
+ "<": "&#60;",
15
+ ">": "&#62;",
16
+ '"': "&#34;",
17
+ "'": "&#39;",
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;