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,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Ensure handling of errors when we know they exist.
|
|
3
|
+
* @author Jamund Ferguson
|
|
4
|
+
* @deprecated in ESLint v7.0.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
"use strict";
|
|
8
|
+
|
|
9
|
+
//------------------------------------------------------------------------------
|
|
10
|
+
// Rule Definition
|
|
11
|
+
//------------------------------------------------------------------------------
|
|
12
|
+
|
|
13
|
+
/** @type {import('../types').Rule.RuleModule} */
|
|
14
|
+
module.exports = {
|
|
15
|
+
meta: {
|
|
16
|
+
deprecated: {
|
|
17
|
+
message: "Node.js rules were moved out of ESLint core.",
|
|
18
|
+
url: "https://eslint.org/docs/latest/use/migrating-to-7.0.0#deprecate-node-rules",
|
|
19
|
+
deprecatedSince: "7.0.0",
|
|
20
|
+
availableUntil: "11.0.0",
|
|
21
|
+
replacedBy: [
|
|
22
|
+
{
|
|
23
|
+
message:
|
|
24
|
+
"eslint-plugin-n now maintains deprecated Node.js-related rules.",
|
|
25
|
+
plugin: {
|
|
26
|
+
name: "eslint-plugin-n",
|
|
27
|
+
url: "https://github.com/eslint-community/eslint-plugin-n",
|
|
28
|
+
},
|
|
29
|
+
rule: {
|
|
30
|
+
name: "handle-callback-err",
|
|
31
|
+
url: "https://github.com/eslint-community/eslint-plugin-n/tree/master/docs/rules/handle-callback-err.md",
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
],
|
|
35
|
+
},
|
|
36
|
+
|
|
37
|
+
type: "suggestion",
|
|
38
|
+
|
|
39
|
+
docs: {
|
|
40
|
+
description: "Require error handling in callbacks",
|
|
41
|
+
recommended: false,
|
|
42
|
+
url: "https://eslint.org/docs/latest/rules/handle-callback-err",
|
|
43
|
+
},
|
|
44
|
+
|
|
45
|
+
schema: [
|
|
46
|
+
{
|
|
47
|
+
type: "string",
|
|
48
|
+
},
|
|
49
|
+
],
|
|
50
|
+
messages: {
|
|
51
|
+
expected: "Expected error to be handled.",
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
|
|
55
|
+
create(context) {
|
|
56
|
+
const errorArgument = context.options[0] || "err";
|
|
57
|
+
const sourceCode = context.sourceCode;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Checks if the given argument should be interpreted as a regexp pattern.
|
|
61
|
+
* @param {string} stringToCheck The string which should be checked.
|
|
62
|
+
* @returns {boolean} Whether or not the string should be interpreted as a pattern.
|
|
63
|
+
*/
|
|
64
|
+
function isPattern(stringToCheck) {
|
|
65
|
+
const firstChar = stringToCheck[0];
|
|
66
|
+
|
|
67
|
+
return firstChar === "^";
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Checks if the given name matches the configured error argument.
|
|
72
|
+
* @param {string} name The name which should be compared.
|
|
73
|
+
* @returns {boolean} Whether or not the given name matches the configured error variable name.
|
|
74
|
+
*/
|
|
75
|
+
function matchesConfiguredErrorName(name) {
|
|
76
|
+
if (isPattern(errorArgument)) {
|
|
77
|
+
const regexp = new RegExp(errorArgument, "u");
|
|
78
|
+
|
|
79
|
+
return regexp.test(name);
|
|
80
|
+
}
|
|
81
|
+
return name === errorArgument;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Get the parameters of a given function scope.
|
|
86
|
+
* @param {Object} scope The function scope.
|
|
87
|
+
* @returns {Array} All parameters of the given scope.
|
|
88
|
+
*/
|
|
89
|
+
function getParameters(scope) {
|
|
90
|
+
return scope.variables.filter(
|
|
91
|
+
variable =>
|
|
92
|
+
variable.defs[0] && variable.defs[0].type === "Parameter",
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Check to see if we're handling the error object properly.
|
|
98
|
+
* @param {ASTNode} node The AST node to check.
|
|
99
|
+
* @returns {void}
|
|
100
|
+
*/
|
|
101
|
+
function checkForError(node) {
|
|
102
|
+
const scope = sourceCode.getScope(node),
|
|
103
|
+
parameters = getParameters(scope),
|
|
104
|
+
firstParameter = parameters[0];
|
|
105
|
+
|
|
106
|
+
if (
|
|
107
|
+
firstParameter &&
|
|
108
|
+
matchesConfiguredErrorName(firstParameter.name)
|
|
109
|
+
) {
|
|
110
|
+
if (firstParameter.references.length === 0) {
|
|
111
|
+
context.report({ node, messageId: "expected" });
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
return {
|
|
117
|
+
FunctionDeclaration: checkForError,
|
|
118
|
+
FunctionExpression: checkForError,
|
|
119
|
+
ArrowFunctionExpression: checkForError,
|
|
120
|
+
};
|
|
121
|
+
},
|
|
122
|
+
};
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Rule that warns when identifier names that are
|
|
3
|
+
* specified in the configuration are used.
|
|
4
|
+
* @author Keith Cirkel (http://keithcirkel.co.uk)
|
|
5
|
+
* @deprecated in ESLint v7.5.0
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
"use strict";
|
|
9
|
+
|
|
10
|
+
//------------------------------------------------------------------------------
|
|
11
|
+
// Helpers
|
|
12
|
+
//------------------------------------------------------------------------------
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Checks whether the given node represents assignment target in a normal assignment or destructuring.
|
|
16
|
+
* @param {ASTNode} node The node to check.
|
|
17
|
+
* @returns {boolean} `true` if the node is assignment target.
|
|
18
|
+
*/
|
|
19
|
+
function isAssignmentTarget(node) {
|
|
20
|
+
const parent = node.parent;
|
|
21
|
+
|
|
22
|
+
return (
|
|
23
|
+
// normal assignment
|
|
24
|
+
(parent.type === "AssignmentExpression" && parent.left === node) ||
|
|
25
|
+
// destructuring
|
|
26
|
+
parent.type === "ArrayPattern" ||
|
|
27
|
+
parent.type === "RestElement" ||
|
|
28
|
+
(parent.type === "Property" &&
|
|
29
|
+
parent.value === node &&
|
|
30
|
+
parent.parent.type === "ObjectPattern") ||
|
|
31
|
+
(parent.type === "AssignmentPattern" && parent.left === node)
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Checks whether the given node represents an imported name that is renamed in the same import/export specifier.
|
|
37
|
+
*
|
|
38
|
+
* Examples:
|
|
39
|
+
* import { a as b } from 'mod'; // node `a` is renamed import
|
|
40
|
+
* export { a as b } from 'mod'; // node `a` is renamed import
|
|
41
|
+
* @param {ASTNode} node `Identifier` node to check.
|
|
42
|
+
* @returns {boolean} `true` if the node is a renamed import.
|
|
43
|
+
*/
|
|
44
|
+
function isRenamedImport(node) {
|
|
45
|
+
const parent = node.parent;
|
|
46
|
+
|
|
47
|
+
return (
|
|
48
|
+
(parent.type === "ImportSpecifier" &&
|
|
49
|
+
parent.imported !== parent.local &&
|
|
50
|
+
parent.imported === node) ||
|
|
51
|
+
(parent.type === "ExportSpecifier" &&
|
|
52
|
+
parent.parent.source && // re-export
|
|
53
|
+
parent.local !== parent.exported &&
|
|
54
|
+
parent.local === node)
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Checks whether the given node is a renamed identifier node in an ObjectPattern destructuring.
|
|
60
|
+
*
|
|
61
|
+
* Examples:
|
|
62
|
+
* const { a : b } = foo; // node `a` is renamed node.
|
|
63
|
+
* @param {ASTNode} node `Identifier` node to check.
|
|
64
|
+
* @returns {boolean} `true` if the node is a renamed node in an ObjectPattern destructuring.
|
|
65
|
+
*/
|
|
66
|
+
function isRenamedInDestructuring(node) {
|
|
67
|
+
const parent = node.parent;
|
|
68
|
+
|
|
69
|
+
return (
|
|
70
|
+
!parent.computed &&
|
|
71
|
+
parent.type === "Property" &&
|
|
72
|
+
parent.parent.type === "ObjectPattern" &&
|
|
73
|
+
parent.value !== node &&
|
|
74
|
+
parent.key === node
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Checks whether the given node represents shorthand definition of a property in an object literal.
|
|
80
|
+
* @param {ASTNode} node `Identifier` node to check.
|
|
81
|
+
* @returns {boolean} `true` if the node is a shorthand property definition.
|
|
82
|
+
*/
|
|
83
|
+
function isShorthandPropertyDefinition(node) {
|
|
84
|
+
const parent = node.parent;
|
|
85
|
+
|
|
86
|
+
return (
|
|
87
|
+
parent.type === "Property" &&
|
|
88
|
+
parent.parent.type === "ObjectExpression" &&
|
|
89
|
+
parent.shorthand
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
//------------------------------------------------------------------------------
|
|
94
|
+
// Rule Definition
|
|
95
|
+
//------------------------------------------------------------------------------
|
|
96
|
+
|
|
97
|
+
/** @type {import('../types').Rule.RuleModule} */
|
|
98
|
+
module.exports = {
|
|
99
|
+
meta: {
|
|
100
|
+
deprecated: {
|
|
101
|
+
message: "The rule was renamed.",
|
|
102
|
+
url: "https://eslint.org/blog/2020/07/eslint-v7.5.0-released/#deprecating-id-blacklist",
|
|
103
|
+
deprecatedSince: "7.5.0",
|
|
104
|
+
availableUntil: "11.0.0",
|
|
105
|
+
replacedBy: [
|
|
106
|
+
{
|
|
107
|
+
rule: {
|
|
108
|
+
name: "id-denylist",
|
|
109
|
+
url: "https://eslint.org/docs/rules/id-denylist",
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
],
|
|
113
|
+
},
|
|
114
|
+
|
|
115
|
+
type: "suggestion",
|
|
116
|
+
|
|
117
|
+
docs: {
|
|
118
|
+
description: "Disallow specified identifiers",
|
|
119
|
+
recommended: false,
|
|
120
|
+
url: "https://eslint.org/docs/latest/rules/id-blacklist",
|
|
121
|
+
},
|
|
122
|
+
|
|
123
|
+
schema: {
|
|
124
|
+
type: "array",
|
|
125
|
+
items: {
|
|
126
|
+
type: "string",
|
|
127
|
+
},
|
|
128
|
+
uniqueItems: true,
|
|
129
|
+
},
|
|
130
|
+
messages: {
|
|
131
|
+
restricted: "Identifier '{{name}}' is restricted.",
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
|
|
135
|
+
create(context) {
|
|
136
|
+
const denyList = new Set(context.options);
|
|
137
|
+
const reportedNodes = new Set();
|
|
138
|
+
const sourceCode = context.sourceCode;
|
|
139
|
+
|
|
140
|
+
let globalScope;
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Checks whether the given name is restricted.
|
|
144
|
+
* @param {string} name The name to check.
|
|
145
|
+
* @returns {boolean} `true` if the name is restricted.
|
|
146
|
+
* @private
|
|
147
|
+
*/
|
|
148
|
+
function isRestricted(name) {
|
|
149
|
+
return denyList.has(name);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Checks whether the given node represents a reference to a global variable that is not declared in the source code.
|
|
154
|
+
* These identifiers will be allowed, as it is assumed that user has no control over the names of external global variables.
|
|
155
|
+
* @param {ASTNode} node `Identifier` node to check.
|
|
156
|
+
* @returns {boolean} `true` if the node is a reference to a global variable.
|
|
157
|
+
*/
|
|
158
|
+
function isReferenceToGlobalVariable(node) {
|
|
159
|
+
const variable = globalScope.set.get(node.name);
|
|
160
|
+
|
|
161
|
+
return (
|
|
162
|
+
variable &&
|
|
163
|
+
variable.defs.length === 0 &&
|
|
164
|
+
variable.references.some(ref => ref.identifier === node)
|
|
165
|
+
);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Determines whether the given node should be checked.
|
|
170
|
+
* @param {ASTNode} node `Identifier` node.
|
|
171
|
+
* @returns {boolean} `true` if the node should be checked.
|
|
172
|
+
*/
|
|
173
|
+
function shouldCheck(node) {
|
|
174
|
+
const parent = node.parent;
|
|
175
|
+
|
|
176
|
+
/*
|
|
177
|
+
* Member access has special rules for checking property names.
|
|
178
|
+
* Read access to a property with a restricted name is allowed, because it can be on an object that user has no control over.
|
|
179
|
+
* Write access isn't allowed, because it potentially creates a new property with a restricted name.
|
|
180
|
+
*/
|
|
181
|
+
if (
|
|
182
|
+
parent.type === "MemberExpression" &&
|
|
183
|
+
parent.property === node &&
|
|
184
|
+
!parent.computed
|
|
185
|
+
) {
|
|
186
|
+
return isAssignmentTarget(parent);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
return (
|
|
190
|
+
parent.type !== "CallExpression" &&
|
|
191
|
+
parent.type !== "NewExpression" &&
|
|
192
|
+
!isRenamedImport(node) &&
|
|
193
|
+
!isRenamedInDestructuring(node) &&
|
|
194
|
+
!(
|
|
195
|
+
isReferenceToGlobalVariable(node) &&
|
|
196
|
+
!isShorthandPropertyDefinition(node)
|
|
197
|
+
)
|
|
198
|
+
);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Reports an AST node as a rule violation.
|
|
203
|
+
* @param {ASTNode} node The node to report.
|
|
204
|
+
* @returns {void}
|
|
205
|
+
* @private
|
|
206
|
+
*/
|
|
207
|
+
function report(node) {
|
|
208
|
+
/*
|
|
209
|
+
* We used the range instead of the node because it's possible
|
|
210
|
+
* for the same identifier to be represented by two different
|
|
211
|
+
* nodes, with the most clear example being shorthand properties:
|
|
212
|
+
* { foo }
|
|
213
|
+
* In this case, "foo" is represented by one node for the name
|
|
214
|
+
* and one for the value. The only way to know they are the same
|
|
215
|
+
* is to look at the range.
|
|
216
|
+
*/
|
|
217
|
+
if (!reportedNodes.has(node.range.toString())) {
|
|
218
|
+
context.report({
|
|
219
|
+
node,
|
|
220
|
+
messageId: "restricted",
|
|
221
|
+
data: {
|
|
222
|
+
name: node.name,
|
|
223
|
+
},
|
|
224
|
+
});
|
|
225
|
+
reportedNodes.add(node.range.toString());
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
return {
|
|
230
|
+
Program(node) {
|
|
231
|
+
globalScope = sourceCode.getScope(node);
|
|
232
|
+
},
|
|
233
|
+
|
|
234
|
+
Identifier(node) {
|
|
235
|
+
if (isRestricted(node.name) && shouldCheck(node)) {
|
|
236
|
+
report(node);
|
|
237
|
+
}
|
|
238
|
+
},
|
|
239
|
+
};
|
|
240
|
+
},
|
|
241
|
+
};
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Rule that warns when identifier names that are
|
|
3
|
+
* specified in the configuration are used.
|
|
4
|
+
* @author Keith Cirkel (http://keithcirkel.co.uk)
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
"use strict";
|
|
8
|
+
|
|
9
|
+
//------------------------------------------------------------------------------
|
|
10
|
+
// Requirements
|
|
11
|
+
//------------------------------------------------------------------------------
|
|
12
|
+
|
|
13
|
+
const astUtils = require("./utils/ast-utils");
|
|
14
|
+
|
|
15
|
+
//------------------------------------------------------------------------------
|
|
16
|
+
// Helpers
|
|
17
|
+
//------------------------------------------------------------------------------
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Checks whether the given node represents assignment target in a normal assignment or destructuring.
|
|
21
|
+
* @param {ASTNode} node The node to check.
|
|
22
|
+
* @returns {boolean} `true` if the node is assignment target.
|
|
23
|
+
*/
|
|
24
|
+
function isAssignmentTarget(node) {
|
|
25
|
+
const parent = node.parent;
|
|
26
|
+
|
|
27
|
+
return (
|
|
28
|
+
// normal assignment
|
|
29
|
+
(parent.type === "AssignmentExpression" && parent.left === node) ||
|
|
30
|
+
// destructuring
|
|
31
|
+
parent.type === "ArrayPattern" ||
|
|
32
|
+
parent.type === "RestElement" ||
|
|
33
|
+
(parent.type === "Property" &&
|
|
34
|
+
parent.value === node &&
|
|
35
|
+
parent.parent.type === "ObjectPattern") ||
|
|
36
|
+
(parent.type === "AssignmentPattern" && parent.left === node)
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Checks whether the given node represents an imported name that is renamed in the same import/export specifier.
|
|
42
|
+
*
|
|
43
|
+
* Examples:
|
|
44
|
+
* import { a as b } from 'mod'; // node `a` is renamed import
|
|
45
|
+
* export { a as b } from 'mod'; // node `a` is renamed import
|
|
46
|
+
* @param {ASTNode} node `Identifier` node to check.
|
|
47
|
+
* @returns {boolean} `true` if the node is a renamed import.
|
|
48
|
+
*/
|
|
49
|
+
function isRenamedImport(node) {
|
|
50
|
+
const parent = node.parent;
|
|
51
|
+
|
|
52
|
+
return (
|
|
53
|
+
(parent.type === "ImportSpecifier" &&
|
|
54
|
+
parent.imported !== parent.local &&
|
|
55
|
+
parent.imported === node) ||
|
|
56
|
+
(parent.type === "ExportSpecifier" &&
|
|
57
|
+
parent.parent.source && // re-export
|
|
58
|
+
parent.local !== parent.exported &&
|
|
59
|
+
parent.local === node)
|
|
60
|
+
);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Checks whether the given node is an ObjectPattern destructuring.
|
|
65
|
+
*
|
|
66
|
+
* Examples:
|
|
67
|
+
* const { a : b } = foo;
|
|
68
|
+
* @param {ASTNode} node `Identifier` node to check.
|
|
69
|
+
* @returns {boolean} `true` if the node is in an ObjectPattern destructuring.
|
|
70
|
+
*/
|
|
71
|
+
function isPropertyNameInDestructuring(node) {
|
|
72
|
+
const parent = node.parent;
|
|
73
|
+
|
|
74
|
+
return (
|
|
75
|
+
!parent.computed &&
|
|
76
|
+
parent.type === "Property" &&
|
|
77
|
+
parent.parent.type === "ObjectPattern" &&
|
|
78
|
+
parent.key === node
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
//------------------------------------------------------------------------------
|
|
83
|
+
// Rule Definition
|
|
84
|
+
//------------------------------------------------------------------------------
|
|
85
|
+
|
|
86
|
+
/** @type {import('../types').Rule.RuleModule} */
|
|
87
|
+
module.exports = {
|
|
88
|
+
meta: {
|
|
89
|
+
type: "suggestion",
|
|
90
|
+
|
|
91
|
+
defaultOptions: [],
|
|
92
|
+
|
|
93
|
+
docs: {
|
|
94
|
+
description: "Disallow specified identifiers",
|
|
95
|
+
recommended: false,
|
|
96
|
+
frozen: true,
|
|
97
|
+
url: "https://eslint.org/docs/latest/rules/id-denylist",
|
|
98
|
+
},
|
|
99
|
+
|
|
100
|
+
schema: {
|
|
101
|
+
type: "array",
|
|
102
|
+
items: {
|
|
103
|
+
type: "string",
|
|
104
|
+
},
|
|
105
|
+
uniqueItems: true,
|
|
106
|
+
},
|
|
107
|
+
messages: {
|
|
108
|
+
restricted: "Identifier '{{name}}' is restricted.",
|
|
109
|
+
restrictedPrivate: "Identifier '#{{name}}' is restricted.",
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
|
|
113
|
+
create(context) {
|
|
114
|
+
const denyList = new Set(context.options);
|
|
115
|
+
const reportedNodes = new Set();
|
|
116
|
+
const sourceCode = context.sourceCode;
|
|
117
|
+
|
|
118
|
+
let globalScope;
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Checks whether the given name is restricted.
|
|
122
|
+
* @param {string} name The name to check.
|
|
123
|
+
* @returns {boolean} `true` if the name is restricted.
|
|
124
|
+
* @private
|
|
125
|
+
*/
|
|
126
|
+
function isRestricted(name) {
|
|
127
|
+
return denyList.has(name);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Checks whether the given node represents a reference to a global variable that is not declared in the source code.
|
|
132
|
+
* These identifiers will be allowed, as it is assumed that user has no control over the names of external global variables.
|
|
133
|
+
* @param {ASTNode} node `Identifier` node to check.
|
|
134
|
+
* @returns {boolean} `true` if the node is a reference to a global variable.
|
|
135
|
+
*/
|
|
136
|
+
function isReferenceToGlobalVariable(node) {
|
|
137
|
+
const variable = globalScope.set.get(node.name);
|
|
138
|
+
|
|
139
|
+
return (
|
|
140
|
+
variable &&
|
|
141
|
+
variable.defs.length === 0 &&
|
|
142
|
+
variable.references.some(ref => ref.identifier === node)
|
|
143
|
+
);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Determines whether the given node should be checked.
|
|
148
|
+
* @param {ASTNode} node `Identifier` node.
|
|
149
|
+
* @returns {boolean} `true` if the node should be checked.
|
|
150
|
+
*/
|
|
151
|
+
function shouldCheck(node) {
|
|
152
|
+
// Import attributes are defined by environments, so naming conventions shouldn't apply to them
|
|
153
|
+
if (astUtils.isImportAttributeKey(node)) {
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
const parent = node.parent;
|
|
158
|
+
|
|
159
|
+
/*
|
|
160
|
+
* Member access has special rules for checking property names.
|
|
161
|
+
* Read access to a property with a restricted name is allowed, because it can be on an object that user has no control over.
|
|
162
|
+
* Write access isn't allowed, because it potentially creates a new property with a restricted name.
|
|
163
|
+
*/
|
|
164
|
+
if (
|
|
165
|
+
parent.type === "MemberExpression" &&
|
|
166
|
+
parent.property === node &&
|
|
167
|
+
!parent.computed
|
|
168
|
+
) {
|
|
169
|
+
return isAssignmentTarget(parent);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
return (
|
|
173
|
+
parent.type !== "CallExpression" &&
|
|
174
|
+
parent.type !== "NewExpression" &&
|
|
175
|
+
!isRenamedImport(node) &&
|
|
176
|
+
!isPropertyNameInDestructuring(node) &&
|
|
177
|
+
!isReferenceToGlobalVariable(node)
|
|
178
|
+
);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Reports an AST node as a rule violation.
|
|
183
|
+
* @param {ASTNode} node The node to report.
|
|
184
|
+
* @returns {void}
|
|
185
|
+
* @private
|
|
186
|
+
*/
|
|
187
|
+
function report(node) {
|
|
188
|
+
/*
|
|
189
|
+
* We used the range instead of the node because it's possible
|
|
190
|
+
* for the same identifier to be represented by two different
|
|
191
|
+
* nodes, with the most clear example being shorthand properties:
|
|
192
|
+
* { foo }
|
|
193
|
+
* In this case, "foo" is represented by one node for the name
|
|
194
|
+
* and one for the value. The only way to know they are the same
|
|
195
|
+
* is to look at the range.
|
|
196
|
+
*/
|
|
197
|
+
if (!reportedNodes.has(node.range.toString())) {
|
|
198
|
+
const isPrivate = node.type === "PrivateIdentifier";
|
|
199
|
+
|
|
200
|
+
context.report({
|
|
201
|
+
node,
|
|
202
|
+
messageId: isPrivate ? "restrictedPrivate" : "restricted",
|
|
203
|
+
data: {
|
|
204
|
+
name: node.name,
|
|
205
|
+
},
|
|
206
|
+
});
|
|
207
|
+
reportedNodes.add(node.range.toString());
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
return {
|
|
212
|
+
Program(node) {
|
|
213
|
+
globalScope = sourceCode.getScope(node);
|
|
214
|
+
},
|
|
215
|
+
|
|
216
|
+
[["Identifier", "PrivateIdentifier"]](node) {
|
|
217
|
+
if (isRestricted(node.name) && shouldCheck(node)) {
|
|
218
|
+
report(node);
|
|
219
|
+
}
|
|
220
|
+
},
|
|
221
|
+
};
|
|
222
|
+
},
|
|
223
|
+
};
|