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,278 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Rule to flag block statements that do not use the one true brace style
|
|
3
|
+
* @author Ian Christian Myers
|
|
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: "brace-style",
|
|
34
|
+
url: "https://eslint.style/rules/brace-style",
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
],
|
|
38
|
+
},
|
|
39
|
+
type: "layout",
|
|
40
|
+
|
|
41
|
+
docs: {
|
|
42
|
+
description: "Enforce consistent brace style for blocks",
|
|
43
|
+
recommended: false,
|
|
44
|
+
url: "https://eslint.org/docs/latest/rules/brace-style",
|
|
45
|
+
},
|
|
46
|
+
|
|
47
|
+
schema: [
|
|
48
|
+
{
|
|
49
|
+
enum: ["1tbs", "stroustrup", "allman"],
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
type: "object",
|
|
53
|
+
properties: {
|
|
54
|
+
allowSingleLine: {
|
|
55
|
+
type: "boolean",
|
|
56
|
+
default: false,
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
additionalProperties: false,
|
|
60
|
+
},
|
|
61
|
+
],
|
|
62
|
+
|
|
63
|
+
fixable: "whitespace",
|
|
64
|
+
|
|
65
|
+
messages: {
|
|
66
|
+
nextLineOpen:
|
|
67
|
+
"Opening curly brace does not appear on the same line as controlling statement.",
|
|
68
|
+
sameLineOpen:
|
|
69
|
+
"Opening curly brace appears on the same line as controlling statement.",
|
|
70
|
+
blockSameLine:
|
|
71
|
+
"Statement inside of curly braces should be on next line.",
|
|
72
|
+
nextLineClose:
|
|
73
|
+
"Closing curly brace does not appear on the same line as the subsequent block.",
|
|
74
|
+
singleLineClose:
|
|
75
|
+
"Closing curly brace should be on the same line as opening curly brace or on the line after the previous block.",
|
|
76
|
+
sameLineClose:
|
|
77
|
+
"Closing curly brace appears on the same line as the subsequent block.",
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
|
|
81
|
+
create(context) {
|
|
82
|
+
const style = context.options[0] || "1tbs",
|
|
83
|
+
params = context.options[1] || {},
|
|
84
|
+
sourceCode = context.sourceCode;
|
|
85
|
+
|
|
86
|
+
//--------------------------------------------------------------------------
|
|
87
|
+
// Helpers
|
|
88
|
+
//--------------------------------------------------------------------------
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Fixes a place where a newline unexpectedly appears
|
|
92
|
+
* @param {Token} firstToken The token before the unexpected newline
|
|
93
|
+
* @param {Token} secondToken The token after the unexpected newline
|
|
94
|
+
* @returns {Function} A fixer function to remove the newlines between the tokens
|
|
95
|
+
*/
|
|
96
|
+
function removeNewlineBetween(firstToken, secondToken) {
|
|
97
|
+
const textRange = [firstToken.range[1], secondToken.range[0]];
|
|
98
|
+
const textBetween = sourceCode.text.slice(
|
|
99
|
+
textRange[0],
|
|
100
|
+
textRange[1],
|
|
101
|
+
);
|
|
102
|
+
|
|
103
|
+
// Don't do a fix if there is a comment between the tokens
|
|
104
|
+
if (textBetween.trim()) {
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
return fixer => fixer.replaceTextRange(textRange, " ");
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Validates a pair of curly brackets based on the user's config
|
|
112
|
+
* @param {Token} openingCurly The opening curly bracket
|
|
113
|
+
* @param {Token} closingCurly The closing curly bracket
|
|
114
|
+
* @returns {void}
|
|
115
|
+
*/
|
|
116
|
+
function validateCurlyPair(openingCurly, closingCurly) {
|
|
117
|
+
const tokenBeforeOpeningCurly =
|
|
118
|
+
sourceCode.getTokenBefore(openingCurly);
|
|
119
|
+
const tokenAfterOpeningCurly =
|
|
120
|
+
sourceCode.getTokenAfter(openingCurly);
|
|
121
|
+
const tokenBeforeClosingCurly =
|
|
122
|
+
sourceCode.getTokenBefore(closingCurly);
|
|
123
|
+
const singleLineException =
|
|
124
|
+
params.allowSingleLine &&
|
|
125
|
+
astUtils.isTokenOnSameLine(openingCurly, closingCurly);
|
|
126
|
+
|
|
127
|
+
if (
|
|
128
|
+
style !== "allman" &&
|
|
129
|
+
!astUtils.isTokenOnSameLine(
|
|
130
|
+
tokenBeforeOpeningCurly,
|
|
131
|
+
openingCurly,
|
|
132
|
+
)
|
|
133
|
+
) {
|
|
134
|
+
context.report({
|
|
135
|
+
node: openingCurly,
|
|
136
|
+
messageId: "nextLineOpen",
|
|
137
|
+
fix: removeNewlineBetween(
|
|
138
|
+
tokenBeforeOpeningCurly,
|
|
139
|
+
openingCurly,
|
|
140
|
+
),
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
if (
|
|
145
|
+
style === "allman" &&
|
|
146
|
+
astUtils.isTokenOnSameLine(
|
|
147
|
+
tokenBeforeOpeningCurly,
|
|
148
|
+
openingCurly,
|
|
149
|
+
) &&
|
|
150
|
+
!singleLineException
|
|
151
|
+
) {
|
|
152
|
+
context.report({
|
|
153
|
+
node: openingCurly,
|
|
154
|
+
messageId: "sameLineOpen",
|
|
155
|
+
fix: fixer => fixer.insertTextBefore(openingCurly, "\n"),
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
if (
|
|
160
|
+
astUtils.isTokenOnSameLine(
|
|
161
|
+
openingCurly,
|
|
162
|
+
tokenAfterOpeningCurly,
|
|
163
|
+
) &&
|
|
164
|
+
tokenAfterOpeningCurly !== closingCurly &&
|
|
165
|
+
!singleLineException
|
|
166
|
+
) {
|
|
167
|
+
context.report({
|
|
168
|
+
node: openingCurly,
|
|
169
|
+
messageId: "blockSameLine",
|
|
170
|
+
fix: fixer => fixer.insertTextAfter(openingCurly, "\n"),
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
if (
|
|
175
|
+
tokenBeforeClosingCurly !== openingCurly &&
|
|
176
|
+
!singleLineException &&
|
|
177
|
+
astUtils.isTokenOnSameLine(
|
|
178
|
+
tokenBeforeClosingCurly,
|
|
179
|
+
closingCurly,
|
|
180
|
+
)
|
|
181
|
+
) {
|
|
182
|
+
context.report({
|
|
183
|
+
node: closingCurly,
|
|
184
|
+
messageId: "singleLineClose",
|
|
185
|
+
fix: fixer => fixer.insertTextBefore(closingCurly, "\n"),
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Validates the location of a token that appears before a keyword (e.g. a newline before `else`)
|
|
192
|
+
* @param {Token} curlyToken The closing curly token. This is assumed to precede a keyword token (such as `else` or `finally`).
|
|
193
|
+
* @returns {void}
|
|
194
|
+
*/
|
|
195
|
+
function validateCurlyBeforeKeyword(curlyToken) {
|
|
196
|
+
const keywordToken = sourceCode.getTokenAfter(curlyToken);
|
|
197
|
+
|
|
198
|
+
if (
|
|
199
|
+
style === "1tbs" &&
|
|
200
|
+
!astUtils.isTokenOnSameLine(curlyToken, keywordToken)
|
|
201
|
+
) {
|
|
202
|
+
context.report({
|
|
203
|
+
node: curlyToken,
|
|
204
|
+
messageId: "nextLineClose",
|
|
205
|
+
fix: removeNewlineBetween(curlyToken, keywordToken),
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
if (
|
|
210
|
+
style !== "1tbs" &&
|
|
211
|
+
astUtils.isTokenOnSameLine(curlyToken, keywordToken)
|
|
212
|
+
) {
|
|
213
|
+
context.report({
|
|
214
|
+
node: curlyToken,
|
|
215
|
+
messageId: "sameLineClose",
|
|
216
|
+
fix: fixer => fixer.insertTextAfter(curlyToken, "\n"),
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
//--------------------------------------------------------------------------
|
|
222
|
+
// Public API
|
|
223
|
+
//--------------------------------------------------------------------------
|
|
224
|
+
|
|
225
|
+
return {
|
|
226
|
+
BlockStatement(node) {
|
|
227
|
+
if (!astUtils.STATEMENT_LIST_PARENTS.has(node.parent.type)) {
|
|
228
|
+
validateCurlyPair(
|
|
229
|
+
sourceCode.getFirstToken(node),
|
|
230
|
+
sourceCode.getLastToken(node),
|
|
231
|
+
);
|
|
232
|
+
}
|
|
233
|
+
},
|
|
234
|
+
StaticBlock(node) {
|
|
235
|
+
validateCurlyPair(
|
|
236
|
+
sourceCode.getFirstToken(node, { skip: 1 }), // skip the `static` token
|
|
237
|
+
sourceCode.getLastToken(node),
|
|
238
|
+
);
|
|
239
|
+
},
|
|
240
|
+
ClassBody(node) {
|
|
241
|
+
validateCurlyPair(
|
|
242
|
+
sourceCode.getFirstToken(node),
|
|
243
|
+
sourceCode.getLastToken(node),
|
|
244
|
+
);
|
|
245
|
+
},
|
|
246
|
+
SwitchStatement(node) {
|
|
247
|
+
const closingCurly = sourceCode.getLastToken(node);
|
|
248
|
+
const openingCurly = sourceCode.getTokenBefore(
|
|
249
|
+
node.cases.length ? node.cases[0] : closingCurly,
|
|
250
|
+
);
|
|
251
|
+
|
|
252
|
+
validateCurlyPair(openingCurly, closingCurly);
|
|
253
|
+
},
|
|
254
|
+
IfStatement(node) {
|
|
255
|
+
if (
|
|
256
|
+
node.consequent.type === "BlockStatement" &&
|
|
257
|
+
node.alternate
|
|
258
|
+
) {
|
|
259
|
+
// Handle the keyword after the `if` block (before `else`)
|
|
260
|
+
validateCurlyBeforeKeyword(
|
|
261
|
+
sourceCode.getLastToken(node.consequent),
|
|
262
|
+
);
|
|
263
|
+
}
|
|
264
|
+
},
|
|
265
|
+
TryStatement(node) {
|
|
266
|
+
// Handle the keyword after the `try` block (before `catch` or `finally`)
|
|
267
|
+
validateCurlyBeforeKeyword(sourceCode.getLastToken(node.block));
|
|
268
|
+
|
|
269
|
+
if (node.handler && node.finalizer) {
|
|
270
|
+
// Handle the keyword after the `catch` block (before `finally`)
|
|
271
|
+
validateCurlyBeforeKeyword(
|
|
272
|
+
sourceCode.getLastToken(node.handler.body),
|
|
273
|
+
);
|
|
274
|
+
}
|
|
275
|
+
},
|
|
276
|
+
};
|
|
277
|
+
},
|
|
278
|
+
};
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Enforce return after a callback.
|
|
3
|
+
* @author Jamund Ferguson
|
|
4
|
+
* @deprecated in ESLint v7.0.0
|
|
5
|
+
*/
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
//------------------------------------------------------------------------------
|
|
9
|
+
// Rule Definition
|
|
10
|
+
//------------------------------------------------------------------------------
|
|
11
|
+
|
|
12
|
+
/** @type {import('../types').Rule.RuleModule} */
|
|
13
|
+
module.exports = {
|
|
14
|
+
meta: {
|
|
15
|
+
deprecated: {
|
|
16
|
+
message: "Node.js rules were moved out of ESLint core.",
|
|
17
|
+
url: "https://eslint.org/docs/latest/use/migrating-to-7.0.0#deprecate-node-rules",
|
|
18
|
+
deprecatedSince: "7.0.0",
|
|
19
|
+
availableUntil: "11.0.0",
|
|
20
|
+
replacedBy: [
|
|
21
|
+
{
|
|
22
|
+
message:
|
|
23
|
+
"eslint-plugin-n now maintains deprecated Node.js-related rules.",
|
|
24
|
+
plugin: {
|
|
25
|
+
name: "eslint-plugin-n",
|
|
26
|
+
url: "https://github.com/eslint-community/eslint-plugin-n",
|
|
27
|
+
},
|
|
28
|
+
rule: {
|
|
29
|
+
name: "callback-return",
|
|
30
|
+
url: "https://github.com/eslint-community/eslint-plugin-n/tree/master/docs/rules/callback-return.md",
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
},
|
|
35
|
+
|
|
36
|
+
type: "suggestion",
|
|
37
|
+
|
|
38
|
+
docs: {
|
|
39
|
+
description: "Require `return` statements after callbacks",
|
|
40
|
+
recommended: false,
|
|
41
|
+
url: "https://eslint.org/docs/latest/rules/callback-return",
|
|
42
|
+
},
|
|
43
|
+
|
|
44
|
+
schema: [
|
|
45
|
+
{
|
|
46
|
+
type: "array",
|
|
47
|
+
items: { type: "string" },
|
|
48
|
+
},
|
|
49
|
+
],
|
|
50
|
+
|
|
51
|
+
messages: {
|
|
52
|
+
missingReturn: "Expected return with your callback function.",
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
|
|
56
|
+
create(context) {
|
|
57
|
+
const callbacks = context.options[0] || ["callback", "cb", "next"],
|
|
58
|
+
sourceCode = context.sourceCode;
|
|
59
|
+
|
|
60
|
+
//--------------------------------------------------------------------------
|
|
61
|
+
// Helpers
|
|
62
|
+
//--------------------------------------------------------------------------
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Find the closest parent matching a list of types.
|
|
66
|
+
* @param {ASTNode} node The node whose parents we are searching
|
|
67
|
+
* @param {Array} types The node types to match
|
|
68
|
+
* @returns {ASTNode} The matched node or undefined.
|
|
69
|
+
*/
|
|
70
|
+
function findClosestParentOfType(node, types) {
|
|
71
|
+
if (!node.parent) {
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
if (!types.includes(node.parent.type)) {
|
|
75
|
+
return findClosestParentOfType(node.parent, types);
|
|
76
|
+
}
|
|
77
|
+
return node.parent;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Check to see if a node contains only identifiers
|
|
82
|
+
* @param {ASTNode} node The node to check
|
|
83
|
+
* @returns {boolean} Whether or not the node contains only identifiers
|
|
84
|
+
*/
|
|
85
|
+
function containsOnlyIdentifiers(node) {
|
|
86
|
+
if (node.type === "Identifier") {
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
if (node.type === "MemberExpression") {
|
|
91
|
+
if (node.object.type === "Identifier") {
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
if (node.object.type === "MemberExpression") {
|
|
95
|
+
return containsOnlyIdentifiers(node.object);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Check to see if a CallExpression is in our callback list.
|
|
104
|
+
* @param {ASTNode} node The node to check against our callback names list.
|
|
105
|
+
* @returns {boolean} Whether or not this function matches our callback name.
|
|
106
|
+
*/
|
|
107
|
+
function isCallback(node) {
|
|
108
|
+
return (
|
|
109
|
+
containsOnlyIdentifiers(node.callee) &&
|
|
110
|
+
callbacks.includes(sourceCode.getText(node.callee))
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Determines whether or not the callback is part of a callback expression.
|
|
116
|
+
* @param {ASTNode} node The callback node
|
|
117
|
+
* @param {ASTNode} parentNode The expression node
|
|
118
|
+
* @returns {boolean} Whether or not this is part of a callback expression
|
|
119
|
+
*/
|
|
120
|
+
function isCallbackExpression(node, parentNode) {
|
|
121
|
+
// ensure the parent node exists and is an expression
|
|
122
|
+
if (!parentNode || parentNode.type !== "ExpressionStatement") {
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// cb()
|
|
127
|
+
if (parentNode.expression === node) {
|
|
128
|
+
return true;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// special case for cb && cb() and similar
|
|
132
|
+
if (
|
|
133
|
+
parentNode.expression.type === "BinaryExpression" ||
|
|
134
|
+
parentNode.expression.type === "LogicalExpression"
|
|
135
|
+
) {
|
|
136
|
+
if (parentNode.expression.right === node) {
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
//--------------------------------------------------------------------------
|
|
145
|
+
// Public
|
|
146
|
+
//--------------------------------------------------------------------------
|
|
147
|
+
|
|
148
|
+
return {
|
|
149
|
+
CallExpression(node) {
|
|
150
|
+
// if we're not a callback we can return
|
|
151
|
+
if (!isCallback(node)) {
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
// find the closest block, return or loop
|
|
156
|
+
const closestBlock =
|
|
157
|
+
findClosestParentOfType(node, [
|
|
158
|
+
"BlockStatement",
|
|
159
|
+
"ReturnStatement",
|
|
160
|
+
"ArrowFunctionExpression",
|
|
161
|
+
]) || {};
|
|
162
|
+
|
|
163
|
+
// if our parent is a return we know we're ok
|
|
164
|
+
if (closestBlock.type === "ReturnStatement") {
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// arrow functions don't always have blocks and implicitly return
|
|
169
|
+
if (closestBlock.type === "ArrowFunctionExpression") {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// block statements are part of functions and most if statements
|
|
174
|
+
if (closestBlock.type === "BlockStatement") {
|
|
175
|
+
// find the last item in the block
|
|
176
|
+
const lastItem = closestBlock.body.at(-1);
|
|
177
|
+
|
|
178
|
+
// if the callback is the last thing in a block that might be ok
|
|
179
|
+
if (isCallbackExpression(node, lastItem)) {
|
|
180
|
+
const parentType = closestBlock.parent.type;
|
|
181
|
+
|
|
182
|
+
// but only if the block is part of a function
|
|
183
|
+
if (
|
|
184
|
+
parentType === "FunctionExpression" ||
|
|
185
|
+
parentType === "FunctionDeclaration" ||
|
|
186
|
+
parentType === "ArrowFunctionExpression"
|
|
187
|
+
) {
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// ending a block with a return is also ok
|
|
193
|
+
if (lastItem.type === "ReturnStatement") {
|
|
194
|
+
// but only if the callback is immediately before
|
|
195
|
+
if (
|
|
196
|
+
isCallbackExpression(node, closestBlock.body.at(-2))
|
|
197
|
+
) {
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
// as long as you're the child of a function at this point you should be asked to return
|
|
204
|
+
if (
|
|
205
|
+
findClosestParentOfType(node, [
|
|
206
|
+
"FunctionDeclaration",
|
|
207
|
+
"FunctionExpression",
|
|
208
|
+
"ArrowFunctionExpression",
|
|
209
|
+
])
|
|
210
|
+
) {
|
|
211
|
+
context.report({ node, messageId: "missingReturn" });
|
|
212
|
+
}
|
|
213
|
+
},
|
|
214
|
+
};
|
|
215
|
+
},
|
|
216
|
+
};
|