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,420 @@
1
+ /**
2
+ * @fileoverview Rule to enforce getter and setter pairs in objects and classes.
3
+ * @author Gyandeep Singh
4
+ */
5
+
6
+ "use strict";
7
+
8
+ //------------------------------------------------------------------------------
9
+ // Requirements
10
+ //------------------------------------------------------------------------------
11
+
12
+ const astUtils = require("./utils/ast-utils");
13
+
14
+ //------------------------------------------------------------------------------
15
+ // Typedefs
16
+ //------------------------------------------------------------------------------
17
+
18
+ /**
19
+ * Property name if it can be computed statically, otherwise the list of the tokens of the key node.
20
+ * @typedef {string|Token[]} Key
21
+ */
22
+
23
+ /**
24
+ * Accessor nodes with the same key.
25
+ * @typedef {Object} AccessorData
26
+ * @property {Key} key Accessor's key
27
+ * @property {ASTNode[]} getters List of getter nodes.
28
+ * @property {ASTNode[]} setters List of setter nodes.
29
+ */
30
+
31
+ //------------------------------------------------------------------------------
32
+ // Helpers
33
+ //------------------------------------------------------------------------------
34
+
35
+ /**
36
+ * Checks whether or not the given lists represent the equal tokens in the same order.
37
+ * Tokens are compared by their properties, not by instance.
38
+ * @param {Token[]} left First list of tokens.
39
+ * @param {Token[]} right Second list of tokens.
40
+ * @returns {boolean} `true` if the lists have same tokens.
41
+ */
42
+ function areEqualTokenLists(left, right) {
43
+ if (left.length !== right.length) {
44
+ return false;
45
+ }
46
+
47
+ for (let i = 0; i < left.length; i++) {
48
+ const leftToken = left[i],
49
+ rightToken = right[i];
50
+
51
+ if (
52
+ leftToken.type !== rightToken.type ||
53
+ leftToken.value !== rightToken.value
54
+ ) {
55
+ return false;
56
+ }
57
+ }
58
+
59
+ return true;
60
+ }
61
+
62
+ /**
63
+ * Checks whether or not the given keys are equal.
64
+ * @param {Key} left First key.
65
+ * @param {Key} right Second key.
66
+ * @returns {boolean} `true` if the keys are equal.
67
+ */
68
+ function areEqualKeys(left, right) {
69
+ if (typeof left === "string" && typeof right === "string") {
70
+ // Statically computed names.
71
+ return left === right;
72
+ }
73
+ if (Array.isArray(left) && Array.isArray(right)) {
74
+ // Token lists.
75
+ return areEqualTokenLists(left, right);
76
+ }
77
+
78
+ return false;
79
+ }
80
+
81
+ /**
82
+ * Checks whether or not a given node is of an accessor kind ('get' or 'set').
83
+ * @param {ASTNode} node A node to check.
84
+ * @returns {boolean} `true` if the node is of an accessor kind.
85
+ */
86
+ function isAccessorKind(node) {
87
+ return node.kind === "get" || node.kind === "set";
88
+ }
89
+
90
+ /**
91
+ * Checks whether or not a given node is an argument of a specified method call.
92
+ * @param {ASTNode} node A node to check.
93
+ * @param {number} index An expected index of the node in arguments.
94
+ * @param {string} object An expected name of the object of the method.
95
+ * @param {string} property An expected name of the method.
96
+ * @returns {boolean} `true` if the node is an argument of the specified method call.
97
+ */
98
+ function isArgumentOfMethodCall(node, index, object, property) {
99
+ const parent = node.parent;
100
+
101
+ return (
102
+ parent.type === "CallExpression" &&
103
+ astUtils.isSpecificMemberAccess(parent.callee, object, property) &&
104
+ parent.arguments[index] === node
105
+ );
106
+ }
107
+
108
+ /**
109
+ * Checks whether or not a given node is a property descriptor.
110
+ * @param {ASTNode} node A node to check.
111
+ * @returns {boolean} `true` if the node is a property descriptor.
112
+ */
113
+ function isPropertyDescriptor(node) {
114
+ // Object.defineProperty(obj, "foo", {set: ...})
115
+ if (
116
+ isArgumentOfMethodCall(node, 2, "Object", "defineProperty") ||
117
+ isArgumentOfMethodCall(node, 2, "Reflect", "defineProperty")
118
+ ) {
119
+ return true;
120
+ }
121
+
122
+ /*
123
+ * Object.defineProperties(obj, {foo: {set: ...}})
124
+ * Object.create(proto, {foo: {set: ...}})
125
+ */
126
+ const grandparent = node.parent.parent;
127
+
128
+ return (
129
+ grandparent.type === "ObjectExpression" &&
130
+ (isArgumentOfMethodCall(grandparent, 1, "Object", "create") ||
131
+ isArgumentOfMethodCall(
132
+ grandparent,
133
+ 1,
134
+ "Object",
135
+ "defineProperties",
136
+ ))
137
+ );
138
+ }
139
+
140
+ //------------------------------------------------------------------------------
141
+ // Rule Definition
142
+ //------------------------------------------------------------------------------
143
+
144
+ /** @type {import('../types').Rule.RuleModule} */
145
+ module.exports = {
146
+ meta: {
147
+ type: "suggestion",
148
+
149
+ defaultOptions: [
150
+ {
151
+ enforceForTSTypes: false,
152
+ enforceForClassMembers: true,
153
+ getWithoutSet: false,
154
+ setWithoutGet: true,
155
+ },
156
+ ],
157
+
158
+ docs: {
159
+ description:
160
+ "Enforce getter and setter pairs in objects and classes",
161
+ recommended: false,
162
+ url: "https://eslint.org/docs/latest/rules/accessor-pairs",
163
+ },
164
+
165
+ schema: [
166
+ {
167
+ type: "object",
168
+ properties: {
169
+ getWithoutSet: {
170
+ type: "boolean",
171
+ },
172
+ setWithoutGet: {
173
+ type: "boolean",
174
+ },
175
+ enforceForClassMembers: {
176
+ type: "boolean",
177
+ },
178
+ enforceForTSTypes: {
179
+ type: "boolean",
180
+ },
181
+ },
182
+ additionalProperties: false,
183
+ },
184
+ ],
185
+
186
+ messages: {
187
+ missingGetterInPropertyDescriptor:
188
+ "Getter is not present in property descriptor.",
189
+ missingSetterInPropertyDescriptor:
190
+ "Setter is not present in property descriptor.",
191
+ missingGetterInObjectLiteral:
192
+ "Getter is not present for {{ name }}.",
193
+ missingSetterInObjectLiteral:
194
+ "Setter is not present for {{ name }}.",
195
+ missingGetterInClass: "Getter is not present for class {{ name }}.",
196
+ missingSetterInClass: "Setter is not present for class {{ name }}.",
197
+ missingGetterInType: "Getter is not present for type {{ name }}.",
198
+ missingSetterInType: "Setter is not present for type {{ name }}.",
199
+ },
200
+ },
201
+ create(context) {
202
+ const [
203
+ {
204
+ getWithoutSet: checkGetWithoutSet,
205
+ setWithoutGet: checkSetWithoutGet,
206
+ enforceForClassMembers,
207
+ enforceForTSTypes,
208
+ },
209
+ ] = context.options;
210
+ const sourceCode = context.sourceCode;
211
+
212
+ /**
213
+ * Reports the given node.
214
+ * @param {ASTNode} node The node to report.
215
+ * @param {string} messageKind "missingGetter" or "missingSetter".
216
+ * @returns {void}
217
+ * @private
218
+ */
219
+ function report(node, messageKind) {
220
+ if (node.type === "Property") {
221
+ context.report({
222
+ node,
223
+ messageId: `${messageKind}InObjectLiteral`,
224
+ loc: astUtils.getFunctionHeadLoc(node.value, sourceCode),
225
+ data: {
226
+ name: astUtils.getFunctionNameWithKind(node.value),
227
+ },
228
+ });
229
+ } else if (node.type === "MethodDefinition") {
230
+ context.report({
231
+ node,
232
+ messageId: `${messageKind}InClass`,
233
+ loc: astUtils.getFunctionHeadLoc(node.value, sourceCode),
234
+ data: {
235
+ name: astUtils.getFunctionNameWithKind(node.value),
236
+ },
237
+ });
238
+ } else if (node.type === "TSMethodSignature") {
239
+ context.report({
240
+ node,
241
+ messageId: `${messageKind}InType`,
242
+ loc: astUtils.getFunctionHeadLoc(node, sourceCode),
243
+ data: {
244
+ name: astUtils.getFunctionNameWithKind(node),
245
+ },
246
+ });
247
+ } else {
248
+ context.report({
249
+ node,
250
+ messageId: `${messageKind}InPropertyDescriptor`,
251
+ });
252
+ }
253
+ }
254
+
255
+ /**
256
+ * Reports each of the nodes in the given list using the same messageId.
257
+ * @param {ASTNode[]} nodes Nodes to report.
258
+ * @param {string} messageKind "missingGetter" or "missingSetter".
259
+ * @returns {void}
260
+ * @private
261
+ */
262
+ function reportList(nodes, messageKind) {
263
+ for (const node of nodes) {
264
+ report(node, messageKind);
265
+ }
266
+ }
267
+
268
+ /**
269
+ * Checks accessor pairs in the given list of nodes.
270
+ * @param {ASTNode[]} nodes The list to check.
271
+ * @returns {void}
272
+ * @private
273
+ */
274
+ function checkList(nodes) {
275
+ const accessors = [];
276
+ let found = false;
277
+
278
+ for (let i = 0; i < nodes.length; i++) {
279
+ const node = nodes[i];
280
+
281
+ if (isAccessorKind(node)) {
282
+ // Creates a new `AccessorData` object for the given getter or setter node.
283
+ const name = astUtils.getStaticPropertyName(node);
284
+ const key =
285
+ name !== null ? name : sourceCode.getTokens(node.key);
286
+
287
+ // Merges the given `AccessorData` object into the given accessors list.
288
+ for (let j = 0; j < accessors.length; j++) {
289
+ const accessor = accessors[j];
290
+
291
+ if (areEqualKeys(accessor.key, key)) {
292
+ accessor.getters.push(
293
+ ...(node.kind === "get" ? [node] : []),
294
+ );
295
+ accessor.setters.push(
296
+ ...(node.kind === "set" ? [node] : []),
297
+ );
298
+ found = true;
299
+ break;
300
+ }
301
+ }
302
+ if (!found) {
303
+ accessors.push({
304
+ key,
305
+ getters: node.kind === "get" ? [node] : [],
306
+ setters: node.kind === "set" ? [node] : [],
307
+ });
308
+ }
309
+ found = false;
310
+ }
311
+ }
312
+
313
+ for (const { getters, setters } of accessors) {
314
+ if (checkSetWithoutGet && setters.length && !getters.length) {
315
+ reportList(setters, "missingGetter");
316
+ }
317
+ if (checkGetWithoutSet && getters.length && !setters.length) {
318
+ reportList(getters, "missingSetter");
319
+ }
320
+ }
321
+ }
322
+
323
+ /**
324
+ * Checks accessor pairs in an object literal.
325
+ * @param {ASTNode} node `ObjectExpression` node to check.
326
+ * @returns {void}
327
+ * @private
328
+ */
329
+ function checkObjectLiteral(node) {
330
+ checkList(node.properties.filter(p => p.type === "Property"));
331
+ }
332
+
333
+ /**
334
+ * Checks accessor pairs in a property descriptor.
335
+ * @param {ASTNode} node Property descriptor `ObjectExpression` node to check.
336
+ * @returns {void}
337
+ * @private
338
+ */
339
+ function checkPropertyDescriptor(node) {
340
+ const namesToCheck = new Set(
341
+ node.properties
342
+ .filter(
343
+ p =>
344
+ p.type === "Property" &&
345
+ p.kind === "init" &&
346
+ !p.computed,
347
+ )
348
+ .map(({ key }) => key.name),
349
+ );
350
+
351
+ const hasGetter = namesToCheck.has("get");
352
+ const hasSetter = namesToCheck.has("set");
353
+
354
+ if (checkSetWithoutGet && hasSetter && !hasGetter) {
355
+ report(node, "missingGetter");
356
+ }
357
+ if (checkGetWithoutSet && hasGetter && !hasSetter) {
358
+ report(node, "missingSetter");
359
+ }
360
+ }
361
+
362
+ /**
363
+ * Checks the given object expression as an object literal and as a possible property descriptor.
364
+ * @param {ASTNode} node `ObjectExpression` node to check.
365
+ * @returns {void}
366
+ * @private
367
+ */
368
+ function checkObjectExpression(node) {
369
+ checkObjectLiteral(node);
370
+ if (isPropertyDescriptor(node)) {
371
+ checkPropertyDescriptor(node);
372
+ }
373
+ }
374
+
375
+ /**
376
+ * Checks the given class body.
377
+ * @param {ASTNode} node `ClassBody` node to check.
378
+ * @returns {void}
379
+ * @private
380
+ */
381
+ function checkClassBody(node) {
382
+ const methodDefinitions = node.body.filter(
383
+ m => m.type === "MethodDefinition",
384
+ );
385
+
386
+ checkList(methodDefinitions.filter(m => m.static));
387
+ checkList(methodDefinitions.filter(m => !m.static));
388
+ }
389
+
390
+ /**
391
+ * Checks the given type.
392
+ * @param {ASTNode} node `TSTypeLiteral` or `TSInterfaceBody` node to check.
393
+ * @returns {void}
394
+ * @private
395
+ */
396
+ function checkType(node) {
397
+ const members =
398
+ node.type === "TSTypeLiteral" ? node.members : node.body;
399
+ const methodDefinitions = members.filter(
400
+ m => m.type === "TSMethodSignature",
401
+ );
402
+
403
+ checkList(methodDefinitions);
404
+ }
405
+
406
+ const listeners = {};
407
+
408
+ if (checkSetWithoutGet || checkGetWithoutSet) {
409
+ listeners.ObjectExpression = checkObjectExpression;
410
+ if (enforceForClassMembers) {
411
+ listeners.ClassBody = checkClassBody;
412
+ }
413
+ if (enforceForTSTypes) {
414
+ listeners["TSTypeLiteral, TSInterfaceBody"] = checkType;
415
+ }
416
+ }
417
+
418
+ return listeners;
419
+ },
420
+ };
@@ -0,0 +1,291 @@
1
+ /**
2
+ * @fileoverview Rule to enforce linebreaks after open and before close array brackets
3
+ * @author Jan Peer Stöcklmair <https://github.com/JPeer264>
4
+ * @deprecated in ESLint v8.53.0
5
+ */
6
+
7
+ "use strict";
8
+
9
+ const astUtils = require("./utils/ast-utils");
10
+
11
+ //------------------------------------------------------------------------------
12
+ // Rule Definition
13
+ //------------------------------------------------------------------------------
14
+
15
+ /** @type {import('../types').Rule.RuleModule} */
16
+ module.exports = {
17
+ meta: {
18
+ deprecated: {
19
+ message: "Formatting rules are being moved out of ESLint core.",
20
+ url: "https://eslint.org/blog/2023/10/deprecating-formatting-rules/",
21
+ deprecatedSince: "8.53.0",
22
+ availableUntil: "11.0.0",
23
+ replacedBy: [
24
+ {
25
+ message:
26
+ "ESLint Stylistic now maintains deprecated stylistic core rules.",
27
+ url: "https://eslint.style/guide/migration",
28
+ plugin: {
29
+ name: "@stylistic/eslint-plugin",
30
+ url: "https://eslint.style",
31
+ },
32
+ rule: {
33
+ name: "array-bracket-newline",
34
+ url: "https://eslint.style/rules/array-bracket-newline",
35
+ },
36
+ },
37
+ ],
38
+ },
39
+ type: "layout",
40
+
41
+ docs: {
42
+ description:
43
+ "Enforce linebreaks after opening and before closing array brackets",
44
+ recommended: false,
45
+ url: "https://eslint.org/docs/latest/rules/array-bracket-newline",
46
+ },
47
+
48
+ fixable: "whitespace",
49
+
50
+ schema: [
51
+ {
52
+ oneOf: [
53
+ {
54
+ enum: ["always", "never", "consistent"],
55
+ },
56
+ {
57
+ type: "object",
58
+ properties: {
59
+ multiline: {
60
+ type: "boolean",
61
+ },
62
+ minItems: {
63
+ type: ["integer", "null"],
64
+ minimum: 0,
65
+ },
66
+ },
67
+ additionalProperties: false,
68
+ },
69
+ ],
70
+ },
71
+ ],
72
+
73
+ messages: {
74
+ unexpectedOpeningLinebreak:
75
+ "There should be no linebreak after '['.",
76
+ unexpectedClosingLinebreak:
77
+ "There should be no linebreak before ']'.",
78
+ missingOpeningLinebreak: "A linebreak is required after '['.",
79
+ missingClosingLinebreak: "A linebreak is required before ']'.",
80
+ },
81
+ },
82
+
83
+ create(context) {
84
+ const sourceCode = context.sourceCode;
85
+
86
+ //----------------------------------------------------------------------
87
+ // Helpers
88
+ //----------------------------------------------------------------------
89
+
90
+ /**
91
+ * Normalizes a given option value.
92
+ * @param {string|Object|undefined} option An option value to parse.
93
+ * @returns {{multiline: boolean, minItems: number}} Normalized option object.
94
+ */
95
+ function normalizeOptionValue(option) {
96
+ let consistent = false;
97
+ let multiline = false;
98
+ let minItems;
99
+
100
+ if (option) {
101
+ if (option === "consistent") {
102
+ consistent = true;
103
+ minItems = Number.POSITIVE_INFINITY;
104
+ } else if (option === "always" || option.minItems === 0) {
105
+ minItems = 0;
106
+ } else if (option === "never") {
107
+ minItems = Number.POSITIVE_INFINITY;
108
+ } else {
109
+ multiline = Boolean(option.multiline);
110
+ minItems = option.minItems || Number.POSITIVE_INFINITY;
111
+ }
112
+ } else {
113
+ consistent = false;
114
+ multiline = true;
115
+ minItems = Number.POSITIVE_INFINITY;
116
+ }
117
+
118
+ return { consistent, multiline, minItems };
119
+ }
120
+
121
+ /**
122
+ * Normalizes a given option value.
123
+ * @param {string|Object|undefined} options An option value to parse.
124
+ * @returns {{ArrayExpression: {multiline: boolean, minItems: number}, ArrayPattern: {multiline: boolean, minItems: number}}} Normalized option object.
125
+ */
126
+ function normalizeOptions(options) {
127
+ const value = normalizeOptionValue(options);
128
+
129
+ return { ArrayExpression: value, ArrayPattern: value };
130
+ }
131
+
132
+ /**
133
+ * Reports that there shouldn't be a linebreak after the first token
134
+ * @param {ASTNode} node The node to report in the event of an error.
135
+ * @param {Token} token The token to use for the report.
136
+ * @returns {void}
137
+ */
138
+ function reportNoBeginningLinebreak(node, token) {
139
+ context.report({
140
+ node,
141
+ loc: token.loc,
142
+ messageId: "unexpectedOpeningLinebreak",
143
+ fix(fixer) {
144
+ const nextToken = sourceCode.getTokenAfter(token, {
145
+ includeComments: true,
146
+ });
147
+
148
+ if (astUtils.isCommentToken(nextToken)) {
149
+ return null;
150
+ }
151
+
152
+ return fixer.removeRange([
153
+ token.range[1],
154
+ nextToken.range[0],
155
+ ]);
156
+ },
157
+ });
158
+ }
159
+
160
+ /**
161
+ * Reports that there shouldn't be a linebreak before the last token
162
+ * @param {ASTNode} node The node to report in the event of an error.
163
+ * @param {Token} token The token to use for the report.
164
+ * @returns {void}
165
+ */
166
+ function reportNoEndingLinebreak(node, token) {
167
+ context.report({
168
+ node,
169
+ loc: token.loc,
170
+ messageId: "unexpectedClosingLinebreak",
171
+ fix(fixer) {
172
+ const previousToken = sourceCode.getTokenBefore(token, {
173
+ includeComments: true,
174
+ });
175
+
176
+ if (astUtils.isCommentToken(previousToken)) {
177
+ return null;
178
+ }
179
+
180
+ return fixer.removeRange([
181
+ previousToken.range[1],
182
+ token.range[0],
183
+ ]);
184
+ },
185
+ });
186
+ }
187
+
188
+ /**
189
+ * Reports that there should be a linebreak after the first token
190
+ * @param {ASTNode} node The node to report in the event of an error.
191
+ * @param {Token} token The token to use for the report.
192
+ * @returns {void}
193
+ */
194
+ function reportRequiredBeginningLinebreak(node, token) {
195
+ context.report({
196
+ node,
197
+ loc: token.loc,
198
+ messageId: "missingOpeningLinebreak",
199
+ fix(fixer) {
200
+ return fixer.insertTextAfter(token, "\n");
201
+ },
202
+ });
203
+ }
204
+
205
+ /**
206
+ * Reports that there should be a linebreak before the last token
207
+ * @param {ASTNode} node The node to report in the event of an error.
208
+ * @param {Token} token The token to use for the report.
209
+ * @returns {void}
210
+ */
211
+ function reportRequiredEndingLinebreak(node, token) {
212
+ context.report({
213
+ node,
214
+ loc: token.loc,
215
+ messageId: "missingClosingLinebreak",
216
+ fix(fixer) {
217
+ return fixer.insertTextBefore(token, "\n");
218
+ },
219
+ });
220
+ }
221
+
222
+ /**
223
+ * Reports a given node if it violated this rule.
224
+ * @param {ASTNode} node A node to check. This is an ArrayExpression node or an ArrayPattern node.
225
+ * @returns {void}
226
+ */
227
+ function check(node) {
228
+ const elements = node.elements;
229
+ const normalizedOptions = normalizeOptions(context.options[0]);
230
+ const options = normalizedOptions[node.type];
231
+ const openBracket = sourceCode.getFirstToken(node);
232
+ const closeBracket = sourceCode.getLastToken(node);
233
+ const firstIncComment = sourceCode.getTokenAfter(openBracket, {
234
+ includeComments: true,
235
+ });
236
+ const lastIncComment = sourceCode.getTokenBefore(closeBracket, {
237
+ includeComments: true,
238
+ });
239
+ const first = sourceCode.getTokenAfter(openBracket);
240
+ const last = sourceCode.getTokenBefore(closeBracket);
241
+
242
+ const needsLinebreaks =
243
+ elements.length >= options.minItems ||
244
+ (options.multiline &&
245
+ elements.length > 0 &&
246
+ firstIncComment.loc.start.line !==
247
+ lastIncComment.loc.end.line) ||
248
+ (elements.length === 0 &&
249
+ firstIncComment.type === "Block" &&
250
+ firstIncComment.loc.start.line !==
251
+ lastIncComment.loc.end.line &&
252
+ firstIncComment === lastIncComment) ||
253
+ (options.consistent &&
254
+ openBracket.loc.end.line !== first.loc.start.line);
255
+
256
+ /*
257
+ * Use tokens or comments to check multiline or not.
258
+ * But use only tokens to check whether linebreaks are needed.
259
+ * This allows:
260
+ * var arr = [ // eslint-disable-line foo
261
+ * 'a'
262
+ * ]
263
+ */
264
+
265
+ if (needsLinebreaks) {
266
+ if (astUtils.isTokenOnSameLine(openBracket, first)) {
267
+ reportRequiredBeginningLinebreak(node, openBracket);
268
+ }
269
+ if (astUtils.isTokenOnSameLine(last, closeBracket)) {
270
+ reportRequiredEndingLinebreak(node, closeBracket);
271
+ }
272
+ } else {
273
+ if (!astUtils.isTokenOnSameLine(openBracket, first)) {
274
+ reportNoBeginningLinebreak(node, openBracket);
275
+ }
276
+ if (!astUtils.isTokenOnSameLine(last, closeBracket)) {
277
+ reportNoEndingLinebreak(node, closeBracket);
278
+ }
279
+ }
280
+ }
281
+
282
+ //----------------------------------------------------------------------
283
+ // Public
284
+ //----------------------------------------------------------------------
285
+
286
+ return {
287
+ ArrayPattern: check,
288
+ ArrayExpression: check,
289
+ };
290
+ },
291
+ };